Kopírujte, kopírujte, kopírujte! Ale ne jako opice!

Chtěl bych všem čtenářum tohoto textu (a hlavně junuornim programátorum) předat pár důležitých myšlenek. Kdybych si je před deseti lety plně uvědomil, ušetřilo by mi to spoustu nepříjemných chvil, stresu a hodin spánku.

S trochou cynismu bych mohl říct, že mojí nejsilnější stránkou je to, že umím dobře kopírovat. Nemyslím tím ale kód – tomu se říká cargo cult programming a není to příliš k programátorské cti. Mám na mysli myšlenky. A myslím si, že by to měl dělat v co největší míře každý. Nasávat ty nejlepší cizí myšlenky, keré jsou k mání. To je ta nejdůležitější věc, kterou bysme si měli několikrát denně opakovat.

Není to žádná moje, nová, či geniální myšlenka. Je zkopírovaná :-). Ale přesto opomíjená a nedoceněná. Z toho co jsem vypozoroval, spousta programátorů ji plně nevyužívá. Pro to dokonce vznikl i pojem NIH syndrom (Not invented here), který má své vysvětlení i v psychologii. Jde o to, že pro náš mozek je mnohem přirozenější a lehčí, řešit věci svépomocí, než využít řešení, postupů a myšlenek cizích lidí.

Nevztahuje se to jenom na programování, ale na všechno. Celá naše společnost je založená na nasávání a kopírování cizích myšlenek. Mozart by těžko složil tak skvělé symfonie, kdyby předtím nenasál to nejlepší, co v hudbě do té doby bylo známo. Einstein by nevymyslel teorii relativity, kdyby předtím nestudovat všechny teorie těch nejlepších, do té doby žijících fyziků. Steve Jobs byl dokonce hrdý na to, že krade myšlenky.

Prokazatelně nejrychlejší cesta kupředu je ta, že to, co děláme, stavíme na již existujících myšlenkách. Není divu. Jednotlivec má velmi omezený čas, který může čemukoliv zasvětit. Kdokoliv, kdo chce být špička ve svém oboru a dělat svojí práci na špičkové úrovni, musí nasát myšlenky jiných lidí, kteří dané věci už zasvětili celý život. Je to tak jednoduchá, jasná a prostá myšlenka. Přesto ale, praktikovaná v mnohem menší míře, než by si zasloužila.

Když jsem začínal programovat, všechno jsem se snažil psát tak, “aby to prostě fungovalo”. S pomocí stackoverflow copy-pasting jsem docílil snad všeho, co jsem potřeboval. Jakýkoliv programovací jazyk je totiž dost ohebný. Dokud to jde zkompilovat, nebo spustit bez syntax error, vše je možné. Vše lze napsat nekonečně způsoby. Každý způsob má ale své důsledky, které se nějak projeví. Zejména – a to je úplně nejdůležitější – tak že kód půjde lépe či hůře rozšiřovat, měnit či optimalizovat.

Jak šel čas a začal jsem programovat za peníze, stack-overflow přestával stačit. Byl jsem nucen sem tam začít číst dokumentace a sem tam i nějaké články. Problém byl v tom, že jsem neuměl moc dobře anglicky, takže jsem z lenosti a pohodlnosti čerpal jenom z českých zdrojů. Další problém byl v tom, že to stačilo. Věděl jsem, co je Nette a jak použít DI kontejner. S tím se dá spíchnout skoro všechno.

Bohužel, nikdo po mě nikdy nic „moc“ víc nechtěl. A na to, kolik mi bylo, mi jako každýmu programátorovi – platili docela dobře. Takže jsem stagnoval (naučit se občas používat novou knihovnu nebo cizí API je jen rutina). Naštěstí jsem ale vždycky dělal na projektech, kde samotná aplikace byla hlavní produkt. Takže všechno, co tam kdo napsal, se muselo nějakým způsobem udržovat a dál rozvíjet. Čím dál častěji to nebyly hezké chvíle. A já měl čím dál větší pocit, že tady něco smrdí. Že to takhle nejde a není to ono.

Mezitím se moje angličtina zlepšila a já si uvědomil, že toho můžu využít (jak geniální myšlenka!). Otevřel se mi úplně nový svět. Položil jsem si asi tu nejdůležitější otázku: Proč vlastně nenasávám všechny moudrosti (nejen o programování) od těch nejlepších lidí s tou nejlepší reputací a nejlepší schopností předávat informace… na celém světě?

Tím se mi změnil svět. Našel jsem si své učitele a začal nasávat všechno. Prvním a pro mě asi nejdůležitějším byl a pořád je Uncle Bob – autor knížky Clean Code, který definoval SOLID principy. Je také autor nejlepších vzdělávacích videí o programování, které by měl každý povinně vidět. A mnoho dalších: Martim Fowler, Eric Evans, Greg Young, Udi Dahan, Mathias Verraes…

Zjistil jsem, že problémy, se kterými jsem se potýkal, nevznikaly kvůli low-level detailum. Například hlavní problém s pomalou aplikací kvůli zvolené databázi, není kvůli špatné volbě databáze. Ten opravdový problém je v neschopnosti vyměnit databázi za vhodnější. Problém špatně napsané třídy není v tom, že je špatně napsaná. Problém je v tom, že každý má strach tu třídu přepsat. Proč?

Protože má třída nezdravé závislosti, porušuje SOLID principy a/nebo na ní nejsou správně napsané testy, případně nejsou napsané vůbec. Máme mnohem větší tendenci, soustředit se na detaily a opomíjet vyšší koncepty. Principy a filozofii toho, jak dělat věci správně. Mnohokrát jsem například slyšel, že “o Test-driven-development každý jenom mluví, ale nikdo to nedělá”. To je možná pravda, ale velká chyba. Proč? NIH syndrom 🙂 – “zkoušel jsem to (tak nějak podle sebe), nefungovalo to, nedělám to”.  Nebo taky: “Musím to udělat rychle a nemám čas zjišťovat, jak to udělat správně”. To jsou jenom výmluvy. Racionalizace. A taky zdroj většiny problémů.

Proto tímto apeluji na všechny, kteří ví, že nemají čisté svědomí: snažte se dělat věci správně, ne rychle. Ta investice se dřív nebo později vyplatí. Odcházet z práce s čistou hlavou, nedělat přesčasy protože je potřeba hasit problémy, je k nezaplacení. Jak na to, jsem už zmínil: inspirujte se u nejlepších! Youtube, internet i knihkupectví jsou plné informací a vy můžete prostě jít a všechno se to naučit. Ty lidi to vymysleli za vás. Tak proč vymýšlet “svůj způsob”? Přikládám pár must-watch videí na zlatém podnose 🙂

A nakonec něco pro fajnšmejkry:

Příspěvek byl publikován v rubrice Nezařazené a jeho autorem je tomcizek. Můžete si jeho odkaz uložit mezi své oblíbené záložky nebo ho sdílet s přáteli.