Отворен програмист ли си ?

Хората в нашия занаят аз ги деля на два типа – едните са истинските „програмисти“ (или по-широкото понятие „разработчици“), и хора, които просто това работят (да ги наречем „невдъхновени служители“). Предполагам, че не само в нашата професия е така, но все пак аз като стереотипен инжинер трудно виждам отвъд моето си блато. Нали е излишно да казвам, че нашия занаят е по-особен, защото нещата се развиват много бързо, и трябвада се учи постоянно. Много малко от нещата, които са били актуални преди десет години, са актуални сега (разбира се, говоря нещата с практическа насоченост, теоретичните истини са „вечни“). Поне половината неща от преди две години са актуални сега. Което означава, че и ние трябва да се развиваме със променящата се среда, за да сме актуални на пазара, и на ситуацията в която се намираме. Ето затова и питам, ти отворен програмист ли си ?

Изумявам се колко мързеливи, или неправилно мотивирани може да са хората, или просто защо са част от сивата маса на „невдъхновените“ служители, които просто го работят това, и малко ги интересува какво става навън, и как се развива света около тях. Да започнем с по-меките примери и въпроси, и постепенно ще преминем към по-фрапиращите. Фокусът ми ще падне главно върху уеб разработчиците, с което се извинявам на всички други, които се вписват под термина „програмист“, които също заслужават внимание, но пък аз нямам толкова опит там.

За начало, колко от вас са решили да експериментират с друг тип платформа за работа ? Примерно да сте решили да скочите от PHP на Ruby, или от Perl на Python. Ако не решите да експериментирате, как ще разберете дали няма по-добър начин за правене на нещата ? Или ако не по-добър, то поне по-различен … защото понякога решаването на проблема лежи в опита който имате натрупан алтернативно, и радикалния поглед от друга гледна точка почти винаги помага.

А опитвали ли сте актуалните и обсъждани в момента решения ? Примерно опитвали ли сте rapid development с CakePHP или CodeIgniter ? Разглеждали ли сте популярни решения като например Symfony, което Yahoo ползва за сайтове като Yahoo Bookmarks и от скоро Delicious? Или сравнително новия проект Zend Framework, в който Zend вкарват толкова много усилия, и се опитват да наложат като „платформата“ за разработване на уеб приложения ? Ами по принцип интересували ли сте се за огромното количество „рамки“ (абе „frameworks“ … имаше купешка дума за това на български, но не се сещам сега), които са в момента, които са събрали някакво популярност до една или друга степен – примерно Akelos и SolarPHP, или обещаващ, но позабравен проект като WACT ? Всичките са токова различни, и решават различни проблеми по толково различни начини, всеки с плюсовете и минусите си, че непременно ще съберете огромен арсенал за торбата с хитростите, дори и да не използвате дадения framework като основна среда за работа по проектите си.

Разглеждали ли сте популярни готови решения с отворен код ? Аз супер си изумявам някой в нашата професия, ако не е чувал за WordPress. Просто трябва да си се крил две-три години по пещерите, за да не знаеш за едно толково популярно решение. Ами другите ? Примерно Joomla, Drupal, Typo3 … дори phpbb или oscommerce ? На някои от тези проекти кодът им не става за гледане, но пък има добри иде за това как да се справиш с някои проблеми, не само програмно, но и като интерфейс, интеграция и т.н.

Ами освен готови решения с отворен код, ползвали ли сте и библиотеки с отворен код ? Друго нещо което ме изумява, е когато никой не е чувал за неща като domPdf, Smarty, Snoopy, MagpieRSS, SimplePie, или SwiftMail и phpMail, или дори по-инертното PEAR хранилище… и вместо това се правят на Колумб като пишат грозни и бавни дилетански глупости. Ако ги питаш защо ти си ги писал тези неща, като ги има готови, с отворен код, и най-важното – с поддръжка, обикновенно отговорят „ами за да е по-сигурно“ или „ами за да ми е по-лесно, като го знам как работи“. Добре, че не правят автомобили, че ще си изгубят една петилетка да откриват колелото. Сега се сещам, че някои отговарят „ами моето е по-бързо“, въпреки че съм 99% сигурен, че едва ли са пробвали да сравнят бързодействието с някои от готовите библиотеки. За да си продуктивен, трябва да ползваш стабилен код, и нещата да вървят гладко. Библиотеките с отворен код са супер заради това, че отговорността за поддържането не лежи върху вас, и вие няма да губите време да се занимавате с някаква библиотека, а ще може да се съсредоточите върху проекта над който работите. А, да, и да знаете, PHPClasses е за аматьори … кажете ми, че ползвате някой клас от там и гледайте как ще се пръсна от смях. Ако сте някой начинаещ новобранец може да хвърлите някое око там , но най-много да прихванете някой лош навик от там, така че най-добре въобще прескочете този сайт.

Горното се отнася и до JavaScript библиотеките, въпреки че не съм срещал някой да си пише собствен набор от функции .. по-скоро се правят някакви „клани-недоклани“ решения с копиран код от DynamicDrive или AjaxDaddy, който е написан супер късогледо, и всякаква промяна по него е изключително изтезание. Сега поне изборът е голям – за всеки стил на работа ще се намери библиотека: Prototype, MooTools, MochiKit, Dojo, YUI и невероятното jQuery.

Сега, на финала, искам да обърна внимание на хората които са замръзнали на ниво 2000-2002 година. Този тип програмисти ползват процедурен код, защото това е първия начин на който са се научили да работят, и нали се върши някаква работа – няма нужда да се сменя. Пишат обектно-ориентиран код на ниво кръжок по информатика за 3 клас. Доскоро супер закостеняло са ползвали PHP4, защото не са се сетили да видят колко предимства им предоставя PHP5. Става и по-зле … например не се ползва нищо за контрол на версиите, ами всичко се трупа на една споделена машина, в която в отделни папки се записват следващите версии ;) После като се счупи нещо върви търси от коя версия нататък е изплувала грешката, и кой я е направил. Става и още по-зле … например всички работят отдалечено на една машина, „сървъра“, където ако един от всичките прецака файл, необходим в просеца на зареждане на страница, всички други „маймуни на клона“ духат супата и чакат, докато възникналия проблем се отстрани. На колко от вас им стана ясно къде е проблема, и как се решава той чрез решения за контрол на версиите?

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

Който се засрамил, засрамил… да не хващам пак парализа на показалеца, и да го размахвам поучително. Хващайте се да четете, и да експериментирате, вместо да вегетирате на работното си място, и да го карате като сив „леминг“.

