Esu įsitikinęs, kad programavimas yra kaip gydytojui medicinos pašaukimas. Galbūt perdedu ir sutirštinu spalvas, tačiau geriausi programuotojai iš mano matytų yra tie, kurie nuo pat mažumės domėjosi kompiuterija, buvo jos paveikti, ja žavėjosi, visa tai skatino jų smalsumą ir tokiu būdu jie atrado save programavime.
Ankstesniais laikais viskas prasidėdavo nuo mėginimo užsiimti programišių (angl. hacking) veikla ar domėjimosi pogrindžiu: įvairūs forumai, mIRC kanalai ir kt. Šiais laikais turbūt kai kompiuterija nebėra paslaptingas hobis, kuriuo užsiimama tik rūsiuose, viskas tapo kiek paprasčiau ir prasideda nuo žaidimų. Ir vis dėlto jeigu patinka tik žaidimai, klausimas, ir didelis, ar tikrai to pakaks siekiant tapti programuotoju.
AR PROGRAMAVIMAS YRA TIK ALGORITMAI?
Dažnam žmogui, programavimą vertinančiam paviršutiniškai, gali pasirodyti, kad programavimas yra tik procedūros, žingsniukai, kuriuos įgyvendina kompiuteris, o dabar jau ir dirbtinis intelektas. Ir vis dėlto tam, kad tai įvyktų, reikia matyti šią sritį daug plačiau.
Tikras programuotojas privalo suprasti tiek techninę dalį (ech, atsimenu, kaip universitete galvojau, kam man reikia ten žinoti, kaip tie bitai veikia procesoriuje), bet ir sugebėti tą kodą ir procedūras paversti veikiančiu gaminiu, t. y. programinės įrangos išeities kodu (angl. source code).
O kai pradedame rašyti kodą, atsiranda ir tas mano minėtasis platesnis matymas. Iš esmės turbūt galima lyginti kodo rašymą tiek su mąstymu ir matematinių formulių bei fizikos uždavinių sprendimu, tiek su knygos rašymu, kai mintis turi užrašyti trumpai, aiškiai ir gerai. Kiti dargi programavimą lygina su buvimu amatininku: lyg skulptorius, dailininkas, kuris kuria ir bando savo mintimis ir algoritmais sukurti kažką gražaus.
AR PROGRAMAVIMAS YRA AMATAS?
Programavimas kaip amatas taip pat turi labai aiškią ir gerą analogiją, bet kuogi panašus programavimas į amatą? Ogi tuo, kad tam, jog tavo sistema būtų ilgaamžė, t. y. lengvai išplečiama ir vystoma pigiai, o ne brangiai, tu turi apgalvoti itin daug smulkmenų: tai lyg siūlės audžiant kilimus, lyg linkis ant skulptūros ir lyg švelnus teptuko potėpis ant tapomo paveikslo.
Atrodo, kad rašau nesąmones? Visiškai ne – patikėkite, kiek daug sutiksite vyr. programuotojų (angl. senior), kurie už kiekvieną ne taip pavadintą kintamąjį, metodo pavadinimą ar netinkamą tarpelį kode, o gal net skliaustą ne iš tos eilutės duos pylos, nepraleis jūsų kodo į bendrą išeities kodą.
Kiekvienas save gerbiantis vyr. programuotojas, ilgai dirbantis su viena ir ta pačia sistema, turi tokį neišpasakytą ir neišmušamą pareigą saugoti savo sistemos kodo grožį. Netgi knygos (ir daug jų) rašomos apie tai, kaip geriau, efektyviau ir tinkamai rašyti kodą, kaip jį organizuoti, skaidyti. Iš viso to atsiranda kodo standartai.
AR PROGRAMAVIMAS YRA KŪRYBA?
Ir taip, neužtenka išmokti tinkamai ir „tiesiomis rankomis“ darbuotis, tačiau kiekvieną uždavinį ir algoritmą galima išspręsti bent keletu skirtingų būdų, o tai reiškia, kad programavimas neapsieina be kūrybinių žinių.
Čia ne tik turi sugalvoti sistemos architektūrą: duomenų bazių struktūras, klases, esybes, bet ir visa tai apjungti taip, kad visų pirma būtų greita (nereikėtų laukti ilgų užklausų), atlieptų kliento lūkesčius ir poreikį.
Kai esi programuotojas, dažnai dalyvausi vidiniuose susitikimuose su komanda, kai susėdę trise ar keturiese mąstysite, kaip geriau parašyti tą kodą, kurį „design pattern“ pritaikyti bei kuris iš sprendinių geriausiai išspręs uždavinį šiandien ir ateityje.
Jeigu apskritai taip suprimityvinsime mąstymą apie kūrybą ir programavimą, tai turbūt galime net susieti naujausias interneto specialybes, kaip konversijų optimizavimo (angl. CRO) ar tą patį dizaino vartotojų patirties gerinimą (angl. UX/UI), kai išties techninis interneto dizaineris yra apskritai daugiau programuotojas ir techninis žmogus nei dizaineris. Turi suvokti vartotojų įpročius, sistemos veikimą, prisitaikymą prie mobiliųjų įrenginių ir kaip visa ta atrodys dar bent dešimtyje skirtingų įrenginių.
APIE KĄ TURIU PAGALVOTI PRIEŠ NORĖDAMAS TAPTI PROGRAMUOTOJU?
Geras programuotojas yra tas, kuris nuolat tobulina savo žinias ir įgūdžius kaip amatą. Jis turi būti lyg gydytojas, nuolat atsidavęs savo sričiai, neatsiraukiantis, skiriantis daugiau laiko negu darbo valandos ir nuolat išliekantis smalsiu. Turi būti specialistas, kuris kas kartą nori pataisyti tą pačią vietą arba bent jau rasti, kaip pataisyti, ir likti nepatenkintas tuo, ką padarė prieš tai.
Geras programuotojas yra tas, kuris nuolat mokosi ir tobulėja, nes žinios IT srityje pasikeičia greičiau nei kas dvejus metus. Turi būti žingsniu priekyje, dalyvauti įvairiuose susitikimuose (angl. meet‘up‘uose), turi degti noru mokytis, augti ir rašyti kodą geriau nei rašei vakar. Tik būdamas toks tapsi savo srities asu ir tikru programuotoju, tuo, dėl kurio skųsis naujokai (angl. junior), kad juos verčia perrašyti kodą ketvirtą kartą, kol „praleidžia“.
Geras programuotojas yra „tiksliukas“, kuriam mokykloje sekėsi, pažymiai buvo ne mažesni nei 8, o fizika buvo įdomus mokslas bei patiko spręsti uždavinius ir taikyti formules. Programuojant reikės dirbti su daug nuobodžios dokumentacijos, ieškoti, kaip veikia metodai, aiškintis ir dirbti savarankiškai. Net jeigu šalia ir bus mentorius, vis tiek sprendimą turėsi rasti pats tu, o ne kažkas kitas. Turi gebėti dirbti savarankiškai, o tuo pačiu spręsti ir kurti loginius ryšius.
Geras programuotojas ieško sprendimų „out of the box“: turi matyti ne tik dėsningumus ir būti organizuotas, bet ir sudėtingiems uždaviniams rasti netikėtus sprendimus arba pritaikyti technologijas. Kompleksinių užduočių sprendimas dar neseniai buvo įvardijamas kaip ateities kompetencija, be kurios nebus įmanoma dirbti, o šiandien ji tapo norma. Ypač programavime.
Geras programuotojas turi būti ir komunikabilus. Esu matęs daug talentingų genijų programuotojų, bet būdami užsidarę savyje jie nepasiekė karjeros aukštumų, nes jų talentas liko nepastebėtas. Universitetas ir dalyvavimas įmonių bendruose užsiėmimuose gali padėti išspręsti šį klausimą, net jeigu žmogus yra kuklesnis.
Tad kviečiu kiekvieną, susižavėjusį naujienų portalų pažadais, pasitikrinti ir pačiam sau atsakyti į klausimą, ar nebijosiu visą gyvenimą mokytis, ar turiu natūralių gabumų sprendžiant matematines, logines ir kompleksines užduotis bei ar man patinka siekti to, kas geriausia bei tobulinti pasaulį kuriant naujus produktus.