Wątek przeniesiony 2021-09-16 09:50 z Inne języki programowania przez cerrato.

Podstawy programowanie w Go... i co dalej?

0

Witam wszystkich serdecznie, jestem studentem politologii i postanowiłem w wolnym czasie wrócić po latach do nauki programowania. Nie wiem, czy mogę wiązać z tym przyszłość zawodową (na razie robię to dla rozwijania pasji i samorozwoju), jednak i tego nie wykluczam.

Wybrałem Go, zachęcony faktem, że jest to język kompilowany do natywnego pliku wykonalnego z wbudowanym GC. Choć do tej tematyki jeszcze mi daleko w nauce (jestem obecnie na poziomie różnych struktur danych i różnych aspektów funkcji), zachęcił mnie także prosty (z punktu widzenia pracy programisty) model współbieżności. Jak na razie nauka idzie całkiem przyjemnie, język wydaje mi się o wiele bardziej intuicyjny niż te, które w bliższej i dalszej przeszłości "liznąłem". Chciałbym zatem w kolejnym kwartale solidnie opanować podstawy języka, a przy okazji dalej oswajać się z GoLandem od JetBrains.

Dostrzegam jednocześnie, że te podstawy niewiele mi dadzą do bardziej praktycznego działania i pisania własnych małych aplikacji, dlatego przydałoby się opanować jakąś bazę danych, no i... właśnie, drugi język. Bibliotek do Go jest stosunkowo niewiele, a dynamika rozwoju ekosystemu wydaje się, że wyhamowała. Ponadto brak bibliotek do UI, czy na aplikacje mobilne, a może w tym kierunku bym się bardziej spełniał. Podobnie z frameworkami do aplikacji webowych (aczkolwiek tu bym musiał poznać JS, na razie znam tylko podstawy HTML5 i CSS3).

Zatem pytania:

  1. Co powinienem zrobić po opanowaniu Go, by rozszerzyć umiejętności? Polecacie jakieś bazy danych, których można byłoby się łatwo nauczyć do zastosowań hobbystycznych, ale też dających jakieś kompetencje pod rynek pracy? SQLite to dobry wybór na start? Co właściwie powinienem zrobić w kolejnych krokach, by móc zabiegać o miano "Junior Developer"?
  2. Za jaki język warto się zabrać w drugiej kolejności? Ciekawy i perspektywiczny wydaje się Rust, choć nie wiem, czy właściwy do zastosowań hobbystycznych, niemniej, ma wspierane bindingi do GTK+, a to mnie jako linuksiarza by interesowało. Jest sens uczyć się Kotlina pod aplikacje desktopowe (Swing), niekoniecznie mobilne? Wspominam o tych językach, bo ich popularność bardzo wzrasta, a wydają się o wiele bardziej przejrzyste i intuicyjne niż C/C++, czy Java i C#.
0

dlatego przydałoby się opanować jakąś bazę danych, no i... właśnie, drugi język. Bibliotek do Go jest stosunkowo niewiele, a dynamika rozwoju ekosystemu wydaje się, że wyhamowała. Ponadto brak bibliotek do UI, czy na aplikacje mobilne, a może w tym kierunku bym się bardziej spełniał. Podobnie z frameworkami do aplikacji webowych

Oj to nie tego typu jezyk. Go to takie lepsze ale wolniejsze C (bez ++). W tym najczesciej sa pisane jakies niskopoziomowe backendy gdzie nie trzeba nawet generykow albo aplikacje infrastrukturalne pokroju dockera czy k8s albo webserver caddy.
Do CRUDow to raczej Java/C#/Kotlin. Do desktopa C++/C#. A mobile Kotlin/Swift.

W Go za duzo rzeczy nie ma zeby to byl general purpose language. Ale moze to i lepiej :)

0

Jeśli współbiezność opiera się na synchronizacji przez blokady to tak naprawdę zbytnio wielkiego uproszczenia nie masz.

Ogólnie Go daje trochę upustu przy asynchroniczności, i tyle. Reszta charakterystycznych cech to statyczne typowanie, kanciasta składnia, gc i binarka, są to bardziej kontrowersyjne decyzje, stąd poza budową tooli pod infrastrukturę (gdzie te cechy są w miarę ok) ciężko ten język stosować na innych polach, bo tam inne języki dają lepsze warunki do tworzenia programów.

A jeśli płyniesz w innym kierunku to w Go będziesz się męczył, nie wspominając o tym, że cięzej będize tak znaleźć pracę powiązaną z webówką.

1
mikkob napisał(a):

jestem studentem politologii i postanowiłem w wolnym czasie wrócić po latach do nauki programowania. Nie wiem, czy mogę wiązać z tym przyszłość zawodową
Wybrałem Go

Będziesz programistą backend 2 lata exp (ale nie Go), będziesz dorabiać do inżyniera magisterkę z infy. Będziesz się starać dostać pracę junior Go w jednym z miast Big-3-IT.
Nie dostaniesz.

Gorzej chyba nie mogłeś sobie wybrać od Go. W Polsce.
Bo za granicą doświadczonego (2+), wykształconego kierunkowo, to do Go przyjęli z otwartymi ramionami.

(W ten sposób z Polski wyemigrował na stałe kolega)

0

@BraVolt: Nie zgodzę się z tobą co do tego, że w Polsce jest zła sytuacja z Go, dziennie mam po 5-6 wiadomości na linkedin, fakt, część jest z zagranicy, ale większość z Polski (większe miasta jak Kraków, Wrocław, Gdańsk czy Warszawa). Moi koledzy z pracy także nie narzekają na "spam". I jeśli chodzi o golang to większość z nas jest 1+ w tym języku. Powiem więcej, w moim odczuci łatwiej jest dostać prace w Go niż w Pythonie.

