Komunikace odhadu času patří k nejcitlivějším momentům spolupráce se zákazníkem. Většina řemeslníků, programátorů nebo konzultantů se bojí, že když odhad nepodají dostatečně optimisticky, zákazník si vybere konkurenci. Výsledek je pak dvojí: buď zákazník dostane příliš růžový slib, který se nenaplní, a ztratíte důvěru, anebo odhad natáhnete tak, aby byl bezpečný, ale tím projekt prodražíte. Ani jedna cesta nevede k dlouhodobě dobré pověsti.
Útok typu SQL injection patří mezi nejstarší, ale stále nejrozšířenější metody napadení webových aplikací. Princip je jednoduchý: útočník vloží do vstupního pole, URL parametru nebo hlavičky databázový dotaz, který aplikace neopatrně spojí s tím legitimním. Místo aby server zpracoval jen zamýšlený příkaz, spustí i ten podvržený – a tím může číst, měnit nebo mazat data. Nejhorší scénáře vedou k úplnému převzetí serveru. Přitom obrana není nijak složitá, pokud víte, na co se zaměřit.
Největší zrádce: řazení a porovnávání textu Dalším častým problémem je řazení. MySQL ve výchozím nastavení používá porovnávání bez ohledu na velikost písmen a ne vždy respektuje českou diakritiku. PostgreSQL používá pravidla podle zvolené locale. Pokud vaše aplikace spoléhá na konkrétní pořadí výsledků, musíte to ošetřit explicitně – buď definováním collation přímo u sloupce, nebo použitím funkce lower v dotazech. Jinak se může stát, že se výpis uživatelů seřadí podle ASCII hodnot a „Černý” skončí až za „Zelený”, což je pro uživatele matoucí.
Základním krokem je začít u jednotkových testů. Každá třída nebo funkce by měla být pokryta testy, které ověřují logiku izolovaně od okolí. To znamená používat falešné objekty (mocks, stubs) pro databáze, soubory nebo síťové služby. Dbejte na to, aby testy nebyly závislé na pořadí spuštění, na čase ani na náhodných hodnotách. Pokud jednotkový test občas selže bez změny kódu, je to varovný signál — test není deterministický a v pyramidě se chová jako časovaná bomba. Většina testů (60–70 %) by měla patřit právě sem.
Typickou chybou je slibovat „průběžně budeme informovat”. Tato fráze nic neznamená a zákazník si pod ní představí každodenní hlášení. Mnohem lepší je hned na začátku domluvit, kdy přesně budete posílat zprávy (například každý pátek odpoledne) a co v nich bude (stav, zpoždění, nejbližší krok). Pokud víte, že něco může sklouznout, oznamte to dřív, než se to stane. Zákazník vám odpustí zpoždění, ale nikdy neodpustí ticho a náhlé zjištění, že se práce nestíhá.
Nezapomeňte, že první zaměstnání není o dokonalém kódu, ale o tom, jestli do týmu zapadnete a jestli se rychle učíte. Proto se vyhněte dvěma extrémům: nepřehánějte své zkušenosti a zároveň se nepodceňujte. Když firma hledá juniora, ví, že bude investovat do vašeho rozvoje. Vaším úkolem je ukázat, že tato investice nebude ztracená. Připravte si proto otázky na plat? Ne, to nechte na pozdější fázi. Místo toho se ptejte na mentoring, na to, jak vypadá první měsíc v práci, nebo na to, co by si přáli, abyste se naučil před nástupem.
Další past je v tom, že se snažíte zákazníkovi vyjít vstříc a do odhadu započítáte minimum času. Přitom každý projekt má nevyhnutelné rezervy – na komunikaci, na opravy, na čekání. Zkušený profesionál ví, že když odhad řekne „pět dní”, ve skutečnosti to bude osm. Důvod není neschopnost, ale fakt, že se do práce vždy přimíchají nepředvídatelné věci. Odhad tedy vždy navrhněte jako střední hodnotu, ne jako nejlepší možný scénář. A rovnou vysvětlete, proč tam rezerva je: „Po počítejte s tím, že reálně to bude 6–7 dní, protože potřebuji dva dny na případné úpravy podle vašich připomínek.” Tím zákazník dostane číslo, se kterým může počítat, a vy se vyhnete stresu.
Pokud se dostanete k technickému úkolu, který se zadává doma, nespěchejte. Rozdělte si práci na menší části a komentujte, co děláte a proč. Většina uchazečů odevzdá řešení, které sice funguje, ale nikdo nechápe, jak k němu přišli. Průběžné commit messages a krátký README s vysvětlením architektury ukážou, že umíte komunikovat. A to je přesně to, co firmy hledají – ne robota, který píše kód, ale člověka, který se umí zeptat, když něčemu nerozumí. Tímto způsobem se vyhnete i nejčastějšímu zklamání: že jste do vývoje šli s představou samostatné práce, a zjistíte, že je to hlavně o spolupráci.
Kromě technických opatření je zásadní také přístup k oprávněním. Účet, přes který se aplikace připojuje k databázi, by měl mít pouze nezbytná práva. Pokud aplikace potřebuje data číst, ale ne měnit, použijte účet pouze pro čtení. Pokud potřebuje zapisovat do jedné tabulky, nedávejte mu práva na celou databázi. Tím omezíte škody, když se útočníkovi podaří dotaz prosadit. A nakonec – pravidelně aktualizujte knihovny a frameworky. Starší verze často obsahují známé zranitelnosti, na které existují veřejné exploit nástroje. Kombinace parametrizovaných dotazů, důsledné validace a správně nastavených oprávnění vám dá mnohem větší jistotu, než spoléhání na jedinou techniku.