POIT #144: Golang

Witam w sto czterdziestym czwartym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy jest Golang.

Dziś moim gościem jest Bartłomiej Klimczak – w IT od 11 lat. Pochodzi ze światka PHPowego. Parę lat temu zmieniłem stack na Go. Bloger, szkoleniowiec, speaker, organizuje lokalny meet-up o Go, Jestem Google Developer Expertem w kategorii Go. Prywatnie dumny mąż i ojciec uroczej córki.

W tym odcinku o języku Go rozmawiamy w następujących kontekstach:

  • jaka jest historia powstania języka Go?
  • jakie są najpopularniejsze zastosowania tego języka?
  • czy Golang to tylko tzw. język do zastosowań serwerowych?
  • jakie narzędzia, biblioteki, frameworki i IDE są dostępne w Golang?
  • czym różni się od innych języków lub do czego jest podobny?
  • jakie są największe braki czy problemy z którymi mierzy się Golang?
  • czym jest GoCracow?
  • jak wyglądają oferty pracy?
  • jakie wynagrodzenia są obecnie oferowane programistom Go?
  • czy to jest dobry język na start przygody z programowaniem?
  • w jaki sposób i korzystając z jakich materiałów uczyć się Go?
  • w jakich kierunkach ten język i jego ekosystem będzie się rozwijał?

Subskrypcja podcastu:

Linki:

Wsparcie na Patronite:

Wierzę, że dobro wraca i że zawsze znajdą się osoby w bliższym lub dalszym gronie, którym przydaje się to co robię i które zechcą mnie wesprzeć w misji poszerzania horyzontów ludzi z branży IT.

Patronite to tak platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Chciałbym oddelegować kilka rzeczy, które wykonuję przy każdym podcaście a zaoszczędzony czas wykorzystać na przygotowanie jeszcze lepszych treści dla Ciebie. Sam jestem patronem kilku twórców internetowych i widzę, że taka pomoc daje dużą satysfakcję obu stronom.

👉Mój profil znajdziesz pod adresem: patronite.pl/porozmawiajmyoit

Pozostańmy w kontakcie:

 

Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner (posłuchaj)

Transkrypcja podcastu

To jest 144. odcinek podcastu Porozmawiajmy o IT, w którym z moim gościem rozmawiam o języku Go.

Przypominam, że w poprzednim odcinku rozmawiałem o pasji informatyki.

Wszystkie linki oraz transkrypcję dzisiejszej rozmowy znajdziesz pod adresem porozmawiajmyoit.pl/144.

Ocena lub recenzja podcastu w Twojej aplikacji jest bardzo cenna, więc nie zapomnij poświęcić na to kilku minut.

Sponsorem podcastu jest firma Apptension – wiodący polski twórca produktów cyfrowych i wydajnych, skalowalnych aplikacji. Zerknij na ich portfolio na apptension.dot/portfolio.

Sponsorem dzisiejszego odcinka jest również platforma rekrutacyjna SOLID.Jobs. Jeśli szukasz pracy w IT, koniecznie odwiedź adres solid.jobs. Znajdziesz tam tylko oferty pracy z widełkami wynagrodzeń. Jeśli aktualnie nie myślisz o znalezieniu nowej pracy, to koniecznie zapisz się na Job Alert, otrzymasz regularne wiadomości e-mail z zestawieniem ofert, które mogą Cię zainteresować. Jeśli w swojej pracy dalej korzystasz z SVN-a, to koniecznie odwiedź SOLID.Jobs.

W moim podcaście pytam gości o rekomendacje podcastów, których słuchają. Dziś sam mam jeden do polecenia. Tym podcastem jest Root Cause by Vived. Vived to aplikacja, której misją jest pomóc programistom zarówno w bieżącym radzeniu sobie z nawałem informacji, jakimi codziennie zarzucani są programiści z takich źródeł jak Twitter, Reddit czy chociażby Hacker News, ale również strategicznie dbać o rozwój umiejętności kariery. Możesz znaleźć tam nie tylko swój osobisty, wyselekcjonowany przez siebie feed, ale także regularne, cotygodniowe przeglądy wiadomości, pisane przez ludzi na co dzień pracujących w branży. Kolejną inicjatywą Vived, aby dostarczać informacje tam, gdzie są potencjalni odbiorcy, jest podcast Root cause by Vived, którego sam chętnie słucham i do tego też Cię zapraszam.

W ramach pierwszego sezonu dotykane są tam tematy zarówno karierowe, jak i popularne mity i często też fakty na temat zarobków w IT, efektywnego rozwoju czy procesu pracy, ale także bieżące trendy, takie jak blockchain, to, które projekty tak naprawdę korzystają na uczeniu maszynowym czy kierunek rozwoju chmur obliczeniowych. W podcaście można też znaleźć trochę futuryzmu, jeśli chodzi o kierunek, w którym podąża cała branża. Zgodnie z przyjętym tytułem serii, każdy temat rozkładany jest na czynniki pierwsze. Prowadzący, dzięki latom spędzonym w branży, potrafią pokazać nieoczywiste przyczyny poszczególnych zjawisk. Całość utrzymana jest w mocno merytorycznej, ale równocześnie rozrywkowej formie moderowanej dyskusji. Jednocześnie, żeby ubarwić formułę gadających głów, całość została okraszona dynamicznym montażem. Zapraszam do słuchania Root Cause by Vived – link w notatce do odcinka.

Nazywam się Krzysztof Kempiński, a moją misją jest poszerzanie horyzontów ludzi z branży IT. Środkiem do tego jest między innymi ten podcast. Zostając patronem na platformie Patronite, możesz mi w tym pomóc już dziś. Wejdź na porozmawiajmyoit.pl/wspieram i sprawdź szczegóły. Jednocześnie bardzo dziękuję moim obecnym patronom.

A teraz życzę Ci miłego słuchania.

Odpalamy!

Cześć! Mój dzisiejszy gość z IT jest związany od 11 lat, pochodzi ze światka PHP-owego, parę lat temu zmienił stack na Go. Bloger, szkoleniowiec, spiker, organizuje lokalny Meetup o Go, jest Google Developer Expertem w kategorii Go. Prywatnie dumny mąż, ojciec uroczej córki. Moim i Waszym gościem jest Bartłomiej Klimczak.

Cześć, Bartku! Bardzo miło mi gościć Cię w podcaście.

Cześć! Dziękuję za zaproszenie.

Obserwując to, co wrzucasz na przykład na Twittera, to tam widzę, że bardzo często pojawiają się takie dwie literki: G i O, więc pomyślałem, że musimy o tym Go, o tym Golangu porozmawiać, bo obserwuję też, że zyskuje na popularności. Muszę przyznać, że jest to dla mnie obca technologia, więc z chęcią wyciągnę coś z Ciebie i się z nią zapoznam. Dzięki więc, że przyjąłeś zaproszenie i rozpoczynam, jak zawsze u mnie, od pytania, czy słuchasz podcastów. Jeśli tak, to może masz jakieś swoje ulubione audycje.

