Začneme aktuálním citátem:
Také samotné IT profese se mění – IT odborníci se transformují do kombinace IT specialisty a byznys konzultanta. Například systémový specialista se stává spíše IT architektem. Programátor se transformuje do analytika, který umí programovat. Případně musí odborníci zvládat více technologií najednou, takže jsou schopni nabídnout balíček řešení. Firmy očekávají, že za své peníze získají všestranného a velmi užitečného zaměstnance.
– Petr Krčmář, Kde a jak získat IT práci i v nejisté době – Root.cz
Je to tak. Bývaly doby, kdy se člověk naučil základům algoritmizace, k tomu jeden či dva programovací jazyky, a s referenční příručkou v ruce mohl zaťukat na libovolné dveře v libovolné IT firmě, tvrdit, že je programátor – a byl přijat! Jenže heroické časy solitérních tvůrců pominuly a tvorba software se stala postupně průmyslem se vším, co k průmyslové výrobě patří: s normalizovanými technologickými postupy, s ověřenými a opakovatelnými modely vývoje, postavenými nikoli na nejistých záblescích osvícení geniálního tvůrce, ale na hrubé síle mnoha průměrných…
Webový vývoj má za vývojem software obecně několik let zpoždění – a to nejen co do nástrojů a možností, ale i co do organizace práce. Ještě před deseti lety byla významná část úspěšných webů tvořena solitéry, popř. malými týmy kolem výrazného tvůrce. Během posledních let se i „webová vývojařina“ proměnila a stále víc se prosazuje týmová práce, standardizace a „zprůmyslnění“ celého odvětví.

Velkému množství webových vývojářů připadá, že jim stačí znát PHP (nebo Javu nebo ASP.NET), SQL, JavaScript, HTML a CSS – a mají vystaráno a jsou profesionálové, schopní tvořit jakékoli weby. Pokud náhodou umí všechny tři programovací jazyky, mají absolvovaný předmět „Algoritmy a datové struktury II“ a opravdu umí programovat, mohou se snadno považovat za programátorské mistry. Jenže ani znalost tří jazyků v praxi pomalu nestačí.
Dobrý vývojář musí totiž znát (kromě programování) spoustu věcí, které ho ve škole nikdo nenaučí a které z manuálů, referenčních příruček a učebnic programování nevyčte. Namátkou: Řešení obchodních záležitostí. Zákonitosti návrhu uživatelského rozhraní. Reálná práce s týmovými nástroji. Analýza reálných zadání. Komunikace s ostatními členy týmu, s lidmi v reálné firmě (např. s manažerem, s obchodníky či oddělením marketingu), se zákazníkem…
Pokud nepřemýšlíte pečlivě, můžete dospět k názoru, že programování spočívá v psaní příkazů programovacího jazyka.
(Ward Cunningham)
Samosebou, každý má možnost říct: Já jsem přeci PROGRAMÁTOR, tyhle věci za mne má řešit někdo jiný, já jsem od toho, abych programoval… Ano, ale takový „programátor“ je něco jako dělník u pásu – ráno přijde do práce, osm hodin dělá to, co má v pracovní návodce, a pak jde domů. Je dobré si takovou praxí projít, to ano, ale zůstat na této úrovni znamená, že budete pro trh práce čím dál tím méně použitelní – na vaše místo se tlačí spousta čerstvých absolventů s minimálními finančními nároky, a vaši „praxi v oboru“ bude jen stěží někdo ochoten zaplatit.
Co by měl vývojář umět?
Schopnost přesáhnout úzce vymezené hranice oboru a komunikovat i s dalšími lidmi v týmu i mimo něj se ukazuje při tvorbě webů (a software obecně) jako mnohem důležitější než to, aby PHP programátor uměl dělat webdesign, webdesignér uměl psát HTML kód a kodér znal SQL. Je fajn umět jednu disciplínu perfektně a v dalších se alespoň orientovat. Je úžasné, když je někdo perfektní hned v několika disciplínách. Ale pokud se naše schopnosti omezují jen na obory spojené s „ťukáním do klávesnice“, brzy zjistíme, že nám cosi důležitého chybí.
Schopnost organizovat práci
Pravděpodobně základní netechnická schopnost každého vývojáře. Ačkoli se hardcore programátorům může zdát, že jde o kravaťáckou disciplínu, je dobré se alespoň zorientovat v metodikách organizace práce, používaných při vývoji. Využijeme je totiž nejen při řízení týmu, ale i při uspořádání své vlastní práce.
Při učení této schopnosti můžeme začít u GTD (např. tímto blogpostem o GTD na Rootu) a u Agilních metod a technik (viz též miniseriál na Zdrojáku o agilních metodách). Lze si prostudovat materiály o metodě Getting Real (Agilní vývoj: Getting Real). Metod pro organizování práce je mnohem víc, ale tyto patří mezi nejznámější a při vývoji software asi nejpoužívanější. Existují i nástroje, které pomáhají v dodržování výše zmíněných metod.
Stejně jako v jiných oblastech platí i zde: Je lépe pochopit a upravit si metodiku podle svých potřeb, než bez pochopení principů pouze mechanicky aplikovat naučené poučky.
Schopnost týmové práce