25 мнения за “Отворен програмист ли си ?”

  1. Съгласен съм с всичко казано до тук. Аз покривам примерно половината от изискванията за „отговорен програмист“, но пък се старая и се мъча да уча. По-интересно какво е „вдъхновило“ този пост ?

  2. Правилно, важна е настройката – важно е да осъзнаеш динамичността на средата ;)

    Иначе „вдъхновението“ са моите скорошни наблюдения. Повечето хора са май от типа „служители“, и супер малко има които са дори малко „отворени“. Има може би дузина добри примери, които съм засичал например по форумите на Zend Framework, или друга библиотека.

  3. Не си съвсем прав.

    Развитието на програмистите зависи от работата им поне толкова, колкото работата зависи от развитието на програмистите.

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

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

    Програмистите се назначават без опит, дава им се да направят това и това, никой не ги гледа, ако направят нещо кофти. Ако сгафят много им се крещи, но това не ги прави по-добри. Постепенно се натрупва легаси спагети код и той трябва да се поддържа. Ако кодът им работи, а той обикновено работи, хората стават абонати да го поддържат до живот и никога не минават от първи във втори клас. Колко пъти съм го виждал…

    Така че недей съди прибързано хората.

  4. Доколкото знам разликата между програмист и разработчик е точно това което си казал(написал). А и лошото според мен идва че много хора са мислят: Направих сайт с PHP, вече съм бог и нищо друго не ми трябва вече.

    п.п. Може да пробвате AJS (http://orangoo.com/labs/AJS/) базирано на MochiKit.

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

    Много си прав. Решението в каква посока да тръгне работата на дадена фирма, чисто технологично, все пак се взема от някой „технически грамотен“. Този „грамотния“ обаче, ако е от типа „аз просто работя тук“, оцапва пейзажа. Последните примери от поста, тези за замръзналите на ниво от преди 5 години, за не използването на CVS/SVN, за хамалското правене на страници с умесването на логиката и представянето, … това са все за конкретни фирми в Русе. Прав си, че в този случй може би не може да си винят самите „работници“, ами „бригадирът“ взел даденото решение. Обаче, знам че не е правилно да се генерализира, но все пак – точно в тези фирми „работниците“, независимо с какъв ентусиазъм са срешнали работата си първоначално, започват да затъпяват, постепенно израждайки се под влиянието на една такава покварена среда в „непросветените служители“ за които писах. Изглежда ако работата не изисква от тях да са иновативни, и те започват да стават просто електронно-изчислителни оператори ;)

  6. Има среди, в които ООП е изначално и неизбежно и няма фреймуърци. Е и? Пак може да липсва коректна обработка на грешки, да не се ползват нишки, да се копи-пейства код, да са хардкоднати конфигурации и т.н. до безкрайност.

    Всъщност може да си направил някакъв ултра кул сайт с PHP5 + MVC фреймуърк и да си се осрал тотално в DB Design-a, SQL-a, да си омешал програмирането с кюъритата, да нямаш кеш лейъри или да си омазал javascript, html, css в една неразплетима боза (дай вю сорс на който и да е голям български сайт и гледай за какво става въпрос – примерно http://www.abv.bg).

    И изведнъж се оказва, че шансът да назначиш джуниър дивелопър и той да има дори най-бледа идея за всички капани, в които може да падне е = 0.00.

    Не, този човек не е безвъзвратно загубен, след като е написал 1, 2 или 10 мегабайта код в някоя от горните русенски фирми. Просто има нужда от нова работа, с по-начетени колеги, където ще му е малко криво, но ще се развива :-)

  7. Целта не е да се критикува лошите практики в работата, просто защото никой не е перфектен. И точно както ти си писал, може да ползва модерен фреймуърк, и пак да осере базата данни.

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

    И тук не говора за „junior“ дивелъпъри … те са ми ясни – за краткото време в което са трупали опит, ако са тръгнали по грешната пътека общо взето няма да изминат много голямо разстояние до „професионалното“ ниво. Обаче не са ми ясни хора с 4,5 или 5 години в занаята, които са като кон с капаци, и не знаят елементарни неща … като например какво е JSON ;)

  8. Това е много добра публикация, събира някаква есенция в себе си. Много ползотворно ще си го буукмаркна да знам какво ми трябва за да порасна още :)

  9. хех, няма есенция ;) Има описване на вътрешна нагласа, която трябва да се следва от повечето хора, поне в нашия бизнес. Другото от поста са само примери които илюстрират тази вътрешна нагласа.

  10. хм, вярно гледаш само от собствената си камбанария :) визирам факта че си хванал на мушка само PHP девелоперите. В интерес на истината доста от тези неща не важат за програмирането с продуктите на Microsoft. Там(при нас) нещата малко или много вече ги имаме написани(като контроли) или добавени в последната версия на Visual Studio където наготово ги ползваш :)

    Темата е дълга, но все пак беше интересно четиво и ме върна поне 5 години назад!

    Успех

  11. @ajaxus: и при .Net има какво да се разглежда извън „начертания път“. Примерно компонентите за ASP.net – освен готовите, има още толкова от най-различни фирми… примерно Telerik ;) Отделно, че от клиентска страна, няма значение какво има на сървъра, и там съществуват всичките варианти за интеграции с JavaScript библиотеките – сигурен съм, че има много решения които са ASP.net базирани и ползват jQuery ;)

  12. аз включвах всичките контроли когато пишех коментара :) всяка средностатистическа компания си е купила поне 3 различни контроли. аз лично имам телерик, инфраджистикс и дундас :) пускам студиото и имам всичко :)

    като говорим за тези контроли.. виждал ли си http://www.coolite.com? базирани на ExtJS която пък слага jQuery в малкия си джоб :)

  13. Чел съм някакви новини за Coolite на Ajaxian, но понеже е за .Net не съм обърнал някакво по-специално внимание. Иначе за ExtJS … да мен не ми допада, jQuery ми е супер удобно. А пък и тези истории с лицензирането на ExtJS и после OpenEXT, малко изглежда сякаш нe знаят какво правят.

  14. Хубав пост и с повечето неща съм съгласен. Тоест с всички освен с едно :) Според мен използването на ООП на всяка цена… не е оправдано (за PHP става дума). Въпреки че в PHP5 обектите се управляват по (уж) много по-добър начин, има още доста какво да се желае откъм бързодействие. Наскоро закърпиха един бъг за завишен memory usage в такъв прост оператор като .= а какво остава за обектите?

    Не съм против ООП, даже напротив… просто съм на мнение, че трябва да се търси баланс между нещата. Сега като се замисля може и да не съм те разбрал правилно – може би просто си против тази практика да не се вижда по-далеч от процедурите, а не си за ООП винаги и навсякъде:)

  15. Абе малкото зло е за предпочитане… бях чул нещо от сорта, че PHP файл без коментари се чете по-бързо и се интерпретира по-бързо, и че било важно да се ползват по-кратки имена на променливите и по-малко интервали/табове, пак за да е по-малък файла и да се постигнат същите пишман резултати от такова „оптимизиране“. Това е шибана мръсна глупост. Да се пише нечетаем код с цел оптимизация е супер малоумно и късогледо, и след това при всяка следваща модификация нанася по-големи и по-големи щети. А пък и който ще ми говори за оптимизиране, и не ползва bytecode кеширане, по-добре да си смени професията.

    Иначе, няма нищо перфекто. ООП програмирането има повече плюсове, отколкото минуси. Процедурното програмиране ще остане в миналато, като GOTO спагетите, или писането на асемблер. Единствено виждам приложение за него в началните курсове по Информатика ;)

  16. Веско и Калоян са много прави като говорят за ролята на синиърите.

    За съжаление в много фирми текникъл лийдовете не само не изискват писането на качествени неща, а дори напротив – заради лош мениджмънт (тва пък е една съвсем друга тема) са толкова натоварени с проекти, че по-скоро поощряват писането на-две-на-три само и само да се отхвърли задачката по-бързо. Факт!

  17. За още по-голямо съжаление повечето розработчици се „школоват“ правейки фрийлансинг, и там дисциплината, четаемостта, и т.н. въобще не стоят на първи план, ами по-скоро „свърши работата бързо, вземи парите и бягай“ ;) И ефектът е същия – клани-недоклани решения, сглобени на-две на-три.

  18. И аз деля програмистите на два вида псевдо програмисти обикновенно пишат на PHP,Perl и се изявяват като психолози и програмисти които си вършат работата и не си задават глупави въпроси.

  19. Аз пък деля коментиращите на два типа – едните са страхливи малоумници, които не се страхуват за публикуват някоя такава злобна закачлива забележка, но пък ги е срам да си оставят истинското име или email в коментара, и такива, които нито ги е страх, нито ги е срам и винаги пишат нещата както са си.

    Ти нали си наясно от кои си ;) Ако не си, да ти кажа – ти май си киборг-галфон, изпълняващ работата си и не задаваш глупави въпроси. Ами как иначе, като играеш картата с този псевдо-елитаризъм, поставяйки уеб-програмистите в по-ниска каста.

Коментари са забранени.