Wątek przeniesiony 2023-10-12 21:21 z Go przez Riddle.

Jak skutecznie uczyć się nowych technologii, na przykład GO?

0

Cześć!

Potrzebuję porady. Ostatnie pół roku spędziłem na pracy, której niestety nie mogę nazwać pełnoprawnym programowaniem. Obecnie zajmuję stanowisko front-end developera, jednak brak wyzwań związanych z logiką oraz nadmiar pracy z CSS i animacjami znacznie mnie zniechęcają. Po 6 miesiącach mam już dość i planuję podjąć się czegoś bardziej wymagającego. W tym kontekście zaczynam naukę języka Go.

Wcześniejsze podejście do nauki było dość chaotyczne, często zagłębiałem się zbyt szybko w nowe tematy, pomijając solidne przepracowanie podstaw. Teraz chciałbym uniknąć tego błędu i zapytać bardziej doświadczonych o rady dotyczące skutecznej nauki. Jakie projekty warto podjąć, aby lepiej zrozumieć Go? Nad czym warto dłużej się zastanowić i poświęcić więcej czasu? Czego uczyć się naokoło tego języka, czy algorytmika, wzorce projektowe, bazy danych itp. Jeśli jest ktoś w stanie mi to wszystko wypunktować i powiedzieć czego i w jakiej kolejności się uczyć to będę bardzo wdzięczny.

Z góry dzięki za wszelkie wskazówki!

1
Bunawerke napisał(a):

Potrzebuję porady. Ostatnie pół roku spędziłem na pracy, której niestety nie mogę nazwać pełnoprawnym programowaniem. Obecnie zajmuję stanowisko front-end developera, jednak brak wyzwań związanych z logiką oraz nadmiar pracy z CSS i animacjami znacznie mnie zniechęcają. Po 6 miesiącach mam już dość i planuję podjąć się czegoś bardziej wymagającego. W tym kontekście zaczynam naukę języka Go.

Nie nauczysz się nowego języka w pracy. Musisz poświęcić na niego czas po pracy, lub wziąć wolne. Takie jest przynajmniej moje zdanie.

Bunawerke napisał(a):

Wcześniejsze podejście do nauki było dość chaotyczne, często zagłębiałem się zbyt szybko w nowe tematy, pomijając solidne przepracowanie podstaw.

To nie jest specjalny problem. Możesz tak robić, nie widzę w tym problemu - podstawy możesz złapać później - jeśli tylko się rozwijasz i idziesz na przód.

Bunawerke napisał(a):

Teraz chciałbym uniknąć tego błędu i zapytać bardziej doświadczonych o rady dotyczące skutecznej nauki. Jakie projekty warto podjąć, aby lepiej zrozumieć Go? Nad czym warto dłużej się zastanowić i poświęcić więcej czasu? Czego uczyć się naokoło tego języka, czy algorytmika, wzorce projekttowe, bazy danych itp itd Jeśli jest ktoś w stanie mi to wszystko wypunktować i powiedzieć czego i w jakiej kolejności się uczyć to będę bardzo wdzięczny.

Myślę że to nie ma specjalnego znaczenia. Po prostu znajdź projekt który Cię zajawi, i zacznij go tworzyć.

1

Kiedyś się zacząłem uczyć Go, ale w końcu dałem sobie spokój, Rust ciekawszy. Ale jakbym miał wrócić do Go, to myślę, że takim moim pet projectem mogłoby być np. napisanie parsera. Bo to się fajnie pisze, jak już się wie, jak pisać.

Chociaż takim głównym zastosowaniem Go to raczej backend webowy, dużo tooli devopsowych też jest w tym pisanych (np. Kubernetes)

4

Języki takie jak kotlin czy rust mają zestawy ćwiczeń - mi się dobrze z tego uczyło
np. Rust https://github.com/rust-lang/rustlings/

Co do golanga to nie mam pojęcia. Piszę czasem w golangu, ale się go nie uczyłem - pełna nieprofeska :-(
Niestety, ten jezyk ma tyle wspólnego z nowymi technologiami co nowo zrobiony trebusz.

Riddle napisał(a):

Nie nauczysz się nowego języka w pracy. Musisz poświęcić na niego czas po pracy, lub wziąć wolne. Takie jest przynajmniej moje zdanie.

Ciekawe, bo kiedyś wpadłem, że jest dokładnie odwrotnie:
Język naprawdę poznasz i opanujesz dopiero w pracy.

Jak się uczy w wolnym czasie, po godzinach to często człowiek uczy się czego chce (w danym języku), a nie tego co jest potrzebne.

I nauczyłem się kilku języków od zera w czasie pracy. Fakt, że raczej małych i nie ogólnego przeznaczenia (np. dhall, solidity (o ile solidity można się w ogóle nauczyć).

0

Ten jezyk ma tyle wspólnego z nowymi technologiami co nowo zrobiony trebusz.

Rozbawiło mnie te porównanie :D ale powiedz mi proszę skąd takie przekonanie?

1

Po 6 miesiącach mam już dość i planuję podjąć się czegoś bardziej wymagającego.

Wait what? To co robisz jest bardzo wymagające skoro się poddałeś i szukasz czegoś innego.

Skąd pomysł że z czymś jeszcze bardziej wymagającym nie poddasz się szybciej?

1
Bunawerke napisał(a):

Ten jezyk ma tyle wspólnego z nowymi technologiami co nowo zrobiony trebusz.

Rozbawiło mnie te porównanie :D ale powiedz mi proszę skąd takie przekonanie?

Zgaduję, że przez dużą konserwatywność odnośnie ficzerów w stosunku do tego co oczekuje @jarekr000000 od języka tj. nulle, słabe wsparcie dla programowania w stylu FP, słabe generyki czy biedny system typów (wspomniane nule, brak sum types).

Z drugiej strony go zapewnia dużo rzeczy, które w innych językach są "stare" i z poprzedniej epoki tj. prosty i mocno zintegrowany tooling, brak frameworków (wynika poniekąd z prostoty języka a trochę też z klutury), dobre zarządzanie zależnościami, przyjemny runtime będący jednocześnie całkiem wydajny i mało upierdliwy (małe zużycie pamięci, szybkie wstawanie, low latency gc), czy wypluwanie binarek bez zależności systemowych.

Wszystko zależy od tego czego oczekujesz od języka i jak cenisz poszczególne aspekty rozwoju oprogramowania.

0
marian pazdzioch napisał(a):

Skąd Poznań myśl że z czymś jeszcze bardziej wymagającym nie poddasz się szybciej?

Też tak myślę. W ogóle najpierw zrozumiałem pierwszy post jako, że ktoś szuka czegoś mniej wymagającego. To by miało więcej sensu. Ktoś zmęczony CSSem chce coś łatwiejszego.

Bunawerke napisał(a):

Obecnie zajmuję stanowisko front-end developera, jednak brak wyzwań związanych z logiką oraz nadmiar pracy z CSS i animacjami znacznie mnie zniechęcają.

CSS jest akurat bardzo wymagający. Zastanów się, czego chcesz tak naprawdę, bo wpadasz w syndrom trawy zielonej po drugiej stronie, a twoje motywacje mogą się mijać ze stanem faktycznym (tj. zastanów się, czy faktycznie szukasz wyzwań, czy właśnie odwrotnie - jesteś zmęczony wyzwaniami (skoro cię zniechęca nadmiar pracy w CSS) i szukasz czegoś łatwego (a Go jest dość łatwym językiem, z tego co się zdążyłem orientować. A przynajmniej jest niski próg wejścia w niego w porównaniu do nauki np. Rusta, który właśnie przez swoją trudność mnie zachęcił. No ale w Rust jest mało ofert pracy).

0

Jeśli chodzi o pytanie z tematu:

Jak skutecznie uczyć się nowych technologii, na przykład GO?

Każdy ma swoje preferencje, więc definitywnej odpowiedzi nie usłyszysz. Jeśli o mnie chodzi, to lubię sobie zacząć od zupełnych postaw. Jakiś prosty, krótki kurs na Udemy i potem już robić konkretne rzeczy. Jeśli uczę się w ramach pracy, to w zależności od tego co jest potrzebne fajnie jest zacząć robić jakieś proste zadania. Jeśli poza pracą, to opensource, ale osobiście wydaje mi się, że zawsze cieżko było mi się wgryźć w jakiś projekt opensource tak, żeby wiedzieć co się dzieje.

Jak przychodzili ludzie do mnie do zespołu, to wysyłałem im ten filmik: https://www.youtube.com/watch?v=C8LgvuEBraI&ab_channel=JakeWright (albo jakiś inny krótki na temat podstaw)
a potem już dostawali jakieś proste zadania. Trzeba jednak wziąć pod uwagę, że były to osoby z kilkuletnim doświadczeniem w innych językach.

Tobie poleciłbym jednak zrobienie jakiegoś krótkiego kursu na temat podstaw, a później spróbować coś swojego jeśli masz pomysł albo wgryźć się w opensource, chociaż wgryzanie się w opensource dla początkujących wydaje mi się być dość trudne.

Jeśli chodzi o punkt po punkcie wymienienie czego się uczyć, to możesz zerknąć tutaj: https://roadmap.sh/golang
Ta roadmapa jest dość rozbudowana, więc jeśli dojdziesz do połowy, to wydaje się, że to już sporo. Znowu zależy w co celujesz.

Oczywiście znowu każdy ma trochę inne podejście i inny pomysł, więc nie zrażaj się za szybko jeśli stwierdzisz, że to nie dla Ciebie.

3

Jeśli chodzi o strukturę do nauki technologii:

  1. Instalacja środowiska :-)
  2. Zorientuj się, czy istnieje jakaś road mapa nauki dla technologii, np. https://roadmap.sh/golang, czy są roadmapy fazowane per poziom (beginner, intermediate, ...)
  3. Wprowadzenie - książki (pewnie z milion pozycji, ale możęsz się ograniczyć do 2-3 klasyków dla danej technologii), video, tutoriale (tu trzeba uważać, żeby nie wdepnąć w randomową twórczość)
  4. Szkolenia
  5. Ćwiczenia - N zadań w XYZ -> np. https://github.com/cblte/100-golang-exercises
  6. Odkrywanie rzeczy, o których nie miałeś pojęcia, że istnieją. Dzięki temu będziesz miał świadomość, że coś istnieje, a w miarę potrzeby pogłębisz wiedzę.
  7. Jak inni używają technologii (np. analiza kodu źródłowego w projektach open source)
  8. Tworzenie własnych narzędzi w technologii XYZ, które usprawniają Ci codzienną pracę
1
slsy napisał(a):

Zgaduję, że przez dużą konserwatywność odnośnie ficzerów w stosunku do tego co oczekuje @jarekr000000 od języka tj. nulle, słabe wsparcie dla programowania w stylu FP, słabe generyki czy biedny system typów (wspomniane nule, brak sum types).

Z drugiej strony go zapewnia dużo rzeczy, które w innych językach są "stare" i z poprzedniej epoki tj. prosty i mocno zintegrowany tooling, brak frameworków (wynika poniekąd z prostoty języka a trochę też z klutury), dobre zarządzanie zależnościami, przyjemny runtime będący jednocześnie całkiem wydajny i mało upierdliwy (małe zużycie pamięci, szybkie wstawanie, low latency gc), czy wypluwanie binarek bez zależności systemowych.

Najgorszy w go jest error handling. I na drugim miejscu te nile/nulle.

Brak cudownych frameworków jest mocno na plus - to fakt.

Zarządzanie zależnościami nie wiem czy jest dobre - coś tam poszło nie tak. Ostatnio czyściłem nasz projekt... oparty o pewien framework :-)(blockchain/bft) i okazało się, że razem z frameworkiem dostajemy tony absurdalnych zależności (często z security issues). Najlepsze były zależności od jakichś własnych projektów hello world (puste), które autor bilbioteki przypadkiem wpakował do niej.
W efekcie wylądowaliśmy z kilkuset zależnościami, z których ponad 100 było zgłaszanych jako zagrożenie przez skan security - przy czym oczywiście, wszystkie tak naprawde nie były używane, tylko deklarowane w go.mod różnych bibliotek - niezły bajzel.
Wiele z tych bibliotek (z tymi pokracznymi zależnościami) to popularne w go. np "go-kit".

0
jarekr000000 napisał(a):

Zarządzanie zależnościami nie wiem czy jest dobre - coś tam poszło nie tak. Ostatnio czyściłem nasz projekt... oparty o pewien framework :-)(blockchain/bft) i okazało się, że razem z frameworkiem dostajemy tony absurdalnych zależności (często z security issues). Najlepsze były zależności od jakichś własnych projektów hello world (puste), które autor bilbioteki przypadkiem wpakował do niej.

