Zakres wszystkich działek, w których musi się poruszać programista (backend developer w moim przypadku) to jest jakiś dramat. Mówię tu o małej firmie z własnym produktem, nie mówię z perspektywy korpo.
Jeśli chodzi o manie vs niemanie własnego produktu, korpo też mają swoje produkty, a mniejsze czasami nie mają żadnego, tylko "robią rzeczy" na zlecenie, outsourcing itp. Czasami jedno korpo ma nawet więcej, niż jeden produkt. To tak gwoli ścisłości :P
Kiedy się tego wszystkiego nauczyć? Jak Wy to robicie? Nie śpicie?
Uczę się w godzinach pracy, często kilka godzin czy dni żywcem siedzę, czytam dokumentację, przekopuję się przez kod źródłowy i robię notatki. Często na tym wręcz polega zadanie / spike, żeby wziąć, przeorać internety, dokumentacje, źródła, poczytać, pokombinować, zrobić PoC i wyciągnąć z tego wnioski dla zespołu do ponownego wykorzystania w następnych zadaniach. W sumie w zeszłym roku chyba większość czasu pracy spędziłem na czymś takim - doszkalaniu się w godzinach pracy (jak nie było za bardzo nic do roboty) i robieniu spajków (jak już było coś do roboty). Zostałem nawet okrzyknięty Confluence Developerem
...
Cóż, nie jestem tytanem intelektu, ale podejrzewam, że w jakiejś średniej się mieszczę biorąc pod uwagę możliwości umysłowe programistów w Polsce.
Właśnie nie wprost napisałeś, że programiści w Polsce nie należą do tytanów intelektu - uważaj, wg. ankiet StackOverflow chyba ok. 70% programistów na świecie uważało się za ponadprzeciętnych ;)
- Naucz się programować
Chyba nie ma sensu uwzględniać tego w wyliczance ;)
- Naucz się myślenia, mam tu na myśli algorytmikę i całą otoczkę
Ile bym dał, żeby w pracy mieć do czynienia z algorytmiką a nie zwykłym klepaniem...
- Naucz się tworzyć kod w praktyce
Nauczysz się zawsze, pytanie JAK się nauczysz. W pierwszej firmie, w której pracowałem komentowało się kod na zapas mimo używania gita - tak ludzie byli nauczeni.
- Ucz się masy narzędzi. Od tego może się coś w mózgu odkleić.. Jak to ogarnąć rozumiem to ja nie mam pojęcia. Muszę używać w pracy bazy danych, kolejek, konteneryzacja, CD/CI - Jenkins, AWS, Kubernetes, kontrola wersji, ogarniać infrastrukturę, żeby wiedzieć co i jak, analiza logów i debugowanie, znać w miarę OS, wiedza z zakresu sieci. Potem optymalizacja SQL, JVM, monitorowanie aplikacji, tutaj wchodzi ten ELK, Prometheus,
Graphana Grafana. Żeby korzystać z tych narzędzi to trzeba znać inne narzędzia! Edytory tekstu, pluginy do edytorów różne etc.
To przychodzi z czasem. Sporo z tych narzędzi tak naprawdę da się używać "na czuja" (choć znam takich, którzy nie klikną sami Run build
żeby odpalić build dopóki im nie powiesz, że Run build
uruchamia build...) i dopiero z czasem poznawać je lepiej. Choć oczywiście zaraz przyleci taki, wg. którego jak nie znasz na pamięć skrótów klawiszowych z jego
ulubionego IDE, albo wolisz oglądać sobie zasoby przez dashboard k8s / Octant zamiast tłuc z pamięci CLI k8s to powinieneś dostać dyscyplinarkę.
- Żeby tego nie było za mało... naucz się kurcze domeny produktu, w którym pracujesz - i tu w moim wypadku kolejny hardkor - codziennie muszę się uczyć, zmagać, próbować zrozumieć ten pierdyliard integracji, pierdyliard endpointów i kolejek.
Jak produkt jest duży, domena złożona itd. to bardzo pomagają wstępne szkolenia z produktu i wdrażające w domenę. Niektóre firmy produktowe to robią.
Jak nie ma albo jak szkolenia nie wystarczą, to męcz o dokumentację i/lub notuj sobie.
- To nie wszystko. Testy. Ciągle jest zbyt mało testów i trzeba to wszystko odpalać i testować wykonując requesty.
Testów zawsze jest zbyt mało i są niewystarczająco dobre :(
- Dobre praktyki, wzorce projektowe etc...
Wszystko przychodzi z czasem, a niektórzy żyją i bez tego (patrz moja odpowiedź na p.3)
A te wszystkie umiejętności i tak trzeba ciągle podtrzymywać i szlifować...
Są rzeczy, których się nie zapomina, chyba że metodą uczenia jest kucie na blachę API biblioteki, serwisu etc. - ale wtedy problem nie leży w samym zapominaniu :P
Wiem, że szczegółów nie spamiętam, a jak spamiętam to zapomnę lub się zdezaktualizują. Jeśli je zapamiętuję i pamiętam nawet po latach, to czystym przypadkiem. Dopóki mniej-więcej pamiętam, do czego służyło X, lub jaki problem rozwiązywało Y to jest dobrze - będę wiedział, czego szukać w dokumentacji i będę miał aktualne szczegóły na wyciągnięcie ręki.
Ogólnie wpadłem w konsternację i nie mam pojęcia jak to ugryźć, w czym się specjalizować, a co odpuścić.
Podzielicie się może Waszym sposobem na zapanowanie nad tym? Dodam, że wpadłem na dodatek w błędne koło i chciałbym nauczyć się wszystkiego, a się nie da. Mam na półce ogrom kolorowych książek, pięknych i pachnących, ale jak mam się z nich uczyć, kiedy w wolnych chwilach próbuję rozgryźć jak działa jakaś mikrousługa, w której muszę jutro robić task, a nawet nie wiem co ona dobrze robi i jak działa.
Ba, do tego wszystkiego dochodzi jeszcze podnoszenie poziomu z j. angielskiego i umiejętności miękkich jak jakieś scrumy etc.
Zostanę zjedzony, że nie jestem tró programistą pasjonatem (ok, nie jestem - zasadniczo nie wiem, czym tu się pasjonować będąc code monkey
) - sposób na zapanowanie nad tym jest taki, że praca jest w pracy, a po pracy nie ma pracy tylko czas wolny. W pracy jest czas na robienie zadań do pracy, doszkalanie się do pracy. Po pracy jest czas na wszystko inne, w tym naukę - ale tego, czego mam ochotę się uczyć. Jeśli ktoś ma mnie zwolnić za to, że po godzinach gram w gry albo wolę się bawić nie wiem, sieciami neuronowymi, niż doszkalać z Cassandry bo akurat architekt pryncypał ma pomysła
- cóż...