Tak, kiedyś dużo częściej słuchałem podcastów, teraz ze względu na to, że pracuję z domu, nie jeżdżę do pracy, to mam tego czasu na podcasty mniej, ale z tych, co słuchałem albo słucham do tej pory, to są Piątki Na Produkcji, bardzo fajny podcast, Porozmawiajmy o IT, może kojarzysz [śmiech].

Coś mi świta.

Na podsłuchu od Niebezpiecznika, Przeprogramowani – ostatnio to odkryłem i mają tam kilka fajnych odcinków, Better Software Design, Patoarchitekci i jeśli oni słuchają tego podcastu, to błagam, zacznijcie z powrotem nagrywać, bo to zarąbisty podcast. Znalazłem tylko jeden w miarę fajny związany z Golangiem, to jest Go Time. A jeśli już takie pozatechniczne, to jest Pan Tabletka dla rodziców – to jest bardzo fajny podcast, gdzie facet rozmawia o odporności ogólnie, nie tylko u dzieci oraz Pani Swojego Czasu od kuchni.

Pana Tabletki nie znałem, ale słyszałem, że faktycznie wiele osób już poleca, więc muszę sobie zerknąć, co tam Pan Tabletka nadaje. Dzięki za te polecenia. Dobra, Bartek, to powiedz mi, zanim zaczniemy sobie mówić o zapleczu Go, to powiedz, co Ciebie skłoniło do tego przeskoku z PHP do Go.

Odpowiedź jest dość prosta: trochę moja nieodpowiedzialność i troszeczkę na spontana, można tak to ująć. Wcześniej pracowałem właśnie dużo w PHP-ie i byłem w firmie, gdzie byłem zmęczony bardziej tym, w jaki sposób się wytwarza oprogramowanie tam i pomyślałem sobie, że jak już zmieniam pracę, to chcę trafić do fajnej pracy, niezależnie od technologii. Więc wylądowałem w firmie, która się nazywała Brainly, gdzie mają 95% back-endu napisane w Golangu. Ja, kiedy aplikowałem, powiedziałem, że jestem w środkach PHP, o Golangu wiem, że istnieje i że go stworzył Google, i czy to nie jest żaden problem. Powiedzieli, że: „Spoko, nauczymy Cię” i okazało się, że mnie przyjęli. I tak mniej więcej wyglądała moja zmiana z języka PHP na Golanga. Tam zacząłem pisać od razu aplikacje biznesowe i gdzieś po miesiącu, myślę że nawet zacząłem lubić ten język, bo pierwsze 3 tygodnie na pewno była taka walka ze starymi nawykami. Ale tak po miesiącu załapałem, o co w tym języku chodzi i już nawet przestałem z nim walczyć, a po paru miesiącach nawet go lubię.

Ciekawe, ciekawe. To jest właśnie coś takiego, że często nie doceniamy, jak takie z pozoru przypadki decydują później o naszym życiu. Coś się dzieje, co później wpływa na ileś tam lat naszej kariery zawodowej. I tak było w Twoim przypadku, ale wydaje mi się, że musiałeś tego Golanga naprawdę polubić, bo teraz sporo robisz w kierunku popularyzacji czy dzielenia się różnymi rzeczami, które znajdujesz na temat tej technologii. Musiał Ci przypaść faktycznie do gustu, więc może to jednak taki przypadek nie był.

Może nie był, ale nie miałem innego wyboru, jak go polubić, bo tam wszyscy pisali w Golangu, więc musiałem go polubić.

Jasne, okej. To zacznijmy może tak historycznie, gdybyś powiedział parę słów o tym, jak ten język powstał, jak wyglądała jego historia, kto i w jakim celu właściwie go stworzył.

Skracając długą historię, można powiedzieć, że było sobie w Google’u trzech gości, których nazwiska sobie zanotowałem: Robert Griesemer, Rob Pike oraz Ken Thompson, którzy byli już mocno zmęczeni tym, w jaki sposób piszą aplikacje dla Google’a, gdzie w większości skupiali się na C i C++ i bardzo im się nie podobało to, w jaki sposób ten język wpływa na produktywność programistów. Na przykład jednym z takich wyzwań, które mieli, to kompilacja C++ aplikacji przy jakichś większych projektach trwała godzinę, dwie albo nawet cały dzień, co się może wydawać dość dziwne, ale w tamtych czasach, te 15 lat temu, to chyba nie było jeszcze aż tak rzadkie.

Więc zaczęli się rozglądać po Internecie w poszukiwaniu jakiejś alternatywy i nie znaleźli nic, co by mogło spełniać ich wymagania, bo nie tylko czas kompilacji był problemem, ale też to, że język C czy C++ mają bardzo dużo naleciałości i są dość skomplikowane. Szukali czegoś prostego, szybkiego, gdzie ten developer experience będzie jak najlepszy. Nie udało im się na tamten moment znaleźć niczego ciekawego, więc zaczęli tworzyć specyfikację języka, który uważali, że miałby sens, co chyba im zajęło około roku. Gdzieś po roku przyszedł do nich, właśnie nie pamiętam, który dokładnie z tej trójki, powiedział: „Widziałem Waszą specyfikację i na kolanie w międzyczasie napisałem do niego kompilator, bo mi się spodobało” – i takie są początki Golanga.

Ciekawe. Co byś powiedział na temat zastosowań, gdzie on jest używany, bo ja muszę przyznać szczerze, że takie pierwsze skojarzenie, które mam, nawet niestety jedyne skojarzenie z tym językiem, to są zastosowania serwerowe, jako taki następca, lepsza wersja C, że gdzieś to siedzi na serwerze. Dlatego powiedz proszę, gdzie się ten język stosuje obecnie.

Można go zastosować wszędzie, nie ma ograniczeń, gdzie go nie można użyć, to jest język ogólnego zastosowania. Powstał z myślą o chmurze, dlatego te Twoje skojarzenia z tą chmurą, infrastrukturą. Korzysta się z niego w bardzo wielu obszarach, najwięcej w chmurze, później w narzędziach CLI, takich jak na przykład Docker, Terraform, potem – tu pewnie niektórych zaskoczę – to są aplikacje biznesowe. Widziałem też, że można w Golangu pisać, kompilować go do WebAssembly, więc można tworzyć aplikacje webowe, można pisać aplikacje desktopowe, takie zwykłe. Są też bidingi do biblioteki Qt, więc mamy też cały ten toolchain dostępny, pisząc w Golangu. Jest też projekt, który się nazywa TinyGo, który jest taki bardzo okrojoną wersją Golanga, która się skupia na urządzeniach wbudowanych, więc można sobie [11:19 ns] też programować w Golangu.

