16 декември 2008

Булшит детектор

Нали знаете какво е булшит детектор? Това е гласът в задната част на главата ни който ни казва че светът е прецакан някъде, че някой ни ебава, че нещо не работи както трябва, че нещо не бива да е така. Общо взето това е усещането ни за нередности. Забелязах че през последната една година, от както се занимавам с програмиране по сериозно, този мой сензор се е изострил страшно много. Не знам дали е заради възрастта ми, която е по голяма от миналогодишната ми(но шит?), или заради опитът който съм натрупал през последните 19 години като човешко същество и гражданин на републиката, или е заради промените които настъпиха в моделът ми на мислене и светоусещане, от както се занимавам с програмиране, това което знам е че имам доста по чувствителен булшит-метър от повечето хора.

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

Повтаряй името на марката за да се набие в главите на хората
Представяй образи с които хората да могат да се асоциират
Използвай кратки набиващи се в главата фрази, за да асоциират определени думи със продукта ти

и т.н. Повечето от тези неща са ясни, и причината поради която работят е че повечето хора не се замислят за това, не е и нужно, тяхното подсъзнание ще свърши цялата работа вместо тях. Един добър начин да се предпазите от този вид булшит е просто да не го гледате, ще се учудите какви положителни ефекти върху живота ви ще окаже отказът от телевизия. Освен повече свободно време, това че мозакът ви не се промива от реклами също помага. Когато имам рядкото щастие(играта на думи не е случайна) да гледам телевизия, обикновено рекламите не ми действат, поради 2 причини:

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

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

Какво не е наред с горния абзац? Булшит детекторът ми се включи и ми каза че пиша простотии. Всеки човек който се занимава с креативна дейност е способен да засича дефектите в своята продукция, а ако не е способен, обикновено продуцира говна. Няма две мнение по въпроса, ако не можеш да видиш къде грешиш, няма да поправиш грешките си, а надеждата че няма да згрешиш е фалшива, в най добрия случай. Това е вярно не само за писането, както споменах, вярно е за всякакъв вид креативна дейност, освен експресионизма, разбира се, там целта е да се продуцира булшит, за да се шокират хората, или да се разсмеят, което си изберете. При програмирането, това е едно от основните умения които са необходими за да можеш да си вършиш работата, нарича се ДЕБЪГВАНЕ И РЕФАКТОРИРАНЕ. Точно така, дебъгерите са просто специализирани автоматични булшит детектори. Но да оставим на страна дебъгерите, говоря за естествения булшит-метър, който повечето програмисти би трябвало за развият от рано в кариерата си(както аз правя в момента, защото съм в доста ранен етап от кариерата ми, ако не сте забелязали, съм на 18).

Друг термин, който се шири из международната, и по специално- англо-езичната, блогосфера е "code smell". Вероятно е случайно това че проблемите с код(и като цяло дизайна на системата ви) се наричат "миризми", а вътрешния усет за тези проблеми се нарича "детектор за бикови говна", всъщност може да го наричате просто "нюх", но това е по скучното му наименование. Такива "миризми" са 2 вида, едните са специфични, а другите са универсални, специфичните, както името намеква, са специфични за езика, фреймуйрка или като цяло парадигмата с която изразявате идеите ви с редактора(в повечето случаи зле). Ето няколко примера, които ако имате достатъчно чувствителен "нюх"(по кратко е от булшит детектор), би трябвало да ви напомнят да си рефакторирате кода:

Дълги имена на методи и функции. Няма нищо по гадно от това да трябва да пишеш realy_long_method_name_that_bugs_me(). Добре че повечето свестни редактори имат автоматично дописване, но какво става ако има много методи с близки имена?

realy_long_method_name_that_bugs_me_alot()
realy_long_method_name_that_bugs_me_sometimes()
realy_long_method_name_that_bugs_me_FUCK!!!()

Това определено би трябвало да мирише на гадно!

Методи и функции с много параметри. Това е ясно, излишна сложност.

Повтарящ се код. Дрън, дрън...

Големи класове, големи функции...

Общо взето би трябвало да е ясно какво се опитвам да ви кажа, пишете lean and mean Код, а не big papa bear код(ебахти метафората :D) Колегата блогър Джеф Атууд го е обяснил и ме мързи да повтарям думите му, просто ще инклуудна списъкът му, за да няма повтарящ се текст. Простото е по добро от сложното, краткото е по добро от обширното и всички тея други неща които би трябвало да знаете, ако сте програмисти.

Ето какво означава добре трениран булшит детектор:

1.Забелязвате много малки и дразнещи неща, които повечето хора игнорират, защото ги вземат за дадено, това са всякакви нередности или неефективности в света.
2. Осъзнавате че тези частни нередности са просто инстанции на по общи и фундаментални проблеми със света, в много случаи причинени от един особен вид плешиви маймуни, които го обитават.
3. Категоризиране на различните видове нередности в общи категории и търсене на уместни и ефективни решения.

Това общо взето сумира професията на програмистите :D Лека нощ, надявам се че не ви пречи факта че светът е покрит с "урина и фекалии", защото иначе ще ви е много кофти да живеете, спокойно, свиква се :D

1 коментар:

Sury каза...

Как ги учите тия сложни правила от програмирането, като не можете 2 прости граматически правила да научите...