?

Log in

No account? Create an account
 
 
30 September 2009 @ 07:14 pm
Записки программиста.  
Интересные просчеты в программировании - 2
 
3. Мертвый код.
 
Мертвые куски кода бывают двух типов:
- код, который в принципе не подключен (скажем, функция, которую никто не вызывает).
- код, который который вообще-то должен бы работать, но не работает и не отлажен /
  тестирован.
 
Оба случая вредны. Оба запутывают читателя, чем значительно усложняют ревью и модификацию.
А второй, кроме того, может привести к крашам и потерям фунцциональности, если какие-то
условия изменятся и код (с большой вероятность, неправильный) начнет выполняться.
 
Забавная столкновение с мертвым кодом 1-го рода произошло у меня в самом начале на моей
первой постоянной работе в Америке - в Software Emancipation Technology (я упеминал о ней
в серии "иммиграция"). Мне было в самом начале поручено добавить какую-то функциональность
к разрабатываемой системе - это было мое первое задание и очень непростое для меня - я тогда
совсем не имел опыта работы на Unix и С++, а дали мне для разгона что-то около трех дней -
через неделю я должен был докладывать об успехе (хотя бы частичном). С Unixom и многим другим
мне тогда помогли (особенная благодарность Сереже Спиваковскому), с С++ мне помогло то что
я сам давно до того занимался изобретателством в обласи абстрактных типов данных и объектной
ориентации, так что на следующий день я стал читать код системы - довольно немаленький.
И - в какой-то момент мне показалось что я слегка сошел с ума (учтите мое довольно стрессовое состояние):
я нашел нескольо независимых кусков кода, которые предназначены делать ровно то, что мне поручили!
После некоторого времени я убедился, что это вовсе не я сумасшедший :) Это были куски, написанные
теми, кому поручали то же самое до меня - а потом, не получив результата, видимо, выгоняли или
переключали на что-то другое (расследования, кто это был я не проводил: не до того было).
Так что в данном случае, мертвый код был результатом организационного идиотизма.
 
Что касается мертвого кода второго типа - я сам не раз делал такое. Скажем, условно, делаю функции для
сложения и вычитания множеств. А потом одна из них оказывается невостребованной - и, соответственно,
непртестированной. Выбрасывать - жалко: с некоторых пор я приучил себя подобные куски кода снабжать
подробными комментариями, в том числе и об их состоянии и "выключать" (например, закоментировывать
весь код или окружать "#if false" и "#endif").
 
4. Слепое следование "правилу" - если нужна эффективнось, код надо писать на ассемблере.
 
Случай из почти тех же времен - моя вторая работа (GSSI) и мой начальник уже начал вызывать
у меня раздражение (кулминация, впрочем была позже, когда он потребовал, чтобы я использовал
Hungarian Notation). Он попросил меня посмотреть почему написанная им на ассемблере (для С)
функция (кажется, это была автокорелляция) работает недостаточно быстро. Я - это содержало
немного издевательства в слегка скрытой форме - переписал ее на С и сделал раз в 5 быстрее :)
 
Наверное, большинство остальных моих примеров будат похожи на этот: самый распространенный
(и вредный) тип: "заставь дурака богу молиться - он лоб расшибет". Людей научили что-то делать
(сказали: делай так) или что-то показалось cool (клёво) и они дальше не думают. Или сходное:
"обжегшись на молоке на воду дуют": было что-то трудно и они навсегда начинают избегать этого.
 
            
 


 
 
 
Fima F.wet_kimono on October 1st, 2009 02:54 pm (UTC)
Пап, а что ты имеешь против Hungarian notation, просто интересно...
Misha Furmanmishafurman on October 1st, 2009 04:23 pm (UTC)
Сейчас отвечу в отдельном посте