Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

О провилах хорошего тона в программировании.   Найти похожие ветки 

 
int64   (2004-04-07 10:29) [0]

Приходил человек устраиваться на работу, приносил тексты программ. В одном проекте у него 20 форм. Разница у большенства этих форм только в Caption и они все в Auto-Create.
Конечно, главный аргумент - "мне удобнее и быстрее делать так", тем более, если руководитель(заказчик) разницы не видел.
И таких вот программиств дохрена, они даже занимают реальные
должности. Судя по назначении их программ и автобиографии.

Берутся тексты соискателей на работу, делается поиск по StrToInt, и если этот самый StrToInt неоправдано используется - сразу в урну.
А прочитал бы этот юзер раньше: "Не храните данные в конторолах", даже без объяснений - почему. И программы бы у него всегда отличались структурностью и самодокументированностью. Он бы и сам себя как кодера уважал больше.
Вот сейчас разбираю код. Писал уважаемый человек - преподаватель информатики, полковник. Заводит глобальную переменную, а потом юзает её, где как локальную, а где как буфер между функциями. Я не говорю уже о других "примудростях". Черт ногу сломает в таком коде.
"ТАК ВЕДЬ РАБОТАЕТ"
Ненавижу!
Если бы кто-то, когда-то взялся собрать "свод законов" о правилах хорошего тона в программировании, об азах, сей документ был бы куда полезнее всяких факов. Потому что без этих правил кодить можно, а без факов - нет.


 
Мараканец ©   (2004-04-07 10:37) [1]

дело не в том как писать, по большому счету, а в правильном документировании


 
VAleksey ©   (2004-04-07 10:53) [2]


> int64   (07.04.04 10:29)  

Кофе попей.


 
serge35   (2004-04-07 10:58) [3]

Согласен с автором. Мне тоже приходилось разбираться с исходниками одного профессионального программера, ему уже за 40.
На каждом шагу изобретен новый велосипед.
Смотрю новая функция fround4. Ищу ее код, нахожу в файле Utils. Код состоит из одной строки - вызов функции round.
И это самый простой велосипед.
Я бы заставлял всех, кто собирается заниматься программированием проходить медицинскую экспертизу, как водители для получения прав на вождение. Особенно психиатора.


 
int64   (2004-04-07 10:59) [4]

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


 
VAleksey ©   (2004-04-07 11:01) [5]


> int64   (07.04.04 10:59) [4]

Только этим и занимаюсь практически :-)). Правда того о чем ты писал нет. Таких не дёржють :-))).
Я просто имею в виду, что чего психовать-то? Спокойнее надо быть.


 
Игорь Шевченко ©   (2004-04-07 11:03) [6]

Тейксейра, Пачеко, Delphi 5, руководство разработчика, глава 6.

Наизусть.


 
pasha_golub ©   (2004-04-07 11:06) [7]

Игорь Шевченко ©   (07.04.04 11:03) [6]
Игорь, тама хорошие советы бесспорно, но мало. :-) На все случаи не помогет.


 
int64   (2004-04-07 11:12) [8]

Игорь Шевченко ©   (07.04.04 11:03) [6]
Там больше о форматировании и именовании идентификаторов.
Я знаю контору, где за несоответсвие таким стандартам штраф 5$.


 
Saturn_   (2004-04-07 11:13) [9]

2 int64   (07.04.04 10:59) [4]
нет ты не один такой придирчевый.
Но просто у каждого свой стиль прграмирования. и с эти ничего нельзя сделать.


 
Vovchik_A ©   (2004-04-07 11:15) [10]

2int64   (07.04.04 10:59) [4]
Чужой код править  - занятие неблагодарное. Лучше свой написать. (ИМХО, конечно)...


 
pasha_golub ©   (2004-04-07 11:16) [11]

Vovchik_A ©   (07.04.04 11:15) [10]
Переписать все нафиг..ю (с) Российский программист

Кстати, а где можно эту байку прочесть?


 
Игорь Шевченко ©   (2004-04-07 11:18) [12]

pasha_golub ©   (07.04.04 11:06)


> хорошие советы бесспорно, но мало. :-) На все случаи не
> помогет


Опыт, сын ошибок трудных....Оно рулез :)

int64   (07.04.04 11:12)

> Я знаю контору, где за несоответсвие таким стандартам штраф
> 5$.


Сурово, но действенно. Потому что единство стиля в конторе  способствует пониманию кода не только автором, но и его коллегами, что есть безусловно хорошо, так как снимает ряд проблем и задержек в сопровождении программ.


 
serge35   (2004-04-07 11:19) [13]

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


 
Мараканец ©   (2004-04-07 11:21) [14]

http://diesel.elcat.kg/prog/messages/12958.html

это не оно?

гугл фарэва)


 
Vovchik_A ©   (2004-04-07 11:21) [15]

2serge35   (07.04.04 11:19) [13]
Совершенно согласен. Глубокое и грамотное ТЗ это 50% если не 70% успеха. Жаль только, что это случается редко.

2pasha_golub ©   (07.04.04 11:16) [11]

Не смешно.


 
passlight ©   (2004-04-07 11:28) [16]

int64   (07.04.04 11:12) [8]
Блин, вот нам бы так


 
Nikolay M. ©   (2004-04-07 11:36) [17]


> Я знаю контору, где за несоответсвие таким стандартам штраф
> 5$

И что, текучка программистов там просто большая или очень большая?
Уже неоднократно замечено, что каждый новый начальник пытается насадить свой формат расстановки скобок, отступов, заглавных-строчных букв и прочей белиберды.
Если программист грамотный, он пишет такой код, что поймет его и он сам через год, и любой другой программист. А всякое палево "перед begin ставить два пробела, а For писать с большой буквы" - пустая трата времени и удовлетворение непонятных амбиций со стороны людей, занимающихся издательством такой бессмыслицы. А зачастую - банальное прикрытие собственной некомпетентности или повод платить программистам меньшую зарплату  за счет таких штрафов.
Работать в таких конторах крайне противопоказано. Имхо.


 
sniknik ©   (2004-04-07 11:39) [18]

> Смотрю новая функция fround4. Ищу ее код, нахожу в файле Utils. Код состоит из одной строки - вызов функции round.
> И это самый простой велосипед.

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


 
Иксик ©   (2004-04-07 11:42) [19]

На www.xprogramming.ru предлагался в частности стандарт для Дельфи.


 
Style ©   (2004-04-07 11:42) [20]

Nikolay M. ©
Нужно просто фильтр написать который у атачментов *.pas в слове for первую букву меняет на заглавную :)
И поставить на отправку почты начальнику :)
Чего мучаться то :))


 
zzet ©   (2004-04-07 11:48) [21]

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


 
serge35   (2004-04-07 11:49) [22]

Насчет 5$ может и сурово, но когда программист уходит, а начальник остается один на один с его кодом, то он не будет
рвать на себе волосы, а спокойно разберется.
Кстати только так и можно написать большую систему, к которой привлечено большое количество людей.
Удачное именование переменных в этом случае играет огромную роль, когда каждому челу по имени переменной понятно для чего она нужна и как ее использовать.


 
nick_   (2004-04-07 11:49) [23]


> Style ©   (07.04.04 11:42) [20]

Ну вот еще!
Кстати, один раз наблюдал такой круговорот событий.
Начальник начал насаживать очередной "стандарт", как следствие, программист, который писал программу в едином стиле уволился (кому охота фигней страдать?), на его место пришел другой, который не сразу включился в "стандарт", после трений с начальником также уволился, начальника заменили, поскольку не может обеспечить нормальную работу, на его место приходит новый, со своим "стандартом", все начинается по новой.
Я этот процесс застал на n-дцатой итерации и имел счастье видеть ужасно кривую программу, к тому же без единого комментария. больше 2 месяцев я не выдержал.


 
uny   (2004-04-07 11:50) [24]

бывают такие правила -
можно "закрыть" курсор мыши в таком то прямоугольнике, но использование этой функции = плохой тон