Myślę, że o plusach tego języka jeszcze za chwilę będziemy rozmawiać, ale czymś, co się na pewno przebija, jest wydajność i to przemawia do rozumu. Natomiast ja osobiście znam takie zastosowania języka Go, gdzie on jest jakimś elementem szerszego stacku i najczęściej jest wykorzystywany tam właśnie, gdzie ta wydajność, ta konkurencyjność jest potrzebna, tam się go zaprzęga do pracy. Czy Ty myślisz, że Go jest albo będzie rozpatrywany jako język klasy enterprise, czyli w bankach, różnych firmach ubezpieczeniowych, w dużych instytucjach? Czy to się już dzieje albo jest szansa, że faktycznie będzie tam adaptowany?

Chcąc nie chcąc, Golang tam już prawdopodobnie działa, bo pewnie działają na Kubernetesie albo korzystają z Dockera. A jeśli chodzi o to, czy aplikacje na przykład biznesowe w banku czy aplikacje finansowe, to tak, wiem że na przykład w Alior Bank na pewno piszą w Golangu, w innych bankach wydaje mi się, że też. Wiem, że Golang nie jest bardzo popularny, ale mimo wszystko tam właśnie, gdzie ta wydajność jest ważna, a na przykład nie ma nikogo, kto by zjadł zęby na optymalizacji w JVM-ie, to łatwiej jest przerzucić się na Golanga i skorzystać z jego dobrodziejstw niż wgryzać się w te niuanse JVM-a czy .Neta.

Czyli jeśli chodzi o wybór czegoś od początku, to być może to jest właśnie lepsza technologia, jeśli mamy możliwość wyboru. Język sam w sobie jeszcze nic nie zdziała, to jest ważne, żeby on był oparty na dobrych praktykach, żeby dawał też ten developer experience na odpowiednim poziomie, ale to jest jedna rzecz. O sukcesie całej technologii świadczy jeszcze ten tooling wokoło. I dlatego chcę Cię teraz zapytać o te narzędzia, biblioteki, frameworki, IDE – wszystko to, co jest potrzebne deweloperowi na co dzień, żeby w tym stacku Go stworzyć jakieś produkcyjne aplikacje.

Żeby stworzyć jakąś produkcyjną aplikację, to tak naprawdę potrzebujemy binarki z Go oraz jakikolwiek edytor tekstu. I mamy wszystkie podstawowe narzędzia, które nam pozwolą pisać w Golangu, bo w tej bibliotece, w tej binarce Go, mamy cały kompilator, linker, mamy też toole na przykład do uruchamiania testów, do profilowania aplikacji i tym podobne, więc w standardzie dostajemy dość sporo. Jeśli chodzi o biblioteki, to od pewnego czasu można powiedzieć, że jest wysyp. Zdarzają się średniej jakości te biblioteki, ale ogólnie z racji tego, że ten język jest dość prosty i ciężko jest w niektórych momentach zepsuć to, co można by było zepsuć w innych językach, to jakość w porównaniu z innymi ekosystemami jest spoko. Rewelki nie ma, ale jest spoko.

Mamy wszystkie podstawowe narzędzia, które nam pozwolą pisać w Golangu, bo w tej bibliotece, w tej binarce Go, mamy cały kompilator, linker, mamy też toole na przykład do uruchamiania testów, do profilowania aplikacji i tym podobne, więc w standardzie dostajemy dość sporo. Jeśli chodzi o biblioteki, to od pewnego czasu można powiedzieć, że jest wysyp. Zdarzają się średniej jakości te biblioteki, ale ogólnie z racji tego, że ten język jest dość prosty i ciężko jest w niektórych momentach zepsuć to, co można by było zepsuć w innych językach, to jakość w porównaniu z innymi ekosystemami jest spoko. 

Jeśli chodzi o to, jakie to są biblioteki, to jeśli się pisze rzeczy bardziej DevOpsowe, to się powinno znaleźć prawie wszystko, bo to jest taki konik tego języka. Więc jeśli się pisze jakieś CLI albo rzeczy, które działają po stronie infrastruktury, to bardzo dużo rzeczy już tam jest napisanych. Jeśli chodzi o rzeczy takie typowo webowe, to są biblioteki, ale nie myślcie o tym, że znajdziecie tutaj jakiegoś przeportowanego Spring Boota albo Symfony z PHP-a – czegoś takiego nie ma. I to nie ze względu na to, że się nie pisze webowych aplikacji, wręcz przeciwnie, ale ze względu na to, że po pierwsze biblioteka standardowa już i tak sporo nam daje, a dwa, że w tym języku jest troszeczkę inna filozofia i nie ma takiej dużej potrzeby na to, żeby te rozbudowane frameworki istniały.

Rozumiem. A czy jest coś, co przypomina menedżer pakietów albo jakieś miejsce w sieci, gdzie na przykład takie biblioteki są zbierane, skąd możemy sobie je pobrać? Działa coś takiego?

Tak, menedżer pakietów został chyba ze dwa, trzy lata temu wbudowany w Golanga. Wcześniej nie było, to był jeden z argumentów przeciwko Golangowi. Od jakiegoś czasu mamy Go modules, które pomagają właśnie w zarządzaniu tymi pakietami. Jest strona, która się nazywa go.dev, gdzie możemy sobie wyszukać wszystkie te biblioteki, które są na GitHubie, GitLabie.

Czy jakieś IDE przychodzi Ci do głowy, czy to raczej de facto dowolny edytor z pluginem do kolorowania składni wystarcza?

Jeśli jesteś minimalistą, to tak, ale są też IDE typowo skupiające się na Golangu. Jednym z nich jest Goland od IntelliJ-a, według mnie bardzo mocno konkuruje z VS Codem – to są chyba dwa najbardziej popularne. Ja na przykład bardzo często korzystam z Vima, ma swoje niuanse, ale też się sprawdza. Więc: Goland, VS Code oraz Vim czy Emacs albo z czegokolwiek korzystacie.

Czyli każdy znajdzie coś dla siebie, coś odpowiedniego. Powiedziałeś tutaj o tym, że być może te problemy czy niedociągnięcia na przykład z dużych projektów pisanych w C czy w C++ niejako zmotywowały twórców, żeby pomyśleć o specyfikacji nowego języka. Chcę Cię teraz zapytać o to, czy jest coś takiego unikalnego w Go, coś, czym mocno różni się od innych języków lub coś, w czym bardzo przypomina inne języki. Chodzi mi o to, żeby na krajobrazie tych różnych języków osadzić Go, czy to jest coś bardzo unikalnego, czy mimo wszystko czerpie z jakichś wcześniejszych technologii.