1

@Dregorio:

Mogę napisać: znam pajtonowców którzy spokojnie rozpoczęli pracę w tym języku i nie narzekali specjalnie, że bardzo trudno.

0

@BraVolt: Ja jestem jednym z nich :P I nie twierdze, że jakoś ciężko się w tym pisze, ale nie każdy chce, skądś tyle ofert na mojej skrzynce się bierze. Chyba, że bierze się to z tego, że rekruterzy widzę, że mam już jakieś w tym doświadczenie.

0

@Dregorio: Zatem jakie technologie po dobrym opanowaniu podstaw języka należałoby poznać? Mówię przede wszystkim o lekkich i łatwych w użyciu rozwiązaniach. Czy warto byłoby poznać bazy danych NoSQL typu MongoDB? Jakieś frameworki, etc.?

1
Dregorio napisał(a):

Chyba, że bierze się to z tego, że rekruterzy widzę, że mam już jakieś w tym doświadczenie.

Jak masz bliżej 2+ konkretnie w Go to masz oferty w go. Jakbyś miał 2+ np. w .NET to sorry, ale szukam kogoś z udokumentowanym komercyjnym doświadczeniem w Go.
Go to nie moje klimaty, ale widziałem jak naprawdę łebscy ludzie którym podobało się Go odbijali się od ściany. Gdzie indziej na co innego mogli sobie wybrać, ale nie Go.

Jakby zebrać razem wszystkie rekrutujące projekty i zsumować ludzi z Go w mieście to wszystkich razem byłoby mniej od liczebności jednego korporacyjnego projektu dotnet/java. Dwu, trzyosobowy zespół rekrutuje trzeciego, czwartego - słyszałem takie opowieści.

1

@mikkob: Przede wszystkim łap to https://github.com/avelino/awesome-go. Jakaś relacyjna baza danych (postgres), nierelacyjna NoSQL (MongoDB, Redis), dobrze jest wiedzieć czym się różnią i kiedy używać. Docker (umieć napisać prosty Dockerfile, docker-compose, ogólnie się orientować), Kubernetes (poziom - nie panikować jak trzeba będzie uruchomić :P). Z frameworków np. gorilla (jeśli chcesz klepać CRUDy), GORM jeśli nie chcesz z palca pisać zapytań SQL i można tego użyć w projekcie. Jakieś narzędzia do logowania, metryk, IDE, lintery. Większość masz w linku, który podałem. Powodzenia

0

Jezeli chcesz sie przebranżowić to wybierz cos popularnego a nie niszowego.
Rust jest mega niszowy...

Ja rekrutujac kogos do Golanga czy Rust oczekiwalbym doswiadczenia kilku lat w innych technologiach.

Moje subiektywne zdanie jest takie - jeżeli ktoś umie tylko Go i nic bardziej popularnego to raczej nic z niego nie będzie, zupełny brak pragmatyzmu.

1

@mikob:

Co powinienem zrobić po opanowaniu Go, by rozszerzyć umiejętności? Polecacie jakieś bazy danych, których można byłoby się łatwo nauczyć do zastosowań hobbystycznych, ale też dających jakieś kompetencje pod rynek pracy? SQLite to dobry wybór na start? Co właściwie powinienem zrobić w kolejnych krokach, by móc zabiegać o miano "Junior Developer"?

Ludzie programują latami w Go, mając background w innych językach, a nie są w stanie go opanować (tak twierdzą), Ty już martwisz się, co będzie jak go opanujesz. Za bardzo z przodu jesteś.

Za jaki język warto się zabrać w drugiej kolejności? Ciekawy i perspektywiczny wydaje się Rust, choć nie wiem, czy właściwy do zastosowań hobbystycznych, niemniej, ma wspierane bindingi do GTK+, a to mnie jako linuksiarza by interesowało. Jest sens uczyć się Kotlina pod aplikacje desktopowe (Swing), niekoniecznie mobilne? Wspominam o tych językach, bo ich popularność bardzo wzrasta, a wydają się o wiele bardziej przejrzyste i intuicyjne niż C/C++, czy Java i C#.

Na początek naucz się jakiegokolwiek języka, w którym jesteś w stanie zrobić prosty projekt (serwer/client API typu todo lista, przykładowo). Nie musi to być Go, może być "zwykły" Python. Jak chcesz na brutala, to możesz C/C++/Rust, ale to będzie bolało. Zalecam jednak uczyć się w kierunku od języków bardzo prostych i na wiele pozwalających (Python, Perl bez pragmy strict) do coraz trudniejszych, bo wtedy lepiej załapiesz o co chodzi w tych trudniejszych.

Co do ofert w Go - od roku dosłownie zwalają się one na głowę w PL, pewnie to głównie SHy dla zagranicy, ale jednak. Pamiętam czasy, że 1 oferta w Go na LI to był sukces (i nie mówię wcale o ofercie od polskiego rekrutera). Więc popyt wzrósł bardzo znacząco, ale według mnie, Go jest takim językiem "ze środka" jak np. Rust. Jak ktoś dopiero startuje z programowaniem i wejdzie w te języki jako pierwsze, to będzie miał wielkiego WTFa o co w ogóle chodzi. Trzeba przejść ścieżkę starożytnych, aby rozumieć dobrze inne języki, w tym ścieżkę funkcyjną.

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