Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Вниз

Одна знакомая девушка...   Найти похожие ветки 

 
Kerk   (2004-01-08 12:01) [0]

...пишет так:

var
a: PDWORD;
begin
GetMem(a,4);
a^ := 123;
MyProc(a); //procedure MyProc(abc: PDWORD);
FreeMem(a,4);
end;


Как ей объяснить, что это криво???

П.С. Ее основной аргумент: "Главное работает!"


 
Ломброзо   (2004-01-08 12:02) [1]

Все бы так мыслили, как эта девушка...


 
Kerk   (2004-01-08 12:03) [2]


> Ломброзо © (08.01.04 12:02) [1]
> Все бы так мыслили, как эта девушка...

???


 
NeyroSpace   (2004-01-08 12:04) [3]

А зачем делать работу компилятора?


 
SPeller   (2004-01-08 12:05) [4]

А ты ей покажи что можно записать всё это как

var A: DWORD;
A := 123;
MyProc( @A );

И пусть она попробует написать программу, скажем, тестирующую какую-нибудь своим методом и этим. И потом она сама поймёт как надо писать.


 
Kerk   (2004-01-08 12:10) [5]


> SPeller © (08.01.04 12:05) [4]
> А ты ей покажи что можно записать всё это как
>
> var A: DWORD;
> A := 123;
> MyProc( @A );
>

Так показывал я уже! Не помогает! Говорит: "Главное работает!"
Просто она уже привыкла так писать... :(

> И пусть она попробует написать программу, скажем, тестирующую
> какую-нибудь своим методом и этим. И потом она сама поймёт
> как надо писать.

У меня была такая идея, но я так и не придумал, какую программу нужно написать, чтобы разница заметна стала. :(


 
Nikolay M.   (2004-01-08 12:15) [6]


> GetMem(a, 4);

Имхо, можно налететь на грабли, поэтому лучше, наверное, делать как
GetMem(a,sizeof(PDWORD));
А вообще - если человек (тем более девушка!) понимает, что делает, то мой респект. Хотя возня с указателями на C больше смахивает, так что если эта привычка у нее именно из сей взялась, то у меня нет слов :)


 
Kerk   (2004-01-08 12:17) [7]


> Nikolay M. © (08.01.04 12:15) [6]
> Имхо, можно налететь на грабли, поэтому лучше, наверное,
> делать как
> GetMem(a,sizeof( PDWORD));

GetMem(a,SizeOf( DWORD));

:)


 
LaidBack   (2004-01-08 12:17) [8]

Точнее так:
GetMem(a, sizeof(DWORD));


 
SPeller   (2004-01-08 12:17) [9]

А довод что никто так не делает помогает?


 
Kerk   (2004-01-08 12:20) [10]


> SPeller © (08.01.04 12:17) [9]
> А довод что никто так не делает помогает?

Этот довод и меня бы врядли повлиял... :))


 
SPeller   (2004-01-08 12:21) [11]

Покажи ей VCL, скажи что её писали спецы из Borland, и ничего похожего на её стиль нет. Расскажи что выделением памяти занимается компилятор и высвобождением тоже, и ему лучше извествно когда лучше всего выделить и освободить её, и что он не ошибится с количеством выделяемой памяти. На довод "работает ведь" скажи что 7-колёсный велосипед тоже поедет, но нафига столько колёс?


 
Kerk   (2004-01-08 12:30) [12]


> SPeller © (08.01.04 12:21) [11]

Попробую...


> И пусть она попробует написать программу, скажем, тестирующую
> какую-нибудь своим методом и этим. И потом она сама поймёт
> как надо писать.

А насчет этого мысли есть?


 
Nikolay M.   (2004-01-08 12:45) [13]


> Kerk © (08.01.04 12:17) [7]
> LaidBack (08.01.04 12:17) [8]

Да, конечно. Торопился почем зря.
Привет девушке :)


 
Vuk   (2004-01-08 12:56) [14]

>GetMem(a,SizeOf(DWORD));
New(a);
...
Dispose(A);


 
LaidBack   (2004-01-08 13:09) [15]

А не один фиг? Ну хочется ей писать длиннее - пусть пишет! Должны радоваться, что такое может писать, работать все-равно будет одинаково! Может у нее такой устоявшийся стиль программирования, да и вообще, все у них там устроено не так :)


 
nikkie   (2004-01-08 13:32) [16]

скажи ей - привыкнет так писать, ее на работу не возьмут.


 
vidiv   (2004-01-08 13:44) [17]

А вообще молодец девушка! Нечего сказать! Умеет настоять на своем:))


 
nikkie   (2004-01-08 13:47) [18]