Z tego, co wiem, to twórcy Golanga nie wymyślili niczego nowego. Jeśli chodzi o filozofie, które są w tym języku, nie ma tam niczego, co nie było wymyślone w latach 70., 80. Wydaje mi się, że taką największą unikalnością tego języka jest filozofia. Ta filozofia skupia się przede wszystkim na tym, żeby ten język był prosty. Kiedy mówię „prosty”, mam na myśli prosty do czytania, do zrozumienia oraz żeby ten język był na tyle prosty, żeby developer experience było jak najlepsze. W tym głównie chodzi o to, że kiedy czytamy, kiedy mamy jakiś kod, to przeważnie raz, dwa, może trzy razy go napiszemy, ale przy okazji ze dwieście, trzysta, czterysta razy go przeczytamy.

Więc w Golangu bardzo się skupia na tym, żeby się go jak najlepiej czytało, co też ma swoje konsekwencje w tym, że wielu rzeczy w tym języku nie ma. I to jest jeden z takich argumentów przeciwko Golangowy, czy argument w rękach hejterów Golanga, że bardzo wielu rzeczy w tym języku nie ma. I w tym języku tych rzeczy nie ma, ze względu na to, że starają się trzymać ten język jak najprostszy. Dodanie każdego nowego ficzera wiąże się z tym, że automatyczny język staje się bardziej skomplikowany, potrzeba troszeczkę więcej czasu, żeby się nauczyć nowej składni, mechanik, które tam działają pod spodem i tym podobne. Więc żeby ograniczyć ten próg wejścia, autorzy starają stworzyć go jak najprostszym.

Więc w Golangu bardzo się skupia na tym, żeby się go jak najlepiej czytało, co też ma swoje konsekwencje w tym, że wielu rzeczy w tym języku nie ma. I to jest jeden z takich argumentów przeciwko Golangowy, czy argument w rękach hejterów Golanga, że bardzo wielu rzeczy w tym języku nie ma. I w tym języku tych rzeczy nie ma, ze względu na to, że starają się trzymać ten język jak najprostszy. Dodanie każdego nowego ficzera wiąże się z tym, że automatyczny język staje się bardziej skomplikowany, potrzeba troszeczkę więcej czasu, żeby się nauczyć nowej składni, mechanik, które tam działają pod spodem i tym podobne. Więc żeby ograniczyć ten próg wejścia, autorzy starają stworzyć go jak najprostszym.

Myślę też, że utrzymanie później takiego języka, który ma mnóstwo ficzerów jest po prostu trudniejsze, trzeba myśleć o tej kompatybilności wstecznej i tak dalej. Z tego co ja obserwuję, rozwój języka, który co chwilę dostaje nowe ficzery, w pewnym momencie zwalnia bardzo, bo ten bagaż, który trzeba ciągnąć ze sobą, jest straszny.

Pamiętam, jeden z moich znajomych opowiadał historię. On pisze bardzo dużo w JVM-ie, w Javie i miał taki przypadek, że został poproszony o pomoc w znalezieniu jakiegoś buga, z którym sobie deweloperzy nie mogli poradzić. Spędził nad tym sporo godzin i okazało się, że jeden z deweloperów, który oczywiście już nie pracował wtedy w tej firmie, w Javie napisał sobie swoją własną implementację jednej z anotacji, której nazwa wygląda prawie że identycznie jak ta, która działa w bibliotece standardowej. I jak czytali ten kod, to nie zauważyli tej różnicy, a tam był jakiś błąd, co spowodowało, że bardzo dużo czasu spędzili na szukaniu błędu. Na przykład w Golangu takiej rzeczy nie znajdziesz, w sensie w tym języku jest bardzo mało magii. Mam na myśli, że jest bardzo mało rzeczy, kiedy jak patrzysz na kod, to się pod spodem może wydarzyć coś więcej niż widzisz. Na przykład nie ma tych anotacji, tak jak jest w JVM-ie.

Myślę, że dla większych projektów to ma wtedy bardzo duże znaczenie, że im więcej tej magii, teoretycznie wydaje się, że to zwiększa produktywność, przyspiesza development, ale później niestety, jak już wchodzimy w taką fazę utrzymania, to przysparza sporo problemów.

Tak, ale to też ma pewne swoje konsekwencje i to jest jeden z głównych argumentów przeciwko Golangowi, że kiedy piszesz kod, to masz bardzo dużo „if error jest różne od nila, to wtedy zwróć error” i tym podobne. I to potrafisz mieć w jednej funkcji, w zależności od tego, ile masz takich operacji, nawet sporo, ale dzięki temu widzisz, gdzie coś może pójść nie tak. W Golangu nie rzuca się wyjątków, tam się zwraca błędy, jak normalne wartości w zmiennych, więc jeśli jakaś funkcja może pójść nie tak, to nie jest tak, że ona rzuci sobie wyjątek i zostanie złapany gdzieś dalej. Ona w sposób explicit pokaże Ci, że ta funkcja może później tak i musisz w jakiś sposób to obsłużyć, czy zignorować ten błąd, czy go zalogować, czy przesłać do dalej.

Okej, to skoro już o tym rozmawiamy, to powiedz proszę, jakie są największe braki czy problemy, z którymi obecnie Golang musi się mierzyć. Co osobiście Ty w nim lubisz, a czego Ci tam brakuje?

Jeśli chodzi o narzekanie na Golanga, to myślę, że mógłbym równie długo narzekać, co i go chwalić. Jeśli chodzi o to, czego w tym języku nie lubię, to myślę, że biblioteka standardowa jest według mnie trochę za mała, tam jest zbyt mało rzeczy, z których normalnie programiści korzystają, a to według mnie tam powinno być, choćby na przykład obsługa [23:34 ?], gdzie żeby sprasować [23:38 ?], to musimy zaciągać jakieś inne zależności, a to jest tak popularny problem, że według mnie to powinno być w standardowej bibliotece. I też w standardowej bibliotece są pakiety, które nie są, delikatnie mówiąc, dopieszczone. Jest na przykład pakiet Go plugin, który od jakiegoś czasu już nie jest wspierany i nie ma w ogóle implementacji go na Windowsa, więc na Windowsie z tego ficzera nie skorzystasz, mimo że to jest w bibliotece standardowej. Jeśli chodzi o to, czego mi w tym języku brakuje, to chyba z takich wodotrysków brakuje mi enumów, które by działały na podobnej zasadzie, jak to jest w Ruście. Nie licząc tego, to myślę, że ja bym do tego języka nie dodawał specjalnie więcej rzeczy właśnie ze względu na to, żeby go zaskomplikować zbyt dużo.

Jak Ciebie słucham, to wydaje mi się, że to chyba język dla minimalistów może być. [śmiech]

Można tak powiedzieć. Jeśli chodzi o plusy tego języka, bo wydaje mi się, że bardziej na niego póki co narzekałem, aniżeli go chwaliłem. Według mnie wielkim plusem jest to, że on jest dość prosty, w sensie on jest prosty i szybki. Szybkość możemy zrozumieć dwojako: czas wykonywania Twojego kodu jest dość szybki oraz to, że na przykład kompilacja jest też bardzo szybka. Właśnie ze względu na to, że język jest prosty, to można go szybko sprasować, szybko skompilować i nie ma tam żadnych niepotrzebnych kroków pomiędzy, które by mogły wydłużać czas kompilacji. Kolejnym plusem według mnie jest to, w jaki sposób działają interfejsy i one bardzo podobnie działają, jak w TypeScripcie, gdzie w przeciwieństwie na przykład do Javy, kiedy się definiuje klasę, to musisz napisać, które interfejsy ona implementuje.

