Golang w 2020

1

Cześć wszystkim,
jestem na pierwszym roku studiów informatycznych w Poznaniu.
W przyszłości karierę chciałbym podjąć w Back-endzie i zastanawiam się nad rozpoczęciem nauki Golang (może nie tyle co rozpoczęciem a zagłębieniem się w pełni, ponieważ napisałem już w nim programy pokroju "Hello World" i przyjemnie mi się w nim pisało), ale nie wiem czy jest to "przyszłościowy" język. Z firm, których używają Go to na myśl przychodzi mi tylko WP (jeśli chodzi o Polski rynek, a taki tylko rozważam na chwilę obecną).
Czy jest sens uczyć się tego języka dalej, czy lepiej zostać przy klasykach gatunku w postaci Java / C# / Python?

Jestem ciekaw waszych opinii :)

3

Na Górnym Śląsku jest Hybris. Do niedawna zatrudniał większość programistów Go tam. A jak chcesz danych bardziej dla całej Polski to wchodzisz na Pracuj.pl lub NoFluffJob i sprawdzasz ilość ofert

1

Z tego co kojarzę to chyba w UK więcej jest ofert z Go niż w Polsce (chociaż w Polsce też takie się zdarzają, ale rzadziej niż z javy czy pythona)

3

Polecam się uczyć Go, bo składnia jest dość przystępna (przejrzysta, czytelna, mało bajerów, ale dzięki temu łatwa do zapamiętania), a sam język dość zmyślnie zaprojektowany (nie masz generyków, ale dodają je i sam nad ich brakiem jakoś nie ubolewam, nie masz OOP tylko programowanie strukturalne). Ostatnio miałem malutki side-project by przepisać lambdę z JSa na Go i było to ciekawe zadanie. Pracowałem w Elixirze, zaś Go znam tylko hobbystycznie, ale z uwagi na wsparcie, syntax, ekosystem etc. uważam, że Go stoi na dużo lepszej pozycji niż Elixir, jeśli chodzi o rynek pracy.

14

nie masz OOP tylko programowanie strukturalne

Pozwolę sobie na mały off-top w poście, bo to ważny off-top dla mnie.
Programowanie strukturalne nie ma nic wspólnego z rekordami (zwanymi w C/C++, Rust i w Go pewnie też strukturami). Programowanie strukturalne to idea używania pętli i selekcji (if-else oraz switch) zamiast "szeroko rozumianego" goto. "Szeroko rozumianego" ponieważ nadużywanie return (promowanego w C i GoLangu) też jest sprzeczne z programowaniem strukturalnym. "Funkcja powinna mieć jeden punkt wejścia i jeden punkt wyjścia" (fragment definicji cytowany z pamięci).

BTW Scala, i chyba prawie wszystkie języki funkcyjne, w pełni wspiera programowanie strukturalne ponieważ tam nie trzeba używać return. Większość języków funkcyjnych nawet nie ma return bo wszystko jest wyrażeniem i zwraca wartość

0

Oczywiście zaznaczę jeszcze, że przez ponad pół roku cisnąłem front-end JavaScript i ReactJS ale jednak backend bardziej mi się podoba i składania JavaScriptu jakoś do mnie nie przemawia.
Na pewno będę chciał jeszcze bardziej zgłębić Pythona i rozpocząć naukę Javy (pewnie w te wakacje), ale kurde Go też mi się bardzo podoba, więc nawet jeżeli do jakiś hobbistycznych projektów to będę przyswajał. Bardziej chodziło mi o to jak wy bardziej doświadczeni prognozujecie przyszłość tego języka w Polsce, ponieważ na chwilę obecną ofert jest mało i tylko dla midów i seniorów.

0

@Michał Gąsiorek: też od roku już mam taką chęć pouczyć się i popisać coś w Go, ale właśnie boję się, że nie będzie w tej technologii dobrego rynku. No a jak już to wolę szlifować obecny stack. No ale kusi kusi :) I ta fajna maskotka :D

2

To jeszcze offtop z mojej strony do wypowiedzi @Pipes:

nie masz OOP tylko programowanie strukturalne

Tu bym polemizował ;) za FAQ:

Is Go an object-oriented language?
Yes and no. Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy. The concept of “interface” in Go provides a different approach that we believe is easy to use and in some ways more general. There are also ways to embed types in other types to provide something analogous—but not identical—to subclassing. Moreover, methods in Go are more general than in C++ or Java: they can be defined for any sort of data, even built-in types such as plain, “unboxed” integers. They are not restricted to structs (classes).