>Умеет настоять на своем:)
учитывая, что настаивает-таки на глупости...
1. если Вы потенциальный работодатель - нужен ли вам такой работник?
1. если Вы потенциальный муж - нужна ли вам такая жена?
:)


 
Игорь Шевченко   (2004-01-08 13:53) [19]

nikkie © (08.01.04 13:47)


> учитывая, что настаивает-таки на глупости...


Не на такой уж и глупости...


 
nikkie   (2004-01-08 13:59) [20]

почему же? в приведенном коде - нет никакого смысла писать 4 строчки вместо 2-х. к тому же с потенциальной утечкой памяти, если в MyProc возникает исключение. а при усложнении кода - большая вероятность еще какой-нибудь программистской ошибки, связанной с выделением-освобождением памяти.

тебе хотелось бы, чтобы в твоей команде появился человек, пишущий подобный код? кто за ним это разгребать будет?


 
icWasya   (2004-01-08 14:02) [21]

а правильнее так

var
a: PDWORD;
begin
GetMem(a,4);
try
a^ := 123;
MyProc(a); //procedure MyProc(abc: PDWORD);
finally
FreeMem(a,4);
end;
end;


 
vidiv   (2004-01-08 14:03) [22]

Слава богу мой код почти никто не видел, а то засудили бы насмерть наврена:))


 
y-soft   (2004-01-08 14:04) [23]

IMHO может это и не так хорошо, что современные языки не любят указатели :(

При правильном и разумном использовании дает невероятную мощь и гибкость. Не отказываться же, например, от ассемблера только потому, что компилятор и сам все сделает. И со встроенным в Delphi менеджером памяти не все так уж и гладко... :)


 
Игорь Шевченко   (2004-01-08 14:06) [24]

nikkie © (08.01.04 13:59)

Я бы не стал ориентироваться на конкретный этот кусок при приеме на работу к себе. Бывают куски гораздо хуже. А это мелочи - пару раз премии лишить, все будет, как надо :)))


 
int64   (2004-01-08 14:16) [25]

Премии надо лишать за аргументы типа: "Главное работает!".


 
vidiv   (2004-01-08 14:18) [26]

И вообще "Главное работает" - это лозунг не програмера, а админа больше!:)


 
Игорь Шевченко   (2004-01-08 14:24) [27]

vidiv © (08.01.04 14:03)

Вот именно, что почти :)


 
y-soft   (2004-01-08 14:26) [28]

Премии надо лишать за упорное стремление работать по шаблону - "потому что так все делают". Впрочем - за бездумное экспериментаторство тоже :))


 
SPeller   (2004-01-08 15:22) [29]


> Kerk © (08.01.04 12:30) [12]

Пусть написшет тестирующую программу которая тестирует пользователя на тему, допустим, "Монитор". Ну чтобы пользователь выбирал варианты ответов и всё такое. Желательно с картинками. И замерить объём выделенной программе памяти в начале запуска и в конце.


 
Игорь Шевченко   (2004-01-08 15:23) [30]

y-soft © (08.01.04 14:26)

И где золотая середина ? :)))


 
mrcat   (2004-01-08 15:28) [31]

>Kerk © (08.01.04 12:01)
>Как ей объяснить, что это криво???

Думаю, наоборот - надо дать премию :) Т.к. некоторые, и не только девушки, понятия не имеют что происходит при, например, Str := "Hi" :)


 
SPeller   (2004-01-08 15:32) [32]


> mrcat © (08.01.04 15:28) [31]

Одно дело иметь представление что и как, а совсем другое - писать компактно, оптимально и надёжно. А описанный автором метод далеко не надёжен, не компактен и не оптимален.


 
Daemys   (2004-01-08 15:34) [33]

>y-soft © (08.01.04 14:04) [23]
А особенно шероховатости дельфийского менеджера памяти проявляются при многопоточности. Когда очень много потоков, никакая синхронизация не помогает.


 
y-soft   (2004-01-08 16:21) [34]

>Игорь Шевченко © (08.01.04 15:23) [30]

И где золотая середина ? :)))

IMHO от задачи смотреть надо... Впрочем лучшее лекарство - время и рынок, естественный отбор отсеивает вредные мутации, как программ, так и программистов. А еще говорят, что Дарвин был не прав!.. :))

>Daemys © (08.01.04 15:34) [33]

Менеджер памяти Delphi оптимизирован для быстрого выделения небольших блоков памяти. Если вызывать GetMem и FreeMem много и часто, то может возникнуть фрагментация со всеми гадкими последствиями...


 
Игорь Шевченко   (2004-01-08 17:06) [35]

y-soft © (08.01.04 16:21)


> естественный отбор отсеивает вредные мутации, как программ,
> так и программистов


Да пока его дождешься, этого естественного отбора :))

Я могу повторить - это не самый страшный кусок кода. Если в процедуре не проиходит штатных исключений, то получение и освобождение памяти необязательно обрамлять в try finally, ну а если в ней access violation случится, то какая разница для неотлаженной программы - останется там память неубитая или нет...


 
марсианин   (2004-01-08 19:04) [36]

ИХМО память здесь лучше из стека брать, а не из кучи вызовом кучи вложенных процедур..

подскажи ей что еще можно выделять память при помощи VirtualAlloc :)


 
PaRL   (2004-01-08 19:31) [37]


> Слава богу мой код почти никто не видел, а то засудили бы
> насмерть наврена:))


И без этого засудят ))


 
SPeller   (2004-01-08 19:37) [38]


> подскажи ей что еще можно выделять память при помощи VirtualAlloc

А можно сразу выделить большой кусок и в нём отсчитывать каждый раз смещение.


 
Юрий Федоров   (2004-01-08 20:25) [39]

"Главное работает" - это еще не самый плохой аргумент, было и хуже
"а почему так написано?"
"а я пробовала по другому - еще хуже получается"


 
nikkie   (2004-01-08 22:44) [40]

>Я могу повторить - это не самый страшный кусок кода.
охотно верю. тем не менее, такой код права на жизнь не имеет.

>Если в процедуре не проиходит штатных исключений, то получение и освобождение памяти необязательно обрамлять в try finally, ну а если в ней access violation случится, то какая разница для неотлаженной программы - останется там память неубитая или нет...
не понимаю, Игорь, почему ты так говоришь. ты всегда строишь дерево вызовов, чтобы убедиться, что в этой процедуре не может возникнуть дерево вызовов? а если ты (или кто-то другой) изменил процедуру так, что она теперь возбуждает исключение - то на надо делать поиск по всему проекту, где эта функция вызывается, чтобы поставить все-таки try-finally? а если компилируется с новой версией сторонней библиотеки или VCL - тут что делать?

"Просто она уже привыкла так писать..." - лучше бы привыкла на автомате try ставить, чем такую чушь писать.


 
Игорь Шевченко   (2004-01-08 22:57) [41]

nikkie © (08.01.04 22:44)

Если говорить о том, какой код имеет право на жизнь, то надо сразу выбрасывать в Recycle Bin все примеры из книжек Архангельского и его последователей, и т.п. Разумеется, я с тобой согласен, даже способ приводил, как от манеры писать такой код быстрее избавиться :)) Извиняюсь, наверное уже от мастаков глаза замылились, насмотришься, бывает :)))


 
nikkie   (2004-01-08 23:19) [42]

Разумеется, я с тобой согласен
ну вот и пришли к согласию :)

>даже способ приводил, как от манеры писать такой код быстрее избавиться :))
способ хороший... только мало ли чего она еще "привыкла". будет ли столько премий, чтобы отучить от всех вредных привычек? ;)

поэтому мой способ, как более профилактический, имеет больше шансов на успех... попугать, только попугать, что на работу не возьмут - ведь при приеме не на код смотреть надо. главное, чтобы человек был хороший. :) ну а если девушка еще и спортсменка, комсомолка, красавица и способна всю команду на трудовые подвиги вдохновить - так пусть вообще какой угодно код пишет. :))

примеры из книжек Архангельского и его последователей
ой, щас придут защитники...


 
Игорь Шевченко   (2004-01-08 23:48) [43]


> ведь при приеме не на код смотреть надо. главное, чтобы
> человек был хороший. :)


Эт смотря на какую работу принимать ;)


 
Lola   (2004-01-09 00:55) [44]


> Как ей объяснить, что это криво???

Может быть другим тоном? 90% людей в случае, когда с ними говорят покровительственным тоном или с насмешкой, не соглашаются только лишь из чуства противоречия. Есть вариант, что она не соглашается, потому что Вы для неё не авторитет.

Вообще-то, еще вначале разговора хотела сказать, что с девушкой не о стройности кода надо разговоры вести :))) Толка от них будет больше.


 
Soft   (2004-01-09 01:27) [45]

>>Lola © (09.01.04 00:55) [44]

>>Вообще-то, еще вначале разговора хотела сказать, что с девушкой не о стройности кода надо разговоры вести :))) Толка от них будет больше.

Как говорила Русанова(мой бывший преподаватель):"У вас в группе и так мало девушек а вы с ними еще и о программировании говорите":)


 
Fantasist   (2004-01-09 01:54) [46]


