В света на програмистите това определение се чува всеки ден, по повод някоя особено зле написана програма. Поне сред програмистите от поколението, което не разбираше от модни чепици и чалгатеки, но пък можеше да програмира… Но дори и повечето от тях не знаят откъде всъщност идва този израз, и защо е “боза с косми”, а не примерно “торта с кисело зеле”. Някои си мислят, че се има предвид, че програмата е отблъскваща… Но не е така. Или поне не само.
Добре написаната програма не само е стройна и хармонична като скачаща пантера. Тя е ясна от пръв поглед върху кода й, често дори за хора без особени знания в програмирането. Логиката й е ясна и интуитивна, ако имаш представа от материята, на която служи. Всичко в нея е точно на мястото, на което очакваш да бъде. Промяната на всяко нещо дава ефект точно върху каквото се очаква. Тя е бистра и прозрачна, като чиста вода.
Зле написаната програма е “мътна” – в нея не виждаш кое къде е, трябва да търсиш всяко нещо едва ли не опипом. Не знаеш какво като пипнеш, какви ще са ефектите освен търсения – видимостта я няма и в това отношение. В особено тежките случаи е като обфускирана – каквото и да пипнеш, се чупят най-непредвидими неща: видимостта й клони към нулата. Като в боза… Доста мои познати програмисти, ако им вземеш RAD-средата, пишат точно такъв код. (Познайте какъв пишат там, където RAD средата не стига, и просто трябва да се дописва на ръка.)
Какво става, ако такава програма трябва да се дописва? (Или ако трябва да се дописва дори добра програма, но програмистът е некадърник?) Вместо да разбере логиката на програмата и да имплементира нещата точно където и както трябва, програмистът предпочита да ги направи отделно, и да ги лепне за програмата като някакъв израстък… С времето подобни програми буквално се покриват с подобни израстъци като с окосмяване. Оттам и “косми”.
А как се съчетават двете? Елементарно и неудържимо. Истински бозавата програма подлежи на допълване единствено чрез окосмяване. И тъй като истински бозави програми има предостатъчно, и зад някои от тях стоят кадърни маркетингови екипи (т.е. те са широко наложени на пазара, често се налага да бъдат допълвани и са познати на много програмисти), софтуерният свят е пълен с масивно окосмени бози. Оттам и изразът – популярен до степен много хора да са забравили вече всъщност какво точно значи, но да продължават да го използват.
Айде сега чао, че имам да доправям една… програма. 🙂
Чел ли си “Черната котка” на Чудомир? 😀
@Daggerstab: Из буйната си младост съм го изчел от кора до кора, обожавам го. Ама бая време мина оттогава, та съм го позабравил, и не направих връзката… 🙂
А аз си мислех, чее защото, както бозата с косми ти докарва едно незабравимо преживяване в тоалетната, така и програмата ти докарва едно незабравимо ядосване.
@Данаи: Никак не си сбъркал. 🙂
@Григор: “Боза с косми” не съм чувал, но “торба косми” съм. И се визира откъде минава изпълнението на програмата (threads), това са космите. По-поносимо е “спагети”. А куцо долепените неща са “вързано с тел”. Когато достатъчно много неща са привързани с тел, те започват да падат под собствената си тежест.
“Ако програмистите строяха къщи”
@Daggerstab: Благодаря.
Най-бозавия кой от който ми е настръхвала косата беше на едни украинци. Те хората изглежда са искали да спазат принципите за обектно програмиране и бяха капсулирали всичко в класове. Дотук добре горе долу рядка боза. После обаче са решили да вкарат логика с…техни си ексепшъни. Хората хвърляха ексепшъни, ловяха ги 1 – 2 нива надолу, хвърляха ги отново и така до безкрай. Този код беше истински кошмар за дебъгване и за дописване. За да изкарам едно пропърти веднъж се рових 2 дни. Не боза ами…
Боза, спагети, пълен хикс…
Daggerstab, и аз само като видях заглавието на Григор през RSS се сетих за черната котка. 🙂 Ама е кофти тоя разказ… Сега трябва да поясните, тия, които знаете и да програмирате, и за “Черната котка”, кой е с мустаци, дали само програмистите на тия програми, или и ние, потребителите?… То всъщност какво ли питам, ясно е. Вие хем бъркате в качето, хем го … Ох…. айде да не ми се случва…
Гадничко е да гледаш такава програма. Иде ти да я задраскаш отгоре до долу. А ако и програмистът ти обяснява каква тънка мисъл е вложил, какви хитрости е приложил, за да построи така добре опитмизирана програма, направо е страшно. В една друга област, механиката, един преподавател ни каза за такъв вид конструкции: “А си мръднал, а маймун си станал.” Буташ на едно място, то избива кой знае къде на другия край.
А аз си помислих, че има нещо общо с бесента “Windows e боза”.
Григоре знам за какво говориш. Моят шеф има онлайн магазин за мебели, който едно време е бил на osCommerce, една не толкова лоша система. Обаче сайтът е правен през 2004-а година и тогава програмистът който е работил за шефа е добавил доста неща които биха изчезнали при един ъпдейт на CMS-а, следователно ние трябва да добавяме нови модули дърху система която е на 7 години и да оправяме бъговете на тази система, които вече са оправени от разработчиците й. Стига се до такива абсурди да имаме файлове по 4-5 хиляди реда които не са табулирани и са смесени HTML с PHP, които най-често гърмят, а поради естеството на работата ни, нямаме възможност да ги пренапишем и да работят наред. Сега пак е гръмнало нещо по сайта и ще си губя времето да търся къде, как и защо и най-вероятно пак ще ес окаже грешка на някой от нас който се е опитал да закърпи нещо.
Това на запад му викат спагети код 🙂 http://en.wikipedia.org/wiki/Spaghetti_code . Миналата година когато прочетох тази статия видях че имало и равиоли код и спагети с кюфтета код. Години минават преди програмист да се научи да пише подреден код и трябва доста четене. Аз съм имал проблеми с това и съм си пател, но шефа двойно повече го отнасяше заради моята тогавашна некомпетентност. Слава на Хесус той е търпелив, а аз любопитен следователно ме изчака да мина една купчина лекции та да не мъ създавам толкова ядове 🙂
П.С. Г-н Гачев, моят частичен фийд към Вас е молба да сложите plug-in за subscribtion към темите, че ми се ще да получавам отговорите на другите потребители. But of course that’s just me