Traktát o vzdělání programátorově

Po sadě technických článků bych rád napsal zase jeden trošku filozofického charakteru. Rád bych se v něm zamyslel nad způsoby, které používám pro své vlastní vzdělávání a faktory, které osobně vnímám jako pozitivní. Snad každému je jasné, že ten kdo na sobě dál nepracuje může v našem oboru těžko dlouhodobě něco dokázat (a být lépe placen ;-)) a proto se zamyšlení nad tím, jak se vzdělávat co nejefektivněji, určitě hodí každému.

Článek je zcela subjektivní – co funguje pro mně nemusí nutně fungovat stejně ve vašem případě, nicméně řekl bych, že základní linka je obecně přenositelná. Způsobů jak se vzdělávat je několik, každý z nich nás obohacuje jiným způsobem a všechny dohromady působí v synergii. Myslím, že pokud člověk libovolný ze jmenovaných způsobů nepoužívá, zbytečně se o mnoho připravuje.

Čtení (články, blogy, knihy, dokumentace)

Tento odstavec asi nikoho nepřekvapí, protože to je asi nejběžnější způsob jak se v dnešní době vývojáři vzdělávají. Psaná dokumentace, tutorialy a další podobné zdroje jsou typicky základním zdrojem pro učení nových technologií, knihoven a nástrojů. RSS čtečky plné zajímavých kanálů, twitter, sledování kvalitních portálů, čtení blogů – to vše je asi rutinní součástí většiny vývojářů, kteří to myslí se svojí prací vážně. Tento způsob získávání informací nám také asi nejčastěji pomůže k řešení problémů, na které ve své praxi narazíme. Svět je totiž plný vývojářů, kteří často něco podobného jako vy už řešili a někteří z nich řešení i zdokumentovali.

Získávání nových poznatků čtením má ale i řadu svých negativ. Psaných informací je nepřeberné množství – to je na jednu stranu velká výhoda, protože máme rozumnou šanci v této kupě najít i velmi specifické informace, které se hodí přesně pro námi řešený problém. Na stranu druhou ale není často jednoduché tyto informace najít a stojí to často moře času. Po X letech hledání informací na internetu člověk získá cit pro vyhledávání, ale i přesto musíme často projít hodně materiálu, než najdeme to co nás zajímá. Také pravidelné sledování oblíbených informačních kanálů stojí hodně energie a vytrvalosti. V posledních letech se mezi mé oblíbené kanály dostal Twitter, který míchá zábavné informace s užitečnými a které jsou navíc již převybrané lidmi, které já sám vnímám jako zajímavé – tj. ty informace, které se tímto způsobem ke mně dostanou, jsou typicky daleko hodnotnější než ty, které mi končí v RSS čtečkách (a to v daleko lepším poměru než se děje, myslím, na Facebooku).

Osobně musím přiznat, že v poslední době přestávám mít na systematické sledování všech „tištěných“ kanálů příliš málo času. Většinu z nich jen letmo prohlédnu a pokud mne něco nezaujme, jdu dál. Systematicky hledám jen v případě řešení nějakého konkrétního problému.

Shrnutí:

  • bývají velmi konkrétní
  • zásadní v hledání řešení konkrétních problémů
  • vytěžení informací z těchto zdrojů stojí často hodně času
  • obrovská nabídka různě kvalitních zdrojů

Mé oblíbené zdroje:

Poslouchání (přednášky, konference, podcasty)

Tímto způsobem lze načerpat úplně jiný druh informací, než v případě čtení. V newscastech se s předstihem můžete dostat k novinkám, které hýbou zahraniční scénou, ale k nám ještě nedorazily. Na přednáškách, konferencích a v podcastech se často dozvíte o věcech, které jsou aktuálně mimo doménu, ve které se pohybujete, ale zajímavě vám rozšiřují váš pohled na vývoj jako takový (jako Javista si asi článek o .NETu nepřečtete, ale v podcastu vám informace o něm vadit nebudou).