эти правила не только программистам важны:)


 
Игорь Шевченко ©   (2004-04-07 11:54) [25]

Nikolay M. ©   (07.04.04 11:36)
zzet ©   (07.04.04 11:48)

Вы поработайте в команде над серьезным проектом, потом вернемся к разговору.

Неужели вы всерьез считаете, что Тейксейра с Пачеко, да и многие другие, пишут о том, что стандартизация кода есть хорошо, только потому, что им просто хочется поговорить или засорить мозги читателям ? :))


 
Alex Konshin ©   (2004-04-07 11:59) [26]

Где-то была ссылка на сайт, где представлены образцы как хорошего интерфейса, так и такие, как не надо делать. Помню там перлы типа выбор пола через два чекбокса (видимо решили все варианты предусмотреть). А у нас на работе вполне реально используется такой образец того, как делать не надо - Siebel CaRDS. Это система для трекинга багов и проблем. Такого ублюдского интефейса я давно не видел.

Да, возвращаемся к теме.
Стрелял бы тех, кто не пишет комментарии.
Все, пошел вешаться...


 
zzet ©   (2004-04-07 11:59) [27]

>[25] Игорь Шевченко ©   (07.04.04 11:54)

Я же согласен, при работе в команде нужно что бы тебя понимали, но и команда должна быть понимающая..


 
zzet ©   (2004-04-07 12:03) [28]

Если б меня мой босс попробовал оштрафовать за то что не может прочитать мой код на 5$, я бы ему эти 5$ в *** засунул и расчитался.
(поэтому я, как начальник, никогда так не поступаю)


 
Игорь Шевченко ©   (2004-04-07 12:04) [29]

Alex Konshin ©   (07.04.04 11:59)

http://www.akzhan.midi.ru/iarchitect/ ?


 
Alex Konshin ©   (2004-04-07 12:04) [30]

Насчет понимающих команд: я сам свой код после трех месяцев перерыва разбираю как чужой - ни хрена не помню. Занятно, бывает, сделать открытие в своей же собственной программе. Другому же человеку во много раз труднее. Так что я не верю в понимающие команды. Нужно просто писать так, что было понятно.


 
SoftX   (2004-04-07 12:06) [31]

Вот напрмер пример моего кода, говорят тяжелый, а я так не думаю:)

function ReadCarrentSid(var UserInfo:TUserVariables):boolean;
Var Username:String;
var CUsername:longword;
Var TSid,Sid:PSID;
var Csid:longword;
var Domain:String;
Var Cdomain:longword;
Var PUse:SID_NAME_USE;
Var BlobStream:TStream;
var i:integer;
var found:boolean;
begin
 //получаем текущий SID пользователя
 CUsername:=0;
 GetUserName(nil,CUsername);
 SetLength(Username,CUsername);
 GetUserName(@Username[1],CUsername);
 //
 Csid:=0;Cdomain:=0;
 LookupAccountName(nil,@Username[1],nil,Csid,nil,Cdomain,PUse);
 SetLength(Domain,cDomain);
 GetMem(SID,cSID);
 LookupAccountName(nil,@Username[1],Sid,Csid,@Domain[1],Cdomain,PUse);
 //создаем запрос на пользователя
 MainData.UserQuery.Active:=false;
 MainData.UserQuery.SQL.Clear;

 MainData.UserQuery.SQL.Add("select * from faxusers;");
 MainData.UserQuery.Active:=True;
 //ищем нужный SID
 found:=False;
 MainData.UserQuery.first;
 if (MainData.UserQuery.RecordCount>0) then
   begin
   while (not MainData.UserQuery.Eof) and (found=false) do
     begin
     BlobStream:=MainData.UserQuery.CreateBlobStream(MainData.UserQuery.FieldByName("winsid"),bmRead);
     if BlobStream.Size=CSid then
       begin
       found:=True;
       GetMem(TSid,BlobStream.Size);
       BlobStream.ReadBuffer(PByteArray(TSid)[0],BlobStream.Size);
       for i:=0 to Csid-1 do
         if (PByteArray(Sid)[i]<>PByteArray(TSid)[i]) then found:=false;
       FreeMem(TSid);
       end;
     BlobStream.Free;
     if found=false then MainData.UserQuery.Next;
     end;
   end;

 //получам данные если запрос с данной информацией найден
 if (found=True) then
   begin
   UserInfo.LOGIN:=MainData.UserQuery.FieldByName("LOGIN").AsString;
   UserInfo.USERNAME:=MainData.UserQuery.FieldByName("USERNAME").AsString;
   UserInfo.CANDELETEFAX:=MainData.UserQuery.FieldByName("CANDELETEFAX").AsInteger;
   UserInfo.IMMORTAL:=MainData.UserQuery.FieldByName("IMMORTAL").AsInteger;
   UserInfo.CANGETFAX:=MainData.UserQuery.FieldByName("CANGETFAX").AsInteger;
   UserInfo.ADMINISTRATOR:=MainData.UserQuery.FieldByName("ADMINISTRATOR").AsInteger;
   //
   ReadCarrentSid:=True;
   end
 else
   ReadCarrentSid:=false;
 //
 Username:="";
 Domain:="";
 FreeMem(Sid);
 //закрываем запрос
 MainData.UserQuery.Active:=false;
 MainData.UserQuery.SQL.Clear;