Je to tak – doba geniálních všeumělů, co zvládli udělat všechno sami, pominula. Jste-li geniální všeuměl, smiřte se s tím, že v reálném světě nikdo nedokáže postavit rozumný byznysplán na tom, že vás osvítí múza. Nikdo vám neupírá právo ani schopnost přijít s něčím převratným, ale tahle schopnost je pro průmysl (a tudíž i pro trh práce) stěží využitelná, protože není předvídatelná. Pokud se s vaším géniem snoubí zároveň talent s nikým nevyjít, jste pro moderní vývoj téměř nepoužitelní.
Je to možná smutné, mnozí (včetně mne – pozn.aut.) to považují za konec romantických a báječných časů velkých hrdinských skutků, ale taková je realita.
Schopnost týmové práce se nedá naučit z žádné metodiky ani z knih. Jedinou použitelnou radou je: Buďte členy týmů co nejčastěji. Ať už jako ti nejlepší, nebo jako ti nejslabší. Když jste v týmu nejlepší, učíte se vést a inspirovat; když jste ten nejslabší, máte příležitost naučit se od lepších.
Schopnost obchodního myšlení
Není potřeba studovat ekonomii do hloubky, vystačíme si do jisté míry se „selskou logikou“ a „kupeckými počty“. Důležité je připustit si, že programování a vývoj SW není umělecká disciplína ani magie, ale řemeslo, a to řemeslo by nás mělo uživit. Spousta programátorů jako by žila v zajetí představ, které vznikly kdysi v 60. letech a které se dodnes drží v některých oblastech – totiž (s trochou nadsázky) že komerce je sprosté slovo, neslučitelné se vznešeným posláním programátora, a že programátor by měl pracovat bez nároku na odměnu a svou práci dávat k dispozici zdarma pro blaho všeho lidu (nebo alespoň komunity). Jenže obchodní myšlení využijeme velmi dobře i při vývoji open source a freeware, protože v něm nejde zdaleka jen o peníze, ale především o smysluplnost konání – tedy především o to, aby směřovalo k nějakému efektivnímu uspokojení potřeb.

Jak se tedy naučit obchodnímu uvažování? Stačí si pro začátek nahradit ošklivé a komercí zavánějící slovo „byznysplán“ nějakým neutrálnějším výrazem – řekněme „plán rozvoje a rozšiřování vašeho webu pro následujících pět let“. Kolik času chceme webu věnovat? Kolik to je v průměru na jeden den? Co je naším cílem? Jak budeme vyhodnocovat, zda se nám daří nebo ne? Jak budeme web propagovat? Kolik nám propagace zabere času? Co budeme dělat v případě, že se bude dařit? Co v případě, že se dařit nebude? Zkrátka takový jednostránkový soupis důležitých bodů, itinerář, kterého se při vývoji a provozování budeme držet. Ačkoli se v něm neobjeví ani jednou slovo „peníze“, jistě změní náš pohled na to, co děláme a jak – místo okouzlení možnostmi software a hardware začneme uvažovat nad efektivitou, nad smyslem a hodnotou práce, nad hodnotou času…
V zásadě jde o to uvědomit si, že psaní software není pro profesionála nějaká „vnitřní nutnost“, ale konání, které má nějaký účel, nějaký cíl, smysl, … a že tyto faktory nevisí ve vzduchoprázdnu, ale musí zapadat do požadavků a potřeb reálného světa. Až na výjimky totiž platí, že zákazník (nebo okolní svět) má nějaké potřeby, které chce vývojář naplnit svým konáním, a vice versa… Obchod a peníze jsou jen univerzálně dohodnutou abstrakcí pro vyjádření těchto vztahů.
Schopnost porozumět potřebám okolního světa, porozumět jazyku, kterým okolní svět o těchto potřebách promlouvá a domluvit se s ním je pro dobrého vývojáře kruciální, ať už pracuje na jakékoli pozici – podle pozice je jeho „okolním světem“ vedoucí týmu, vedení divize, vedení firmy, obchodní oddělení nebo zákazník, ale princip zůstává stejný.
… a hlavně by měl umět programovat!
Ano, to by programátor měl umět především. Ale neměl by spoléhat na to, že si vystačí jen s tím, že umí převést problém do algoritmů a zapsat je v nějakém programovacím jazyce. Pro programátora je umět programovat nezbytné minimum a samozřejmost, asi jako je pro rybu nezbytné minimum umět plavat – s trochou zdravé provokace se dá říct, že programátor, který umí jen programovat, vlastně neumí nic. Že je často problém sehnat programátora, který opravdu umí programovat a ne jen psát kód, je jiná věc, a je smutnou realitou, že u webového vývoje to platí dvojnásob.
Schopnosti vývojáře SW se totiž dnes pomalu začínají počítat až za hranicí práce s počítačem. Výše uvedené dovednosti zvyšují naši hodnotu na trhu práce – a tím i šanci, že budeme dělat to, co nás baví, a budeme za to slušně placeni. Znalost obchodu, organizace, komunikace, trhu či managementu, tedy oborů, které se netýkají přímo programování, ale s vývojem souvisí, zvýší náš náskok před ostatními mnohem víc, než znalost dalšího programovacího jazyka.
Závěrečné pravidlo, které shrnuje a doplňuje vše, co bylo výše řečeno, by se dalo vyjádřit zhruba takto: Je důležité mít na paměti, že software (nebo v našem případě web) není sám o sobě konečným cílem, ale prostředkem – a tomu přizpůsobit svoje chování a uvažování.
Přehled komentářů