Jak vypadá práce programátora

Nedávno jsem od jednoho čtenáře blogu dostal dotaz. Se svolením autora budu citovat: Jak vypadá konkrétní práce programátora? Nemám totiž vůbec ponětí. Dostaneš nějaké zadání a určený čas k vyřešení? Nebo se sejde parta programátorů, rozeberou si úkoly a pracují ve skupinkách? Můžeš mi popsat nějakou konkrétní práci, kterou jsi někde dostal?

Tento dotaz mi přijde opravdu zajímavý, hlavně proto, že jsem si podobné otázky kladl před tím, než jsem nastoupil do své první práce. Mou odpověď bohužel negativně ovlivní několik faktorů. Za prvé jsem nyní teprve v druhém zaměstnání, tudíž nemám moc praktických zkušeností jak to chodí jinde. Díky tomu bude moje odpověď dost ovlivněna tím, co jsem zažil, nebo co jsem se doslechl od známých. Druhý faktor je ten, že o předchozím zaměstnání toho nemůžu moc říct. Budu se ale snažit odpovědět alespoň abstraktně, takže snad nějaké poznatky pomůžou. Tak tedy hurá na to, v následujících řádcích se dočtete co to ti programátoři vlastně dělají.

Jak to probíhá

Hned ze začátku musím bohužel zklamat. Neexistuje totiž žádný univerzální postup práce pro programátory. Pro většinu lidí mimo tým to vypadá jako jeden obrovský chaos. Bohužel to mnohdy vidí stejně i členové týmu. Obecně se dá říct, že se jedná o neustálý boj mezi managementem (ti chtějí mít vše hotovo co nejdříve) a programátory (snaží se přesvědčit management, že termíny jsou nereálné). Obvykle to končí takovým kompromisem, kdy obě strany nadávají, ale ve výsledku to funguje 🙂

Aby se ten chaos nějak zvládl, existují různé metodiky vývoje softwaru. Nebudu je tedy jmenovat, případným zájemcům pomůže Google. Já měl zatím zkušenosti pouze se Scrumem (který jsme ale tak úplně nedodržovali, takže to nebylo ono). Třeba u toho scrumu to bylo tak, že vývoj byl rozdělen na nějaké kratší časové úseky (tuším že měsíce) a na konci jednoho období se naplánovaly úkoly na další období. Pokud se jednalo o nějaký důležitý úkol, byl uveden i nějaký termín (v řeči programátorů deadline…což je mimochodem velmi trefný název 😉 ). U ostatních úkolů každý programátor udělal časový odhad (estimate). Tady narážím na důležitou věc…odhadování časové náročnosti úkolu.

Estimate – náhodně vygenerované číslo?

Odhad je od slova odhadovat, tudíž je každému jasné, že odhad se nebude s realitou shodovat naprosto přesně. Ideálně by ale měl být co nejpřesnější. Z mých zkušeností je přesnost odhadů dána hlavně dvěma faktory:

  1. zkušenosti programátora: čím má programátor více zkušeností, tím dokáže lépe odhadnout, co se za daným problémem může skrývat a jaké můžou vzniknout komplikace.
  2. znalosti systému (aplikace) se kterou pracuje: pokud někdo pracuje s kódem, ve kterém se moc nevyzná, nejsou odhady moc přesné. Takový člověk nevidí do kódu tak dobře, aby chápal jaké změny bude třeba provést a jaké problémy se zaváděním změn můžou nastat.

Takže odhady od junior programátorů, kteří jsou na projektu noví jsou asi tak přesné, jako náhodně vygenerované číslo 🙂

Je to různé, ale…

Nejde tedy říct, že vývoj probíhá tak a tak. Dalo by se říct že co firma (nebo dokonce tým), to jiný pracovní postup. Pokud ale člověk nastupuje jako junior programátor, může se setkat s určitými “jistotami”.

Časté jsou obavy, že vás zavalí hned první den práci a vy si s tím nebudete vědět rady. Toho jsem se taky bál…a to pořádně. Když jsem tehdy nastupoval do zaměstnání na pozici C++ programátor, tak jediné mé znalosti s C++ byly ty, které jsem se dočetl v knize Mistrovství v C++. Aby toho nebylo málo, tak tu knihu jsem dočetl asi jen do poloviny 😉 Mé znalosti jazyka a taky programování obecně byly minimální. Když jsem ale nastoupil, byl jsem mile překvapen. Prvních několik dní se člověk stejně jen rozkoukává a hlavně má k dispozici nějakého zkušenějšího vývojáře. Takže první týdny v práci jsou studijní. Učíte se o firemních procesech, o náplni práce a začnou vás seznamovat s kódem, na kterém budete pracovat.

Když to tak vezmu, tak za první měsíc v první práci jsem se naučil o programování více, než za celý svůj život. Kam se na to hrabe škola. První úkoly jsou většinou jednoduché a hlavně je vám vždy nějaký ten senior k dispozici. Až budete hotovi, váš kód by měl projít přes nějakého seniora (code review), aby se ověřilo, že je vše správně. No a než se nadějete, uvědomíte si, že řešíte stejně složité úkoly jako ostatní a pomalu už zaučujete někoho dalšího 🙂

U velkých softwarových firem se můžete většinou setkat se zavedenými firemními procesy, které stačí dodržovat. Některým lidem to může vyhovovat, ale mi osobně to moc nesedlo. V mé druhé práci je to třeba zase jinak. V týmu jsem zatím jediný vývojář a projekt se teprve rozjíždí. Nevýhoda je, že vedle nesedí žádný ten senior vývojář, ale na druhou stranu má člověk více volnosti a může využít svou kreativitu. Žádné zavedené procesy tu nejsou, takže člověk může ovlivnit více věcí, než jen kód který napíše.

Dvě práce a dva naprosto odlišné pracovní postupy. Pokud se budete někam hlásit, zkuste se tedy poptat lidí, co ve firmě pracují. To je asi nejlepší zdroj informací 🙂

Základ všeho je tým

Jedna z nejdůležitějších věcí, které programátor musí zvládat je dobrá komunikace a práce s týmem. Můžete být skvělý programátor, můžete být ve firmě nejlepší, ale pokud nebudete efektivně komunikovat s ostatními a nebudete umět spolupracovat, nedopadnete moc dobře. Dobrou komunikaci s týmem (i s ostatními týmy) vidím jako naprostou nutnost. Když budete kopat sami za sebe, bude vše trvat déle. Hodně problémů už bylo vyřešeno v minulosti někým jiným. Tým by měl být sehraný a jeho členové by měli neustále spolupracovat a navzájem si vypomáhat. Úkoly řeší nejčastěji programátor sám, setkal jsem se ale i s úkoly, na kterých pracovalo několik lidí najednou. Je to případ od případu, opět se nedá generalizovat.

Umění nebo dělnická činnost?

Podle mě je programování obojí. Někdy programátor má jasné zadání co má provést (většinou od nějakého architekta) a pak už jen kódujete (prostě dělničina…vemete lopatu a kopete dokud tu jámu nevykopete). Pak jsou případy, kdy není zadání nijak přesně vymezené. Tam musíte přemýšlet, jak danou věc provedete. A nebo taky u hledání a opravy chyb. To je další případ, kdy se nejedná o dělnickou práci, ale o umění a mentálně náročnou činnost.

Když tedy uvidíte programátora se sluchátky na uších a s nohama na stole, nemusí to znamenat že se fláka. Osobně jsem nejvíce chyb vyřešil během relaxace. U programování (pokud nejde o výše zmíněnou dělničinu) není vztah mezi časem stráveným v kódu a množstvím provedené práce přímo úměrný. Ze začátku jsem s tím měl problémy a když jsem nečuměl do toho monitoru, tak jsem měl docela obavy, že to bude vypadat, jako bych se flákal. Naštěstí jsem tuhle počáteční fázi překonal a nyní když to potřebuju, tak si v klidu odpočinu. U mě to znamená pustit si hudbu (tak abych neslyšel okolí), zavřít oči, pohodlně se usadit a začít přemýšlet.

Jelikož se člověk nedokáže soustředit moc dlouho, považuju za samozřejmost dělat si pravidelné pauzy při práci. Zkoušel jsem několikrát pracovat v kuse těch 8 hodin (a více), ale prostě to není ono. Soustředěnost, efektivita, výkon a hlavně kvalita odvedené práce jde prudce dolů. Proto když už si všimnu že ztrácím pozornost, tak navštívím svou RSS čtečku, která mě neustále zásobuje něčím zajímavým ke čtení 🙂 Taky pomůže nějaká procházka nebo pokec s kolegy. Kdyby mě někdo nutil pracovat celý den v kuse tak to odmítnu a odejdu, věděl bych totiž, že v takových podmínkách nemůžu zaručit nic kvalitního. Samozřejmě když se blíží deadline, tak je třeba ty pauzy minimalizovat 😉

Co dál?

Myslím si, že vše podstatné jsem již napsal. Pokud vás čeká vaše první zaměstnání na pozici programátora, tak doporučuju se tím nijak nestresovat. Není třeba žádných extra znalostí a zkušeností, jediné co by vám nemělo chybět je touha učit se. Však oni si vás tam ve firmě už nějak zaškolí, vycvičí a budete mít po problémech. Tenhle článek je tedy docela chaotický, spíše to berte jako takový souhrn postřehů 🙂

Na závěr, abych zodpověděl celou otázku, tak doplním ilustrační příklad práce, kterou jsem dělal:

Podle bug reportu při zobrazení dialogu s barvami problikne titulek dialogu. Tato chyba měla časový odhad týden. Začal jsem se tedy snažit chybu zreprodukovat, abych zjistil, jestli ji vůbec dokážu napodobit a pokud ano, zjistit další informace. Ve které verzi k chybě dochází a za jakých podmínek. Chyba se mi povedla napodobit v určité verzi aplikace. Začal jsem to tedy vyšetřovat a zjišťovat od jiného týmu, jestli se s něčím podobným nesetkali. Dostal jsem nějaké rady a tipy na to, kam se podívat a co to může způsobovat. Po vyzkoušení několika drobných úprav se ukázalo, že problém je složitější. Změnil jsem tedy časový odhad na dvojnásobek a několik dní jsem strávil debugováním. Po několika dnech se mi podařilo zjistit, že chybu nezpůsobuje komponenta, kterou jsem měl na starosti, ale systémová knihovna, kterou ta komponenta volá. Zjistil jsem tedy jak problém opravit, napsal jsem bugreport pro tu systémovou knihovnu, úkol jsem pozastavil a začal jsem řešit jiný. Až byl bug v systémové knihovně opraven, otestoval jsem, jestli chyba opravdu zmizela a daný úkol jsem uzavřel.

Je to jen jeden příklad z mnoha, ale pokud někdo má zájem o konkrétní příklad, tak myslím že mu tento bude stačit.

Pokud zůstaly nějaké otázky nezodpovězeny, klidně napište pod článek komentář a zeptejte se 😉

EDIT: v 4. díle 3. řady seriálu The Big Bang Theory je luxusní scénka, která ukazuje jak nejen vědci, ale i programátoři pracují 🙂

Příspěvek byl publikován v rubrice Programování. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

22 reakcí na Jak vypadá práce programátora

  1. Lukas napsal:

    Diky moc za clanek, rozhodne sem budu odkazovat ostatni 🙂

  2. dadajax napsal:

    Lukáš: tak doufám, že článek alespoň pomohl alespoň trošku přiblížit tu práci programátora 🙂 Kdyby tě ještě něco napadlo, tak klidně ještě napiš. Jinak jsem článek doplnil o ilustrační video 😉

  3. Pavel Krček napsal:

    urcite zajímavé počtení, a mnoho rad a tipu pro mlade akťáky 🙂 http://bit.ly/762B4 díky @dadajax

  4. peto napsal:

    veľmi dobrý článok, ďakujem za objasnenie

  5. uf napsal:

    1) programatorska prace je umeni i nadenicina. Lepsi termin je inzenyrstvi – vyzkousene postupy, metodika a zkusenosti vam pomohou vyresit problemy a delat remeslnou praci. K tomu musi byt i fiskus (ktery kazdy nema) a intuice.
    2) Nevim, jak v dnesnim svete, ale ja uz leta resim nekolik ukolu najednou (samozrejme ne paralelne, ale v ramci dne, tydne).
    3) S tim premyslenim mas pravdu. Je lepsi si vec promyslet a pak zacit. Stejne pak vzniknou chyby (treba i v navrhu), o kterych si zpetne myslis, ze se jim dalo predejit lepsi a peclivejsi pripravou…. Priste se to opakuje. Kdyz zavru oci a zvratim se v kresle, dost tvrde premyslim. A pak prijde kolega-debil a hlasite rekne “nechrapej tady”. Je to vul.
    4) Kdysi jsem cetl v casopise zebricek povolani podle stresovosti. Tak jsem hledal programatora. Byl az uuuuuuuuuplne na konci s hlidacem v muzeu a astronomem. Nejdriv me to nazvedlo. Pak jsem si uvedomil, ze to zjistoval nekdo, kdo nakoukl do kancelare a rekl si “aha, oni si jen tak v pohode sedi a cely den si hraji s televizi”. Asi nevedi, jaky stres je opravovat chybu v cizim programu v casovem presu, ladit chybu, vymyslet elegantni reseni.

    Vidis, mohl bych s tebou po tech letech filosofovat, ale faktem je, ze ty za tech par let na skole a rokem v praxi umis vic, nez ja po hoooodne letech. Hlavne se nezahrabej v jednom projektu, kde neni zajem o inovace. Pak skoncis schvaceny, sto let za opicema a na starych technologiich.

  6. dadajax napsal:

    Uf: 1) inženýrství…to je to slovo které jsem při psaní článku hledal 🙂

    2) jojo, taky to tak mívám. Ale většinou je jeden úkol hlavní a na ostatních úkolech pracuju v době, kdy na tom prioritním úkolu pracovat nemůžu (čekám na nějaké dokumenty, na specifikaci, na nějaký cizí kód a podobně). Pak jsou taky okamžiky, kdy si člověk uvědomí že dělá snad deset věcí najednou a jde mu z toho hlava kolem 😀 Proto se raději zaměřuju jen na jednu úlohu, do které vkládám všechnu energii 🙂

    3) takového kolegu ti nepřeju 🙁 Asi bych ho musel uškrtit 😉

    4) já se tomu ani nedivím, ono to opravdu může vypadat tak, že programátoři se celé dny jen flákají, čumí do počítače, popíjejí kafe a povídají si. Ale už nevidí ten stres, když se den před termínem vše hroutí a nic nefunguje, když se kladou nereálné termíny a nebo když je třeba dělat závažné rozhodnutí. Myslím si, že kdo to nezažil, ten tomu neuvěří.

    Ta praxe v posledním zaměstnání mě toho naučila opravdu hodně. Sice jsem v té době na ty podmínky nadával, ale teď za to rád. Navíc jsem byl obklopen zkušenými kolegy, takže jsem se dozvěděl také zkušenosti z jejich předchozích projektů.

    No a to jak píšeš o tom zahrabání se v jednom projektu…s tím naprosto souhlasím! Právě z těchto důvodů jsem odešel…žádné inovace…jen nikdy nekončící stejná rutina.

    Děkuji, že ses podělil s těmi tvými zkušenostmi. Pěkně to doplňuje článek 😉

  7. Azimut napsal:

    Ahoj, super clanek. Jsem jeste stale student a tak me dost uklidnila ta pasaz, kde jsi psal, ze jsi mel prectenou jenom cast knihy Mistrovstvi v c++. Ja ji mam prectenou z vetsi casti a stale se v ni vrtam – a to i v pripade, ze cecko nepovazuji za svuj prioritni jazyk. Nedesim se ani myslenky, ze neco nebudu umet udelat, ale ze nepochopim myslenku projektu – ta je hoooooodne dulezita a z knih se nevycte. Nesnasim, kdyz mi nekdo predhodi kod a chce, abych treba opravil chybu nebo neco doplnil. To radsi celou praci predelam. A tak moje otazka zni: jak se takovy problem resi?? Co kdyz vypracuji ukol – spravne, ale postup ktery zvolim nebude efektivni??

  8. dadajax napsal:

    Azimut: dobrá otázka. S tou myšlenkou projektu si nejsem úplně jistý jestli to chápu dobře, ale nikdy jsem nic takového neřešil. Většinou bylo totiž jasné, co se má udělat a proč.

    Taky jsem měl kdysi nutkání vše kompletně přepisovat, místo abych upravil cizí kód. Z praxe už ale vím, že to téměř nikdy není možné. Není čas a mnohdy to ani není technický možné. Většinou pracuješ se zaběhlým systémem, který navíc využívá množství knihoven, ke kterým nemáš vůbec přístup. K tomu aby ti dovolili něco kompletně přepsat bys musel přinést opravdu vážné důvody. Jako třeba že stávající kód je velmi neefektivní, nebo dokonce nebezpečný. Hlavně u projektů, který nejsou plně pokryty automatickými testy je potom hodně nebezpečné dělat nějaké rozsáhlejší změny.

    No a další věc je, že svůj postup můžeš konzultovat se zbytkem týmu (pokud nějaký budeš mít :)). Tam můžeš navrhnout své řešení a poslechnout si názory ostatních. V minulé práci jsme pravidelně debatovali o tom, co právě děláme a jak to děláme. Často jsme našli lepší a rychlejší řešení 🙂

  9. uf napsal:

    Mam kolegu, ktery si vzdy vse napise sam. Pravda, vi, co to dela a funguje mu to. Ma ale vlastni styl, absolutne zadnou dokumentaci a o svych vytvorech nic nerekne, ani kdyz se na ne zeptas, protoze pri lezeni po zdrojakach narazis na spoustu objektu, jejichz filosofii vubec neznas.

    To je pak vopruz spolupracovat.

    Kdyz se toho kolegy zeptas na neco, bud rekne mnoha slovy nic (politik to neni, je to schopny programator) nebo mi zacne predcitat z manualu nebo dokumentace zakladni informace, ktere by mel znat i zacatecnik.

  10. Azimut napsal:

    2dadajax:Myslim, ze jsi to pochopil dobre 😀 . Takze si vypracujete plan postupu a rozdelite si casti, ktere napisete a pripadne navrhnete specifice algoritmy – to jsem chtel slyset.

    Asi vim, kde je u me zakopanej pes. V tymu jsem nikdy nedelal, vzdycky to spis byly takovy huraaa akce a pak jsme to nak stloukli dohromady za jedno odpoledne. Delam mi problem si predstavit tu spolupraci s napr. 4 lidmi.

  11. uf napsal:

    Jeste jsem zapomnel, ze programatori jsou strasne jesitni (skoro jako doktori) a namysleni, takze kazdy vi, ze jeho kod je nejlepsi, i kdyz je kolega opravdu dobrej, neco od nej jde okoukat, ale ja mam stejne lepsi kod.

    To se pak opravdu hur dela.

    Byly doby, kdy sel nekdo okolo a videl, ze se trapis s programem. Tak si to nechal vysvetlit. Bud ho neco napadlo nebo si vsim preklepu nebo neceho divneho, spis ale ty sam pri vysvetlovani jsi pochopil, kde je problem.

  12. Azimut napsal:

    2uf: S tou jesitnosti to neni problem jenom programatoru, ale u vetsiny profesi a kor u Cechu – nehlede na vyuku na vysokych skolach, kde vyucujici(ne vsichni, ale u vetsiny) pestuji ve svych studentech nafoukanost a pocit, ze jsou necim vic, nez lide bez vysoke….. A pak se ukaze, ze sikovnejsi a pouitelnejsi je ten bez vejsky.

  13. uf napsal:

    Nase skolstvi totiz uci faktografii, kterou v praxi nikdo nepouzije a ktera v dnesni generaci stejne nezustane. VS je spis o tom, ze se clovek dokaze naucit spoustu materialu na pockani.

    Od mych let se zmenilo jen to, ze my si pamatujeme zakladni veci, mladez uz nic.

  14. Azimut napsal:

    2uf: Posledni souveti mi hoooodne pripomina meho dedu 😀 . Taky prohlasuje, ze za jeho mladi to bylo nejlepsi.
    Ale zpet k prvnimu odstavci:souhlasim s nim(90%), ale nevysvetluje, proc se vetsina vysokoskolaku, behem studia, chova jako pokrytci a proc zrovna akademicka puda toto chovani podporuje. Kdyz vysvetlime tohle, tak pak mozna odpovime na otazku, proc jsou programatori jesitove 😀
    A jeste ke skolstvi: skolni system se nezmenil dobrych 50 let. To co bohate stacilo tenkrat, je dneska k nepotrebe, protoze dnes nema cenu nabiflovana informace(viz ruzne vedomostni souteze, ktere jsou vytlacovany priblblymi serialy), dnes ma cenu postup k ziskani informace a nejvetsi cenu ma zpenezeni informace. To jde zaridit tezko, kdyz ti co tam uci, nikdy nebyli v praxi. Dal to nebudu rozebirat-je to spis politicka vec.

  15. dadajax napsal:

    No teda, rozpoutala se tady taková debata 🙂 Jen bych k tomu dodal že souhlasím s tím názorem na školství…taky mi současný stav nepřijde zrovna dobrý. VŠ jsem vynechal, takže mě to nemusí tížit 🙂

    A s tou ješitností…myslím že na to vysoká škola nemá moc velký vliv. Každý programátor co znám je ješita a egoista…a ti kteří tvrdí že ne kecají 🙂 Nebo snad znáte nějakého programátora, který by si nemyslel, že jeho kód je nejlepší? ;D

  16. uf napsal:

    Nejlepsi je prece muj kod :-).
    Ale vazne, kdyz se podivam, jak programuji profici – napr NetBeans nebo jiny opensource, tak mam depku a premyslim, cim se zivit.

  17. Azimut napsal:

    2uf: 😀 Pokud je tvuj kod nejlepsi, tak jsi profik, ktery dela v Sunu na vyvoji NetBeans 😀 Nebo lepe – delas jeste u vetsi firmy.
    Tak cerne bych to nevidel, ani geniove nevyzerou vsechno. A jak se ukazuje, tak po DOBRYCH(desne sirokej pojem) programatorech bude vzdycky hlad. Staci, aby to cloveka bavilo a cestu si najde. – trocha filozofie, ale funguje 😀

    2dadajax:Jen jsem chtel rict, ze aby byl clovek egoista, nemusi byt programator. A vejska egoisty torchu vychovava.Jo a sry, ze jsme se odklonili od tematu.

  18. dadajax napsal:

    Azimut: v pohodě, myslím si že se tohle téma k tomu článku dost hodí 😉

  19. Medzzik napsal:

    Děkuji za skvělý článek. Zrovna jsem ho našel na googlu. Jsem zrovna v tý fázi, kdy si prožívám ten stres, jestli to vůbec zvládnu s mými znalostmi být programátorem a hlavně dobrým programátorem. kromě maturitních otázek se drtím i věci ohledně programování a zjišťuju, že je to všechno strašně obsáhlý. Určitě by mě zajímalo víc takových postřehů, pokud by kdokoliv měl. 🙂

  20. hlavne programovat, delat, delat, treaba opensource napsal:

    Hlavně programuj, pracuj, omrkni, jak dělají profíci: přehledně, krátké procedury, rozdělená odpovědnost tříd.

  21. Xanli napsal:

    Chci se zeptat na platy grafiků a programátorů jak se asi od sebe liší děkuji

  22. uf napsal:

    @Xanli: Já mám zkušenost, že mezi programátory je rozdíl v kvalitě, šíři a hloubce znalostí, polohou v republice a platem.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *