Programování není o mačkání klávesnice a co nejrychlejším psaní. Není to o nábožném zapamatování si klávesových zkratek a nakonec o tom, že myš se stane zastaralou. Nejde o to naučit se všechny možné programovací jazyky, pokud je to vůbec možné. Dobrý programátor není definován značkou, cenou, výkonem a operačním systémem svého počítače, ani preferencí editorů kódu a IDE-VS Code, Atom, IntelliJ IDEA, Vim, Notepad++ nebo jiných. Na rozdíl od všeobecného přesvědčení, které vzniklo díky mnoha hollywoodským filmům, se programování rozhodně nerovná hackování.
Programování navíc přesahuje rámec zapamatování si syntaxe a vestavěných funkcí programovacího jazyka. Logika, podmínky, if
příkazy a algoritmy – zejména ty třídicí – nedávají úplný obraz toho, co programování skutečně je. Matematika, rekurze, informatika a návrhové vzory ho také nevystihují. Přestože tvoří obrovskou část toho, co programování je, jsou jen jedním dílkem skládačky.
Před napsáním jediného řádku kódu se důkladně naplánuje návrh a architektura projektu, aby se zajistil nebo alespoň zvýšil předpoklad hladkého průběhu vývojového cyklu. Zde přichází na řadu návrh softwaru. V této fázi vývoje se plánují řetězce nástrojů, potrubí, vrstvy abstrakcí pro veřejná a interní rozhraní API, modularizace, objektové vztahy a strukturování databází.
Jsme živí, dýchající ladiči
Umění programovat vyžaduje, abychom přemýšleli nestandardně a řešili problémy co nejpragmatičtějšími, nejefektivnějšími a nejreálnějšími řešeními. To je pravděpodobně důvod, proč jsme s největší pravděpodobností „ajťák“ nebo „zákaznická podpora“ v domácnosti. Naší prací je prakticky opravovat to, co je rozbité. Jako by „programování“ byl oslavný výraz pro „řešení problémů“.
Jinými slovy, jsme živí, dýchající ladiči na počítači i mimo něj, a proto je důležité, abychom uměli číst a psát dokumentaci. Správná dokumentace – která má podobu skutečných stránek podrobné dokumentace nebo je tak jednoduchá jako posypání základu kódu hodnotnými komentáři – slouží jako jedno z nejdůležitějších záchranných lan programátora. Bez ní jsme ztraceni ve tmě a nejsme schopni plnit své vlastní povinnosti ladičů. Nelze dosáhnout téměř žádného pokroku, protože většinu času bychom strávili experimentováním a zkoumáním toho, jak framework nebo starší kódová báze funguje. Celkově by to vedlo k příšerně otřesnému vývojářskému zážitku.
Zvažte všechny možné scénáře
Debugování je už tak dost těžké. Aby toho nebylo málo, provádění kódu obvykle není lineární. Velké projekty s sebou nesou více „větví“ možných cest provádění kvůli programové logice s příkazem if
. Musíme počítat se všemi možnými scénáři a chybami, zejména pokud se týkají uživatelského vstupu. Kognitivní zátěž, kterou vyžaduje sledování každé možné cesty provádění, činí programování o to obtížnějším.
Uživatelská zkušenost
Překročíme-li hranice světa vývoje, vžijeme se do role běžného uživatele. Kromě poskytování funkcí, přidávání nových funkcí, opravování chyb a dokumentování naší kódové základny se zaměřujeme také na to, jak průměrný uživatel s naší aplikací nebo softwarem komunikuje. Bereme v úvahu více faktorů, které vedou ke skvělému uživatelskému zážitku, jako je (mimo jiné) přístupnost, použitelnost, uživatelská přívětivost a -odhalitelnost, design uživatelského rozhraní, barevná témata, funkční animace a výkon.
Výkon a optimalizace
Když už jsme u toho, výkon je sám o sobě obrovským aspektem programování. Zejména ti, kteří mají vzdělání v oblasti informatiky, se snažíme používat a psát časově a prostorově nejefektivnější algoritmy. Jsme posedlí nevyzpytatelnou časovou škálou mikrosekund, abychom z dostupné paměti, procesorů a grafických procesorů vyždímali maximum.
V kontextu vývoje webových aplikací je optimalizace sítě důležitým pojmem, který je třeba pochopit. Přeskakujeme obruče, abychom minimalizovali a komprimovali naše HTML, CSS a JavaScript jen proto, abychom minimalizovali užitečné zatížení odpovědi ze serveru. Obrázky a další různé zdroje jsou také komprimovány a líně načítány, aby se minimalizovalo množství dat, které musí uživatel stáhnout, než se stránka stane smysluplnou a použitelnou.
Jsou však chvíle, kdy jsme výkonem příliš posedlí. Předčasná optimalizace se stává problémem, když se zbytečně zabýváme optimalizací určitých částí kódové základny, místo abychom se zaměřili na to, co je třeba udělat pro skutečný pokrok a produktivitu. V takovém případě musíme mít dostatek moudrosti, abychom dokázali posoudit, které části kódové základny skutečně potřebují optimalizaci.
Bezpečnost
Kromě uživatelského rozhraní a logiky našeho softwaru jsme jako programátoři zodpovědní za bezpečnost našich uživatelů. V dnešní době, kdy jsou data velmi žádaná a silně zpeněžovaná, je důležitější než kdy jindy zajistit, aby osobní údaje našich uživatelů byly v bezpečí. Podnikáme další kroky k ochraně soukromých údajů, protože naši uživatelé našemu softwaru důvěřují. Pokud tuto odpovědnost nedodržujeme, rozhodně nejsme opravdoví programátoři, a to ani náhodou.
Přístup k bezpečnosti není nikdy příliš bezpečný. Obecným pravidlem je, že „nikdy nedůvěřujeme vstupu uživatele“. Dokonce lze považovat za „osvědčený postup“ vynaložit velké úsilí na sanitizaci dat a uživatelských vstupů. Nejenže vystavujeme náš software a infastrukturu velkému riziku, pokud s nimi nezacházíme opatrně, ale riskujeme také ohrožení citlivých uživatelských dat – právě těch dat, která slibujeme jako programátoři chránit.
Zabezpečení se však netýká pouze uživatelských dat a vstupů. Viry, červi, trojské koně, adware, key loggery, ransomware a další formy počítačového malwaru se stále šíří a sužují miliony a miliony počítačů a zařízení po celém světě. Ani po desetiletích technologických vylepšení v oblasti hardwaru a softwaru neexistuje nic takového jako nezranitelný systém. Zabezpečení je prostě řemeslo, které se neustále zdokonaluje, ale nikdy nebude dokonalé, protože se vždy najde pár zvědavců, kteří budou zkoumat a hledat všechny možné způsoby, jak se do systému „nabourat“.
Z tohoto důvodu, bez ohledu na případ použití a uživatelskou základnu, navrhujeme náš software s ohledem na zabezpečení jako jednu z hlavních priorit, ne-li prioritu nejvyšší. Děláme to proto, abychom naše uživatele ochránili před výše zmíněnými hrozbami, které mohou způsobit nepříjemnosti, jako je ztráta dat, poškození souborů a zhroucení systému, abychom jmenovali alespoň některé z nich.
Týmová práce tvoří sen
I když se nemusí nutně týkat programování, týmová práce hraje při vývoji softwaru mimořádně důležitou roli. Při veškeré složitosti a pohyblivých částech jakéhokoli velkého projektu není možné, aby pouze jeden člověk vyvíjel kvalitní software ve svižném tempu pravidelných iterací nebo v přísných termínech a časových omezeních klienta či jakéhokoli nadřízeného subjektu.
Proto máme různé týmy lidí, kteří se specializují na některý z mnoha aspektů programování. Jeden člověk nikdy nebude mít všechny dovednosti a znalosti potřebné k efektivnímu a soudržnému slepení všech aspektů dohromady. Jeden tým může být zodpovědný za návrh uživatelského rozhraní a přístupnost, zatímco jiný může pracovat na funkčnosti samotného softwaru. Pokud se spojí všechny kompetence různých specializovaných týmů, bude mít výsledný software tu nejlepší funkčnost, uživatelský komfort, výkon a bezpečnost, jakou může v rámci finančních a praktických omezení mít.
Pro řízení času a dodržování termínů je nesmírně důležitá organizace a automatizace pracovních postupů. Věnujeme čas správné konfiguraci našich sestavovacích nástrojů a potrubí, protože nám to v budoucnu ušetří spoustu času. Obecně platí, že návratnost investic se s přibývajícím časem zvyšuje.
Dobrá spolupráce s ostatními
Chceme-li rozvinout myšlenku týmové práce a spolupráce, navazujeme zdravé vztahy s kolegy, protože nakonec úspěch projektu do značné míry závisí na úspěchu týmu, který za ním stojí. Snažíme se podporovat podpůrné pracovní prostředí, kde zkušení senioři všímavě vedou nováčky.
Protože vyvíjíme software jako tým, musíme brát ohled na ostatní, kteří čtou náš kód. Aby byl vývojový cyklus dlouhodobě udržitelný, považujeme čitelnost a udržovatelnost za stejně důležité jako logiku a funkčnost projektu. Důsledně píšeme dobrý, čitelný kód a zároveň poskytujeme informativní zprávy o revizích a dokumentaci, protože ty rozhodně pomohou nám i ostatním lépe porozumět našemu kódu.
Když už mluvíme o tom, že ostatní čtou náš kód, kontrola kódu je skvělou příležitostí, jak se dozvědět více o osvědčených postupech v programování. Je to také další způsob, jak se seznámit s kódovou základnou a jejím základním návrhem a architekturou. Přestože je konstruktivní kritika nepříjemná a na straně příjemce obtížně zvládnutelná, je důležité ji brát jako rozumnou radu, abychom se jako programátoři zlepšili.
Programování je těžké
Programování zahrnuje mnoho aspektů nad rámec funkčnosti, jako je uživatelský komfort, výkon, bezpečnost a týmová práce. Nestačí se striktně zaměřit pouze na jeden aspekt a ostatní vynechat. U projektů pozoruhodné velikosti a významu to není tak jednoduché jako napsat několik řádků kódu. Aby byl úspěšný, vyžaduje mnoho pečlivého plánování, navrhování, zvažování a týmové spolupráce. Ve skutečnosti se při programování stráví více času přemýšlením než psaním, zejména během dlouhých sezení při ladění.
V konečném důsledku je programování skutečně o neustálém, nepřetržitém učení. Přizpůsobivost a neustálé učení jsou klíčem k přežití v tomto odvětví. Nemůžeme očekávat, že zůstaneme relevantní, pokud se nebudeme snažit neustále učit. V tak proměnlivém odvětví s exponenciálním technologickým zdokonalováním musíme držet krok s jeho rychlým tempem, abychom neskončili v prachu.
Na závěr tohoto článku bych rád ocenil tvrdou práci všech vývojářů na celém světě. Abych mohl napsat tento článek, musel jsem se zamyslet nad každodenní prací týmu vývojářů. Musel jsem nahlédnout do mnoha aspektů programování a vývoje softwaru, které obvykle zůstávají bez povšimnutí. Od té doby si více vážím veškerého softwaru nainstalovaného v mém počítači. Proto doporučuji všem, aby dnes poděkovali programátorům bez ohledu na jejich zkušenosti. Kde bychom bez nich byli?
Nikdy neberte jejich tvrdou práci jako samozřejmost.