Přejít k navigační liště

Zdroják » Různé » Úvahy „starého“ programátora

Úvahy „starého“ programátora

Články Různé

Překlad článku Reflections of an „Old“ Programmer (Ben Northrop) nejen pro programátory v po čtyřicítce.

Nálepky:

Překlad článku Reflections of an „Old“ Programmer (Ben Northrop) ze 6. října 2016.

Jsem programátorem a bude mi čtyřicet let. Je sobota ráno, moje děti jsou doma s mou úžasnou manželkou (která se statečně stará o domácnost) a já jsem na technické konferenci. Jsem na přednášce o React Native a přednášející nás přesvědčuje, že se opravdu jedná o „další velkou věc“ mobilního vývoje. Mně se to zdá spíš jako JSP před 15 let s veškerou logikou v prezentačním kódu, ale jsem „starý“, tak předpokládám, že tomu prostě jen „nerozumím“.

Přednášející proběhne slajdy, ohromuje nás úchvatným kódováním naživo a pak následuje salva názvů, během které oddrmolí asi půl tuctu nástrojů, o kterých jsem netušil, že vůbec existují, včetně něčeho, co se jmenuje Pepperoni (vážně). Mě, který nedávno vystřízlivěl z Angularu, to trochu deprimuje. Myslím si: „Je to tady zase!“

Samozřejmě mě to nepřekvapuje. Za posledních dvacet let jsem se svezl na nejedné módní vlně a celkem jsem si ty jízdy užil. To potěšení z nového „zlomu“ v programování může být vzrušující – cítit se součástí komunity technických inovátorů, prosazovat něco, co udělá věci trochu snazší, rychlejší, čistší, lepší. To může být zábava. Ale to konkrétní ráno, na prahu čtyřicítky, musím uznat, že se cítím trochu vyčerpaný. Vím, že je to součástí práce – chci-li zůstat relevantní (a dobře placený), vím, že čas od času musím zahodit nějakou znalost, kterou jsem poctivě načerpal, a nachystat se na další cestu. Tak to prostě je.

Jak o tom přemýšlím, tenhle rituál mé programátorské kariéry se nepodobá životu ostatních profesionálů. Nezdá se, že by se čtyřicetiletý lékař obával, že se všechny jeho znalosti vaskulárního systému vypaří a budou nahrazeny novou teorií. To samé platí pro právníky, instalatéry, účetní a učitele angličtiny. Ačkoliv u těchto profesí určitě najdeme nezáživné aspekty, můžeme klidně říct, že v každé z nich v půlce své kariéry shromáždíte relativně stabilní znalosti, které poskytnou rostoucí míru respektu a platu. Nicméně nezdá se, že by dvacet let zkušeností s programováním poskytovalo ty samé výhody.

Dvě hlavní síly

Všechno v naší profesi není samozřejmě tak ponuré. V životě programátora, je mnoho věcí, které budete milovat. Ale co se týče nekonečného úsilí „udržet krok“, jde o zajímavý rys, který se zdá více či méně příznačný pro náš obor. Nemám pravdu? Je v tomto směru programování skutečně jiné? A pokud ano, tak proč? A co to znamená pro naši kariéru? Rád bych se to vše pokusil zodpovědět pomocí dvou konceptů.

Prvním je zastarávání znalostí. Vše, co známe, nejen o programování, má expiraci; okamžik, když už to není užitečné. Naučil jsem se řídit auto, když mi bylo šestnáct, a tato znalost mi stále ještě dobře slouží. Řekněme, že má dlouhý poločas rozpadu. Pro mnoho profesionálů má jejich doménová znalost rovněž relativně dlouhý poločas rozpadu. Jistě, nové objevy medicíny můžou nahradit některé existující procedury, ale je nepravděpodobné, že by výrazně revidovaly naše porozumění biologii. Pokud je expirace dlouhá jako v tomto případě, může v podstatě být znalost považována za kumulativní. Lékař je erudovanější než byl loni, protože všechno, co se naučil za uplynulých 12 měsíců, postavil na to, co už znal před tím.

Tvrdím, že programování (ať už je to dobře nebo špatně), není takový případ. Abych vykolíkoval hřiště (střílím spíš od boku), řekl bych:

Polovina toho, co programátoři znají, bude za deset let k ničemu.

Můžu se mýlit, ale zdá se mi, že je to pravda. Vsadím se, že pokud bych se od tohoto okamžiku nic nenaučil, tak kolem roku 2026 budu moc použít asi jen polovinu znalostí (ať žije SQL!) a druhá polovina by byla k ničemu (možná React Native?). Samozřejmě, že budu získávat nové znalosti, abych nahradil nepotřebné, ale bude to stačit? Budu toho v roce 2026 znát víc (užitečného) než dnes?

Což mě přivádí k druhému konceptu, míra akumulace znalostí – tempo, kterým přidáváme nové věci ke korpusu našich znalostí. V každém oboru je určitý práh, který musí být překročen k tomu, abyste byli „certifikovaní“ (nebo alespoň najmutelní). Raná fáze kariéry je typicky věnovaná získání právě těchto znalostí. Avšak v programování se kvůli rychlému úpadku znalostí zdá, že ve skutečnosti nikdy nepřekročíme „studentskou“ fázi. Víme, že se musíme neustále vzdělávat, a to dělá etapy naší kariéry trochu netypické.

Tři etapy

Kdybych měl nakreslit graf vývoje znalostí průměrného programátora v průběhu kariéry, vzal bych v potaz úpadek znalostí a míru akumulace, vypadal by asi nějak tahle:

career-stages-programmer

V počátku naší kariéry, nazvěme to fází dychtivý učeň, je akumulace znalostí relativně snadná. Všechno je nové, a tak je každá zkušenost prostředkem k získání dalších znalostí. Navíc, protože jsme mladší, máme méně pevných závazků, a tak nám pravděpodobně nevadí strávit několik nocí a víkendů vybíráním nových jazyků a frameworků. A důležité nakonec, zaměstnavatel od nás až tolik neočekává. Každý rozumí tomu, že jsme junioři a snadněji než naši kolegové si během pracovního dne ukrojíme trochu času na zaplnění děr v našich znalostech. Je to zábavná etapa, až na ten neodbytný pocit, že je toho tolik, co neznáme.

Přesto v určitém okamžiku přestaneme být začátečníky a stanou se z nás produktivní a soběstační programátoři. Poprvé se mezera mezi námi a kolegy (dokonce i těmi s desetiletou praxí) nezdá tak veliká. To nám dodá elán a sílu. Je to fáze vycházející hvězda. Investice do vzdělávání se vyplatila a všechno, co víme, je stále užitečné (tzn. žádná naše znalost znatelně zastarala). S plnou zásobárnou relativních znalostí si začínáme zasluhovat respekt klientů, kolegů a manažerů. S respektem přichází tituly, plat a příležitosti. Přestože to tou dobou ne nutně vidíme, je to důležitý bod obratu.

V tom bodě se stanou dvě věci. Za prvé povýšení na „seniora“ přinese něco víc než jen peníze: větší očekávání. Zaměstnavatelé potřebují svoje nejlepší programátory, aby byli lídry – pomáhali juniorním programátorům, dělali code review a pohovory, chodili na víc jednání a v mnoha případech, aby pomáhali udržovat komplex legacy softwaru, na kterém se podíleli. Všechno to je nesmírně opodstatněné, ale je to na úkor nabírání nových znalostí. Čas, který jsme mohli věnovat čtení technických blogů, je najednou fuč. Za druhé je to okamžik, kdy poprvé zažijeme (nebo si jej alespoň všimneme) malý úpadek znalostí. Něco, co jsme se naučili v počátku naší kariéry, je teď zastaralé. Všechen čas, který jsme strávili (čtěte: jsem strávil) učením GWT? Ztracen! Obě tyto síly, úpadek a míra akumulace znalostí, v podstatě začnou pracovat proti nám.

Vstoupili jsme do třetí a poslední fáze, odliv a příliv vyrovnaného veterána. Jsme znalí a produktivní, avšak rozumíme tomu, že vlastně můžeme znát méně (užitečných) věcí, než jsme znali v předchozí etapě naší kariéry. Nezanedbatelné množství našich znalostí zastaralo a nemuseli jsme mít dost času nahromadit dostatek nových znalostí, abychom je nahradili. To může být frustrující, a proto, myslím, tolik z nás touží po jiném – management, sales, testování nebo (můj sen) zemědělství. Uvědomujeme si, že to bude vyžadovat skutečné úsilí udržet si naši úroveň dovednosti. A bez téhle snahy budeme za pět let horší než dnes. Setrvačnost tu nefunguje.

Moje skromná rada

Takže v téhle fázi jsem teď já. Učení stále miluju, ale chápu, že bez nějaké herkulovské snahy nejspíš už vždycky zůstanu balancovat na spodním okraji úrovně „expert“. Jsem s tím smířen, protože si užívám svůj soukromý život víc, než abych potřeboval být dalším Martinem Fowlerem (ačkoliv se vsadím, že Martin má taky perfektní soukromý život – ten chlap je prostě skvělý). Přemýšlení o mé kariéře v termínech úpadek a akumulace znalostí mi přesto trochu změnilo můj pohled.

Za prvé se pokouším dívat na věci z dlouhodobého pohledu. Dávám si víc pozor na role s příliš velkým očekáváním a málo příležitostmi k novým zkušenostem. Viděl jsem několik kolegů s vysokou sumou na výplatní pásce, ale s málo příležitostmi k seznámení se s novými věcmi a k učení. Za pět let si uvědomí, že se mnoho jejich cenných znalostí vypařilo a jejich plat je naprosto mimo skutečnou tržní hodnotu. Myslím, že v některých případech výdělek méně peněz v kratším období (u lepšího zaměstnavatele) může přinést víc peněz (a stability) během dlouhé kariéry.

Za druhé se pokusím investovat nejvíc do trvalých znalostí, protože čas je omezený. Moje energie je lépe použita na akumulaci znalostí s delším poločasem rozpadu – algoritmy, bezpečnost aplikací, optimalizace výkonu a architektura. Doufám, že využitím těchto nik učiním svou kariéru neprůstřelnější než studováním nejnovější, ojediněle úspěšné, javascriptové knihovny.

Možná jsem nakonec nic nového neobjevil, ale pro mě bylo užitečné zamyslet se o své kariéře z pohledu úpadku a akumulace znalostí. Rád bych slyšel vaše názory!

Komentáře

Subscribe
Upozornit na
guest
17 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Honza Kokes

Amen

5o

Znalosti vôbec nie sú až také dôležité, dneska si všetko môžete vygoogliť práve, keď to potrebujete spraviť, takže ak ich treba zahodiť nie je to problém… oveľa dôležitejšie sú skúsenosti… a schopnosť rýchlo sa učiť.

5o

Tak to sme sa asi úplne nepochopili.. ja som nič nepísal o základných znalostiach… a ešte že na tie pohovory nechodím… mám totiž vlastný biznis a vyvíjam svoj produkt… :) :)

ondra-novak

„Jsem na přednášce o React Native“
„Mě, který nedávno vystřízlivěl z Angularu, to trochu deprimuje.“

Deprimuje, no tady má odpověď

„Za posledních dvacet let jsem se svezl na nejedné módní vlně „

Problém Angular, React, JQuery ale i Python verze 1,2,3,… jasně ukazují na problem tzv překoného vývoje. Věci zastarávají protože jsou špatně navrženy, nevyhovují všem, a tak jiné týmy píšou alternativy. Na druhou stranu je to dobře, protože vzniká konkurence. Zánik Angularu 1 pouze ukazuje, jak špatný to framework byl (když ho opustili i sami autoři – jsem rád, že mi vývoj dal za pravdu)

Za mě z toho plyne zásadní závěr. Nepos…. tedy neposadit se z každého nové modní vlny a než si zaplácám mozek další zbytečnou technologií tak si udělat analýzu na základě znalostí, které jsem se doposud naučil.

“ čas od času musím zahodit nějakou znalost, kterou jsem poctivě načerpal, a nachystat se na další cestu. Tak to prostě je.“

Je to jistý způsob myšlení, ale mě naprosto nevyhovuje. Možná to platí pro programátory z rapid developmentu,… jo, ti jsou nejlépe placeni, ale s jejich mizernou praci se potýkáme s každodenním živote

„Polovina toho, co programátoři znají, bude za deset let k ničemu.“

Výše uvedeným způsobem ano. Ten člověk zřejmě nemá vůbec představu o tom, co v budoucnu bude mít smysl a co ne. Tohle je krásná ukázka člověka, který se nic nenaučil. Toho zaměstnat jako analytika = krach firmy.

Třeba core javascript tady bude dál, ale frameworky se budou střídat jak vojáci na stráži.

Mimochodem, teď mě napadlo. Donedávna bylo v módě oddělení prezentační části od logické, šablonovací systémy, a tzv. špagetový kód byl tabu. A hopla, najednou tu máme React. Nedotknu se toho ani dlouhým bidlem. To je asi tak jako kdyby teď nějaká velká vlivná firma začla vyzdvihovat výhodu prefork-serverů, ač jsme všichni rádi, že jsme se jich konečně zbavili a všichni používají thready. Jiný příklad. po tom, co jsme opustili single-thread aplikace a máme multithread prostředí – hopla,javascript je singlethread, WinRT je singlethread a zdá se, že asynchroní programován async-await který těží z tohoto principu je na vzestupu… A nikomu to nepřijde divné. Ale pozor, javascript přináší … „workery!“ no to je boží technologie. Někdy se bavím tím, že vykládám javascriptáři mému kolegovi co všechno mohu na serveru v C++ dělat. Koulí oči na vrh hlavy.

Technologie se točí v cyklu. Příklad: nejprve byly aplikace, pak terminály, pak aplikace, pak terminály, teď byla doba aplikací a přichází terminály (maskují to slovem cloud). Když člověk nechytne nějakou módní vlnu, netřeba se vzrušovat. Za pár let ji máme zpátky. Je naprostá ztráta času se to učit ve stejném duchu jak jdou cykly.

“ Zaprvé povýšení na „seniora“ přinese něco víc než jen peníze: větší očekávání. Zaměstnavatelé potřebují svoje nejlepší programátory, aby byli lídry – pomáhali juniorním programátorům, dělali code review a pohovory, chodili na víc jednání a v mnoha případech, aby pomáhali udržovat komplex legacy softwaru, na kterém se podíleli.“

Jedno základní pravidlo dobrého IT managera. Nikdy nepovyšuj programátora na managera. Tímto krokem ztratíš skvělého programátora a získáš mizerného managera. Z mýho pohledu, pokud senior je více samostatný programátor, který má pod sebou lidi, jako další jeho ruce, dostane větší projekt, zajistí si analýzu, rozdá úkoly, dělá ten code review. to je jeho práce. Ale rozhodně nemá být servant managera nemá suplovat scram mastera, nemá co dělat na poradách jiných než těch programátorských.

„Možná jsem nakonec nic nového neobjevil, ale pro mě bylo užitečné zamyslet se o své kariéře z pohledu úpadku a akumulace znalostí.“

V závěru článku to vypadá, že se ten člověk skutečně umí trochu poučit.

Tobiáš Potoček

Trochu bych se zastal toho Reactu a obecně JavaScriptu, protože se mi zdá, že spousta námitek proudí jen z chybějícího hlubšího porozumění. React + Flux/Redux není v jádru nic jiného než jen další reinkarnace MVC architektury. Správně napsaná React komponenta neobsahuje o nic více logiky než odpovídající Latte/Twig/JSP šablona.

Což dává hezkou nápovědu k tomu, co je opravdu důležité. Technologie přichází ve vlnách, občas to připomíná ping ping, nicméně ty principy na pozadí zůstávají neměnné. Když člověk vychází z těch principů, tak přechod mezi technologiemi zase tak bolestivý není. A na tu druhou stranu ignorovat nové technologie mávnutím ruky také není úplně dobrá strategie. React (a i ty „workery“) skutečně přinášejí něco nového. Za 5-10 let nebudeme na webu používat nástupce Nette/Symphony/SpringMVC, ale Reactu, ať už to bude cokoliv.

Petr

Ok, takze Vase metoda je se na to proste vykaslat, protoze znate principy.

A ted dostanete ukol navrhnout moderni webovou aplikaci. Co se stane? SPOILER: Zjistite, ze aktualne ji proste potrebujete napsat v Reactu, protoze kdyz ji napisete v necem starem, tak Vam vase principy nepomuzou. Proste to bude hnusny a rozhodne ne moderni.. Takze Vam nezbyde nic, nez se ten React naucit.

Stejne tak to mate kdyz dostanete ukol udelat novou moderni mobilni appku, ktera pobezi na iOS i Androidu. Dvakrat ji psat nebudete, ma byt moderni => potrebujete moderni nastroje. Vase principy Vam k modernosti nepomuzou – takze se budete muset naucit React Native..

Jenze tohle si Vy nepripoustite, protoze delate nejspis na nejakym velkym projektu, kde muzete sedet roky na stejne pozici na backendu..

risototh

Velmi trefny postreh. Nema zmysel sa ucit tie hype *.js vtakoviny, pretoze to je strateny cas. Dnes sa to clovek nauci, zajtra to pouzije a pozajtra je to totalne out… Ja asi po 15+ rokov v PHP (ktore poznam naozaj do detailov) zacnem investovat energiu do C/C++. JS hipster zalezitosti ponecham „lepicom“ bez znalosti co i len zakladnych algoritmov a googlicom.

Srigi

S jednou vynimkou – Node.js nie je hipster JS zalezitost.

singerko

Problem je, ze programatori sa ucia jazyky a nie techniky. Pokial sa niekto uci programovacie techniky, paradigmy programovania, navrhove vzory je o level vyssie. Jazyk je uz potom iba prostriedok a moze byt zameneny. Mam tiez 40 rokov a programujem ci objektovo, funkcionalne a je uplne jedno aky jazyk k tomu vyuzijem (java, perl, js, python, c, c++, bash, asp, visual basic …). Pokial pride dalsi jazyk, staci sa uz len naucit ako sa dana technika/paradigma da implementovat v danom prostredi.

Petr

Tak nejde ani o jazyk, ale i o framework. Lepsi je vzdy porozumet principu, nez se naucit konkretni framework…

risototh

Ano, tiez zastavam nazor, ze konkretny jazyk je len forma zapisu a ten, kto si toto neuvedomuje, nie je programator. U mna vidim trocha vrodeny odpor k tejto modnej JS vlne, ze je strasne turbulentna. Bol som na kratkej prednaske React+Redux. Zaujalo ma to. Prisiel som domov, venoval vikend studiu a po prestudovani par „tutorialov“ na trosinka zlozitejsi „hello world“ som to vzdal. Na C/C++ mi staci gcc (na zaciatok), na PHP mi staci PHP, ale na tamto treba v podstate 10-20 toolov. Niekde je nieco asi zle… Tento clanok to hodne vystihuje https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f#.x5k34rjfi

uetoyo

Souhlasím s názorem, že vývoj v JS je dost turbulentní…, ale pro vývoj GUI v C++ (či podobném) si také nevystačíte s překladačem, stejně jako v JS vám nestačí interpret pro vývoj moderního UI.

Tobiáš Potoček

Tento častý druh „nářku“ mě fascinuje. Samozřejmě, znalosti zastarávají, ale je skutečně od věci se ublíženě srovnávat s učitelem angličtiny, který bude pravděpodobně brát oproti programátorovi třetinový plat a jeho uplatnění je dost úzké, jinými slovy, celý život bude dělat jen tu jednu věc a to učit angličtinu? Programátor je jedno z nejzajímavějších povolání, když přijde na uplatnění, peníze, ale i určitou flexibilitu a svobodu. Kolik dalších profesí si může nomádit v takové míře jako vývojáři? To, že je nutné se doživotně vzdělávat, je jen velmi malá daň. A je otázka, jestli je to vůbec daň, můžeme to brát také jako příležitost k celoživotnímu rozvoji, tj. jakási automatická obrana proti „zakrnění“.

Samozřejmě vyhoření a únava je problém, ale i tak je podstatně „snazší“ vyhořet jako bývalý programátor se zaplacenou hypotékou a úsporami na důchod než jako…no… učitel angličtiny. Ten problém tady je, nechci nad ním úplně mávnout rukou, ale je potřeba vždy vzít v úvahu i perspektivu ostatních povolání. Profesionální fotbalista, který si stěžuje, že ho v 35 bolí kosti a za rok mu končí kariéra a neštěkne po něm už ani pes, je také tak trochu k smíchu.

Stando

No.
Ja si myslím, po 35 rokoch programovciny, ze nejde o jazyk. Framework a ani technológiu. Ide o to, aby sa to predalo. Ak to ma kto zaplatiť, tak je to v poriadku…
V podstate nejde ani o profesiu programátora ako takého.

Starú školu este možno oslovi analýza, nejaké tie UML modifikácie klasických vývojových diagramov a podobne graficky prítulne radosti. Mladšiu, samozrejme, frameworky do zblbnutia.

Manažérov samozrejme oslovi prvý odstavec tohto príspevku. Čiže prachy. Kolotoč ako vyšitý:)

lenoch

Já myslím, že i lékař se musí učit nové postupy a technologie, přístroje, léky, podobně jako inženýr, vědec…

Vláďa Macek

„Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví.“ … to je možný, ale chci poděkovat autorovi za zamyšlení, překladateli za práci, ale tentokrát HODNĚ i diskutujícím, kteří jste téma obohatili. Souhlasím s většinou z vás a mám radost, že nejsem sám.

Skoro mě napadá, že založení cechu starejch prgačů, kteří pochopili, že cenný jsou principy, na módní vlny je třeba opatrně a že i manažer co chce prodat má někdy pravdu, by nemuselo být od věci. :-)

Vláďa (40)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.