> Премии надо лишать за упорное стремление работать по шаблону - "потому что так все делают".


А вот за это премию как раз чаще стоит давать. Я уже посмотрел на таких Кулибиных, которые для всего должны свой велосипед изобрести. И единообразие стиля в команде очень важно.


> > подскажи ей что еще можно выделять память при помощи VirtualAlloc

>А можно сразу выделить большой кусок и в нём отсчитывать каждый раз смещение


А стандартый Делфийский менеджер памяти так и делает.


 
Дмитрий В. Белькевич   (2004-01-09 02:46) [47]

>Игорь Шевченко © (08.01.04 17:06) [35]
>Да пока его дождешься, этого естественного отбора :))

Да, Билли что-то засиделся ;)


 
SkyRanger   (2004-01-09 07:11) [48]

Не знаю наскоко это правильно, но я любые функции работы с файлами, с памятью или при вызове SQL-функций заключаю в

try
Except

или
try
finally

правда обычно на этапе оптимизации коды все вроде работает, а то блин начальство не волнует как оно написанно главное чтобы работало к сроку, а потом коды никто мозги не имеет сажуся, прописываю функции, модули. В общем провожу оптимизацию и код ужимается раза в 2-3. И не потому что я так привык, росто коды пишешь проги, да еще работаешь наполовину Сисадмином, а наполовину Эникейщиком, трудно писать сразу оптимально, получается не так как надо, а как получится... :(


 
Kerk   (2004-01-09 09:27) [49]


> Lola © (09.01.04 00:55) [44]
>
> > Как ей объяснить, что это криво???
>
> Может быть другим тоном? 90% людей в случае, когда с ними
> говорят покровительственным тоном или с насмешкой, не соглашаются
> только лишь из чуства противоречия. Есть вариант, что она
> не соглашается, потому что Вы для неё не авторитет.
>

Насчет покровительственного тона согласен - виноват.
А насчет авторитета... в ассемблере я же для нее авторитет...

> Вообще-то, еще вначале разговора хотела сказать, что с девушкой
> не о стройности кода надо разговоры вести :))) Толка от
> них будет больше.

Нечем возразить. :)


 
Anatoly Podgoretsky   (2004-01-09 10:05) [50]

Kerk © (09.01.04 09:27) [49]
А чего тогда полез с советом по Паскалю, сначала автоиртет заработай :-)


 
Kerk   (2004-01-09 10:10) [51]

А что если ей эту ветку показать? ;)


 
y-soft   (2004-01-09 10:10) [52]

>Fantasist © (09.01.04 01:54) [46]

>> Премии надо лишать за упорное стремление работать по шаблону - "потому что так все делают".

А вот за это премию как раз чаще стоит давать. Я уже посмотрел на таких Кулибиных, которые для всего должны свой велосипед изобрести. И единообразие стиля в команде очень важно.


Ну так и см. продолжение фразы насчет бездумных экспериментаторов :)))

Просто на самом деле стараниями классиков жанра сложились определенные стереотипы, направленные на минимизацию ошибок уже на начальном этапе кодирования. При этом забывается, что:

1. Это в основном рекомендации, а не догма
2. Бесплатного сыра не бывает - за все приходится чем-то платить

В результате вместо творцов вырастают толкователи священного писания...

Речь здесь не идет о командных правилах игры, разумной достаточности и изобретении велосипедов. Речь о том, что хороший программист - это думающий программист, который понимает, что именно он делает и почему пишет именно так...


 
Игорь Шевченко   (2004-01-09 10:24) [53]

y-soft © (09.01.04 10:10)


> В результате вместо творцов вырастают толкователи священного
> писания...


Хорошо сказано, присоединяюсь. Даже пример есть, относительно свежий: http://delphimaster.net/view/1-1073402867/


 
DCoder   (2004-01-09 11:03) [54]

Эта девушка хоть продвинуто тормозит ;-))
Я работал с одной тётенькой (в мамы мне годится), которая выросла на ФохПро и паскале (небось первой версии). Так она вообще цыклы не использовала!
Писала что-то типа:
...
label 1,2;
a:=0;
1:
if a>=b then goto 2;
a:=a+F(h)-g(n);
goto 1;
2:
...

А когда она из справочника загнала 15-ти листовую таблицу в виде массива-константы в программу, я взорвался. Обьяснял долго, что таблицы эти пишутся на основе каких-то исходных формул. И менно эти формулы надо кодировать в виде функций...
Но она была подругой директорши...
Писать с ней одну программу, мягко говоря, было "трудно",
а переучивать поздно. Пришлось всетаки уволить, я поймал ее на том, что она вынесла мои исходники в конкурирующую фирму. А когда я уволился, ее опять взяли на работу :-))


 
y-soft   (2004-01-09 11:17) [55]

