Proč jazyk Go?
서론
Programovací jazyk je nástrojem pro tvorbu produktů. Pouhé používání určitého jazyka neurčuje dovednosti vývojáře. Avšak volba jazyka a způsob, jakým je s ním nakládáno, může mít přímý dopad na způsob uvažování a směr profesního růstu vývojáře. Zvláště srovnávání jazyka, který se právě používá, s jinými jazyky, významně pomáhá rozšířit technický rozhled a rozvíjet smysl pro podstatu. V tomto textu se pokusím vysvětlit, proč jsem si vybral Go a jakým způsobem pomáhá rozvoji vývojáře, a to v pěti aspektech.
1. Go je jazyk, který vyvažuje výkon a produktivitu.
Existuje nespočet programovacích jazyků a každý z nich má svá pro a proti v závislosti na svých charakteristikách.
- C nabízí vynikající výkon a nízkoúrovňovou kontrolu, avšak správu paměti musí provádět sám vývojář a nedostatek vysokoúrovňových funkcí snižuje produktivitu a ztěžuje údržbu.
- C++ a Rust podporují různé pokročilé funkce, jako je objektově orientované programování, šablony a metaprogramování, ale jejich syntaxe je složitá, křivka učení strmá a pomalá rychlost kompilace je činí nevhodnými pro opakované nasazení.
- Java a C# poskytují nezávislost na platformě a stabilitu, a jsou široce používány pro rozsáhlé služby, ale běží na těžkopádném virtuálním stroji, což komplikuje nasazení a běhové prostředí a zvyšuje nároky na zdroje.
- Python a Javascript jsou díky stručné syntaxi a bohatému ekosystému vhodné pro rychlý vývoj, ale jejich běhový výkon je nízký a spolehlivost ekosystému je nízká, což odhaluje strukturální omezení ve velkých systémech.
Naproti tomu Golang je jazyk, který dosahuje vynikající rovnováhy mezi výkonem a produktivitou. Go je kompilovaný jazyk jako C, a proto zajišťuje vysoký běhový výkon, přičemž rychlá rychlost kompilace poskytuje flexibilitu nasazení na úrovni interpretu. Jinými slovy, Go je vyvážený jazyk, který lze stabilně využívat ve většině prostředí bez výrazných nevýhod.
2. Go zabraňuje programování typu Cargo Cult.
Během druhé světové války spojenecké síly vybudovaly letecké základny na tichomořských ostrovech, aby podpořily válečné úsilí. Velké množství zásob a vojenského vybavení významně změnilo život vojáků i domorodců. Obyvatelé poprvé viděli letadla, která přivážela vyrobené oblečení, konzervované potraviny a další předměty. Po skončení války byly základny opuštěny a náklad už nepřicházel. Proto se ostrované oblékli jako letečtí dispečeři, vojáci nebo námořníci, aby napodobili vojáky, a vytvořili něco jako přistávací dráhu a pomocí tyčí dávali letadlům signály k přistání. Pokračovali v rituálech, aby náklad seskočil padákem z letadla. Avšak letadlo, na které čekali, nepřiletělo.
Programování typu Cargo Cult označuje vývojový zvyk, kdy vývojáři napodobují pouze vnější formu kódu nebo technologie, aniž by pochopili jejich principy. V moderní době, zejména v oblasti webového vývoje, je takový zvyk, kdy se slepě následuje bez pochopení významu, běžný. Díky frameworkům jako React, Next, Spring, Django je vývoj možný i bez znalosti vnitřní struktury, ale často dochází k situacím, kdy vývojáři nedokážou řádně reagovat ani na malou chybu. K tomu se v poslední době přidaly nástroje pro generování kódu pomocí AI, což ještě více rozšířilo styl vývoje, kdy se spíše kopírují a vkládají výsledky, než aby se kód psal přímo nebo se chápaly jeho principy.
Go tento problém zásadně odmítá na úrovni filozofie jazyka. Go je jazyk navržený s důrazem na standardní knihovny, nikoli na frameworky. Vývojáři mohou postavit webový server na úrovni skutečné služby pouze pomocí základních knihoven jako net/http, database/sql, a přirozeně si tak budují intuici a porozumění nízkoúrovňovým strukturám, jako jsou sítě, databáze a I/O. Tato struktura, která umožňuje důkladné osvojení základů bez závislosti na frameworku, se stává základem pro to, aby vývojář neztratil podstatu technologie a mohl se neustále rozvíjet.
3. Go nabízí robustní model souběžnosti.
Moderní CPU se vyvíjejí směrem k zvyšování výkonu prostřednictvím paralelního využití více jader, spíše než zvyšováním rychlosti jednoho jádra. V důsledku toho se souběžnost, kdy jeden program dokáže zpracovávat více úloh současně, stala nezbytností a roste význam jazyků, které ji dokážou efektivně navrhovat a implementovat. Go je jazyk optimalizovaný pro toto prostředí. Goroutine je lehký Thread poskytovaný jazykem Go, který lze vytvořit s pouhými několika KB zásobníku a i při souběžném spuštění tisíců goroutin spotřebovává minimální systémové zdroje. Go runtime efektivně rozděluje nespočet goroutin na OS Thready prostřednictvím vlastního M:N scheduleru, a tento proces se automaticky optimalizuje bez přímého zásahu vývojáře. To umožňuje vývojáři navrhovat logiku souběžnosti bezpečným a konzistentním způsobem, bez složité synchronizační logiky nebo vlastního plánování.
Dále Go aktivně podporuje moderní návrh souběžnosti pomocí synchronizačních nástrojů jako mutex, waitGroup, a pomocí channel a context. Díky této struktuře si vývojář přirozeně osvojuje praktický smysl pro souběžnost a paralelismus, aniž by se musel zaplétat do složitých teorií, a může dosáhnout vysoké úrovně abstrakce a návrhových schopností, které lze využít v praxi.
4. Go je jazyk vytvořený vynikajícími vývojáři, kteří drží směr.
Go je jazyk, který vznikl pod vedením legendárních vývojářů ze společnosti Google: Roberta Griesemera, Roba Pikea a Kena Thompsona. Tito lidé, zakladatelé Unixu a jazyka C a mistři v oblasti kompilátorů a systémového softwaru, sami o sobě dokazují technickou důvěryhodnost jazyka Go. Díky tomu, že Go reflektuje praktické zkušenosti a know-how z provozu rozsáhlých služeb mnoha inženýrů Google, se od počátku zaměřuje na řešení reálných problémů a vyvíjí se s konzistentní filozofií a směrem.
Jiné jazyky často způsobují zmatek v komunitě a mezi uživateli kvůli narušení kompatibility, změnám v návrhu, nestabilním licencím nebo nestandardizovaným ekosystémům. Například v případě Pythonu došlo kvůli narušení kompatibility mezi verzemi 2 a 3 k rozdělení ekosystému na mnoho let, a u Javy se po akvizici společností Oracle zvýšil počet případů, kdy se podniky zdráhaly ji zavést kvůli nestabilní licenční politice. Také Node.js stále neposkytuje konzistentní modulární systém, protože CJS a ESM koexistují.
Naopak Go je jazyk, který klade na první místo konzistenci a stabilitu. Tým Go důsledně udržuje zpětnou kompatibilitu a při zavádění nových funkcí se drží postupné integrace, aby nedocházelo ke konfliktům se stávajícím kódem. Syntax také omezuje zbytečné klíčová slova a brání nadměrné abstrakci, čímž zabraňuje zbytečnému komplikování samotného jazyka. Kromě toho konzistentní oficiální toolchain, jako je go fmt, go mod, go build, go test, zajišťuje, že všechny Go projekty mají stejné vývojové prostředí a strukturu, a robustní a praktické standardní knihovny spolehlivě podporují většinu funkcí potřebných pro praktický vývoj, jako je webový server, zpracování souborů, připojení k databázi, a to bez nutnosti dalšího frameworku.