To jest nierozwiązywalny problem, który istnieje wszędzie. Środkiem zaradczym jest używanie lekkich bibliotek do specyficznych zastosowań. W przypadku go przynajmniej jest duży kulturowy nacisk na używanie małych libek oraz zawsze można łatwo sprawdzić git diff go.mod, żeby sprawdzić w jakiej dupie jesteśmy po zaciągnięciu danego frameworka. Istnieje też opcja na sprawdzenie które zależności lądują w binarce, bo często są to po prostu zależności do testów, które nas nie obchodzą.

0

No uczysz się i implementujesz to praktycznie. Nie ma innej opcji.

0

Odnośnie kariery - nie zmieniaj języka na bardziej niszowy jeśli jesteś na początkowym etapie nauki. To Ci zbyt wiele nie da, bo roboty w niszowym języku jest mało i przeważnie tam szukają seniora więc na własne żądanie robisz sobie dużą przepaść w szukaniu ofert dopasowanych pod siebie.

Odnośnie niszowych języków - taki język jest super nie z powodu problemów jakie w nim się rozwiązuje, lecz z powodu ludzi jakich spotkasz. Mało komu chce się tak ryzykować, głównie zapaleńcy, osoby dla których sama kasa to jednak za mało.

Odnośnie szukania pracy - to panie z HR jak widzą kandydata, który ma 3 języki i takiego który ma tylko jeden język to wybiorą tego drugiego, bo jest pewniejszy wyborem. Praca z definicji to coś czego nie robisz normalnie, chyba, że ktoś Ci zapłaci. Co z resztą widzisz po tym jak czujesz się u siebie w robocie. Zmień własne podejście, bo sam język akurat tu nic nie zmieni. Tam gdzie biznes generuje hajs to Twoja robota na etacie jest nudna i powtarzalna, po to by w razie problemów z Tobą, dało się Ciebie wymienić na inny trybik.

Odnośnie nauki języka - jeden błąd jaki można popełnić przy nauce kolejnego języka programowania, a jaki mocno dalej ogranicza pole nauki jest używanie nowego języka na podstawie tego co już znasz z innych języków. Jak będziesz próbował w Go odwzorować programowanie tak jak w javascriptcie to będziesz się długo męczył, wiele rzeczy nie wyjdzie, a na koniec sam przyznasz, że Go to słaby i wkurzający język.

Warto dążyć do zrozumienia perspektywy jaka jest związana z wybranym językiem. To taka nieodłączona część, o której na początku nawet nie wiesz, ale to ona jest decydująca jeśli chodzi o rozwiązywanie problemów. Ta perspektywa promuje patrzenie w konkretną stronę, ale za rozglądanie w inne strony karci i powoduje, że rozwiązania stają się toporne, momentami karkołomne.

Jak złapać perspektywę w języku? Musisz rozpoznać jakie w ogóle ta perspektywa wyznacza ograniczenia, a następnie zastanowić co robić aby z tym nie walczyć, lecz wykorzystać na swoją korzyść. Wtedy Twoja uwaga w końcu się skupi się na sposobie tworzenia oprogramowania jaki najlepiej pasuje do wybranego języka.

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