Prečo programovací jazyk Go?
Úvod
Programovací jazyk je nástroj na tvorbu produktov. Samotné používanie určitého jazyka neurčuje zručnosti vývojára. Avšak výber jazyka a spôsob jeho zvládania môže priamo ovplyvniť myslenie a smer rastu vývojára. Najmä porovnávanie súčasne používaného jazyka s inými jazykmi môže výrazne rozšíriť technický obzor a rozvíjať zmysel pre podstatu. V tomto texte sa pokúsim rozprávať o piatich aspektoch, prečo som si vybral Go a ako to pomáha rastu vývojára.
1. Go predstavuje rovnováhu medzi výkonom a produktivitou.
Existuje množstvo programovacích jazykov a každý z nich má svoje výhody a nevýhody v závislosti od svojich vlastností.
- C poskytuje vynikajúci výkon a riadenie na nízkej úrovni, avšak vývojár musí sám spravovať pamäť a kvôli nedostatku funkcií na vysokej úrovni je produktivita nízka a údržba náročná.
- C++ a Rust podporujú rôzne pokročilé funkcie ako objektovo orientované programovanie, šablóny a metaprogramovanie, avšak ich syntax je komplexná, krivka učenia strmá a pomalá rýchlosť kompilácie ich robí nevhodnými pre opakované nasadenie.
- Java a C# sú široko používané pre rozsiahle služby vďaka svojej platformovej nezávislosti a stabilite, avšak bežia na ťažkých virtuálnych strojoch, čo komplikuje nasadenie a prostredie vykonávania a zvyšuje nároky na zdroje.
- Python a Javascript sú vhodné pre rýchly vývoj vďaka svojej stručnej syntaxi a bohatej ekosystému, avšak ich výkon je slabý a dôveryhodnosť ekosystému nízka, čo odhaľuje štrukturálne obmedzenia v rozsiahlych systémoch.
Naopak, Golang je jazyk, ktorý dosahuje vynikajúcu rovnováhu medzi výkonom a produktivitou. Pretože Go je kompilovaný jazyk ako C, zabezpečuje vysoký výkon, pričom zároveň poskytuje flexibilitu nasadenia na úrovni interpreta vďaka rýchlej kompilácii. To znamená, že Go je vyvážený jazyk, ktorý sa dá stabilne používať vo väčšine prostredí bez výrazných nevýhod.
2. Go zabraňuje Cargo Cult Programming.
Počas druhej svetovej vojny spojenci vybudovali letecké základne na tichomorských ostrovoch, aby pomohli vo vojne. Veľké množstvo zásob a vojenského vybavenia výrazne zmenilo život vojakov a domorodcov. Obyvatelia prvýkrát videli lietadlá prichádzajúce s vyrobeným oblečením, konzervovanými potravinami a inými predmetmi. Po skončení vojny bola základňa opustená a náklad už neprichádzal. Preto si ostrovania obliekli uniformy, aby napodobnili vojakov, riadiacich letovej prevádzky, vojakov a námorníkov, a postavili niečo podobné pristávacej dráhe, pričom pomocou palíc vysielali signály na pristátie lietadlám. Pokračovali v pochodoch, aby náklad z lietadla padal padákom. Avšak lietadlo, na ktoré čakali, neprišlo.
Cargo Cult Programming označuje vývojový zvyk, pri ktorom sa napodobňuje len vonkajší vzhľad kódu alebo technológie bez pochopenia ich princípov. U moderných vývojárov, najmä v oblasti webového vývoja, sa tento zvyk častokrát vyskytuje, keď sa kopírujú veci bez pochopenia ich významu. Vďaka frameworkom ako React, Next, Spring, Django je vývoj možný aj bez poznania vnútornej štruktúry, avšak často nie je možné správne reagovať ani na malú chybu. S pridaním nástrojov na generovanie kódu pomocou AI sa ešte viac rozšíril vývojový prístup, pri ktorom sa len kopírujú a vkladajú výsledky, namiesto priameho písania kódu alebo pochopenia princípov.
Go sa tomuto problému zásadne vyhýba na úrovni filozofie jazyka. Go je jazyk navrhnutý skôr na základe štandardnej knižnice než na základe frameworku. Vývojári môžu vytvoriť webový server na úrovni skutočnej služby len pomocou základných knižníc ako net/http, database/sql, a tým prirodzene rozvíjajú intuíciu a pochopenie nízkourovňových štruktúr, ako sú sieť, databáza a I/O. Takáto štruktúra, ktorá umožňuje pevné osvojenie základov bez závislosti na frameworku, poskytuje vývojárom základ pre neustály rast bez straty podstaty technológie.
3. Go poskytuje robustný model súbežnosti.
Súčasné CPU sa vyvíjajú smerom k zlepšovaniu výkonu paralelným využívaním viacerých jadier, namiesto zvyšovania rýchlosti jedného jadra. V dôsledku toho sa súbežnosť, pri ktorej jeden program dokáže spracovať viacero úloh súčasne, stala nevyhnutnosťou a dôležitosť jazyka, ktorý ju dokáže efektívne navrhovať a implementovať, neustále rastie. Go je jazyk optimalizovaný pre takéto prostredie. Goroutine je ľahký vlákno, ktoré poskytuje Go, a môže byť vytvorené s len niekoľkými KB stacku. Aj tisíce goroutín bežiacich súčasne spotrebúvajú len minimálne systémové zdroje. Go runtime efektívne distribuuje množstvo goroutín na OS vlákna prostredníctvom vlastného M:N scheduleru, a tento proces sa automaticky optimalizuje bez priameho zásahu vývojára. To umožňuje vývojárovi navrhovať súbežnú logiku bezpečným a konzistentným spôsobom bez zložitej synchronizačnej logiky alebo vlastného plánovania.
Go tiež aktívne podporuje moderný návrh súbežnosti pomocou synchronizačných nástrojov ako mutex, waitGroup, channel a context. Vďaka týmto štruktúram si vývojári môžu prirodzene osvojiť praktický zmysel pre súbežnosť a paralelizmus bez toho, aby sa zamotávali do zložitých teórií, a môžu dosiahnuť vysokú úroveň abstrakcie a dizajnérskych schopností, ktoré sú využiteľné od základov.
4. Go je jazyk vytvorený skvelými vývojármi s jasnou víziou.
Go je jazyk, ktorý vznikol pod vedením legendárnych vývojárov z Google: Roberta Griesemera, Roba Pika a Kena Thompsona. Sú to zakladatelia Unixu a jazyka C, a taktiež majstri v oblasti kompilátorov a systémového softvéru, čo samo o sebe dokazuje technickú spoľahlivosť Go. Navyše, s odrazom praktických skúseností a know-how z prevádzky rozsiahlych služieb od mnohých inžinierov z Google, sa Go od začiatku vyvíjal s cieľom riešiť reálne problémy, s konzistentnou filozofiou a smerovaním.
Iné jazyky často prinášajú zmätok do komunít a medzi používateľov kvôli narušeniam kompatibility, zmenám v dizajne, nestabilným licenciám a neštandardizovaným ekosystémom. Napríklad, Python bol rozdelený na 2 a 3 kvôli narušeniu kompatibility na niekoľko rokov, a po akvizícii spoločnosťou Oracle sa politika licencií Javy stala nestabilnou, čo viedlo k nárastu prípadov, keď sa spoločnosti zdráhali ju zavádzať. Okrem toho, Node.js stále koexistuje s CJS a ESM, pričom neposkytuje konzistentný modulárny systém.
Naopak, Go si za svoju najvyššiu hodnotu stanovuje konzistentnosť a stabilitu. Tím Go dôsledne udržiava spätnú kompatibilitu a pri zavádzaní nových funkcií sa drží postupnej integrácie, aby sa predišlo konfliktom s existujúcim kódom. Syntax sa tiež vyhýba zbytočným kľúčovým slovám a obmedzuje nadmernú abstrakciu, čím zabraňuje zbytočnej komplexnosti samotného jazyka. Okrem toho, konzistentný oficiálny toolchain ako go fmt, go mod, go build, go test zabezpečuje, aby všetky projekty Go mali rovnaké vývojové prostredie a štruktúru, a silná a praktická štandardná knižnica spoľahlivo podporuje väčšinu funkcií potrebných pre reálny vývoj, ako sú webové servery, spracovanie súborov a pripojenie k databázam, a to aj bez samostatného frameworku.