W pierwszej części naszej serii pokazaliśmy, że praca programisty to znacznie więcej niż samo pisanie kodu.
Rozmawialiśmy o pierwszych dniach w software house, o różnicy między studiami a rzeczywistymi projektami oraz o tym, dlaczego doświadczenie zdobywa się przede wszystkim poprzez praktykę.
Dziś przechodzimy do pytania, które zadaje sobie niemal każdy Junior. Czego właściwie powinienem się uczyć?
Internet podpowiada wszystko. Jedni mówią, że koniecznie trzeba znać React. Inni twierdzą, że przyszłość należy do Rusta. Jeszcze inni przekonują, że bez Dockera, Kubernetesa i pięciu certyfikatów nie ma sensu wysyłać CV.
Prawda wygląda znacznie spokojniej...
Nie ucz się frameworków. Ucz się programowania.
To zdanie może wydawać się dziwne.
Przecież firmy ogłaszają rekrutacje na React Developera, Java Developera czy PHP Developera.
Dlaczego więc mówimy, żeby nie zaczynać od frameworków? - Bo framework to narzędzie. A narzędzia zmieniają się bardzo szybko.
Jeszcze kilka lat temu wiele osób było przekonanych, że AngularJS będzie dominował przez dekady. Dzisiaj wygląda to zupełnie inaczej.
Frameworków będziesz uczył się przez całą karierę. Natomiast sposób myślenia programisty pozostaje z Tobą na zawsze.
Dlatego najpierw naucz się:
- rozwiązywać problemy,
- analizować wymagania,
- projektować rozwiązania,
- czytać cudzy kod,
- pisać czytelny kod.
Technologia jest tylko środkiem do osiągnięcia celu.
Jeden język opanuj naprawdę dobrze
To chyba najczęstszy błąd początkujących.
Dzisiaj JavaScript. Jutro Python. Pojutrze Go. Za tydzień Rust. Po miesiącu C#...
Po dwóch miesiącach okazuje się, że żaden z nich nie został opanowany na dobrym poziomie. Znacznie lepiej jest wybrać jeden język i naprawdę go poznać.
Zrozumieć:
- jak działa pamięć,
- czym są referencje,
- jak wygląda obsługa wyjątków,
- jak działają kolekcje,
- czym różni się programowanie synchroniczne od asynchronicznego,
- jak działa debugowanie.
Kiedy nauczysz się jednego języka naprawdę dobrze, kolejnych będziesz uczył się znacznie szybciej.
Naucz się czytać dokumentację
Mało efektowne? Bardzo.
Niezwykle przydatne? Jeszcze bardziej.
Dobry programista nie pamięta wszystkiego. Dobry programista wie, gdzie znaleźć wiarygodną odpowiedź.
Dokumentacja producenta frameworka lub biblioteki niemal zawsze będzie lepszym źródłem wiedzy niż przypadkowy wpis na forum sprzed sześciu lat.
To właśnie umiejętność wyszukiwania informacji odróżnia osoby rozwijające się od tych, które bez końca kopiują rozwiązania znalezione w internecie.
Git to nie przycisk "Wyślij"
Jeżeli mielibyśmy wskazać jedną umiejętność, której warto nauczyć się jak najwcześniej, byłby to Git. Nie dlatego, że jest modny. Dlatego, że praktycznie każdy zespół programistyczny z niego korzysta.
Git to nie tylko zapisywanie zmian. To sposób współpracy. Branching. Pull Request. Merge. Rozwiązywanie konfliktów. Historia zmian.
Bez tego trudno wyobrazić sobie pracę w profesjonalnym zespole.
I jeszcze jedna rada. Nigdy nie wysyłaj projektu w pliku ZIP. Naprawdę.
SQL - nawet jeśli nie chcesz zostać administratorem baz danych
Bardzo wielu Juniorów unika SQL. To błąd.
Większość aplikacji biznesowych korzysta z baz danych. Nie musisz zostać ekspertem od optymalizacji zapytań.
Ale powinieneś rozumieć:
- czym jest relacyjna baza danych,
- jak działają relacje,
- czym jest indeks,
- czym różni się LEFT JOIN od INNER JOIN,
- dlaczego źle napisane zapytanie potrafi spowolnić całą aplikację.
To wiedza, która przyda się niemal w każdym projekcie.
Linux nie gryzie
Nie musisz od razu rezygnować z Windowsa. Ale warto nauczyć się podstaw pracy w terminalu.
Większość serwerów działa pod kontrolą systemów Linux.
Znajomość podstawowych poleceń:
- ls,
- cd,
- grep,
- cat,
- chmod,
- ssh,
potrafi zaoszczędzić mnóstwo czasu.
Na początku wygląda to dziwnie. Po kilku miesiącach trudno wyobrazić sobie pracę bez terminala.
Docker - dlaczego wszyscy o nim mówią?
Jeszcze kilka lat temu konfiguracja środowiska potrafiła zająć cały dzień.
Każdy miał inną wersję PHP. Inną bazę danych. Inne biblioteki.
Docker bardzo uprościł ten problem. Pozwala uruchamiać aplikacje w identycznym środowisku niezależnie od komputera.
Czy Junior powinien od razu zostać ekspertem od konteneryzacji? - Nie.
Ale warto rozumieć, czym jest kontener i dlaczego praktycznie każdy nowoczesny projekt korzysta z Dockera.
AI jest świetnym mentorem. Nie najlepszym programistą.
To temat, którego nie można dziś pominąć.
ChatGPT, GitHub Copilot i inne narzędzia AI potrafią ogromnie przyspieszyć naukę. Pod jednym warunkiem. Nie kopiuj kodu bez zrozumienia.
Znacznie lepiej zapytać:
- Dlaczego to rozwiązanie jest lepsze?
- Jak działa ten algorytm?
- Jak można to zoptymalizować?
- Jakie są wady tego podejścia?
AI bardzo dobrze tłumaczy.
Nie powinno jednak zastępować samodzielnego myślenia.
Debugger jest Twoim przyjacielem
Na początku większość programistów robi coś takiego: var_dump($zmienna);
Potem: echo $zmienna;
A chwilę później: console.log(dane);
console.log(dane2);
console.log(dane3);
console.log(dane4);
Każdy z nas tak zaczynał. Ale warto jak najszybciej nauczyć się korzystać z debuggera.
Pozwala zatrzymać program w dowolnym miejscu, podejrzeć wartości zmiennych i zrozumieć, co naprawdę dzieje się podczas wykonywania kodu.
To jedna z umiejętności, która bardzo przyspiesza rozwój.
Jaki sprzęt wybrać?
Tutaj wiele osób spodziewa się listy komputerów za kilkanaście tysięcy złotych. Niepotrzebnie.
Na początek ważniejsze od najnowszego procesora są:
- wygodna klawiatura,
- szybki dysk SSD,
- odpowiednia ilość pamięci RAM,
- stabilne środowisko pracy.
Kolorowe podświetlenie RGB nie przyspieszy kompilacji. Trzy monitory również nie sprawią, że kod stanie się lepszy.
Dobry sprzęt powinien pomagać pracować. Nie robić wrażenia na zdjęciach (choć nie ukrywajmy - wygląd też ma znaczenie ;) )
Słowniczek pojęć
Framework
Gotowy zestaw narzędzi i bibliotek ułatwiających tworzenie aplikacji zgodnie z określonymi zasadami.
Git
System kontroli wersji pozwalający śledzić zmiany w kodzie oraz współpracować wielu programistom nad jednym projektem.
Docker
Platforma umożliwiająca uruchamianie aplikacji w odizolowanych kontenerach, dzięki czemu środowisko działa identycznie na różnych komputerach.
Debugger
Narzędzie służące do analizowania działania programu krok po kroku i wyszukiwania błędów.
SQL
Język służący do komunikacji z relacyjnymi bazami danych.
Podsumowanie
Dobry programista nie zna wszystkich technologii. Nie zna wszystkich frameworków. Nie pamięta całej dokumentacji.
Dobry programista posiada solidne fundamenty.
Wie, jak analizować problemy.
Potrafi znaleźć informacje.
Rozumie zasady działania technologii.
I właśnie dlatego potrafi szybko nauczyć się nowych narzędzi.
Frameworki będą się zmieniały.
Języki będą ewoluowały.
Sposób myślenia pozostanie najcenniejszą umiejętnością przez całą karierę.
W następnej części pokażemy, jak wygląda codzienna praca Senior Developera, dlaczego Code Review jest najlepszą szkołą programowania, czym naprawdę jest Clean Code oraz dlaczego zdanie "u mnie działa" wywołuje u wielu programistów nerwowy uśmiech.