Mluvené (i video) materiály obvykle nejdou příliš do hloubky, ale za to vám mohou skutečně výrazně rozšířit obzory. Mnohokrát se mi také stalo, že právě tento zdroj mi jako první nabídl informaci, která mne nakopla pídit se po dalších detailech, což mi ve výsledku přineslo hodně prospěchu. Pro Čecha je také velmi užitečné poslouchání cizojazyčnýh materiálů, protože krom vlastních informací se také učíte rozumět a, paradoxně, i lépe v daném jazyce mluvit. Vstřebávání znalostí tímto způsobem také není tak problematické z hlediska volného času – posloucháním audio záznamu můžete efektivně zaplnit jinak nevyužitý čas, který každý den věnujete třeba dojíždění, nakupování, sportování atd.

Shrnutí:

  • z mnoha oborů (jazyků)
  • skvělé na novinky
  • získávání obecného povědomí (ze zkušeností ostatních)
  • rozumně omezená nabídka kvalitních zdrojů
  • povrchni – bez konkrétních detailů
  • řadu věcí brzy zapomínáme pokud je nepoužijeme

Mé oblíbené zdroje:

Komunikací

Aktivní způsoby učení mají daleko větší význam pro výsledné praktické dovednosti. Nicméně kvalitní „živou zkušenost“ není tak jednoduché získat a je velmi odvislá od toho v jaké komunitě se nacházíme a jakou roli v ní zastáváme. Do této kategorie bych řadil pair-programming, workshopy, hands-on-laby, komunikaci v rámci nějaké komunitní konference (diskuse nad issues v trackeru a návrh patchů) atd.

Přínos bude pro vás tím lepší, čím lepší a kvalitnější budou lidé okolo vás. Naopak pokud patříte vy mezi seniory, těch výhod zase tolik čekat nemůžete. Hodně také záleží na zvyklostech komunity – v některých komunikace mezi členy jen kvete, odpovědi na vaše dotazy jsou kvalitní a slušné, v jiných se dočkáte jen RTFM. Pokud se však dostanete ke kvalitním lidem, můžete se poměrně rychle naučit některé zásadní praktiky a dovednosti, které dokážete rychle přetavit do vaší denodenní práce. Najít takovou komunitu nemusí být vždy tak jednoduché.

Jak jsem již uvedl – pro zkušené vývojáře nemá tento způsob rozvoje takovou hodnotu, jako pro začátečníky (pokud nenajdete další lidi na své úrovni). Na druhou stranu každý z nás někdy začínal a určitě si vzpomenete na dobu, kdy jste sami podobné impulsy potřebovali. O to víc si cením kolegů, kteří neúnavně odpovídají na dotazy na různých mailing listech a diskusích (např. na Java.cz mailing listu), přestože oni sami málokdy dotaz potřebují položit.

Samostatnou kapitolu tvoří komunikace na různých konferencích. Tam se můžete, kromě jednostranného příjmu informací z přednášek, osobně dostat k diskusi se zajímavými lidmi a navázat tak cenné kontakty, které se vám budou v budoucnu velmi hodit. Mít kvalitní síť kontaktů totiž není zásadní jen pro manažery a obchodníky, ale hodí se každému z nás.

Shrnutí:

  • získané znalosti mohou být jak velmi detailní, tak velmi obecné
  • asi nejrychlejší cesta ke znalostem
  • záleží na kvalitě komunity

Studiem a prototypováním cizího kódu

Tento způsob získávání znalostí patří mezi mé oblíbené. Již poměrně po krátké době člověk dokáže rozlišit kvalitní kód od špatného – a také dokáže ocenit kód, který je výrazně lepší než jeho vlastní. Takovým kódem je potom radost se probírat a zkoumat jak funguje. Typicky se cizím kódem toulám ve chvíli, kdy něco nepracuje tak, jak bych podle prvního dojmu očekával, ale často se mi stává, že po cestě ze zvědavosti zabloudím úplně do jiných míst, než mě zpočátku zajímaly (tímto způsobem jsem například ve Springu objevil plno zajímavých věcí, o kterých jsem už mnohokrát psal). Navíc tak odhalíte principy fungování dané knihovny, které velmi často ani zdokumentované nejsou. Celý modulární systém našeho produktu je například postavený na vlastnostech dědičnosti aplikačních kontextů, které nejsou popsány v základní dokumentaci. Myslím, že jako Javisti máme oproti jiným jazykům obrovskou výhodu – valná většina kódu, který ke své práci používáme je open-source, a tak si myslím, že by byla velká škoda, kdybychom toho nevyužili ke svému prospěchu.

Co se mi však kromě vlastního čtení cizích rukopisů velmi osvědčilo je prototypování proti nim. Pouhým čtením kódu se vám může stát, že výslednou funkcionalitu neodhantete úplně správně. Nasbíráte si ovšem hypotézy, které lze potom jednoduchými jUnitovými testy ověřit. Teprve napsáním kódu, který daný kus API využívá dochází ke správnému pochopení a zafixování znalostí (krom vlastních funkčních prototypů, které vám už zůstanou). Tímto způsobem jsem třeba dospěl k pochopení, jak funguje class reloading v Groovy a navrhnul integrační vrstvu do našich produktů. Tím, že jsem měl napsané prototypy, jsem měl poměrně velkou jistotu, že jsem celý princip pochopil správně – za pravdu mi potom dal i článek od společnosti jRebel stojící za skvělým nástrojem, který tuto vlastnost (refresh class a dalších zdrojů za běhu aplikace) poskytuje i pro standardní Javu.

Obdobné prototypování jsem použil i pro článek o closures v JavaScriptu a teprve po jejich napsání jsem dospěl k jejich rozumnému pochopení. Skutečně si myslím, že prototypování je pro získání zkušenosti velmi důležité. V podstatě se jedná o takový věděcký přístup v malém – procházíte v něm základními fázemi: sběr informací, stanovení hypotéz, sestavení testů pro ověření hypotéz, sestavení testů pro rozbití hypotéz a výsledné ustanovení závěrů (které ve vědeckých kruzích ústí ve formulaci teorie). Tento pseudovědecký přístup k učení navíc (alespoň pro mne) přináší novou úroveň zábavy a naplnění z výsledku. Navíc se takto často dostanete sami k poznání, které byste na internetu těžko hledali.

Shrnutí:

  • možnost získat kvalitní návyky a vzory z kvalitních knihoven
  • v Javě typicky přehršel příležitostí ke studiu (většina kódu je open-source)
  • jde až k samotnému jádru problému (niž to už nejde)
  • náročné na čas
  • výtěžnost informací je odvislá od úrovně čtenáře

Publikováním

Správný zavěr vzdělávacího procesu by měl být zakončen tím, že se o nabyté vědomosti dělíme dál – ať už prostřednictvím nějaké publikační činnosti (blogy, články, psaní OSS), přednášením nebo školením ostatních. I to je součástí dalšího vzdělávání, protože při něm získáváme zkušenosti jiného charakteru – zvykáme si na vystupování na veřejnosti, učíme se vyjadřování, pracujeme formě a obsahu, aby byl výsledek srozumitelný, posluchače obohatil a byl pro ně něčím zajímavý. Krom těchto věcí nás tato úroveň „vzdělávání“ nutí k daleko hlubšímu porozumnění domény, kterou se snažíme vykládat. Povrchní znalosti jednoduše nestačí, protože by nás každý druhý dotaz vyvedl z konceptu a dost pravděpodobně bychom časem i sami sebe přivedli do úzkých, když bychom se neobratným přednášením / vystupováním dostali do míst, kde nemáme pevnou půdu pod nohama.

Už při sestavování přednášky / článku člověka napadají dotazy, které by mohly posluchače / čtenáře napadnout a často se mi také stane, že v danou chvíli nevím jak bych na ně odpověděl. To potom člověka žene do dalšího hledání informací a zkoumání, dokud nedospěje k uspokojivé odpovědi na hypotetickou otázku (paradoxně ovšem při přednáškách většinou stejně padají otázky, které vás při přípravě nenapadnou :-) ). Pravidelně se mi také stává, že teprve ve chvíli, kdy se snažím konkrétní věc vysvětlit někomu dalšímu, mě docházejí další souvislosti, které mne před tím nenapadly.

Pokud jste tedy odborníky v nějaké oblasti vývoje, je přednášení / publikování skutečně další úroveň kam se můžete ještě dostat a vytěžit z daného faktu ještě víc. Tento způsob sebevzdělávání je navíc prospěšný i komunitě okolo vás, takže zcela jistě říkám: pokud máte co říct, nebojte se a řekněte to. Dá se začít velmi pozvolně třeba tak, že uspořádáte seminář u vás ve firmě nebo pro své nejbližší kolegy – nemusíte hned organizovat přednášky před širokým publikem nebo rozesílat nabídky na veřejné konference. Nebudu zastírat, že to stojí hodně času na přípravu, ale ta zkušenost stojí za to.

Shrnutí:

  • vyžaduje velkou šíři i hloubku znalostí dané domény
  • velmi náročné na čas
  • vyžaduje jistou míru sebedůvěry (není pro každého)

Prací

Poslední, ale ne nejméně významný způsob vzdělávání, je práce. Použití znalostí v praxi je totiž prubířským kamenem všeho a v jisté formě dál vaše znalosti rozvíjí. V našem oboru máme to štěstí, že naše práce je obvykle poměrně různorodá a pravidelně se dostáváme k novým věcem a technologiím (alespoň pokud pracujete v té správné společnosti ;-) ). I při vlastní práci se tedy chca nechca musíte vyrovnat s plno novinkami a technologiemi, které jsou prostě pro realizaci placeného projektu nezbytné. Je dobré, pokud člověk tyto nároky bere jako prostředek ke svému dalšímu vzdělání a není mu to na obtíž.

Právě tato část bohužel často chybí v našem vysokém (středním) školství a proto se mi zdá, že plno informací, které se do studentů hustí, často jen proplují a zase se ztratí. Reálné použití na konkrétních projektech teprve znalosti fixuje a přetváří je ve zkušenost a dovednosti.

Shrnutí:

  • praktické použití znalostí teprve završuje proces učení
  • dostáváte za ni zaplaceno
  • někdy může být jednotvárné, bez novinek a změn

Závěrem

Doufám, že tento článek nevyzní příliš zaníceně. Šlo mi pouze o to, vyznat se z toho, co mě samotnému došlo teprve před pár lety. Došlo mi, že dokončením školy vzdělávání nekončí, že vzdělávání neznamená jen biflování skript a že vzdělávání nevede jen k vyplněné kolonce se zkouškou nebo zápočtem v indexu. Správné (sebe)vzdělávání vede k vaší větší hodnotě na trhu práce a má přímý dopad nejen na váš plat, ale taky na náplň práce, kterou děláte. Je rozhodně zajímavější práci rozdávat, než ji dostávat, je rozhodně zajímavější řešení vymýšlet a rozhodovat o použitých technologiích, než tato rozhodnutí pasivně akceptovat.

Moje způsoby sebevzdělávání už znáte, možná ale já nevím o způsobech, které používáte vy. Možná máte na zmíněné oblasti vlastní názor a zkušenosti. V každém případě budu velmi rád, když se o ně podělíte v komentářích pod článkem. Zvažoval jsem například uvedenení dalšího bodu s názvem „Certifikace“, nicméně s tím osobně žádné velké zkušenosti zatím nemám (a tady právě mně možná něco uniká) a proto jsem nakonec tento bod z článku vyloučil.

