Какво имам предвид Аз под Качествен Код

Ако тук статията не е четима, ето линк към Google Docs документ: ЛИНК

—–

Факт е, че искам в Iris да пишем много готин код. И под много готин, аз разбирам код, който прави магии и можеш да го разбереш как точно работи само с един поглед.

Искам да пишем код който е толкова добре написан, че да искаш да си го принтираш и да си го сложиш в рамка на стената. Въобще, толкова секси, че да ти се иска да го оближеш

И постоянно разправям едни неща да пишем качествен код, да е самодокументиращ се, да е лесен за разбиране

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

Записах даже едни кратки видеа, в които обяснявам какво за мен е качествен код:

Не разбрах защо, но като го споделих в социалните мрежи и голям хейт бе 😀

Важното от всичкия feedback, е че, освен кода, че кода трябва да диша (под което имам в предвид да се ползват повече нови редове и празно пространство, за да е четимо), колегите допълниха и че трябва да си хапва и да прави салта

Та, искаше ми се да обясня поне на хората в компанията, какво имам в предвид под качествен код и реших да си изплюя всички мисли докато, рефакторирам някакво парче код

Сега аз програмирам от горе-долу 10 години. Започнах 14 годишен и пишех на Pascal и сега съм на 23 и като цяло мога да пиша на доста езици

Поработих и в индустрията няколко години преди да стартирам Iris, така че имам и малко практически опит и в голяма компания

Всички неща, които съм описал по-долу са си мое мнение, така че, take it or leave it

—–

Докато рефакторирах кода на WordPress темата направих няколко примера за това какво целим

Забележете как махнах коментарите и ги замених с по-ясни имена на променливи и функции

Има коментар само там където не може да се избегне

От това


Кода стана на това


——————

Забелязваме обаче, че много от думичките като ‘are’, ‘the’, ‘to’ и т.н. С нищо не допринасят за разбирането на кода, а и редовете стават много дълги

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


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


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

Слагаме един if малко по-нагоре например, за да не трябва да се ходи нагоре надолу, за да се разбере кода

Кодът трябва да се чете като книга, отгоре, надолу, без да се връщаш назад

Получаваме нещо такова


Освен, че вече нямаме нужда да отиваме на края на функцията и да четем цялата функция,

Премахнахме и още едно nest-ване на кода, което го усложняваше

——

И сега вече изглежда що-годе добре. Тестваме, четем пак 1,2,3 пъти, мислим още малко и къмитваме

Разбирам, че това не е перфектния пример, но като постоянно повтарям, че трябва да пишем по-качествен код е още по-лош пример

Сега ние си имаме някакви наши си конвенции, които са си лично мои преференции

– Пишем с табове вместо спейсове

– Скобите са на нов ред

– Променливите и функциите са с долни черти

– Класовете и неймспейсовете са CamelCase

– Групираме проекта на много файлове под 100 реда

– Стремим се да пишем функции под 10 реда

– и т.н.

Но това са идиотски неща

Повечето програмисти, които се карат за такива неща въобще не знаят на кой свят се намират

Качествения код не е къде ти е скобата

Качествения код е лесен за разбиране и самодокументиращ се

И както се вижда отнема доста повече време да направиш нещо лесно за разбиране отколкото просто да извъртиш 5 цикъла и 2 рекурсии в една функция

Затова според мен е леко минус да има предимно състезания по алгоритми

В реалния свят и в екипната работа е много по-ценно да пишеш прости и четими неща, вместо всяка функция да има i,j,k,l,m и n като имена на променливи и да се чудиш какво се случва

Ще се радвам да чуя и вашата конструктивна обратна връзка

Например, няколко неща, които още могат да се подобрят са: да се раздели функцията на няколко по-малки функции и ако може това нещо да се съкрати още повече

И т.н.

Линк към документа: https://docs.google.com/document/d/1B7sxJ5NX3bZinbfE4ZPur4TB2OqXxTjXvP3JVJ9XGl8/edit?usp=sharing

Пост в Facebook с голяма дискусия 😀
https://www.facebook.com/groups/657786774316040/permalink/2172610186167017/

Backup на коментарите от Facebook: