26 апр 2009

Coders Dos and Don’ts

Категория: DevLucho @ 20:52

Нерядко се натъквам на много дразнещи писания и идеи и мисля, че е време да си излея мъката. Мразя заклеймяването на някого като „младши програмист“ или „нууб“, но просто има граници, които не трябва да се прекрачват и неща, които трябва да се забранят със закон. Ще спомена няколко от тях, за които не се говори толкова много – няма да обеснявам, че трябва да се спазват конвенции или че не бива да имате празен кеч блок и подобни всеизвестни работи.

1. Булеви сравнения

if (bool_var == true) { …

За всеки здравомислещ човек е ясно, че този запис е абсолютно излишен и е достатъчно да се напише „if (bool_var) {…, останалите нездравомислещи хора ще се оправдаят, че така кода е по-четим – дрън дрън! Този запис не само че не е по-четим, ами е грозен, по-дълъг и в някои случай даже объркващ.

Следния код е още по-фрапантен:

if (bool_var == true)  {

return true;

} else {

return false;

}

Пет излишни реда за да се постигне ефекта от „return bool_var„. Ако някой седне да чете кода и види подобни писания вероятно първо ще се зачуди какво сте имали предвид, после ще реши, че сте абсолютни нубове, а и прочитането на 5 реда и разбирането им е по-трудно от колкото прочитането и разбирането на един (изключваме разни функционално ориентирани езици, където един ред може да достигне стотина символа).

2. One Language Warshipers

Един феномен, характерен за повечето започнали работа наскоро е издигането в култ на езика, на който пишат. Особено характерно е за Java и C# (.NET) дивелъпърите. И тея хора като почнат да се прехласват и да разправят колко е велик единствения език, който са виждали и направо ми иде да… напиша някой ред в блога ми за тях :-) . Та хора, всеки език има някакви предимства и собствен „чар“ пред другите. Неможе да ми обяснявате колко е велик Java за web (за малък до среден клас сайт) понеже ми се е налагало да се боря с него и има много куци неща, които разни други езици и фремуъркове са преудоляли успешно. Това че във фирмата където работите ви карат да пишете на опредлен език, защото системата им вече работи по този начин и няма връщане назад, не значи че пишете на нещо, което си заслужава. И даже и езика и технологията, която ползвате да е много добра в дадена област, това не означава че може да отворите файл и да запишете един низ вътре на един ред например и че няма много по-елегантни и приятни езици.

Човек трябва да е опънмайндед и да иска да научи повече и повече, а не да се забие в първата срещната технология. Светът не се състои само от Java и C#, в него има и други езици C, C++, Objective C (за маковски работи), Python, Perl, Ruby, PHP (недейте моля) und so weiter (има още много наистина), част от които са по-бързи, други по елегантни за писане, трети просто по-лесни. Всеки един от тях изисква специфичен начин на мислене и предлага различни концепций и когато човек реши, че само един единствен му е достатъчен определено се осакатява професионално, при това много жестоко.

3. Разбираемо писане vs. Оптимално писане

Под разбираемо писане имам предвид структуриран код, в който поне автора се оправя и знае кое какво прави… това често не е най-оптималния, най-добрия от към пърформанс код. Добра практика е след написването на разбираемия код да го превърнете в оптимален, ако има нужда де. Лошата (ама много лошата) практика е да напишете така кода, че да е с висок пърформанс, но след две седмици като ви докладват бъг, да се чудите къде и какво да пипате или ако се наложи някой да пипа по кода, да не му отнеме месец докато разбере, че записвате GPS кординати в int като местите побитово за да запишете всеки градус, минута и секунда :-D . Та за начало, нека всичко е написано разбираемо и по лесния начин и за всеки неразбираем ред най-добре да има коментар, пък после, живот и здраве, с моторната резачка и с разни грозни хакове, може да се докарат нещата до по-оптимален и грозен вариант (може би в 99% от случаите, този параграф изглежда странен, но ако пишете за J2ME или друга платформа с много ограничени ресурси, може да е доста полезен).