Według mnie wielkim plusem jest to, że on jest dość prosty, w sensie on jest prosty i szybki. Szybkość możemy zrozumieć dwojako: czas wykonywania Twojego kodu jest dość szybki oraz to, że na przykład kompilacja jest też bardzo szybka. Właśnie ze względu na to, że język jest prosty, to można go szybko sprasować, szybko skompilować i nie ma tam żadnych niepotrzebnych kroków pomiędzy, które by mogły wydłużać czas kompilacji. 

Tutaj działa to trochę na odwrót, że tworzysz sobie strukturę, bo klas nie mamy, tworzysz sobie strukturę z jakimiś metodami i w miejscu, gdzie chcesz z tej struktury korzystać, to albo możesz powiedzieć, że chcesz dokładnie tę strukturę, albo sobie zdefiniujesz mały interfejs, który ta struktura będzie implementować i po prostu w swoim kodzie wrzucasz tę swoją strukturę, która implementuje ten interfejs. I to jest dla mnie bardzo duży plus ze względu na to, że w tych językach Java, C Sharp, PHP i całej reszcie, musiałeś zawczasu stworzyć te interfejsy i bardzo często te interfejsy właśnie ze względu na to, że one były zawczasu i musiały spełniać więcej roli, to albo musiałeś stworzyć ich dużo, albo jeden trochę większy. W Golangu ten problem został tak rozwiązany, że możesz sobie jako klient jakiegoś API stworzyć interfejs, który po pierwsze będzie dużo łatwiej zamokować, bo będzie miał mniej metod, a dwa, że się możesz łatwo wyabstrahować i wyciągnąć z tych struktur, z tych funkcji tylko to, czego potrzebujesz tak naprawdę.

Kolejnym dużym plusem, z którego Golang słynie, to są Go rutyny. Mówi się o Go rutynach, że to są takie małe wątki. Trochę to prawda, trochę nieprawda. Ogólnie chodzi w tym o to, że nie mówimy z poziomu tego języka, że chcemy, żeby na przykład ta operacja wykonała się w oddzielnym wątku, tylko po prostu tworzymy sobie Go rutynę, która wykonuje jakiś kod, na zasadzie: „wykonaj mi ten kod kiedyś, wtedy, kiedy znajdziesz czas na jakimś procesorze, który akurat będzie wolny” i ja po prostu jestem zainteresowany tylko wynikiem i czekam na wynik. Prostota tego języka polega na tym, że właśnie my w ogóle nie zajmujemy się tak niskopoziomowymi rzeczami, jak tworzenie wątków, zamykanie wątków i tym podobne. Tym wszystkim zajmuje się Runtime, jesteśmy zwolnieni z tego. My tylko informujemy, że chcemy, żeby ta operacja się wykonała i że czekamy na informację zwrotną, kiedy to się skończy.

I dzięki temu, że to działa w taki sposób, ten schedule może stosować różnego rodzaju triki, polegające na tym, że na przykład ma dostępny tylko jeden wątek, więc żeby ten nasz kod się w miarę szybko wykonywał, to ma na przykład dziesięć Go rutyn odpalonych, to na tym jednym wątku po kolei, powoli wykonuje sobie każdą z tych Go rutyn, dzięki czemu mamy takie wrażenie, że to się wykonuje równocześnie. A kiedy tych wątków bardzo często jest więcej, to wtedy on potrafi sobie przerzucać między wątkami w dość sprytny sposób, żeby na przykład Go rutyna nie skakała zbyt często między wątkami i my się całkowicie tym nie przejmujemy, jesteśmy z tego zwolnieni, tylko informujemy o tym, że chcemy coś odpalić i jesteśmy zainteresowani wynikiem tego. Ty to wykonaj za mnie – na takiej zasadzie. Można powiedzieć, że fire and forget.

Jeśli chodzi o inne fajne ficzery, to to, że w Golangu też mamy GC i to był też jeden z argumentów, dlaczego twórcy Golanga nie chcieli pracować w C++, bo tam właśnie jest ręczne zarządzanie pamięcią. Więc chcieli mieć GC, ale które też nie będzie zbyt skomplikowane, które będzie szybkie, i też zastosowali pewne jakieś filozofie oraz podejścia do tego, żeby tak było. To też potrafi bardzo mocno zwolnić dewelopera z myślenia o tym, w jaki sposób zarządzać pamięcią. I to jest właśnie ukłon w stronę developer experience.

Kolejną fajną rzeczą, trochę wspomniałem o tym wcześniej, jest to, że funkcje potrafią zwrócić więcej niż jedną wartość. I to bardzo często się wykorzystuje w sytuacji, kiedy jakaś operacja może pójść nie tak. Tak jak wcześniej wspomniałem, na przykład powiedzmy, że chcemy stuknąć do jakiegoś zewnętrznego API i dostajemy albo zwrotkę z odpowiedzią od serwera, albo dostajemy błąd, musimy sobie zrobić tego „if-else’a” i sprawdzić, czy dostaliśmy błąd. Jeśli nie ma błędu, to wtedy możemy założyć, że ta zmienna zawiera te dane, których potrzebujemy.

Okej. Powiedziałeś trochę na temat tej prostoty, na temat tego minimalizmu związanego z Go, więc proponuję, żebyśmy zrobili taki test Hello Worlda. To znaczy załóżmy, że nie mam jeszcze nic u siebie na komputerze, co jest związane z Go i chciałbym napisać takie proste „Hello, world!” i to po prostu uruchomić. Co muszę pobrać, jakie kroki muszę zrobić, żeby to się mogło wydarzyć?

W zależności od środowiska, z którego korzystasz, to musisz zrobić apt-get install golang albo brew install golang, mieć Nano, Vima, notatnik – cokolwiek i jesteś już gotowy, żeby pisać aplikacje. To jest właśnie bardzo fajne, w porównaniu na przykład z PHP-em czy, z tego co wiem, JVM-em, to w JVM-ie dostajesz tylko kompilator, środowisko do uruchomienia i tym podobne, ale żeby na przykład uruchamiać testy, to musisz ściągać JUnita albo PHPUnit, albo cokolwiek innego. A tutaj mamy to od razu wbudowane, od razu możemy pisać testy, uruchamiać aplikacje, profilować, robić parę innych cudów-wianków, nazwijmy to.

Kiedy mamy już kod napisany, to co? Tą samą binarką, rozumiem, kompilujemy ten kod źródłowy to wersji wykonywalnej?

Tak, mamy tutaj dwie opcje. Możemy to skompilować i od razu uruchomić, używa się wtedy metody Go run i nazwa pakietu, który chcemy uruchomić, czyli na przykład Go run. i on wtedy automatycznie kompiluje i uruchamia naszą aplikację. Jeśli chcemy tylko zbudować, to wpisujemy Go build i tyle – dostajemy binarkę. Co jest jeszcze też fajne w Golangu, zapomniałem o tym powiedzieć, kiedy ten język chwaliłem, to to, że mamy możliwość kompilowania do bardzo wielu architektur i środowisk wprost ze swojego komputera. W sensie mając binarkę Go jesteś w stanie skompilować na Windowsie aplikacje pod Maca, pod Unixa i tym podobne, tylko kwestia zmiany parametrów podczas budowania –- i tyle. Więc to też potrafi bardzo ułatwić życie, bo na przykład w C czy w C++ to już potrafiło być dość problematyczne. W Golangu to jest prawie że trywialne.

Okej, faktycznie szybko przeszliśmy przez to pytanie i mam kolejne, związane też właśnie z prędkością, bo gdy popatrzy się na logo Golanga, to tam widać takie pędzące „Go”, tam widać faktycznie, że ten podmuch wiatru za „Go” ma miejsce. Co by nie mówić, jak się poczyta trochę dokumentacji, to szybkość jest podkreślana jako jeden z atutów, też już o tym mówiłeś. W związku z tym mam pytanie do Ciebie, czy w tym świecie, w którym teraz żyjemy, gdzie te procesory, właściwie maszyny, mają wiele procesorów albo wręcz wiele core’ów w ramach jednego procesora, gdzie zapotrzebowanie na moc obliczeniową rośnie, to czy myślisz, że właśnie ten atut szybkości w przypadku Golanga jest tym, co przyciąga firmy, co przyciąga deweloperów, żeby jak najlepiej ten sprzęt, ten krzem pod spodem wykorzystywać.

Myślę, że tak, bo mimo, że mamy tę chmurę i możemy sobie dołożyć więcej procesorów, więcej RAM-u, to dokładanie tych zasobów kosztuje. Jeśli to jest jakiś mały projekt, to może rzeczywiście jest taniej dołożyć troszeczkę RAM-u, trochę procesora, ale kiedy ten rachunek pod koniec miesiąca zaczyna rosnąć wykładniczo, to to już nie jest chyba takie fajne. Więc wydaje mi się, że zwłaszcza w sytuacjach, kiedy mamy bardzo duży ruch, bardzo duże ciśnienie na wydajność i tym podobne, to takie rozwiązania jak Golang sprawdzą się bardzo dobrze właśnie ze względu na to, że one zostały stworzone z myślą o tym, więc mają wiele mechanizmów, które pomagają nam to optymalizować. Choćby to, w jaki sposób GCU działa w Golangu, w jaki sposób Runtime sobie zarządza tymi Go rutynami, w jaki sposób jest w stanie sprytnie radzić sobie z syscallami, które też potrafią bardzo zwolnić aplikację wbrew pozorom.

Jeśli to jest jakiś mały projekt, to może rzeczywiście jest taniej dołożyć troszeczkę RAM-u, trochę procesora, ale kiedy ten rachunek pod koniec miesiąca zaczyna rosnąć wykładniczo, to to już nie jest chyba takie fajne. Więc wydaje mi się, że zwłaszcza w sytuacjach, kiedy mamy bardzo duży ruch, bardzo duże ciśnienie na wydajność i tym podobne, to takie rozwiązania jak Golang sprawdzą się bardzo dobrze właśnie ze względu na to, że one zostały stworzone z myślą o tym, więc mają wiele mechanizmów, które pomagają nam to optymalizować.

Jednym z powodów, dla którego ludzie przerzucają się na Golanga jest właśnie to, że raz, że jest ten język bardzo prosty, a dwa, że bardzo fajnie pomaga, jak się zrozumie takie core’owe koncepty tego języka. Pozwala napisać bardzo szybką aplikację bardzo szybko. Na przykład w porównaniu z Rustem można napisać jeszcze szybszą aplikację, o te, powiedzmy, 5%-10%, bo nie ma tam GC, ale w porównaniu z Rustem Golang ma dużo mniejszy próg wejścia, więc jeśli te 5%-10% wydajności albo 2%, w zależności od tego, jaki mam case, nie jest warte inwestowania w bardziej skomplikowany język, to Golang może się okazać idealnym rozwiązaniem.

Ale myślę sobie, że nawet najlepszy język pod względem założeń czy najlepszy pod względem technologii, nie odniesie w dzisiejszych czasach sukcesu, jeśli nie społeczność, odpowiednia społeczność, która jest zbudowana wokół tego języka, która szerzy informacje, szerzy wiedzę na temat tego języka, tworzy pakiety i tak dalej. Ty współorganizujesz Go Cracow, czyli taki lokalny Meetup poświęcony Go. Chcę Cię zapytać o to, jak wygląda community wokoło tego języka, tutaj u nas w kraju, za granicą.

Powiedziałbym, że jeszcze community jest dość małe, mamy kilka takich osób indywidualnych, które są bardzo aktywne. Community nie jest duże, ale jest bardzo aktywne – tak bym powiedział. Takim przykładem, mam nadzieję, jestem ja, gdzie właśnie organizuję Meetup, prowadzę bloga i tym podobne, gdzie się głównie skupiam na Golangu. Bardzo wielu osobom tak bardzo się spodobał ten język, że też robią bardzo dużo w tym kierunku, żeby popularyzować ten język. Więc jeśli chodzi o community w Polsce, to jest nadal bardzo małe.

Kiedy ja zaczynałem pracę z tym językiem, to było jakieś pięć lat temu, to w Krakowie, czyli tam, gdzie pracowałem, wiedziałem o trzech firmach, które pracowały z tym językiem. Ale jak zorganizowałem Meetup, to na pierwszy Meetup przyszło chyba 15 osób. Jak na Meetup, o którym mało osób słyszało, to wydaje mi się dość sporo. Maksymalnie potrafiłem mieć nawet 60 osób na jednym Meetupie. Więc wydaje mi się, że jak na tak mały język, jak na tak małe community, jesteśmy dość aktywni.

Jeśli chodzi o świat, to oczywiście w Stanach sytuacja jest dużo lepsza, bo tam ten język jest dużo bardziej popularny. Jeśli chodzi o Europę, to podobnie jak w Polsce, jest jeszcze małe w porównaniu z PHP-em, z Javą i tym podobne, ale według mnie bardzo prężnie się rozwija i myślę, że ten trend się na pewno utrzyma, widząc po tym, jak ten język zdobywa popularność.

Wspomniałeś o firmach wykorzystujących Golang, to powiedz, jak to wygląda z ofertami pracy, jak wygląda z wynagrodzeniem, jak wygląda rynek pracy dla Go deweloperów.

