неделя, 17 юли 2011 г.

Homemade crash course

През изминалата седмица бях на интервю за работа. Първото ми такова за работа, с която раелно искам да се занимавам, а не просто нещо за изкарване на пари или запълване на ваканции с нещо по-полезно от редица безполезни неща.
По тоя повод ми се наложи да направя нещо, което не си бях представял, че ще ми се случи. Както обикновено става в IT сферата интервюто си имаше леко препитване на място и 'домашно'. Въпросното домашно не беше върху кой знае колко инетресен проблем(ако някой има интерес може да разгледа какво сътворих в крайна сметка тук). Това което едновременно ме наплаши и ентусиазира беше изискването да пиша на Perl.
Обичам да се смятам за човек, сериозно взискателен що се отнася до собствените ми постижения. В съответствие с т'ва доста бих държал показвайки код на човек, който не ме познава по никакъв начин, да иде реч за красив и добре написан, обмислен код. С малко повече старание това може да постигне всеки, когато му се даде да ползва познат език. Аз обаче през живота си не бях писал и ред Perl до тая седмица. Преди около месец нещо авантюристично в мен пожела да подхвана някоя книжка за тоя език. Опитът ми да се пообуча удари на няколко камъка.
* Първият от тях беше огромната ми грешка да започна да чета "Minimal Perl"... Ако някога се замислите дали да не пробвате тая книга, ударете се през ръцете три пъти, а ако даже имате хартиено копие изгорете го. Имам един познат, който е горд с факта, че може да пише на C на всеки възможен език за програмиране. Даже разполагаше с онагледяващ тоя факт код писан на Prolog, което беше впечатляващо. Това, което се опита да ме научи тая книга беше това. Как да пишеш на Perl както пишеш на C, как да пишеш на Perl както пишеш на bash, как да пишеш на Perl както пишеш на <insert random somewhat popular programming language name here>. А пък е хубаво човек като се учи да пише на езика X, не просто да пише неща, които да минават през интерпретарора/компилатора на дадения език, а да следва някакви норми, идеи и специфични конструкции/похвати характерни за тоя език.
* Perl е разнообразен. Имам предвид УЖАСНО разнообразен. Има много начини да се направи едно и също нещо. От болезнено вербозни и досадно подробни до криптични и напомнящи древни религиозни писания използвани за призоваване на разни тъмни сили. Това може да създаде страшно много главоболия на човек, който е прохождащ в него. Според мен най-ефективният начин за учене на език(ако не разполагаш с опитен човек, който да те въведе и разходи из тоя език) е след малко теория и описания на някакви основни конструкции и идиоми характерни за езика, човек да почне да гледа много примери и по еволуционно доказания метод на мимикрията и копирачеството да навлезе в нещата. Когато синтактивно(и не само) имаш 78 различни начина да итерираш през елементите на един hash това затруднява малко частта с гледането на примерен код.
* Езикът не изглежда никак привлекателен на пръв поглед. Каквото и да си говорим $, @, %, # не са сред символите, които ми доставят естетическо удоволствие.
Поставен обаче пред задачата правя-струвам за една седмица да има какво да покажа си седнах на глутеус максимуса и се хванах да чета. Това беше отправната ми точка. Самия туториал е написан с идеята да се чете включително и от хора с приблизително нулево разбиране от програмиране, вътре има обяснения на това какво е функция, какво е ркурсия, какво е ООП и прочее. Това до някаква степен е удобно, защото вижайки идеята на автора за някаква концепция(дори и такава, която ми е напълно ясна) мога по-лесно да вникна в обяснението му на имплементацията на тая концепция в езика. Много диагонално минах и през Programming Perl на O'Reilly, която смятам да прочета по-внимателно в близко бъдеще.
Изживях огромен стрес при сблъскването с реализацията нa ООП в Perl. Честно казано все още не съм сигурен, че разбирам какво се случва, още по-малко защо се случва и как аджеба работи цялото нещо. Успях да посвикна с идеята за модули и референции, които получават някакви благословии свише... Въпреки че и в момента се усмихвам при идеята, че vim оцветява думата bless като запазена.
Оказва се, че много относително очевидни неща не са толкова добре обяснени и подчертани, колкото би ми се искало. Досаден и бих казал срамен за мен самия факт е че ми отне около едно денонощие докато разбера, че ключовете в един hash могат да бъдат само стрингове и Perl интерпретатора прави необходимите преобразования вместо мен, тихичко и послушно без изобщода ми казва.
В крайна сметка научих нещо интересно: Кратките срокове за привидно сложни неща(учене на език, с който сте тотално незапознати) действат благотворно върху мобилизацията и способността за учене. Предполагам все пак трябва да бъдат практикувани в някакви резумни граници, отвъд които човек би започнал да си причинява стрес. :)