Proti polyglotnímu programování
V GoodData jsme polyglotně programovali už předtím, než se prosadily mikroslužby, a upřímně to byla asi jedna z největších chyb, které jsme kdy udělali. Naše platforma v roce 2008 začínala jako jednoduchý LAMP stack s rozhraním REST a spoustou JavaScriptu. Postupně jsme přidávali další a další jazyky podle zlatého pravidla na každou práci ten správný nástroj. Přidali jsme Erlang, protože v čem jiném psát distribuovaný systém? Přidali jsme C++, protože v čem jiném ladit výpočetní výkon? Od roku 2008 se náš stack pořád rozrůstal: Perl, Java, JavaScript, Erlang, C++, Python, Ruby. V tak různorodém prostředí bylo pro interoperabilitu zásadní schovat každou službu či komponentu za API. Všechny naše služby poskytují REST API, takže jejich programovací jazyk je implementační detail. Někdo by tu rozmanitost ocenil, ale podle mých pěti let zkušeností je to noční můra.
Zaprvé, jakmile začnete vyvíjet funkce přesahující jednu službu, potřebujete tým s odborníky na víc než jeden nebo dva jazyky. Jeden jazyk pro backend (vyberte si oblíbený) a jeden pro frontend (všem vládne JavaScript) jsou naprosto v pořádku, ale dát dohromady tým vývojářů pro Javu, Perl, Erlang a JavaScript je složité. Pro každý jazyk potřebujete víc než jednoho vývojáře, aby se mohli zastoupit. Vývojáři se většinou specializují na jeden jazyk. Můžete je zaškolit v dalších, ale stojí to spoustu času a peněz. Vývojáři musí daný jazyk i celý jeho ekosystém vnímat jako kariérní příležitost. Potřebujete člověka, který umí napsat kód do produkce, ne nováčka, který se naučil HelloWorld. Takové lidi můžete nabrat, pokud jsou k mání a máte čas projít hromadu životopisů a pohovorů, a to ještě nepočítám dobu, než se zorientují v problémech, které vaše firma řeší. Je to spíš volba o lidech a kultuře než technické rozhodnutí.
Zadruhé, co vlastně polyglotní programování nabízí? Je zajímavé vidět, že padesát řádků Javy lze zkrátit na deset řádků Clojure, ale k čemu to je? Přinejmenším na backendu většina kódu jen spustí několik dotazů SQL a převede výsledek do XML nebo JSON. Opravdu k tomu potřebujeme různé programovací jazyky? Pochybuji o tom a vy byste měli taky. Většinu programátorských úloh zvládneme v jednom jazyce, aniž bychom se připravili o pohodlí nebo produktivitu, protože máme k dispozici frameworky, nástroje a knihovny. Nemyslím si, že bychom měli používat jeden jazyk na všechno, ale používat různé jazyky, byť sebevíc lákavé, pro velmi podobné případy použití je plýtvání časem a prostředky.
Související články
Související epizody CZ Podcastu
- #261 · Leadership
O vedení lidí a týmů.