>Игорь Шевченко © (09.01.04 10:24) [53]

Прочитал - сходство мыслей до запятой! Кстати, и Анатолий там говорит о том же...

>DCoder © (09.01.04 11:03) [54]

Я сталкивался вообще с уникальным случаем.

Как-то обратилась знакомая мама одной девочки-школьницы - у девочки в TP не компилировался экзаменационный проект. Когда посмотрел, долго смеялся - это была полностью линейная программа без единой переменной, процедуры, ветвления и даже операторы громоздились по 20 в одной строке... :)) Посоветовал разбить на 3 серии (это было что-то вроде мультфильма), т.к. компилятор отказывался работать исключительно из-за размеров исходника. :)

В результате девочка получила "5" и свидетельство о начальной квалификации программиста :)))


 
Cobalt   (2004-01-09 11:42) [56]

Эээх, что за люди пошли, никто объяснить по-человечески не может...
1) "По правильному" писать меньше
2) Намного безопасней (не надо проверять - выделилась ли память)


 
nikkie   (2004-01-09 13:26) [57]

>А когда она из справочника загнала 15-ти листовую таблицу в виде массива-константы в программу, я взорвался. Обьяснял долго, что таблицы эти пишутся на основе каких-то исходных формул. И менно эти формулы надо кодировать в виде функций...
если это не таблицы Брадиса были, то вероятно, что никаких формул и нет в природе. так что, тетка вероятно не так плоха...


 
Fantasist   (2004-01-10 02:39) [58]


> Речь о том, что хороший программист - это думающий программист, который понимает, что именно он делает и почему пишет именно так...


Полностью согласен. Однако...

У нас на работе работает женщина. Тоже старшего возраста. Код у нее такой был (Делфи):

procedure SetSomeProperty(value:PChar);
begin
GetMem(fSomeProperty,strlen(value));
fSomeProperty:=value;
end;

Раньше у нее просто стояло fSomeProperty:=value, из-за чего все накрывалось. Кто-то ей подсказал, что надо выделить память - вот она ее и выделила.

Работает между прочим старшим программистом, но с указателями и динамической памятью никогда раньше не работала. Зато она знает бизнес специфику и очень дотошна. Поэтому и на высоком посте и имеет хороший авторитет у начальства. Так что, так что...


 
SkyRanger   (2004-01-10 04:33) [59]

Да вообще удивляет то, что человек нехрена не знает, работает кое как, прогуливает и его "увольняют", а потом опять брать собираются на работу мол он раскаялся и т.д. А все потому что его родственник какой то - знакомый зам. директора, что за бред!

А как вам годовой отчет по бухгалтерии Excel+Access все енто весит в неупакованном виде 5 Мб и работает, ну сами можете представить...
И ЭТО присылают нам из МОСКВЫ!!! Где по-моему программисты должны быть получше...
Ну и конечно авторы этого продукта 2 дэвушки и одна тетенькаЮ если я ниче не путаю...


 
y-soft   (2004-01-10 10:52) [60]

>Fantasist © (10.01.04 02:39) [58]

Простите за оверквотинг, но уж очень точно сказано :)

http://delphimaster.net/view/1-1073402867/

Fantasist © (10.01.04 02:27) [32]

> использовать ProcessMessages можно, но осторожно.

Использовать потоки можно, но осторожно. Использовать RPC
можно, но осторожно. Использовать dll"ки можно, но осторожно.

Программировать можно, но осторожно. Ибо проблему можно создать везде, если не понимаешь с чем работаешь.


Приведенный Вами пример [58] подтверждает сказанное, так что мы единомышленники - я тоже считаю, что человек на должности старшего программиста должен понимать собственный код...


 
tesseract   (2004-01-10 14:23) [61]

вообще нечего на девушек с ламерами пенять, они нужны для того, чтобы мы себя могли считать программистами! :-)



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.7 MB
Время: 0.011 c
4-2424
chi
2003-11-20 19:56
2004.02.02
HDC


1-2215
Anton.
2004-01-20 17:54
2004.02.02
PrintDialog.Create


8-2236
Sim
2003-09-16 20:07
2004.02.02
Фракталы (мн-во Мандельброта)


14-2376
Undert
2004-01-07 17:16
2004.02.02
Может слишком ламерский вопрос - уже крыша едет


3-2031
AlexNx
2004-01-06 12:37
2004.02.02
Сортировка в ClientDataSet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский