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

Zdroják » Různé » Programátor -> Vývojář -> Software Engineer

Programátor -> Vývojář -> Software Engineer

Články Různé

Jak léta jdou, přemýšlím kontinuálně o cestě, kterou jsem urazil a kam směřuju. Jeden takový pohled na část takové cesty naznačuje titulek.

Text vyšel původně na autorově blogu.

Dneska už jsem na té cestě dál – jsem v bodě, kdy už pár let „stavím“ týmy. A byť nehledám lidi, kteří jsou mým odrazem – naopak, mám rád diverzitu a plánovaně, podvratně :-) ji aplikuju – podvědomě vybírám lidi, kteří na podobnou cestu aspirují a berou ji jako součást týmové kultury.

Téma je pro mě zajímavé – jak čistě myšlenkově, tak i prakticky. Pokud pracujete s týmy, tak kromě těch technických věcí, řešíte taky záležitosti jako rozvoj lidí, jejich vzrůstající finanční očekávání, ohodnocení jejich technické a jiné seniority atd.

Zároveň nebudu skrývat, že ne vždy se to podaří – přesvědčit, inspirovat lidi, že tohle je ta správná cesta. Občas vidíte potenciál, ale nepovede se vám dostat daného člověka z jeho bubliny. A někdy se prostě jen mýlíte a chybujete.

Korintským

Asociace, která mi naskočila, když jsem začal o tématu přemýšlet, pochází, možná překvapivě, z Bible – Pavlova listu Korintským. Je to taková ta pasáž, co se čte vždycky na svatbách… ale nebojte, nebudu vás zahrnovat láskou ;-), mám na mysli jinou větu:

Dokud jsem byl dítě, mluvil jsem jako dítě, myslel jsem jako dítě, měl jsem dětské názory; když jsem však dospěl, s dětinskými věcmi jsem se rozloučil.1. Korintským 13:11

Co mně přijde podstatné na tomhle citátu, je ten přechod – opuštění určité formativní fáze a přechod do další. A i když s tím občas bývají problémy, nejde o odvrhnutí předešlé fáze, naopak, ta by měla být integrována.

(A jen pro jistotu, protože vím, jak jsou lidi chytlavý – výběrem citátu jsem nechtěl říct, že – obecně – třeba programátoři jsou dětinští. Jasně, že občas jsou, ale není to generalizace. Ale což, ať si každý odnese, co potřebuje.)

Model

Jednoduchý model, který popisuje naše téma, vypadá jako tři soustředné kruhy. A tak jako cibule, krystal či perla rostou postupně schopnosti našeho hypotetického programátora.

Programátor

Znáte termín code monkey? Je to většinou nelichotivý termín, i když občas se k němu někdo hrdě hlásí (většinou nápisem na tričku). Mě se líbí definice z Urban Dictionary, která dobře vystihuje, co si pod termínem programátor představuju já:

„A programmer who isn’t actually involved in any aspect of conceptual or design work, but simply writes code to specifications given.“

Programátor je pro mne člověk, který – s ohledem na svou senioritu – dobře rozumí úzce vymezené technické oblasti. Hranice je zpravidla definována daným programovacím jazykem a v dnešní době také stále více nějakým přidruženým frameworkem. Cokoliv za algoritmy, technickými aspekty jazyka a lokální kompilací (je-li potřeba), je mimo oblast zájmu a zodpovědnosti programátora – jeho práce končí komitem do verzovacího systému.

Taková úzce vymezená specializace nemusí být na škodu – záleží, jaká je vaše doména, role v týmu, rozsah projektu ad. Na druhou stranu, moderní softwarový vývoj vyžaduje daleko komplexnější spektrum schopností a mít v týmu „pouhého“ programátora pak často znamená více zatížit ostatní členy týmu a  přenést na ně část činností, jež u programátora „padají pod stůl“.

Vývojář

Vývojář je už o úroveň dál. Že dobře rozumí svému programovacímu jazyku, je samozřejmost. Stejně tak dobře ovladá sadu souvisejících knihoven a frameworků, jež tvoří jeho technickou doménu.

Jako velmi volný příklad si představme mlhavý termín Backend Developer. Umí asi nějakou „business logiku“, řekněme v případě Javy někdo s CDI/EJB, nebo Spring+AOP+Transakce, plus nějakou tu persistenci, tudíž JPA/Hibernate/MyBatis/JDBC. A trošku té security.

Takže to je samozřejmost. Ale je to ještě něco navíc – větší, či menší povědomí, jak to spolu souvisí, nejen interně, ale i za hranice toho „backendu“. Plus troška „toho designu“ a zase – jak na úrovni kódu, tak na úrovni komponent.

No a pak… pozvolné přibližování se k oblasti SW inženýrství: vědět něco o buildování, možná i nějaký ten release management, něco praxe a teorie testování (aspoň unit a functional), source code management, issue tracking, atd.

To hlavní, co odděluje vývojáře od programátora? Schopnost vidět v technické oblasti „big picture“.

Software Engineer

A co SW inženýr? Ovšem, je to dobrý vývojář. Ale ovládá také většinu souvisejících oblastí, potřebných pro kvalitní a moderní vývoj softwaru:

Ale v první řadě – a to už je moje velmi subjektivní spekulace – rozumí byznysově tomu, proč daný úkol dělá a proč ho dělá daným způsobem (což je, vzhledem k mé zkušenosti, velmi, velmi vzácné). Přece jenom, je to inženýr a jeho prvotním úkolem je řešit problémy. Reálné problémy.