Wrócę do tego, co było pięć lat temu. Pięć lat temu wiedziałem w Krakowie o trzech firmach. Teraz wydaje mi się, że co druga firma IT ma jakichś Golangowców w sobie, przynajmniej w Krakowie. Ze względu na to, że ten język raz, że jest uznawany może trochę jako seksi, jest trochę taką ciekawostką, ludzie są ciekawi, dlaczego jest tak chwalony, czy ta prostota rzeczywiście jest taka fajna, a dwa, że skoro ten język odnosi sukces, to znaczy, że w tych sytuacjach, w których z niego korzystają, rzeczywiście się sprawdził.

Rozumiem, a jeśli porównujesz wynagrodzenia właśnie? To jest ciekawa rzecz.

Tutaj sytuacja jest troszeczkę może zakłamana, bo teraz jesteśmy w świecie covidowym, gdzie w ogóle wypłata dla programisty wzrosła, ale jak przeglądam oferty pracy, to można spokojnie znaleźć pracę w okolicach 15-30 tysięcy brutto na fakturę lub adekwatnie na umowę o pracę. Więc wynagrodzenia nie są takie złe. Jeśli chodzi o ilość ofert, to ja potrafię dostawać co drugi dzień informacje o nowej ofercie. Dzięki temu, że pracujemy zdalnie, to bardzo często firmy proponują pracę zdalną, więc tym bardziej rynek nam się rozszerza.

Kontynuując ten temat, może pojawić się takie zainteresowanie wśród słuchaczy tym językiem, tą prostotą, tym, że faktycznie jest zainteresowanie rynku, tym, że wynagrodzenia wyglądają w porządku. Więc muszę Cię koniecznie zapytać o to, czy to jest dobry język w ogóle na start.

To jest trudne pytanie, to znaczy trudno odpowiedzieć na to pytanie. Ale spróbuję. Jeśli chodzi o osoby, które już mają doświadczenie w programowaniu, myślę, że nie będą mieli problemu z tym, żeby się przerzucić na Golanga, jeśli tylko ta prostota i filozofia języka im będzie odpowiadać. Bo wydaje mi się, że to jest chyba największy problem, trzeba zrobić takiego mentalnego switcha w niektórych momentach. Więc jeśli to nie będzie problem, to nie wydaje mi się, żeby jakikolwiek programista miał z tym problem.

Jeśli chodzi o język, żeby to był język pierwszego kontaktu, to też mi się wydaje, że to nie jest zła opcja. Na przykład ja próbowałem moją żonę nauczyć programować i zaczęliśmy od Phytona, bo język prosty, bo czytelny. I co ciekawe, odbiła się nie od samego języka, ale od tego, że musiała na przykład stworzyć sobie (nie pamiętam, jak to się nazywa) takie środowisko wewnątrz per projekt. Przed każdym projektem musieliśmy to uruchomić, żeby tam się wszystko zsetupowało z tymi bibliotekami całą resztę. I co ciekawe, to potrafiło być problemem. W Golangu czegoś takiego nie ma, więc pod tym względem ta prostota potrafi też bardzo dużo rzeczy ułatwić. Po prostu ściągasz binarkę, ściągasz sobie jakikolwiek edytor, który Ci pasuje i jesteś ready to go.

Jeśli chodzi o to, że ten język jest prosty, to też mi się wydaje, że to będzie bardzo duży plus, bo ja zauważyłem, że osoba, która pisze w Golangu powiedzmy od miesiąca, to jego kod nie różni się znacząco od osoby, która programuje w tym języku pięć lat albo napisała swój kod pięć lat temu. Więc z racji tego, że język też się dość wolno zmienia, bardzo wolno dodaje się do niego ficzery, co też jest plusem, ale i minusem, to sprawia, że jeśli obaj byśmy napisali kod, który robi to samo, tak blackboksowo, to pod spodem prawdopodobnie będzie wyglądać bardzo podobnie.

Możemy jakieś inne metody wyabstrahować czy inaczej ponazywać zmienne, ale jeśli chodzi o same instrukcje, które tam stworzymy, ten kod będzie bardzo zbliżony i mnie się wydaje, że to już jest bardzo dużym plusem, bo nie będzie czegoś takiego, że senior zastosował jakiś ficzer w języku, który wyszedł tydzień temu, a junior dopiero nadrabia ficzery z Javy 10, a teraz jest na przykład 15. Więc czegoś takiego w Golangu nie ma i kod, który został napisany te 10 czy 12 lat temu, gdy wyszła wersja taka stabilna, to tamten kod działa i jest bardzo duża szansa, że osoba, która by napisała ten kod dzisiaj, to napisałaby go bardzo podobnie.

Pojawia się też pytanie wobec tego, skąd, w jaki sposób uczyć się tego języka. Masz jakieś materiały, które mógłbyś wskazać?

Myślę, że dobrym startem jest Go Tour, jak wpiszecie sobie w Google „go tour” to powinien być pierwszy wynik. To jest taki interaktywny tutorial w przeglądarce, gdzie mamy przedstawione takie podstawowe koncepcje w tym języku, w sensie jak wygląda składnia, jak operować na Go rutynach, channelach, jak wyglądają switche, jak wyglądają ify. To znaczy jak wygląda pętla form, bo na przykład w Golangu mamy tylko jedną pętlę, która jest for i ona może służyć jako for, foreach albo jakiś zwykły [45:36 ?] i tym podobne. Więc myślę, że to jest bardzo dobry punkt startu.

Jest też strona, która się nazywa Go by Example, która pokazuje bardzo często rzeczy z biblioteki standardowej, w jaki sposób korzystać z nich, więc myślę, że to jest bardzo fajny punkt nawet do tego, żeby sobie zapisać w zakładkach i do tego wracać, jeśli się zapomnimy. A następnie myślę, że po prostu trzeba napisać aplikację, jakąkolwiek, czy webową od GCLA App i po prostu zacząć się bawić z tym językiem. I to jest chyba najlepszy sposób, żeby się go nauczyć.

Pewnie, w praktyce. Niedawno sobie sprawdzałem i Go jest obecnie gdzieś na 18 miejscu wśród popularności, na liście popularnych języków programowania TIOBE. Z tego co widziałem, zaczął zyskiwać na popularności mniej więcej w 2017 roku, gdzie faktycznie widać duży skok popularności tego języka. Na koniec chcę Cię zapytać, w jakich kierunkach ten język według Ciebie będzie się rozwijał, cały ten ekosystem będzie się rozwijał. Co możesz powiedzieć, o tej najbliższej przyszłości, jak Ty to przewidujesz?

W takiej najbliższej przyszłości, w przyszłym roku, na początku przyszłego roku dostaniemy chyba jeden z największych update’ów w języku od powstania, czyli generyki. Hurra! Będziemy mieli generyki w Golangu. [śmiech] Przez te dwanaście lat nie było i to był top jeden argument przeciwko temu językowi, więc: sorry, hejterzy, [śmiech] nie będziecie mogli tego argumentu używać. Wydaje mi się, że ten język będzie się przez najbliższe parę lat rozwijał w tym tempie i w tym kierunku, w którym rozwija się aktualnie. W sensie nie będziemy raczej dużo w tym języku zmieniać, bardziej się skupiać na tym, żeby działał jak najszybciej, żeby odpicować cały ten Runtime wraz z GC. Jest w planach wydanie Go w wersji drugiej, ale o Go v2 mówi się od pięciu lat i jakoś nie widzę. Podjęli kroki, żeby pójść w tym kierunku, ale wydaje mi się, że będziemy musieli poczekać prawdopodobnie kolejne pięć lat, żeby się tego doczekać. Jest, na GitHubie można sobie zajrzeć i zobaczyć, jakie są propozycje do zmiany w języku, które nie są kompatybilne wstecz. 

Dla twórców Golanga jest bardzo ważne to, żeby utrzymywać tę kompatybilność wsteczną, więc tę wersję v2 odwlekają jak najbardziej ze względu na to, że chcą po pierwsze, żeby przejście z jedynki na dwójkę było jak najlepsze, a dwa, żeby ta pierwsza wersja wystarczająco mocno się rozgrzała, żeby znaleźć naprawdę wszystko, co można byłoby poprawić w tym języku, a nie mogą o tę kompatybilność wsteczną. Kiedy już dokończą wszystkie te ficzery, które Golang powinien mieć, to wtedy wydaje mi się, że dopiero będziemy mieli tę tranzycję do wersji drugiej. Ale to jest kwestia jeszcze pewnie paru lat. Jeszcze teraz wchodzą generyki, które są dużą rzeczą, więc generyki też będą musiały swoją drogę przejść. Później będziemy musieli mieć aktualizację w bibliotece standardowej, gdzie będziemy na przykład dodawać jakieś funkcje czy struktury, czy co tam chcecie, które będą korzystać z tych generyków. To też będzie musiało chwilkę się rozgrzać, żeby to jakoś dopracować, więc nie spodziewałbym się rewolucji w najbliższych latach.

Dla twórców Golanga jest bardzo ważne to, żeby utrzymywać tę kompatybilność wsteczną, więc tę wersję v2 odwlekają jak najbardziej ze względu na to, że chcą po pierwsze, żeby przejście z jedynki na dwójkę było jak najlepsze, a dwa, żeby ta pierwsza wersja wystarczająco mocno się rozgrzała, żeby znaleźć naprawdę wszystko, co można byłoby poprawić w tym języku, a nie mogą o tę kompatybilność wsteczną. 

Czyli taki ewolucyjny, powolny wzrost.

Tak, można powiedzieć, że bardzo powolny, bo na przykład, z tego, co wiem, o generykach zaczęli mówić jeszcze przed tym, zanim opublikowali pierwszy kod źródłowy tego języka, więc to było powiedzmy te 12-13 lat temu. Wtedy zaczęli mówić: „A może damy generyki”, ale odwlekali to aż do teraz ze względu na to, że te generyki, jeśli się to zrobi źle, to potrafią bardzo dużo skomplikować ten język. A jak to chyba Rob Pike powiedział: „No is temporary, yes is permanent”. Więc jeśli na coś się zgodzą, to to już zostanie w tym języku prawdopodobnie na zawsze, dlatego są tak ostrożni we wprowadzaniu nowych rzeczy.

Jasne, tak. Teraz to ma sens, co powiedziałeś, że ten rozwój jest powolny i raczej twórcy starają się najpierw dopasować to, co jest, żeby pójść krok dalej.

Świetnie, Bartłomiej Klimczak był moim gościem. Rozmawialiśmy o Golangu dzisiaj. Bartku, bardzo Ci dziękuję za rozmowę. Powiedz, proszę, gdzie Cię można znaleźć w Internecie, gdzie można poczytać Twoje materiały.

Najaktywniejszy jestem chyba na Twitterze, moja nazwa użytkownika to jest @kabanek, więc twitter.com/kabanek. Możecie mnie też znaleźć na blogu developer20.com. I jeśli jesteście z Krakowa, to możemy się spotkać na Meetupie, który mam nadzieję, że już niedługo będę mógł wznowić w wersji offline’owej, więc będziemy mogli się spotkać, porozmawiać, wypić piwo i ponarzekać na tego Golanga. No i na LinkedInie, ale tam jakoś bardzo aktywny nie jestem. I to chyba wszystko.

Super, oczywiście jak zawsze wszystkie linki będą w notatce do odcinka. Z mojej strony, Bartku, jeszcze raz bardzo Ci dziękuję i do usłyszenia. Cześć!

Dziękuję, cześć!

I to na tyle z tego, co przygotowałem dla Ciebie na dzisiaj. Język Go zyskuje na popularności. Idealnie odnajduje się w zastosowaniach, gdzie ceni się wydajność i wysoki developer experience. Przemyślane podejście do jego rozwoju, swoisty minimalizm w dokładaniu kolejnych możliwości i wsparcie Google z pewnością będą mu przysparzały kolejnych zwolenników.

Testuję ostatnio urządzenia Microsoft Surface dla profesjonalistów i jestem pozytywnie zaskoczony, jak bardzo położono w nich nacisk na mobilność. Większość urządzeń z tej linii ma możliwość pracy w kilku trybach, co wpasowuje się dobrze w charakter pracy ludzi z IT. Do czytania dokumentacji czy oglądania kursów, świetnie nadaje się tryb tabletu. Do codziennej pracy, przykładowo z kodem, możliwość podłączenia monitorów zewnętrznych lub tryb laptopa. Wszystko to stwarza idealny ekosystem do podnoszenia produktywności pracy w naszej branży.

Jeśli ten odcinek był dla Ciebie interesujący i przydatny, odwdzięcz się, proszę, recenzją, oceną lub komentarzem w social mediach. Jeśli masz jakieś pytania, pisz śmiało na krzysztof@porozmawiajmyoit.pl. Zapraszam też do moich mediów społecznościowych.

Nazywam się Krzysztof Kempiński, a to był odcinek podcastu Porozmawiajmy o IT o języku Go.

Zapraszam do kolejnego odcinka już za tydzień. Cześć!

 

+ Pokaż całą transkrypcję
– Schowaj transkrypcję
mm
Krzysztof Kempiński
krzysztof@porozmawiajmyoit.pl

Jestem ekspertem w branży IT, w której działam od 2005 roku. Zawodowo zajmuję się web-developmentem i zarządzaniem działami IT. Dodatkowo prowadzę podcast, kanał na YouTube i blog programistyczny. Moją misją jest inspirowanie ludzi do poszerzania swoich horyzontów poprzez publikowanie wywiadów o trendach, technologiach i zjawiskach występujących w IT.