15 comments on this post.
  1. Dagi:

    Honzo pekne shrnuti. Vetsina lidi je na tom asi stejne a nebo hodne podobne. Ja osobne bych vypichnul dve veci. Diverzifikace, to znamena nespolehat se jenom na jednu metodu uceni. Cim vic ruznych vstupu mozek dostane tim je vetsi pravdepodobnost, ze z nich neco vytezi. Ted mam na mysli predevsim – mluvene slovo vs. cteni vs. prezentace/workshop. Podle meho soudu je stejne klicove i snazit si drzet rozhled v jinych oblastech, nemuzes mozek zasekat jenom informacema z IT. Protoze potom se ochuzujes o ruzne podnety, ktere ti mohou pomoci nahlizet na problemy jinak.

  2. anonym:

    Moje zkusenost je takova ze po nekolika letech kdy sem si dobrovolne kazil obcas vecer studiem uz na to fakt nemam naladu, novinky si prectu, blog si prectu ale jinak me java nechava chladnym. Jedine co clovek potrebuje je umet prumerne Spring,Hibernate, EJB a bude v pohode na vetsine projektu pokud nema ambice na tech leadera nebo architekta.

    Zamyslete se nad tim jestli vam k vyziti a spokojenemu zivotu (kdy nemusite tak tvrde samostudovat) staci napr. 80kkc mesicne nebo budete studovat jak divi,jezdit na konference, travit vecery s knihou misto pritelkyne a mit pak treba 120kkc protoze se stanete tech leaderem… Jako tech leader se pak budete muset denne obhajovat a zduvodnovat sve solution… za ten stres mi to fakt nestoji, nejsem java-srdcar a mozna sem lenoch ale nezapominejte na prislovi Carpe Diem ;) …na hypoteku budete mit tak jako tak kluci :)

  3. Otec Fura:

    Díky za reakci Dagi – proti diverzifikaci se nedá nic namítnout. Máš pravdu, i když sám věnuju IT oproti jiným oborům výrazně větší prostor (prostě proto, že mě to baví :-) ). Ono totiž s tou diverzifikací jde v ruku v ruce i potenciální „ztráta“ specializace. Jde prostě o celkové vyvážení – pokud budeš rozmělňovat síly mezi mnoho různých oborů, budeš umět od všeho trochu a budeš moci částečně přenášet znalosti z jednoho do oboru jiného (minimálně ve formě inspirace).

    Na druhou stranu tím můžeš ztratit unikátní kompetence v jedné oblasti – tj. být špičkový odborník v něčem. Někdy mi IT připadá podobné jako fyzika – už dávno nestačí říct „jsem programátor“ – stejně jako to neplatí u fyziků (jaderná fyzika, optika, mechanika atd. atd.).

    Hned si ale můžu oponovat, že v naší „agilní“ době se vyplatí mít v týmu spíše všeobecně vzdělané vývojáře, protože zvládnou více druhů úkolů (dokumentace, testování, deployment, databáze atd.). Specialisté mohou být někdy tak úzce zaměření, že jsou v dlouhodobém měřitku obtížně v týmu použitelní.

    Tj. jak z tohohle kolečka ven? Myslím si, že člověk by neměl odmítat apriori nic a vyzkoušet si od všeho trochu. Na druhou stranu měli by si zvážit, kde vidí svoji budoucnost a pracovat i na své specializaci.

  4. Otec Fura:

    Ad @anonym – ono to ani není tak o penězích, jako o tom, že po překonání jisté hranice může člověk dělat to co ho baví a ne to, co se mu řekne. Člověk tak jako tak stráví v práci minimálně čtvrtinu nebo třetinu svého života a utratit takový kus času tím, že dělám něco co mě nebaví by pro mě asi bylo dost nepřekousnutelné.

    Studium a programování po večerech u mě není záležitost toho, že bych si cílevědomě pracoval na kariéře. Je to spíš proto, že mě to baví a zároveň je mi to i prospěšné. Ono rozlousknutí nějakého problému, nebo pochopení něčeho co byl pro mě dlouho black box, má svoje kouzlo.

  5. anonym:

    Diky za jiny pohled na vec. Ne ze by me prace vubec nebavila ,ale po nekolika letech na projektech kde sem mel minimalni moznost cokoli ovlivnit se stavim k praci dost skepticky a pragmaticky abych s ni neztratil moc casu. Snad v budoucnu narazim na lepsi prilezitosti :)

  6. Maca:

    Otče díky :)
    Jako bys mi mluvil z duše. @Anonym – to bere jako práci…ja to beru podobně jako Fura, tj. programování je mi koníčkem a to že některé večery trávím s louskáním problémů (momentálně Spring-WS) mě nejen zvyšuje kvalifikaci, ale i vnitřně naplňuje. Obzvlášť když se mi podaří rozlousknout nějaký ten oříšek. Aplikace mých znalostí ve firmě už je jen třešnička na dortu. A dovolím si tvrdit, že svým aktivním přístupem po večerech se postupně ze mne stává taková ta studnice vědomostí ke které chodí kolegové, kteří mnohdy ani netušili, že o tom něco vím. A to je to, co mě dál nabíjí a dává šanci se posunout někam dál.
    Ale celé je to vždy o tom člověku, jestli má zájem a musí ho to bavit.

  7. Guido:

    Pěkné shrnutí. Jedna věc mi tam ale (subjektivně) chybí – certifikace. Vím, že to bývá kontroverzní téma, ale mě osobně vždycky učení se na certifikaci pomohlo do hloubky pochopit dané téma. Trochu bych to přirovnal ke studiu cizího kódu. Akorát že nestuduji kód, ale danou koncepci. A taky se dostanu k věcem, které jsou sice zdokumentované (specifikace), ale běžně se o nich nepíše.

  8. uf:

    Ahoj. Prace musi bavit, ale kdyz mate v praci starou technologii, musite si hrat doma. Jindy na to neni cas.

    Zjistil jsem, že nejdůležitější je dělat, programovat, zkoušet, hrát si, opisovat a pak to rozvrtat. Já už toho přečet hodně, ale když dojde na věc, neumím. Uf

  9. uf:

    Jeste jsem zapomnel dodat: proto asi nejezdim do Prahy a nemam ani 30 klacku.

  10. Zdeněk Troníček:

    Hezky clanek na zajimave netechnicke tema. Jinak muzu potvrdit, ze nejlepe umi clovek veci, ktere se uz snazil nekomu vysvetlit. Pokud jde o lidi, ktere Java a veci okolo ni bavi, tak tech je u nas podle meho nazoru pomerne dost. Aspon pokud to posuzuji podle ucastii na prednaskach CZJUGu.

  11. Tomáš Homola:

    Jeste kdyz jsme tak u toho vzdelavani, nemate nekdo zkusenosti prave s certifikacema?
    Jinak doufam ze budou porad lidi, ktere java bavi tak, ze pro nas mene zkusene pripravi zajimave clanky, webinare proste se s nama podeli o sve znalosti.

  12. Otec Fura:

    Jak jsem již psal – osobně zkušenost s certifikacemi nemám – ve firmě se na certifikace teprve chystáme, ale v české blogosféře existuje již několik více méně pozitivních článků se zkušenostmi na toto téma:

    http://vavru.cz/ostatni/certifikace-muj-pohled-na-vec/
    http://www.hradil.org/certifikace-java-2-platform/

    A Dagiho kontroverznější článek, který nadšení zase trochu zchladí:

    http://www.dagblog.cz/2007_08_26_archive.html#1118951425165344188#links

  13. Petr Hanák:

    Díky Dagi, dobrý přehled zdrojů.

    Připomnělo mi to ublognutí, na které jsem náhodou narazil též tento týden.
    http://osteele.com/archives/2008/01/programmers-pyramid

  14. gaspoda:

    Co se tyce javove zakladni certifikace SCJP, tak od ni ruce pryc – nema to nic spolecneho s praxi, nic moc vam to neda, akorat vam to vezme hafo volneho casu. Je to navic prvotridni nuda, aspon pokud studujete z oficialni 700 strankove bichle na pripravu (Katty Sierra). Je to psane jako ucebnice od zacatku, tzn. 95% veci uz znate ale musite se pres ne prokousat aby jste v nich nasli chytaky.

  15. LiborP:

    Dle meho nazoru jsou certifikace docela zajimavy zpusob sebe vzdelavani. Mam zkusenost pouze s vyse zminovanou SCJP a musim rict ze jsem rad, ze jsem do toho sel. Jde opravdu do zakladu a o to prave jde, clovek ma stavet na opravdu stabilnich a hlubokuch zakladech. A ty Vam prave SCJP da. Ano, je tam spousta otravnych otazek typu „najdi chybejici strednik“, ale rozhodne to cloveka donuti si ty zaklady vetknout pod kuzi ;-). Navic SCJP je povinne, pokud chcete delat dalsi Java Sun/ Oracle certifikaty.
    Sveho casu jsem se dost zaobiral s Java Black Belt http://www.blackbeltfactory.com/TestDefListing.wwa . Neni to zadny oficialni certifikat, ale clovek pouze neodpovida na otazky, ale sam je i tvori.

Přispějte komentářem