Jediná cesta?

Na internetu a v knihách se vedou dlouhé diskuze, co je a co není SW inženýrství, ba, jestli vůbec něco jako SW inženýrství existuje. Moje zkušenost je, že na každém projektu je potřeba vždy a znova vybudovat terminologii. Význam a kontext konkrétního termínu se neustále proměňuje a podstatné je, abyste si s kolegy v týmu rozuměli.

Pro mne je software inženýr období a stav, kam jsem se dostal po téměř 20 letech programování. Šel jsem po výše naznačené cestě. Ta vaše bude zcela určitě jiná. O cestě, co jste urazili, můžete vyprávět, ale zkušenosti jsou jenom vaše.

Je to realistické?

Samozřejmě, život není o zjednodušujících modelech a ideálních okolnostech. Skutečný svět je špinavý, divoký a ne-soustředný. V realitě tak vidíme spoustu prolínání vyše řečených rolí, jež se častokrát mění v čase i v rámci krátkého období, jako je třeba iterace, nebo projekt. A pak, existuje spoustu odlišností, jež nejsou výjimkami, ale spíše úplně jinými koncepty a přístupy. Diverzita života se mi vždycky líbila.

Související

Komentáře

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

Dalsi uroven je Software Craftsman – kde se berou tyto technicke zalezitosti pouze jako detaily, nastroje. A kde se primarne soustredi na danou domenu, zakaznika a jeho pozadavku.

Domain first – z kodu je citit business logiku, domenu a jeji procesy na prvni pohled. Nad timto kodem je pak mozne se zakaznikem diskutovat.

Náhodný návštěvník

Kam by se v této hierarchii nebo s přihlédnutím k ní zařadil „software architect“?

Lenoch

Je to trochu jako zedník, architekt a manager. Zedník by měl umět postavit rovnou zeď a řešit konkrétní provlémy na místě, architekt se už s maltou nešpiní a navrhuje a manager, ehm, by v podstatě měl zařídit aby lidi měli práci a peníze.

Michal Singr

Nemůžu si pomoci – ale psát články, které škatulkují lidi, je dost jednoduché. Co mám dělat, pokud jsem částečně 1, trochu 2, málo – vzhledem ke svému bývalému povolání – 3, a pak ještě 4 až 10 (v článku tyto typy uvedeny nejsou), a všechny tyto osobnosti jsou denní součástí mojí práce?

Pokud nás tlačí termín a já jedu jak fretka, sázím jeden endpoint na API za druhým, a jsem zjevně hlavně code monkey, odevzdat, merdžnout, otestovat, nazdar, jsem tím pádem špatný? A když jsem schopen odhalit chyby v zadání (protože mám přehled o komplexu), dosáhnu levelu „vývojář“? Když pak urychlím něco tím, že se přeskočí marginálie a udělá se až potom, jsem „engineer?

Pokud mi má jít o to, aby výsledkem mojí práce bylo „celá ta šílenost funguje“, tak tyhle škatule jsou dobrý možná tak pro děti, protože normální člověk je stroj na kódy, analyzátor komplexna, prioritátor všehomíra i prostituátor netušiátor.

Anebo – pokud použiju analogii ze svojí bývalé profese – můžeme rozdělit žáky na ty, co zlobí, a na ty, co nezlobí, a jít pak spokojeně, smířeně, vesmíru rozumějíce, domů.

Martin Hassman

Já si sem z dovolením stoupnu a vezmu si do ruky ceduli s šipkou a nápisem POSLEDNÍ ODSTAVEC.

Michal Singr

Fuck yeah :-) Poslední odstavec (tučné ani kapitálky netřeba) se mi taky líbí :-) Zbytek už tak ne.

Každopádně díky za zajímavý článek (líbil se hlavně mým kolegům v práci, mně už tak ne, ale to je holt riziko of diversity).

Peace

Michal, code monkey

Pavel

Článek jsem se zaujetím přečetl, autor je zřejmě zkušený profesionál, ale teď přemýšlím, co si z toho dalšího mám odnést. Jaký má článek smysl pro čtenáře? Budu díky tomu lepším programátorem/vývojářem/inženýrem? Proč jsem měl trávit čas čtením tohoto textu?

Jako osobní zápisky autora do blogu – budiž. Ale od článku na odborném portálu bych čekal, že mi to něco dá, někam mě to posune.

Jindra

Mne článek někam posunul, ve firmě jsem zaměstnán jako code monkey, ale pořád se dožaduji high pohledů, use casů, náhledu na celek, dokumentace která funguje, atd…
Díky článku jsem pochopil, že chci být někde mezi stupněm 2 a 3, ale že to je jen můj pohled a že ostatní programátoři nemusí sdílet mou touhu (vidět celek).

Díky za článek ;)

Petr Michna

Hodně pravdivý článek. Pociťuji na vlastní kůži po letech vývoje, programování…posouvat se uvedeným směrem je nezbytnou nutností pro vývoj smysluplných a kvalitních aplikací…

balki

Na vsetky „profesie“ v clanku su definicie, ktore su vseobecne uznavane. Profesional sa pozna takto:

  1. Nevymysla si vlastne definicie.
Martin Hassman

Když už jsme u těch definic https://cs.m.wikipedia.org/wiki/Profesion%C3%A1l

balki
Martin Hassman

Jo, ta je taky dobrá!

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.