вторник, юли 27, 2010

Коментари в кода

В момента работя по един open source проект и попаднах този коментар:

*This one is really quick and dirty because I want to finish this and catch
* the bus. Need to be redone ASAP
Човека трябвало да хване автобуса :)


Сетих се, преди време ми подариха една книжка - Code Complete. Там пишеше нещо от типа, че ако ти се налага да напишеш коментар, който да пояснява някакъв завързан хак, по-добре да го изтриеш, пренапишеш или в краен случай да оставиш  @todo коментар.
Автора на кода след този коментар, очевидно е осъзнавал, че кода му е мазало и трябва да се пренапише, само че ... получава се следното

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

Програмиста, който оправя кода след него (в случая аз) вижда въпросния коментар и в главата му автоматично се задейства "спагетената аларма". Като всеки самоуважаващ се програмист, той много внимателно го "заобикаля" и се мъчи да оправи евенуталния проблем, без да променя каквото и да било по въпросния блок, защото е напълно наясно, че ще трудно, гадно и неблагодарно.

Сега някои хора ще кажат, че това е принципен проблем на софтуера с отворен код (нали, Наско), но всъщност проблема е другаде. Проблема е в лидера на проекта и в това, че е пуснал това парче код в стабилната версия. За това BSD феновете толкова много се гордеят с "перфектния" си код, защото такива допълнения се отхвърлят много преди въобще да стигнат production версията. Въпреки базарния модел на софтуера с отворен код, винаги съм бил привърженик на идеята за силна фигура на върха, която да има последната дума по всеки въпрос. От тук идва разликата между добрия софтуер и сбирщината от хакове.

Все пак въпроса е какво искаш като краен резултат, многофункционален софтуер, който от време на време се чупи и губи информация или орязана откъм функционалност, но пък много стабилна система. Съществуват и двата варианта, и двата изкарват пари, а щом е така, значи има някакъв смисъл от това. Това пък от своя страна доказва, че всичко по-горе е просто една теория, която може и да има, може и да няма реална обосновка.