Približne tri roky sa venujeme vývoju online služby zameranej na konverzácie každého druhu. K úplnému dokončeniu nám ešte kúsok chýba. Nechýbajú však skúsenosti a práve o tie by som sa chcel podeliť. Môj pohľad na profesiu programátora. Sme od ich práce závislí. S rastom projektu sme stáli pred novými výzvami a tie končili predžuté ako špecifikácie u programátorov. Cesta k dokonalému softvéru môže byť zábavná, strastiplná až bolestná. Ak je niečo kľúčové, tak je to zostavenie tímu a jeho organizácia. V tomto kontexte je zaujímavá rola programátora.
O čom to bude.
SDLC – alebo “software development lifecycle” je taký prakticko – teoretický termín. Pri každom softvéri je od myšlienky po prvú pozitívnu skúsenosť používateľa kus cesty. Popísali sa o tom množstvá kníh. A keďže nechcem riskovať, že tento post nedočítate celý, tak by som len krátko zhrnul môj názor na konkrétnu časť práce, programovanie a ešte presnejšie na rôzne typy programátorov. Po ostatných skúsenostiach sme sa s kolegom dohodli, že pre seba interne budeme rozlišovať tri skupiny programátorov. Ani jedna z nich nie je zlá. Každá je vhodná na iné riešenia a každá ma výhody a nevýhody. Paradoxne to má s časťou práce programátora – kódovaním len málo spoločné.
Krátky profesný úvod.
Skončil som odbor automatizácia na STU v Bratislave. Diplomovka bola postavená na programovaní v C a C++. Krátko som robil systémového admina LF UK v BA. Neskôr na oddelení technických informačných systémov v Globteli (dnes Orange), kde som časom viedol tím myslím 6 programátorov. Naša práca spočívala vo vývoji a správe aplikácii pre dohľad a monitoring rádiovej siete BTS, BSC, OMC. V zásade Solaris, HP UX, Oracle a MS Windows klienti. Tím bol malý v porovnaní s IT úsekom a tak som si spolu s kolegami užil aj kódovania aj manažovania. Potom som sa od techniky na pár rokov vzdialil a pred cca. 3 rokmi som sa vrátil späť. Aj keď ku kódu už prakticky ani neprivoniam. Tento krátky excerpt z praxe spomínam len preto, aby bolo zrejmé, že nemusím dostatočne presne vedieť o čom hovorím, ale minimálne tuším o čom je reč ak sa hovorí o vývoji softvéru.
Ale k typológii profesie programátora.
Programátor samouk.
Spravidla je zručný v práve jednom jazyku resp. v jednom type softvéru. Napríklad web developer. Prvé skúsenosti naberá možno už na základnej škole, ale najneskôr na strednej. Je bystrý a dokáže pekne kombinovať. Ak aj študoval informatiku, tak sa zameral najmä na cieľ – napísanie spustiteľného programu. Dokáže chŕliť kód neuveriteľne rýchlo a v neuveriteľných množstvách. Jeho prístup k tvorbe programu je neplánovitý. Je presvedčený, že bez počítača sa nedá programovať. Spravidla si aplikáciu nenamodeluje, ale tak ako dostáva požiadavky na funkcie, tak ich proogramuje. Je to osamelý jazdec. Zdieľanie jedného kódu medzi viacerých programátorov je prakticky nemožné. Nezdržiava sa písaním komentárov. Ošetrovanie chýb považuje za niečo navyše. V prípade odstraňovania chýb softvéru má status liečiteľa – venuje sa symptomatickému riešeniu problémov. Ak mu niečo chýba, tak si to skrátka rýchlo dorobí. Jeho prax začala pri obligátnom “Hello world!” Najdôležitejšia literatúra je preňho referenčná príručka jeho obľúbeného jazyka. O “revision (version) control system” počul skôr v kontexte SVN pre stiahnutie najnovšej verzie zdrojového kódu pre knižnice, ktoré potrebuje. Je vysoko produktívny v menších, funkčne jasných programoch. Potrebuje chápať celý kontext programu. Ak by išiel upravovať predtým spracovanú aplikáciu takmer určite by ju radšej celú prepísal. To čo vytvorí dodáva v expresne krátkych časoch. Pokiaľ nepotrebujete komplexnejší systém je to Vaša prvá voľba a pravdepodobne správna voľba s obojstrannou spokojnosťou.
Programátor junior.
Spravidla začal pracovať v spoločnosti, ktorá vytvára softvér na zákazky, alebo programuje rozsiahlejšie systémy. Má vždy svojho šéfa, ktorý mu povie odkiaľ pokiaľ môže robiť. Pripadá si ako robotník, ktorému povedia, kde má ráno začať kopať a kam sa musí dokopať. Nie celkom chápe prečo to musí robiť, ale viac či menej z donútenia v kóde komentuje svoju prácu. Možno to vníma ako kontrolu, či robí. Vie, že jeho práca nestačí na dosiahnuie cieľa a spravidla nemá prehľad o celku. Je veľmi zručný vo viac ako jednom programovacom jazyku pričom SQL je takmer určite jedným z nich. Vie, že jeho kód dostane niekto na otestovanie, kto mu následne do jeho práce kybicuje. V rámci manažovania jeho práce sa podieľa na modelovaní toho, čo spoluvytvára. Je rovnako produktívny pri malých aplikáciách ako aj pri dielčich funkčných moduloch väčšieho systému. Je menej samostatný, čo je však dané nie jeho schopnosťami ale skôr pozíciou pri organizácii vývoja. Potrebuje mať jasnú inštrukciu a určite dúfa, že jedného dňa postúpi ďalej. Vníma programovanie ako profesiu, ktorá má svoje miesto v hierarchii profesionálnej IT spoločnosti. Do kontaktu so zadávateľom, alebo používateľom sa dostáva minimálne. Malé aplikácie ho už spravidla nebavia, ale na rozsiahle systémy ešte nedozrel. Vie že existujú metodológie vývoja, ale ešte s nimi neprišiel do kontaktu, alebo sa ich práve učí. Poradí si aj sám, ale chce niečo viac. Nestačí mu niečo zbastliť. Lákajú ho skôr komplexnejšie projekty. Juniorom sa nedá byť naveky. Je to ako polcesta v kariére profesionálneho programátora.
Programátor senior.
Mohli by sme mu hovoriť aj programátor manažér. Spravidla s univerzitným IT vzdelaním a rokmi praxe. Nevníma softvér na úrovni kódu. Ku kódu sa dostáva najmenej. Je už vyzretý ale nie v kódovaní, ale v organizovaní vývoja softvéru. Spravidla ovláda vlastnosti viacerých programovacích jazykov a v niektorých nevie dostatočne kódovať napriek tomu, že s nimi prichádza intenzívne do styku. MS Project pozná rovnako dobre ako ktorýkoľvek manažér. Pozná celok a vie ho rozčleniť na dostatočne autonómne (a dúfajme aj znovupoužiteľné) objekty. On je ten, ktorý je v minimálne dennom kontakte s juniorom. On je ten, kto stráži proces vývoja a z funkčnej špecifikácie, či špecifikácie požiadaviek kreuje zadanie technické. Modeluje, a skladá puzzle systému tak, aby sa dalo rozdeliť viacerým programátorom a po ich implementácii aj poskladať. Vie sa rozprávať aj s používateľom – ovláda reč človeka aj keď viac počúva ako hovorí. Na potešenie zadávateľov chápe, že kreatívna činnosť musí poznať v komerčnom svete “dead line”. Ak je technický problém, tak on je zástupca odborovej organizácie programátorov, ktorý vie vystúpiť pred skupinkou rozhorčených, nepochopených zadávateľov, alebo používateľov a oni pochopia, že predsa ich niekto počúva a rozumie im. Ak nehovoríme o veľkých developerských tímoch, tak je aj niečo ako architekt, ktorý alebo vymýšľa, alebo spoločne so zadávateľom tvorí ako by softvér mal byť postavený. Rieši aj širší kontext používania systému, výkonostné požiadavky, optimalizáciu až po použitú platformu. K tomu všetkému má minimálne oprávnené komentáre, ktoré by mali byť zadávateľom minimálne vypočuté a zvážené. Sám bez tímu je však stratený. Je málo produktívny, lebo je zahltený tak širokým pohľadom, že ho kódovanie prakticky zdržuje. Je to viac manažér programátorov ako programátor – kóder. Jeho pridaná hodnota je v tom, že vie riadiť aj rozsiahlejšie projekty, lebo si je vedomý komplexnosti a pozná postupy ako komplexnosť zvládnuť. Spravidla je to najdrahší programátora a ak potrebujete drobné aplikácie, alebo nástroje, tak je to jeden z posledných po ktorých by ste mali siahnuť. Vie však postaviť roadmap a všetkých stake holderov po nej previesť.
Záver.
Ani jeden typ programátora nemôžem hodnotiť ako dobrý, alebo zlý. Každý má inú sadu zručností, iné ciele, ambície. Každý je vhodný na iné projekty. Každý má výhody a nevýhody a je na zostavovateľovi tímu pre konkrétne riešenie ako si ich namieša. Netrufám si dokonca ani povedať, že ide o niečo ako vývojové štádiá. Je to skôr ako profil s ktorým súvisia možnosti a šance na naplnenie očakávania.
A že som tento post nepísal úplne samoúčelne, tak vedzte, že ak si myslíte, že patríte do kategórie “programátor junior”, tak alebo ste samouk a ešte si neuvedomujete širší kontext vývoja softvéru, alebo ak sa chcete podieľať na niečom čo dáva zmysel, je v skutku inovatívne a ešte s tým nikto neprišiel, tak práve Vás hľadáme do nášho tímu. Ozvite sa, stretneme sa a povieme si viac…
Dobre napisane. Do buducna ale nie steak-holder ale stake-holder – ako preklep velmi mile 🙂
Vďaka za upozornenie a opravujem. Pri niektorých projektoch je lepšie byť steak holder ako stake holder 😀