Also, the lack of a type hierarchy makes “objects” in Go feel much more lightweight than in languages such as C++ or Java.

Czyli jak to bywa: to zależy.
Sporo mozna na ten temat znaleźć w sieci, jeden z przykladowych artykułów:

https://flaviocopes.com/golang-is-go-object-oriented/

P.S. chcialem w komentarzu, ale się nie zmiesciłem

4

Pierwszy rok studiów i takie rozkiminy?! Wow!

Ja powiem tak, w czasie studiów powienieneś nauczyć się:

  • Jednego języka silnie typowanego (Go, C/C++, Java/C#, Rust)
  • Jednego języka (dynamicznie typowanego) skryptowego (JS, Python, Ruby)
  • Jednego języka funkcyjnego (F#, Scala, Haskell, LISP, Ocam, ReasonML???)
  • Jednego języka deklaratywnego (SQL, Prolog, XLST)
  • Języka powłoki (Bash, PowerShell, ZSH)

Java/C#/Python/JS-TypeScript nigdy nie są złym wyborem. Ale jak chce się ciekawe rzeczy robić to często łatwiej się załapać pisząc w niszowym języku.
Co więcej taki język przyciąga lepszych/ciekawszych ludzi: http://www.paulgraham.com/pypar.html [The Python Paradox Grahama].

Obecnie w Go sporo piszę się infrastruktury: Prometheus, VictoriaMetrics (metryki), Kubernetes (kontenery), Terraform (setup infry w chmurce).
Język ma więc przyszłość, ale raczej nie będzie stosowany do rozwoju "aplikacji biznesowych" - tam króluje programowanie obiektowe, DDD, SOLID, GRASP i kult factoryManagerów,
a Go to w mojej opinii takie lepsze C. Do niedawna nawet wsparcia dla generyków nie było (ala void* z C pamiętacie?).

Na koniec rada praktyczna, z jakigoś powodu GoLand najlepsze IDE do golang'a od JetBrains ma wersję tylko płatną. OK dla pracującego programisty 400pln na roczną subskrypcję to niewiele,
ale Ciebie jako studenta może zaboleć. VSCode z wtyczką do Go, jest jak to mawiają anglicy "fine" (ostatnio wtyczka ta została przekazana z MS do teamu rozwijającego Go, więc jest szansa że się poprawi).

3

Ludzie co zaczęli pchać Golanga do crud appek jako nowy lepszy python, PHP... to im się coś mocno pomyliło.

Już nie mówiąc o potworkach Golang + DDD...

Przez to tak mocno naciskają ludzie teraz na generyki, które w tym języku będą wyglądać co najmniej dziwnie.

imo język znajdzie swoją nisze głównie jako cloud infrastructure.

5

bawi mnie jak ktoś pisze, że Go nie lubi się z abstrakcjami, nie jest OOP i tam jeszcze parę innych epitetów :) Przede wszystkim - Go jest językiem ogólnego zastosowania, ale nie wszędzie sprawdzi się najlepiej. Można w nim pisać GUI, ale czy to dobry pomysł? :P

Wszak Go jest młodym językiem, jak się go porówna do PHP, pythona czy Javy, ale już powstały takie potworki jak docker czy kubernetes więc coś rozsądnego z tego powstaje.

Co do pytania oryginalnego - rynek pracy w ciągu tych kilku lat tak może się zmienić, że nie ma co podążać za modami. Wg mnie warto nauczyć się kilku różnych od siebie języków, czyli coś kompilowanego (go/rust) + skryptowe (bash+python) i ogarnąć (i trochę bardziej zrozumieć) bazę danych (jakiś mysql/postgresql) + czaić czym jest i jak działa dokumentowa baza danych. Jak to na juniora będziesz umiał, to więcej niż minimum.

2

Komuś wchodzącemu na rynek pracy na pewno bym Go nie polecił, no chyba, że jest mocno ukierunkowany na coś i wie, że Go jest w tym środkiem do celu.

Ale większość rynku pracy to crud appki, czyli na początek znać porządnie jeden dość popularny język backendowy, jakiś popularny framework oraz baze relacyjną i trochę frontu i na tym bym się skupił na początku.

Nie nastawiałbym się mocno na żadną technologię, aczkolwiek uważam, że masterować można 1-2 języki/technologie.

3

Gdyby ktoś się zastanawiał kiedy język Go otrzyma typy generyczne:

1

Golang jest spoko, ja piszę w nim lamdy na AWSie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1