BgLOG.net
By TeodorGig , 2 March 2006
Съвсем на скоро, в един от български форуми се появи мнение под заглавие: “Сега разбрах за нечитаемия код:))” [1]. Още с първото изречение авторът излага малко шеговито своята теза: “Хватката е, че така се битонираш във фирмата.” Въпреки че това твърдение не звучи сериозно при първото прочитане изглежда в него има определена доза истина.
В своят уеб блог Frank Sommers [2] ни разказва за някои от митовете свързани с качеството на програмния текст при създаването на софтуерни продукти. Позицията му е ясна и точна: Качеството на програмния текст не оказва пряко значение за качеството на крайния продукт. В основата на тази теза е заложено твърдението, че крайният продукт (под формата на изпълним код) преминава една финална технологична преработка, а именно компилация или интерпретация.
Важно е да направим уточнение, че под качество на програмния текст разбираме стила на писане, именоване на отделните елементи в текста и структурирането на кода, а не наличието да дефекти в програмата (бъгове). Базирайки се на това важно уточнение съвсем спокойно можем да кажем, че за крайният потребител и всички останали, с изключение на програмистите подържащи продукта, е напълно без значение по какъв начин е написан кода, стига продуктът който получават да отговаря на изискванията и очакванията им.
В подкрепа на твърдението, че качеството на програмния текст не оказва директно влияние за качеството на крайния продукт, можем да отбележим, че клиентите получават не самият програмен текст, а изпълнимия код. Съвременните среди за разработка многократно оптимизират програмните текстове при превръщането им в изпълним код. Компилаторите и интерпретаторите могат да създадат еднакво добре работещ изпълним код, независимо дали програмният текст е бил с високо качество или не.
Кой всъщност се интересува от качеството на изпълнимия код? Единствените пряко засегнати са самите програмисти. Добре написания код улеснява тяхната работа по поддръжката или разширяването на функционалността в системата. Въпреки това, високото качество на програмния код не води до директно повишаване на печалбата. Често мениджърите, притиснати от стриктните крайни срокове и жестоката конкуренция на пазара, оказват влияние върху програмистите, принуждавайки ги да създадат готов продукт в кратки срокове, пренебрегвайки нуждата от добре написан програмен текст.
От своя страна, маркетингът се интересува единствено от това да разполага с готов продукт, продуктът да бъде на пазара в подходящия момент и по възможност дефектите в продукта да бъдат по-малко или относително незабележими.
До колко програмистите пишат труден за разбиране код, с цел да направят труда си уникален и труден за разбиране от техните колеги, е въпрос на личен морал. Въпреки това, добрите програмисти се стремят да създават лесен за разбиране и поддръжка код, защото това улеснява и собствената им работа.
До каква степен трудния за поддържане код може да запази работата ни зависи единствено от мениджърите на средно и висше ниво, които би трябвало да се предпазват от създаването на “незаменими” служители, носещи повече усложнения за целите на организацията, отколкото ползи.
Тодор Балабанов - teodorgig@mail.ru

Информационни източници:
1. “Сега разбрах за нечитаемия код:))”, Dir.bg Клубове
2. Frank Sommers, “The Code Quality Myth”, Artima Developer

 

Legacy hit count
1786
Legacy blog alias
4966
Legacy friendly alias
Високо-качество-на-програмния-код---наистина-ли-се-нуждаем-от-него-
Компютри
Интернет
Линукс
Програмиране
Софтуер
Разработчици

Comments2

rammstein4o
rammstein4o преди 20 години и 2 месеца

За съжаление аз се сблъсках челно със точно този проблем... Преди мен във фирмата в която работя е имало един хубусник който така хубаво е оплел един проект че няма накъде повече...

Наследявал е класове на 5-6 нива само за да получи някъква си там функционалност на най-горното... Хардкод-вал е разни неща от сорта на "Ако id-то на еди кво си е 3 начи правиш еди кво си..."
Познайте ако недай си боже тва нещо престане да е с id = 3 кво става... 

На мен ми трябваше месец и нещо само за да открия някаква, макар и минимална логика в този код. За радост сега вече (около 3 месеца по късно) работя почти без да се замислям със него и кадето имам възможност и време го оправям...

Моето мнение е че лошо написания код  е нож със 2 остриета... наистина при някой фирми може да те "битонира" на работа, но при сериозните фирми в които работят добри програмисти най-много да спечелиш подигравки и уволнение...

Terkoto
Terkoto преди 20 години и 2 месеца
Тази статия е пълна глупост поради следните няколко прости причини: 1) Много фирми пишат код, който смятат да поддържат, използват и (дай боже) продават дълго време след това. 2) В много фирми (в чужбина, не у нас) има стриктни ограничения върху времето, което един програмист може да прекара на дадена позиция във фирмата. След това или го повишават, или му прекратяват договора. 3) От (1) и (2) следва, че кодът ще се поддържа от много програмисти в течение на времето, и не всички от тях ще са достатъчно опитни. 4) Изискванията за стил на кода, периодичните прегледи на кода (code review-та), QA контролът и т.н. не са измислица на синдикатите за откриване на повече работни места, а точно добре обмислена методика за справяне с проблемът, който може да се появи в (3), ако някой пише спагети код или нечетими и некоментирани шифрограми. 5) В много случаи правилата за писане на код спестяват и време. Елементарен пример: добра практика е сравняванията в C/C++ да се пишат така, че константните изрази да са от лявата страна на оператора за сравняване ==, а не от дясната. Така се изключва възможността някой да изтърве едното равно и да превърне оператора за сравнение в оператор за присвояване, който (както всички сигурно знаем) връща резултат и напълно безпроблемно може да се ползва в условни конструкции и други места, където се изисква rvalue. Последното често води до труднооткриваеми логически грешки, които за разлика от синтактическите не прекъсват процеса на компилация и могат спокойно да "живеят" в крайния продукт и търпеливо да дочакат момента, в който да съсипят цялата привидно работеща система. 6) Да, наистина за компилаторът "if (a == 5)" и "if (5 == a)" са едно и също (въпреки, че може да генерират малко по-различен асемблерен код в зависимост от оптимизацията), но "if (a = 5)" е напълно валидна (макар и грешна от гледна точка на целта й) C/C++ конструкция, докато "if (5 = a)" е синтактична грешка във всички C-подобни езици. Виж (5) 7) Ако пишеш програма от рода на Notepad наистина няма значние колко четлив ти е кодът. Когато обаче пишеш нещо от рода на MS Office значението е очевидно. Ако набързо напраскаш някакъв "пач", колкото да пробуташ кода на клиента, то след това се почва едно роене на версии: в едната пача превърнат в "хубав" код, но пък допълнен от нови 10 пача; в друга първите 3 пача превърнати в четлив код, но последните 6 пача не; в трета пачовете са пачнати допълнително поради недостиг на време за превръщането им в "хубав" код... 8) Добрите менаджери много добре знаят за (1)-(7) и не позволяват на подчинените им да пишат бози и спагети. Добрите менаджери обаче са твърде малко :(
By TeodorGig , 17 February 2006

... трябва да комуникират програмистите в България? 

На вън е приятно слънчев зимен ден. По всичко си личи - зимата бавно се оттегля, въпреки че ще са нужни поне още два месеца за да се поздравим с действителната пролет. Не зная защо, но денят ми започна доста криво, може би защото некомпетентността на служителите в отдел “Личен състав”, в организацията където работя, успя да ми създаде твърде неприятни емоции.
 
Очевидно не бе ден за работа, а от горе на всички и петък. Замислих се, заслужава ли си да работя точно за тези хора и то точно за тези малки суми? От мисъл на мисъл и от идея на идея, отново стигнах до бързо преглеждане на обявите в не без известния портал JOBS BG. Прелиствам аз страниците с обявите и чета, но в един момент се улавям, че чета само на английски. Казвам си: Боже, аз в България ли се намира или в Обединеното Кралство, може би САЩ, Канада или Австралия?
 
От много време не ми прави впечатление дали пред очите ми стои текст написан на английски или на български. Дори когато се замисля, ежедневно изчитам три пъти повече чуждоезични текстове, отколкото текстове написани на български.
 
Въпреки всички това, редно ли е обявите за работа в България да бъдат написани на английски? За какво братята Кирил и Методий отдадоха живота си за запазването на българската самоидентичност, под заплахата от византийско интелектуално владичество, след като векове по-късно родният ни език се измества от английския, под влиянието на фирмени мениджъри със съмнителна грамотност.
 
Не рядко ще чуете, същите тези HR мениджъри, да ви заявяват, че ако една обява не можете да си прочетете на английски то не сте за тяхната фирма! Не им се подавайте, това е едно удобно оправдание да ви дискриминират по националност, потъпквайки безогледно най-висшия закон в страната, а именно Конституцията. Ами какво биха казали тези мениджъри, ако им заявим, че ние обявите от английски можем да си ги прочетем, защото всеки грамотен човек, в 21 век, се предполага да владее на добро ниво поне един чужд език, но просто не желаем да четем тези обяви написани на език различен от родния ни?
 
Вярно, езиковите умения на служителите във всяка една фирма са от голямо значение, но за удостоверяването им, всеки от нас е способен да представи дипломата си за завършено образование, в която диплома е вписан хорариумът на изучените часове чужд език. Много от нас желаят да бъдат добри професионалисти и също така си осигуряват сертификати за владеене на чужд език. За какво тогава фирмите в България не ползват родния ни език в обявите за работа?
 
Ако се зачетете из някой от Интернет форумите за програмисти, ще откриете една още по-жестока истина за съответните HR (HR - human resources или на чист български - личен състав) специалисти. Те до толкова не си вършат работата, че гледат от чуждестранни уеб страници и копират обявите почти едно към едно. Срамно е, че не пожелават да си дадат поне малко труд и да преведат на български нещата, които плагиатстват.
 
Споменавайки темата за директно откопираните обяви е хубаво да се замислим, а какво всъщност е казано във всички тези обяви и защо срещаме изявления от вида:
 
http://www.jobs.bg/f98324
 
We offer:
1. Attractive remuneration package;
2. Excellent working conditions;
3. Dynamic and exciting job in a friendly team environment;
4. Corporate training and professional development;
5. Work in a highly qualified team of professionals.
 
Да, може би всичките тези изброени неща са валидни за фирмата, която е съставила текстът на тази обява, но дали те са валидни и за българската фирма, откопирала съдържанието на оригиналната обява?
 
Някога лъгали ли сте шефът си или гаджето си? Наблюдавали ли сте реакцията на този шеф/гадже, когато осъзнаят, че сте ги излъгали? Хареса ли ви тяхната реакция? Мога да си представя какви са отговорите ви на поставените въпроси. Защо тогава всички ние си мълчим, пред подобни обяви и не реагираме адекватно, когато установим, че това което обявата обещава няма нищо общо с реалната ситуация в съответната фирма?
 
Програмисти или не, българският език не е толкова лош, а за добро или лошо все още е единственият официален език на Република България. Нека поне за момента бъдем българи и не забравяме делото на братята Кирил и Методий.
 
Тодор Балабанов
 

Legacy hit count
865
Legacy blog alias
4680
Legacy friendly alias
На-какъв-разговорен-език----
Размисли
Компютри
Интернет
Линукс
Политика
Литература
Програмиране
Нещата от живота
Коментари
Софтуер
Разработчици

Comments

By TeodorGig , 16 February 2006
Често чета поредното компютърно списание и виждам поредната алгоритмична задача (най-често комбинаторика или някой NP сложен проблем) и се питам, за какъв дявол хората правят такива състезания, а пък други хора вземат участие в тях?
 
Няма да скрия, че програмирането е предимно хоби за мен. Никога не съм имал успехи в споменатите състезание, но за сметка на това винаги ме е учудвало каква е ползата да се участва в тях.
 
В един хубав ден, един мой преподавател ми обясни, че върхът на алгоритмичните задачи е в динамичното програмиране. Там се използва определена рекурентна зависимост (най-трудният момент от решението), на база на която се спестяват голяма част повторни изчисления. Въпреки завидните способности на моя преподавател аз така и не разбрах как мога правилно да съставям тази зависимост и да я прилагам за задачи, които не сме разглеждали в час.
 
Но дали програмирането е само алгоритми и дали състезанията по програмиране трябва да акцентират върху детерминистични задачи, за които е известно, че съществува оптимално решение? Не съм съвсем убеден! Реших да разгледам това, което предлагат ACM. Всички задачи които ми попаднаха бяха от вече споменатия тип.
 
И все пак, какъв е смисълът от състезанията по програмиране? Да се покажеш колко си велик? Да покажеш колко по-зле са останалите около теб? Не вярвам! Може би точно състезанията по програмиране са старта на една блестяща кариера в областта на професионалното програмиране! Определено бих предпочел да си мисля, че става въпрос точно за тази, последно споменатата, алтернатива. Странно, защо тогава състезанията по програмиране толкова много се различават от реалната работна практика в софтуерните фирми? Въпреки, че в някои състезания се залага на екипната работа, в българските състезания никъде не се предлага възможност отделните екип да преминат през един цялостен процес за разработка на софтуер. Къде остава анализа на заданието? Къде е мястото на проектирането? Тъй като не можем без кодиране, то винаги присъства. Защо не се отделя достатъчно внимание на документирането? Ами последващата поддръжка на продукта? Всяка софтуерна фирма би ви обяснила, че това са етапите през които преминава тяхната работа.
 
Иска ми се да вярвам, че в най-скоро време в България ще се появят състезания по програмиране, които ще дават възможност за съревнование между напълно завършени продукти, написани от същите тези състезатели, които в момента решават алгоритмичните задачи на ИТ списанията в страната. Вярвам, че това би било много важна стъпка в развитието на българската софтуерна индустрия, защото ако се замислим колко български open source продукта са налични в световната мрежа, с чиста съвест може да се срамуваме, сравнявайки се с далеч по-малки държави от България, които имат смайваща продукция в областта на софтуера с отворен код.
 
Апелът ми, а вярвам и апелът на всеки състезател по програмиране, към българските фирми, организатори на конкурси по програмиране, е да се насочат към спонсорирането и финансирането на състезателни екип, които извършват цялостна разработка на малки, но смислени, софтуерни продукти.
 
Ще се радвам, ако всеки един от вас сподели мнението си и заяви своята съпричастност към тук изложената идея, като напише своя коментар към темата.
 
Тодор Балабанов

Legacy hit count
1046
Legacy blog alias
4661
Legacy friendly alias
Защо-младите-хора-участват-в-състезания-по-програмиране-
Ежедневие
Компютри
Интернет
Линукс
Програмиране
Софтуер
Разработчици

Comments2

BULCORE
BULCORE преди 20 години и 2 месеца

Основната причина да участвам в подобни състезания е наградния фонд , макар че честно казано досега не съм печелил нищо особено.

Иначе ако има състезания в които се включва проектиране и анализ на цялостен софтуерен продукт ,определено шанса за добро класиране ми се увеличава доста. 

Идеята за спонсориране на отбори е много добра, обаче не ми харесва сравнението за open source-а. Това не е никакъв критерий. България разполага с много и качествени програмисти които не си губят времето да пишат код от който няма да спечелят нищо освен може би слава и лично удовлетворение. Само че тези неща се ценят в държави където не се бориш за преживяване. Май трябва да напиша отделен пост в което да споделя мнението ми за отворения код.

Terkoto
Terkoto преди 19 години и 11 месеца
Тодоре, да те питам аз тебе , защо се провеждат турнирите по шах ? защо има световно първенство по футбол ? защо смяташ че при програмистите не може да има competition? Защото Тодоре, хората дето ходят по такива състезания показват че имат подходящ начин на мислене, могат за кратко време да решават проблеми от познат характер... и после отиват да работят за мс или гугъл например , а ти стоиш тука и хабиш байтове да пишеш глупости. ВИНАГИ ТРЯБВА ДА ИМА СЪРЕВНОВАНИЕ! Какви са тези състезания които предлагаш ? Какво ще сравняваш там? Представи си се направи един такъв конкурс и се появят два отбора , едните са седели 3 месеца и са писали мощен редактор на изображения (използвали са c# например), а другите са писали писали уеб приложение (използвайки ruby например). Айде ходи ги сравнявай ... състезанието си е състезание , то е за тези които са по-добри от другите ... както един може да ходи да рита мач в парка с другите лумпени , така друг може да се занимава професионално ... а ти Тодоре , ти дори топка май не си виждал :-Д