Kodiranje i obrazovanje

Prije par tjedana sam na Web.Start konferenciji Davida Jakelića prozvao “hrvatskim Joelom Spolskym“, i još uvijek stojim iza te tvrdnje — on predstavlja izuzetno rijetku kombinaciju programera, poduzetnika, managera i analitičara/blogera, a u svemu tome je više nego uspješan.

David je danas na svom blogu objavio post pod naslovom Jednostavni zadaci poput pisanja koda, koji me je potakao da mu se po prvi puta moram donekle suprotstaviti, odnosno malo pojasniti kako stoje stvari.

No prije svega, moram se apsolutno složiti s Davidom da (domaći, ali ni drugdje nije puno bolje) mediji i javnost imaju uglavnom vrlo iskrivljenu sliku o programerskom poslu — programere (i ostale “informatičare” kako se to kod nas trpa sve zajedno) se obično gleda kao neke čudake koji se samo igraju za kompjuterom, dok često i IT manageri progamerske zadatke doživljavaju kao jednostavno “pisanje koda”. Ustvari — pisanje koda i jest jednostavno, ali ono predstavlja najmanji i najbeznačajniji dio programerskog posla; svoditi programiranje na pisanje koda jest jednako svođenju slikarstva na povlačenje kistom po platnu. Za svaku liniju koda programer mora prethodno imati jasnu sliku što će se dogoditi u raznim slučajevima i vrijednostima varijabli, kakav efekt će koja petlja imati na druge dijelove programa i cijelog sustava, i tako dalje.

Nažalost, taj stav je here to stay i vrlo ćemo teško naučiti javnost koje su stvarne okolnosti programerskog posla. To nije endemično za našu struku — jednako iskrivljenu sliku većina ima recimo i o poslu npr. pilota ili arheologa, no u tim slučajevima ta iskrivljenost dodaje određenu romantičnost, dok u našem slučaju ide na štetu programerskog ugleda.

No s druge strane, ono što je nužno imati na umu jest da je u programerskom poslu možda od svih struka najmanja korelacija između službenog stupnja obrazovanja i stvarne kvalitete. Reći da je za pisanje koda dovoljna matura jednako je krivo kao i reći da za taj posao treba diploma bilo kojeg fakulteta, tako da je izvorni citat u Davidovom postu tu u krivu na više načina, no rekao bih da je David skočio malo na krivu loptu.

Činjenica je da u većini struka netom diplomirani “stručnjak” ima još puno za učiti prije nego što postane relativno produktivan na novom radnom mjestu; no isto tako u većini struka fakultet ili druga škola daju vrlo jasne temelje na koje je potrebno nadograditi tek specifičnosti određenog radnog mjesta. Kemičar ili fizičar će poznavati većinu dosadašnjih dostignuća, inžinjer strojarstva ili naftaš će poznavati glavne procese i tehnologije, i tek ako je neka škola jako zaostala u praćenju suvremenog razvoja — pod “jako” mislim na desetljeća — novopečeni će stručnjak imati ozbiljnijih problema u prilagodbi.

No kad je riječ o softveru, tehnologije i platforme se mijenjaju tolikom brzinom da pet do sedam godina koliko kod nas studenti u prosjeku pohađaju fakultet(e) može predstavljati totalni preokret u načinu kako se aplikacije razvijaju i koriste. Bacite samo pogled na 2001. godinu i sjetite se svega što danas redovno koristimo a tada ili nije postojalo ili je bilo u ranim začecima. XML? Ajax? .NET? Rich Internet applications? Software as a service? Ruby? Python? Web servisi? Čak se i Java, koja ima reputaciju najuniverzalnije i najpostojanije platforme, posljednjih godina značajno promijenila (postavši open source, između ostalog).

Time ne želim reći — kako spominje članak u Business.hr-u — da je za “pisanje koda dovoljna matura”, jer nije. Ili bolje rečeno, nijedna formalna razina obrazovanja ne osigurava da je netko kvalitetan programer, bio on maturant, diplomant ili doktor znanosti. Neki od najboljih programera koje osobno poznajem nisu nikad stekli diplomu — dok drugi pak jesu — već su ili potpuno zaobišli fakultet, ili su (u najvećem broju slučajeva) došli do neke godine studija i onda uzeli “neodređenu pauzu”. S druge strane, neki programeri koji se ponose diplomom ovog ili onog fakulteta pisali su takve stvari da ih ne bi objavio ni Alex Papadimoulis jer bi mislio da su izmišljene.

Tako da odgovor na pitanje sadržano u prvom retku citata u Davidovom postu — što je uzrok nestašice ljudi, pretpostavljam u softverskoj industriji — leži u činjenici da je nalaženje kvalitetnih programera izuzetno težak posao, kojeg u pravilu svi jako podcjenjuju, uključujući i same iskusne programere. Naime, ne postoji shortcut koji će nam pokazati na temeljnu vještinu i razinu znanja — niti diploma, niti certifikati (što nam vrijedi što netko ima MCSD ako ga je stekao prije nekoliko godina dok .NET praktički nije ni postojao?), niti razni tečajevi koji se upisuju u radnu knjižicu ili tetoviraju na čelu ne mogu pokazati niti stvarnu razinu znanja niti temeljni talent za programiranje koji se onda može nadograditi konkretnim iskustvom.

18 thoughts on “Kodiranje i obrazovanje”

  1. Kvaliteta programera se ne bi trebala dovoditi u vezu s tehnologijama pa čak ni trendovima koje programer (ne)poznaje već s brzinom i lakoćom kojom ih može naučiti i načinom na koji će ih zatim iskoristiti. Diploma nije nikakva garancija, ali znatno povećava vjerojatnost da će osoba brže savladavati nove tehnologije i programerske tehnike.

    Nekako mi se čini da se Davidov komentar više odnosio na okruženje startupa i manjih softverskih firmi s nekoliko programera. U takvom okruženju za uspjeh, pogotovo globalni, neophodno je da su programeri vrhunski. Ipak za veće firme u kojima postoji tim managera, arhitekata i kvalitetnih iskusnih programera isplati se imati slabije obrazovane/kvalitetne programere koji će “štrikati” kod prema unaprijed definiranim taskovima s pripremljenim dijagramima klasa i slijednim dijagramima.

  2. Diploma […] znatno povećava vjerojatnost da će osoba brže savladavati nove tehnologije i programerske tehnike.

    Oprosti, ali ovo možda zvuči logično u teoriji, ali u praksi jednostavno ne stoji. Sumnjam da postoje relevantna istraživanja (bilo bi zanimljivo da ih netko provede), ali konkretno iskustvo govori da ne postoji nikakva veza između programerskog talenta i znanja te stupnja obrazovanja.

    isplati se imati slabije obrazovane/kvalitetne programere koji će “štrikati” kod prema unaprijed definiranim taskovima s pripremljenim dijagramima klasa i slijednim dijagramima

    Još ću jednom ponoviti: “štrikanje koda” ne postoji. Kod svakog, pa i najjednostavnijeg koda potrebno je donijeti neke odluke koje može omogućiti jedino iskustvo, i tu nema automatike. Dijagrami klasa i toka funkcija često zaboravljaju ključne detalje koje onda programer mora riješiti na licu mjesta; da nije tako onda bi automatizirana generacija koda iz raznih dijagrama (npr. executable UML) bila puno uspješnija nego što jest.

    I za kraj: zbog specifičnosti struke, (kvalitetan) programer se ne može postati obrazovanjem, već isključivo iskustvom. Obrazovanje može pružiti podlogu i head-start, ali isključivo ako prenosi principe programiranja, a ne konkretna rješenja na konkretnim platformama (osim kao primjere).

  3. Direktna veza između stupnja obrazovanja i programerskog talenta ne postoji. Ali relativan broj kvalitetnih programera u grupi visoko obrazovanih programera je veći nego u grupi programera bez formalnog obrazovanja. Gledano očima poslodavca, što je bolje – tražiti ona 3 kvalitetna programera u grupi od 100 programera bez formalnog obrazovanja ili tražiti ona 3 kvalitetna programera u grupi od 10 programera s diplomom? Dakako, ima i poslodavaca koji će uzeti svih 110 pa neka najbolji isplivaju 😉

    Slažem se i da štrikanje koda kao takvo ne postoji. Ipak u velikim sustava je neefikasno i preskupo imati kvalitetne ljude za najniže programerske zadatke da bi oni samo povremeno donosili relativno ključne odluke, a ostatak vremena ispunjavali zadatke u vrlo ograničavajućim okvirima danih dijagrama. Kvalitetan programer ne može biti dovoljno motiviran za takav posao niti ga firma može platiti. Za to ima manji broj kvalitetnih, dobro plaćenih ljudi koji usmjeravaju ostale i popravljaju njihove greške. No to sad moožda više nema veze s temom posta.

    Mislim da se u glavnom slažemo samo da gledamo stvari iz malo različitih kuteva.

  4. relativan broj kvalitetnih programera u grupi visoko obrazovanih programera je veći nego u grupi programera bez formalnog obrazovanja

    Na temelju čega postavljaš takvu tvrdnju — je li to samo tvoj dojam ili imaš konkretno istraživanje? Prema mojem iskustvu, najveći broj vrhunskih programera može se naći među onima koji su odradili nešto fakulteta — čak su mnogi postali i apsolventi — ali nisu nikad diplomirali (i u večini slučajeva neće). Naravno, ne znam za nikakvo istraživanje koje to podržava, to je moj subjektivni dojam.

    (Offtopic: Inače me prilično smeta kad se pojmovi “visoko obrazovan čovjek” i “čovjek s fakultetskom diplomom” izjednačuju. Sama diploma ne znači apsolutno ništa, a obrazovanje se može steći i neformalnim putem. Ja ću osobno svakog zaposlenika prije vrednovati po njegovom osobnom znaju nego po papiru.)

    A dalje: što su to “najniži programerski zadaci”? Možeš mi dati neke primjere? Opet po mom iskustvu, aktivnost programera ne može se razdvajati po nekoj “visini”, jer svaki će programer tijekom cijele svoje karijere stalno pisati i jednostavne for petlje kao i kompleksne algoritme s desecima objekata.

    Osim toga, nijedan programer nije i ne smije biti zacementiran u vremenu. Razvoj softvera je toliko dinamično okruženje da se programeri uče i napreduju praktički svakom linijom koda koju napišu. Zato se i ne mogu programerska radna mjesta dijeliti po sistemu “evo ti ćeš pisati jednostavan kod, a Pero tamo je već veliki pa može pisati i kompleksnije stvari”. Razlika među programerskim radnim mjestima ne može biti po tipu koda, već po težini odgovornosti koju preuzima — početniku se neće dati da piše sustav za autorizaciju na Internet bankarstvu, ali može raditi na npr. elementima sučelja.

  5. Nema spora – obrazovanje je podloga koja (pogotovo u IT-u) ne znači ništa bez stvarnog iskustva s konkretnim tehnologijama. Ali iz iskustva znam da je daleko lakše kada se zaposli developer-pripravnik sa znanjem tehnika programiranja, algoritama, objektnog dizajna, osnova softverskog inženjerstva itd. Onda i sve nove tehnologije “du jour” lakše sjedaju.

    Ono što je za mene bio glavni problem u članku Business.hr-a je da ljudi smatraju (a malo tko to vidi spornim!) da je programerski posao najjednostavniji posao u IT-u i da zato traži najniže kvalifikacije.

    To može izgledati tako nekome tko cijeli IT gleda samo iz perspektive projektiranja informacijskih sustava (što je struka za sebe), pa “pisanje koda” vidi kao jedan segment – nekad više, a nekad manje složen i zahtjevan. Odatle stereotipi o složenosti ili jednostavnosti nekog posla. Firme koje se bave razvojem tehnologije imaju sasvim drugačiju raspodjelu uloga i internu “kulturu”.

    Po mom mišljenju, stav Business.hr-a nije samo tipični stereotip ili nepoznavanje IT-a. Taj stav najviše govori o profilu domaćeg IT sektora, koji je dominantno “implementatorski”. Takav stav sigurno ne postoji u Izraelu, Irskoj ili Finskoj koje često s razlogom navodimo kao uzore. A najmanje pogoduje izvoznim ambicijama kojih su nam puna usta.

  6. Davide, potpuno se slažem s prvim paragrafom — jedino tvrdim da se navedena znanja mogu steći i bez fakulteta, a posebice bez diplome.

    A što se tiče ove podcijenjenosti programerskog posla, tu si također u pravu, i taj stav je zaista žalostan. Ja bih tome pridodao našu potrebu da sve trpamo u ladice i tražimo kvalifikacije, iako se uobičajeni sustavi u ovom slučaju vrlo teško mogu primijeniti.

    Posebno se slažem sa zadnjim paragrafom, iako mislim da nije problem u pojedinim zemljama već u vrsti IT-a. Kako si i rekao, kod nas dominiraju implementatori i integratori, pa je njihov stav dominantan i na razini cijele zemlje, dok u navedenim zemljama oni čine nešto manji, no ipak značajan postotak, pa je i taj stav uravnoteženiji. U praksi, oni koji razvijaju vlastiti softverski proizvod za tržište neće imati takav stav; oni koji implementiraju tuđa rješenja hoće, bez obzira na zemlju (znam gomilu takvih primjera iz SAD-a).

    Zato sam se ja i bacio u ove startupovske vode, jer je to svijet u kojem programeri mogu pokazati svoju stvarnu vrijednost. A što se tiče implementatora, jednu stvar treba uvijek imati na umu: projektanti informacijskih sustava ne mogu bez programera, ali programeri bez njih mogu. 🙂

  7. post je okej samo mu je po meni motivacija promasena (citaj: krivo interpretirana recenica iz davidovog posta)

  8. @berislav, neke stvari ćeš bolje razumijeti kada se nađeš u poziciji onoga tko zapošljava i fakat radi neki konkretan posao 😉

  9. Nemam nikakvo istrazivanje, to je moj dojam i dojam velikog broja poslodavaca s kojima sam imao kontakte. Slazem se da velik broj kvalitetnih programera krene na fakultet pa ne zavrsi, ali ipak mislim da ih vecina kvalitetnih zavrsi. Takodjer mislim da je tih koji su krenuli, a nisu zavrsili mali broj kvalitetnih u odnosu na cijeli skup programera sa srednjom strucnom spremom.
    Time ne zelim nikoga uvrijediti niti reci da netko tko nije zavrsio fakultet ne moze biti kvalitetniji programer ili obrazovanija osoba od nekog tko je zavrsio, vec da je broj takvih ukupno gledano malen.

    Potpuno se slazem za offtopic.

    Primjer jednostavnog i monotonog zadatka je pisanje Object/XML mappinga za 100njak XMl-ova s definiranim objektnim modelom ili pisanje DAO sloja za definiran objektni model od 20ak objekata s pripremljenim SQL izrazima. Ima programera koji su sasvim zadovoljni s takvim zadacima jer su repetitivni i znaju da ce ih znati rijesiti bez puno razmisljanja i problema. S druge strane, kvalitetan programer ce dati petama vjetra na takav zadatak. Iz mog iskustva programerski zadaci se definitivno mogu dijeliti na kompleksne i jednostavne i ako zelis imati motiviran i sretan razvojni tim sasvim pazljivo ces te zadatke podijeliti pravim osobama u timu.

    Za kraj molim dobru dusu da mi objasni kako se kvotaju komentari 🙂 ?

  10. Iz vlastitog iskustva, u hrvatskim (visokoškolskim) obrazovnim institucijama koje imaju veze s IT-em se uči i radi sve i svašta, ali ništa od toga nema veze s kvalitetom programera koji iz njih izlaze.

    To ne znači da su faxevi besmisleni; dapače, ja osobno na FERu sam saznao dosta zanimljivih i korisnih stvari (najbitnije je svakako snalažljivost pri rješavanju problema, koja se primjerice vježba kad se moraš snaći da prođeš neki predmet a da ne moraš baš svaki dan učiti;
    onda neke zanimljive teoretske podloge iz stvari kao što su data mining, teorije grafova, kriptografija, itd…).

    Ali, nisam nigdje uočio korelaciju između kvalitete programera (ili IT radnika općenito)
    i diplome. Myself included. Sve što se nauči na faxu (bar kad je u pitanju FER, na medicini je vjerojatno drugačiji slučaj 🙂 možeš naučiti i kod kuće ako imaš dovoljno volje, vremena i strpljenja.

    Ono u čemu je (visoko)školski sustav dobar je da kad jednom kreneš moraš/želiš i završiti, i to ti daje motivaciju da uložiš trud potreban za informiranje, savladavanje, i učenje neke materije. Također je i dobra stvar to što si okružen (nadajmo se) drugim kvalitetnim kadrom, i samim druženjem i interakcijom s njima osmozom postaješ kvalitetniji.

    Odlična izreka jednog mog kolege (ne znam je li citirao nekog trećeg): “Diploma je dokaz poslodavcu da si godinama spreman raditi teške i dosadne poslove” 😀 Više od toga, više ovisi o intrinsičnim kvalitetama samog čovjeka, i bolje se vidi kroz konkretne stvari koje je radio u životu, nego po nekim papirima.

  11. @srstanic: Očito se razlikujemo u mišljenjima, no nijedan od nas nema ozbiljniju znanstvenu potporu za svoj stav. 🙂

    programerski zadaci se definitivno mogu dijeliti na kompleksne i jednostavne

    Ovdje se potpuno slažem s tobom; to sam uostalom i ja rekao. No moja je poanta da nema inherentno “kompleksnih” i “jednostavnih” programerskih radnih mjesta; postoje samo važniji i manje važni zadaci, a kojim ćeš ih programerima dodijeliti ovisi samo o njihovom iskustvu, što je po definiciji varijabilna osobina. Dakle, nema toga da netko “štrika kod” deset godina; za razliku od nekih drugih struka iole sposoban programer napreduje samim tim što radi svoj posao.

    Za kraj molim dobru dusu da mi objasni kako se kvotaju komentari 🙂 ?

    Si kad čuo za HTML? 😉

    Priznajem, neki blogovi imaju jasno istaknute tagove koje forma za komentare prihvaća, ali meni se to nije dalo stavljati. U svakom slučaju, ovo kvotanje sam napravio s blockquoteom.

  12. Dakle, nema toga da netko “štrika kod” deset godina; za razliku od nekih drugih struka iole sposoban programer napreduje samim tim što radi svoj posao.

    slazem se, ali to je i dvosjekli mac u toj bransi. upravo time sto on radi svoj posao i napreduje u njemu on ne moze dozivotno biti programer. jednostavno je naviknut da napreduje konstantno, i dobar dio ljudi kad dodje u fazu da mu vise krivulja napretka je usla u zasicenje brijem da mora dozivjeti level up na nekog software architecta ili pocnu dozivljavati neke psihicke posljedice 🙂

  13. Vodio sam i ja slicnu raspravu na svojem blogu gdje smo raspravljali koji fakultet, školu ili tecaj upaisati ukoliko se zelis baviti web dizajnom. Moja tvrdnja iza koje još uvijek stojim je da u vecini poslova vezanih uz web nema te škole, fakulteta ili tecaja koji ce ti dati svo potrebno znanje za kvalitetan posao a sve sto ces nauciti tamo pa i puno vise od toga mozes nauciti uz konekciju na internet u udobnosti vlastitog doma.

  14. (Za početak Berislav -nešto ne štima kod postanja prvog komentara, traži da se upiše slika a slika se ne prikazuje već samo njen alt text)

    Općenito diploma u programerskim vodama malo znači. Nagledao sam se baza i aplikacija koje su radili diplomirani računarci, pa i FER-ovci, a koje su bile dizajnirane kao da ih je malo dijete radilo. Svaka čast mnogima, vjerujem da kvalitetan studij može dati vrlo dobru podlogu za dalje, ali bez motivacije i volje, sve ostaje samo na tome.

    Da ne spominjem diplome fakulteta kao što su TVZ ili VVG, zar se to uopće može zvati studijem? Ipričavam se ako to nekoga vrijeđa ali znanje i podloga koje nude ova dva veleučilišta su naprosto smiješna. Malo duži tečaj u algebri nakon opće gimnazije i eto ti podjednakog znanja.

    Nedostatak koji ćemo imati mi bez diplome jest i biti će taj da u većim i srednjim firmama možemo zaboraviti na bilo kakvo ozbiljnije napredovanje.

    Jedini put ambicioznijima bez diplome, koji ja vidim, je u vlastitim poduzetničkim vodama.

  15. Samo da ostavim trag…. najveca uvreda koju sam ikada dozivio (osim svaki puta kada udjem u neki “fancy” ducan u Zg) je izgledala ovako:
    (akteri: moja nezaposlena zena dipl.ing.prehrambene tehnologije, moja punica i ja dipl.inf.).
    Moja Zena: Opet me nisu primili na onom XXX natjecaju.
    Moja Punica: Pa Miro, zasto ju ti ne zaposlis kao programera (nije bas bilo receno tim rijecima, ali smisao je bio isti).
    Toliko o tome koliko moja punica cijeni moj rad kao programera.Ne moram reci da je drugi zet gradjevinar.

  16. Ja mislim da tvoja punica ima visoko mišljenje o tebi, kad misli da zarađuješ toliko da si još i ženu držiš na plaći iako ona ne može kod tebe raditi struku… 😉

    najveca uvreda koju sam ikada dozivio (osim svaki puta kada udjem u neki “fancy” ducan u Zg)

    A što se tamo događa?

  17. najveca uvreda koju sam ikada dozivio (osim svaki puta kada udjem u neki “fancy” ducan u Zg)

    A što se tamo događa?

    Moglo bi se reci da patim od kompleksa manje vrijednosti (da sad ne ulazim u detaljna objasnjenja) i mrzim kada me neka fufica u prodavaonici “procjeni” da li sam dostojan kupovati u njezinom ducanu.Ali to je sad vec totalni offtopic…

Leave a Reply

Your email address will not be published. Required fields are marked *