end;


 
Игорь Шевченко ©   (2004-04-07 12:09) [32]

SoftX   (07.04.04 12:06)


> говорят тяжелый,


Справедливо говорят.


 
Паниковский ©   (2004-04-07 12:09) [33]

Можно и утилитку написать

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

Кстати может кто напишет? Что скажите Мастера?


 
NAlexey ©   (2004-04-07 12:10) [34]

>SoftX   (07.04.04 12:06) [31]
Мдя... С самого начала все ясно: ReadCarrentSid...


 
Alex Konshin ©   (2004-04-07 12:11) [35]

Игорь Шевченко ©   (07.04.04 12:04) [29]
Alex Konshin ©   (07.04.04 11:59)
http://www.akzhan.midi.ru/iarchitect/ ?

Это перевод оригинала. Там есть ссылка на него.


 
Игорь Шевченко ©   (2004-04-07 12:19) [36]

Паниковский ©   (07.04.04 12:09)


> Можно и утилитку написать


> Кстати может кто напишет?


STFW: DelForEx


 
NAlexey ©   (2004-04-07 12:20) [37]

>Паниковский ©   (07.04.04 12:09) [33]
Ничего себе загнул:)
из строк
Var i:integer;
moyaperemennaja:String;
begin
i:=1;moyaperemennaja:="раз";
end;
мне надо получить:

var
 I: Integer;
 Str: string;
begin
 I := 1;
 Str := "Раз";
end;


Есть предложения какие ключевые слова использовать?


 
mfender ©   (2004-04-07 12:23) [38]

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


 
Nikolay M. ©   (2004-04-07 12:24) [39]


> zzet ©   (07.04.04 12:03) [28]
> Если б меня мой босс попробовал оштрафовать за то что не
> может прочитать мой код на 5$, я бы ему эти 5$ в *** засунул
> и расчитался.

Аналогично.


 
KSergey ©   (2004-04-07 12:25) [40]

> [32] Игорь Шевченко ©   (07.04.04 12:09)
> Справедливо говорят.

Не в плане спора, а из любопытства: приведите свой.



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

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.031 c
3-1081947063
Oksana
2004-04-14 16:51
2004.04.11
Ошибка при открытии dbf через ADO


6-1075817986
able
2004-02-03 17:19
2004.04.11
UDP vs Sockets


1-1082642324
Romario
2004-04-22 17:58
2004.04.11
MDI форма из DLL


3-1081844204
Slider007
2004-04-13 12:16
2004.04.11
Вызов запроса MSAccess из Delphi


3-1081938856
Hazg
2004-04-14 14:34
2004.04.11
Создание базы через Query в кодировке 866