Mina kui programmeerija

Et asja ka endale kasulikuks teha ja siinset reklaampinda ära kasutada, on siin minu CV. Et see CV on mõeldud ennekõike selleks, et aidata leida töid, mis mind tegelikult huvitavad ning kasutada ka kompetentsi, mida ma siiamaani tööalaselt ei ole kasutanud (nagu mõned mulle huvitavad keeled, mida ei ole eriti tahetud), siis on see koostatud funktsionaalse CV formaadis. Seda ennekõike seetõttu, et ma armastan juurde õppida, "sahtlisse" huvitavat koodi kirjutada ning minu ideed ja inspiratsioon ulatuvad kaugele välja minu töökogemusest, mis puudutab ennekõike äriinfosüsteeme ning veebilehekülgi.


Mida ma oskan teha

Et mitte keskenduda allhanketöödele, kirjutan lahti, mida ma oskan teha - mis on tulemus, mitte milliseid vahendeid ma oskan selle saavutamiseks kasutada.

Lühike loetelu lahendustest ja komponentidest, mida oleksin võimeline valmis programmeerima:
  • Mängude, visuaalide ja interaktiivsete multimeedialahenduste koostamine, kunstnikuga koostöös loodud visiooni realiseerimine programmeerimise vahenditega. Kõik on võimalik, mida arvuti välja suudab vedada.
  • Internetilahendused - e-poed, äriinfosüsteemid, lahendused laoarvestuse, raamatupidamise ja muude asjade jaoks. Siin tuleb arvestada, et kui vastav lahendus on pakitootena olemas, siis on see alati odavam, kui ise tegemine - pakitoodete arendust maksavad solidaarselt kinni paljude kasutajate kommuunid. Pigem võib mõnele sellisele lahendusele vaja olla uusi komponente, mis vastaks konkreetse ettevõtte erivajadustele.
  • Uued, ise välja mõeldud elemendid, nagu menüü, mis käitub ja reageerib tavalisest menüüst teisiti ning sobib mingis olukorras paremini, kui standardlahendused.
  • Komponendid, mis teevad inimese eest arvutusi, mille üldine loogika - algoritm - on teada. Kui kellegi igapäevane töö on arvutada välja asju algandmete põhjal, mille kuju on alati sarnane, siis sellise nüri tööga tulevad arvutid inimesest paremini toime, tehes arvutusi miljoneid kordi kiiremini ja eksimatult.
  • Funktsioonigraafikud ja keerukamad modellatsioonid, mis visualiseerivad matemaatilisi abstraktsioone, statistilisi jaotusi või muud. Nii kahe- kui kolmemõõtmelised mudelid on võimalikud - piirid seab üldjoontes kujutlusvõime.
  • Statistililiste meetodite implementeerimine, mis võimaldaks miljonitesse kirjetesse ulatuvatest andmekogumitest järeldusi, üldistusi ja visualisatsioone koostada. Teadusliku töö abivahendid.
  • Füüsika, meditsiini ja muude valdkondade simulatsioonid ja visualisatsioonid, kus ülesandepüstituse koostajaks ja pidevaks nõuandjaks on vastava valdkonna spetsialist või teadlane, kes teab täpselt, milliseid arvutusi programm peab tegema.
Ja palju muud, ent seda muud võib näidete põhjal juba ise ette kujutada :)


Iseloom ja mõtteviis

Üldiselt on kaks asja, mida silmas pidada:
  • Ma eelistan loomingulist, rutiinivaba keskkonda.
  • Ma tahan teha kasulikke ja vajalikke asju.

    Projektide laad

    Huvitav on teha väikseid, mõnepäevaseid vidinaid, mis on oma keerukuselt ja nõuetelt huvitavad; samas võib teha igasuguseid väikseid töid, sest ka rutiinne ülesanne ei jõua lühikese ajaga veel tüütuks muutuda :)

    Huvitavad ka suuremad ettevõtmised, kolme- kuni kuue kuu pikkused projektid. Siin tuleb arvestada, et materiaalsed ressursid peaksid olema piisavad ja mind huvitab ennekõike loominguline vabadus - kõige põnevam, kui minu juurde tullakse idee esimese sketši, raha ja reaalse vajadusega ning minu töö algab põhjalikust analüüsist, vajaduste välja selgitamisest ning originaalse lahenduse visiooni loomisest. Kliendil võiks olla garantii, et tulemus on talle vajalik ja toob raha sisse või on tal muul moel tõsine huvi see valmis saada. Ma ei tegele pakkumiste ja visioonide loomisega projektidele, mille reaalse teostamise vajadus on küsitav - või kui, siis on see 100% kliendi omarisk.

    Kolmas kategooria põnevaid projekte on sellised, kus minu roll on analüüs, visioon ja arhitektuur. Võin juhendada väikest gruppi algajamaid programmeerijaid või osaleda veel väiksema grupi andekate programmeerijate/arhitektide visiooniloome protsessis, jälgida tulemuse kvaliteeti ja lahendada tehnilisi probleeme. Võin koostada projekti kavasid, analüüsida võimalusi ning töötada tehnilise projektijuhi rollis selle nimel, et lahendus hakkaks tööle ning vastaks praktilistele vajadustele.


    Võimed ja oskused

    Tarkvaraarenduses olen ma rohkem kunstnik, vähem metoodik ning veel palju vähem rutiinse töö järjekindel tegija.

    Paljud mu sõbrad, kelle analüütilistel võimetel ja fantaasial on kitsamad piirid, aga harjumus leida iga töö jaoks lihtsaim viis tulemus saavutada on arenenum ja tugevam, oskavad endale tuntud valmiskomponentidest standardlahendusi kokku panna märksa kiiremini, kui mina. Asjad, kus on välja kujunenud turustandardid, valmiskomponente pakitootena müüvad turuliidrid ning konfigureeritavad vahendid, mis tuleb ära installida ja mõne tunni või päevaga kliendi vajadustele sobivaks konfigureerida, nihkuvad minu ampluaast sujuvalt välja - siin ei ole ma kuigivõrd konkurentsivõimeline juba selle poolest, et minu innovatsiooniahne iseloom ei võimalda nende tööriistade kasutamist pikalt praktiseerida ja alati on neis mõni konkreetne puudujääk, mis ei võimalda mul üht või teist ideed nende vahendite piires teostada. Tekib tunne, nagu tahaks ehitada maasturist sportautot või viljaveskist tuulegeneraatorit.

    See öeldud - kui on vaja teostada midagi uudset, teistsugust, midagi, mis rõhuks kas siis omapärale või igakülgsele sobivusele hetkeolukorraga, annab minu analüütiline mõtlemine ja fantaasia, samuti pikk kogemus tarkvaraalases omaloomingus, mulle tugeva eelise ja võimaldab teha asju, mida selliste valmiskomponentide komponeerimise kogemuse pinnalt tihtipeale teha ei saagi. Lahendan tundidega analüütilisi ülesandeid, mis paljudel mu sõpradel võtaks nädalaid; "valgelt lehelt" originaalse koodi kirjutamises kuulun ilma kahtluse või valehäbita ühe protsendi parimate programmeerijate hulka. See tähendab tihti ka seda, et suuremale, valmiskomponentidest kokku pandud lahendusele paari vajaliku originaalse komponendi lisamise juures võivad minu oskused ja omadused vägagi kasuks olla - kui on näiteks olemas internetipood, mille saab peaaegu karbitootena, kus on olemas ostukorv, maksmise võimalus ning kaubakataloog, siis juhul, kui sellele poele on vaja interaktiivset nõuandjat või erilahendusena pakutava teenuse hinnakalkulaatorit ja nõuetele vastavat valmiskomponenti kusagilt ei leia, siis midagi sellist teen valmis hea meelega. Siin ulatuvad mu oskused ja võimed veebiprogrammeerimisest ja internetilahendustest Windowsi või Linuxi dektoptarkvarani; võin teha klassikalisi kasutajaliideseid või uudseid lahendusi, mis kätkevad animatsiooni, visuaalselt uudsete vidinate, 3D ja fantaasia loomingulist kompositsiooni.

    Minu teine tugev külg on ergonoomika ja kasutajamugavuse analüüs. Iga detail, mida kasutavad tuhanded või miljonid inimesed, väärib põhjalikku analüüsi ja tõsist tööd, et arendada see viimase piirini mugavaks. Läbi peab olema mõeldud iga aspekt, kasutajaharjumus ja võimalus, mis võimaldaks algajal kasutajal sellest kiiresti aru saada ning professionaalil selle abil tehtavad asjad mõne kliki ja sekundiga ära teha, oma produktiivsust maksimaliseerida. Isegi väiksed elemendid ekraanil, nagu kerimisriba, võivad olla põhjalikult läbi töötatud intelligentseks ja võimsaks; mõeldud peab olema ennekõike kõikidele tavalistele juhtudele, aga võimaluste piires ka marginaalsematele kasutajatele ja situatsioonidele. Hästi välja arendatud komponendi kvaliteet muudab selle lihtsast, kiiruga tehtud vidinast kordades võimsamaks - ja isegi vähesel määral lihtsamaks muudetud asja hakkab kasutama näiteks 10% kasutajate asemel 30%.

    Lisaks huvitab mind reaaleluliste kasutussituatsioonide analüüs ning tarkvara visioonide läbi töötamine, mis muudaks asjade kasuteguri võimalikult suureks ja sobitaks need reaalsesse maailma omale kohale. Selle saavutamiseks olen uurinud põhjalikult disainiprintsiipe ja lahenduste võimalikke loogikaid ning suudan luua terviklikke, sisemiselt harmoonilisi tarkvaralahendusi, mis täidavad oma eesmärgi.


    Lühike ajalugu

    Oma kümnendal eluaastal hakkasin tegelema programmeerimisega - esimese hooga oli minu kasutuses Atari arvuti ja üks vana Basic arvutiringis, millele lisandus kiiresti 386 kodus. Tegin väikseid arvutimänge, keeleanalüsaatoreid (Eesti keele käänajaid-pöörajaid) ning visuaale - peamiselt 2D animatsioone, kus sadas lund, purskasid purskkaevud ja sähvisid ilutulestikud. Uurisin ja katsetasin ka laiemalt - 3D algoritme, erinevaid arvutusi teostavaid vidinaid ja kõike, mis pähe tuli ja mida mõne nädalaga valmis sai teha; vahel tegelesin mõne asjaga ka kauem. Muidugi uurisin ka animatsioonide valmistamiseks ja fototöötluseks ja muuks selliseks mõeldud tarkvara, kasutades tulemusi pisut ka oma programmides. Suviti istusin päevade kaupa rahvusraamatukogus, lugesin ülikoolide õppematerjale ja muud sobivat kirjandust; kodus analüüsisin kõikmõeldavat tarkvara, mille ideed mulle pähe tulid - püüdsin skemaatiliselt aru saada asjade toimemehhanismidest alates tehisintellektidest - kus mõistetavatel põhjustel asi täiusest kaugele jääb - ja lõpetades nädalapikkuste analüüsidega, kuidas teha paremat kerimisriba või võimalusterohkemat nuppu. Kuna tollal tuli kõik alates graafilise kasutajaliidese alustest kuni dünaamiliste jadadeni ise teha, tekkis hea ettekujutus programmeerimise aluskomponentidest, millega tänapäeval vähesed kokku puutuvad. Kõik see tiirles Basicu, Pascali ja assembleri erinevate implementatsioonide ümber - raamatutest õppisin ära ka C, aga mul ei olnud pikka aega selle diskette.
    Seitsmeteistkümne aastaselt läksin oma esimesse töökohta, kus arendasin pool aastat veebipõhiseid infosüsteeme. Töötanud olen alati programmeerijana ning alati kujundajaga ja vahel teiste programmeerijatega koostöös. Sealt liikusin edasi järgmisse firmasse, kus töötasin Liiklusmängu peaprogrammeerijana - sisulisteks tööülesanneteks kujunes meeskonna juhtimine, et mängu komponendid, nagu pildid ja stoori, kasutuskõlbulikule kujule viia; see võttis pool aastat. Valmis programmeeris selle Bluemoon, kellel oli Settlersi mootori näol juba olemas mängumootor, millist arendasin - Ziilis töötasin väga pikki tööpäevi, olles päeval tehniline projektijuht ning õhtul-öösel programmeerija; olin pähe võtnud, et see projekt peab eduka tulemuseni jõudma, valmis saama - see idee tundus Ziili programmeerijatele naeruväärne, ent teostus siiski. Peale seda olin Freelancer, jageledes oskamatusega müüa, ent tehes siiski mitmesuguseid huvitavaid asju, nagu digitaalne Jukebox, mis mängis kõrtsudes raha eest muusikat ning reisikorraldusbüroo tarkvara, mis haldas kõike reisipakettide koostamisest nende müümise ja raamatupidamiseni. Programmeerisin mitmesuguseid veebilehekülgi. Sealt edasi olen töötanud pea poolteist aastat programmeerijana suure riikliku infosüsteemi arenduses, pool aastat kaardiserveri valmistamises ning ka muudes projektides, millest mõni on läinud paremini ja mõni halvemini. Omandatud on kõvasti kogemust, ent olen ka hobi korras teinud mitmesuguseid programme - tehnoloogiliselt alati huvitavamaid ja keerukamaid, kui üheski töökohas -, uurinud ja õppinud aktiivselt ja saavutanud tehniliselt innovatiivseid tulemusi, milles kasutatud ideed sobiks ka Eesti kommertstarkvara rikastama.

    Kõige selle kõrvalt on mul olnud mitmesuguseid suuremaid unistusi, mille teostamine võtaks aastaid ja miljoneid, ent mille analüüs ja ideede arendus on olnud muude tööde kõrvalt võimalik. Sellise tegevuse praktiline, arendav väärtus on see, et nende analüütiliste arenduste käigus areneb mõtlemise mastaap, keerukad lahendused muutuvad järjest lihtsamaks ning pidevalt on põhjust õppida juurde algoritme ja arendada enda oskusi selliselt, et nendes utoopilistes projektides osalemiseks või nende juhtimiseks vajalikud oskused oleks olemas. Sellistest mõttemängudest arenevad välja tugevad läbimõeldud lahendused ning töömeetodid, milliseid kommertsprogrammeerijana Eestis oleks täiesti võimatu tööalaselt saada. Minu kommertsprojektid, kus on rohkem mänguruumi ja võimalust loovuseks - mis ei ole puhttehniliste küsimuste lahendused - on alati olnud nende ideede kehastuseks; ideed, mida olen mõttemängude käigus aastatega põhjalikult välja töötanud, igast aspektist läbi analüüsinud ning viinud sellele kujule, et neid saaks ka mõistliku pingutusega teostada, on minu uute projektide töövõtete ja tehniliste meetodite aluseks. Samuti tekib nii palju ideid, mida üldse saaks ja tasuks teha ning mis on programmeerimise võimaluste piirid, mida mõistliku ressursikulu jooksul teostada saab; tekivad laiemad ja sügavamad huvid. Otsin pidevalt paremaid töömeetodeid, täiuslikumaid projektijuhtimise ja ajaplaneerimise strateegiaid, mis võimaldaks selliseid asju järjest suuremal määral ka ellu viia.


    Programmeerimistööriistad, vahendid ja keeled

    Operatsioonisüsteemidest valdan järgmisi:
    • Windows - vanemate Windowsite WinAPI liidese ning uute Windowsite .NET liidese põhjale võin luua erilahendustena Windowsi programme.
    • Linux - võin luua KDE või Gnome keskkonna erilahendusi ja konsoolirakendusi.
    • OS X - vähesest kogemusest hoolimata tulen lihtsamate asjadega toime, oman mõningast kogemust nii xCode kui OS X'i kasutajaliideste koostamise vahenditega; olemas on ka mõningane iPhone platformi programmeerimise kogemus.
    • Internet - suudan luua internetirakendusi, mis toimivad erinevate browseritega.
    • Java - oman kogemust Java kasutajaliideste programmeerimisega, mis töötavad erinevate operatsioonisüsteemide peal Java virtuaalmasinas.
    Programmeerimiskeeltest ja nende peamistest komponentidest valdan järgmisi:
    • PHP, Smarty, ImageMagick ja MySQLi liidesed - pikaajaline kogemus.
    • Java rakendused ja appletid - mitmeaastane kogemus.
    • C++, OpenGL - mitmeaastane kogemus.
    • C, Python, Pascal, C# jm. - hobi korras programmeerinud, Pythonit ja Pascalit valdan hästi.
    • Basic - deprecated ;) kunagi oskasin, aga enam ei mäleta.
    Lisaks on ka mõningast kogemust assembleriga - väikeste assembleri klippide programmeerimisega ei ole probleemi (suuremaid ilmselt keegi ei vaja, aga võiks täitsa huvitav olla).

    2D, 3D, multitasking, raster- ja vektorgraafika programmeerimine, pilt ja heli, otseühendus hiire, klaviatuuri või muu riistvaraga - kõike on tehtud :)

    Kommentaare ei ole:

    Postita kommentaar