Jak zostać programistą

Mimo iż tytuł jest z gatunku tych chwytliwych, to nie jest to clickbait. Opowiem wam jak się zostaje programistą, opierając się na doświadczeniach własnych oraz innych programistów, których znam i z którymi miałem okazję pracować.

Wybór języka programowania

Na samym początku, kiedy jeszcze mało wiesz i mało umiesz, trudno jest podejmować decyzje, które określą ścieżkę naszej zawodowej kariery. Na początek dobrze jest spróbować napisać “Hello World” w kilku różnych językach programowania. Kiedy już poczujesz, że któryś z nich pasuje ci bardziej, spróbuj napisać coś trudniejszego, np. program który oblicza odległość między dwoma punktami na płaszczyźnie. W tym momencie jeszcze nie zamykaj się na inne języki, może się bowiem okazać, że ten język, który na początku wydawał się najprostszy, staje się dużo trudniejszy kiedy trzeba napisać coś trudniejszego. Próbuj robić rzeczy na wiele sposobów.
Ja na początku pisałem w C, C++, Java, PHP i to w pewnym momencie zauważyłem, że w PHP najłatwiej złapać jakieś zlecenia, na których można nie tylko zarobić ale i sporo się nauczyć. Być może Twoje pierwsze projekty będą w Ruby czy w Pythonie, to jest często kwestia przypadku, środowiska, momentu czy boomu na daną technologię. Może też być tak, że napiszesz swój własny projekt w języku, który Tobie najbardziej odpowiada i będziesz go rozwijał, tym samym ucząc się na “żywym organizmie”, a taka nauka jest najskuteczniejsza.

Pierwsze projekty

Zbieraj swój kod i wracaj do niego zawsze kiedy nauczysz się czegoś nowego, sam(a) zobaczysz jak Twój kod będzie się stawał coraz lepszy, jeśli będziesz go nieustannie refaktorować – jeśli jeszcze nie znasz tego słowa, nie szkodzi – generalnie chodzi o to, żeby stale udoskonalać swój kod, aby działał coraz lepiej a jednocześnie był czytelny dla innych programistów, jak i również dla Ciebie, kiedy wrócisz do niego za kilka miesięcy.

Zrób sobie jeden “popisowy” projekt – może to być własna strona internetowa, desktopowy kalkulator, sterownik ogrzewania na mikrokontrolerze – zacznij od czegoś co Tobie się przyda, a kiedy już będziesz miał działający program, pokaż go znajomym, wysłuchaj ich uwag, udoskonal swój program, znów wyślij znajomym, aż zaczniesz zbierać pozytywne opinie, wówczas będziesz wiedział, że program działa tak jak powinien. Pokazuj swój kod na forach dla programistów, pytaj, dyskutuj, zdobywaj wiedzę, ucz się jak zadawać pytania.

Pierwsza praca

Prawda jest taka, że w tej branży mało kto pyta o wykształcenie, pracodawcy wolą zobaczyć próbkę kodu czy zrealizowany projekt. Mamy zatem kolejny powód dla którego warto ciągle coś pisać, nawet jeśli nie przynosi to (jeszcze) zysków. Kiedy będziesz się już miał(a) czym pochwalić napisz do kilku firm, umów się na rozmowę i mów wprost, że nie masz jeszcze komercyjnego doświadczenia, ale się uczysz, coś już umiesz, coś już możesz pokazać. To ważne, bo pracodawcy chcą widzieć, że zatrudniają kogoś kto podchodzi do swojej pracy z pasją. W tym momencie właśnie zaczniesz myśleć o programowaniu jako o pracy, ale nie porzucaj programowania hobbistycznego – eksperymentuj, ucz się, rozwijaj się.

Jeśli pracodawca postanowi dać ci szansę, zapewne dostaniesz się na okres próbny na kilka miesięcy, wykorzystaj ten czas. Naucz się jak wygląda praca z systemami przydzielania zadań, jak pracuje się w zespole, jak robić wyceny czasowe, itd. Jeśli trafisz do firmy w której pracują inni programiści na różnych poziomach zaawansowania, zapewne dostaniesz do pomocy kogoś bardziej doświadczonego w zawodzie. Słuchaj rad doświadczonego kolegi/koleżanki, pokazuj mu swój kod i pytaj o opinię, poprawiaj swój kod wedle uwag jakie otrzymasz. Kiedy już złapiesz ten rytm pracy i nauki, zacznij proponować swoje rozwiązania, starsi programiści na pewno szybko ci pokażą gdzie są błędy w rozumowaniu, ukryte założenia czy przypadki skrajne.

Na tym etapie będziesz się jeszcze uczyć dużo typowego kodowania, ale już powoli zacznie do Ciebie docierać, że praca programisty to coś więcej niż klepanie w klawiaturę.

Różnorodność

Na początku proponowałem Ci uczenie się różnych języków. W swojej pierwszej pracy zapewne wszystko będzie się kręcić wokół jednego z nich, ale to nie znaczy, że już obrałeś konkretną ścieżkę i już zawsze będziesz pisać w tej samej technologii. Informatyka ciągle idzie do przodu i pojawiają się nowe technologie, języki, frameworki, warto uczyć się ich stopniowo. Nie musisz rzucać się na naukę najnowszego narzędzia, które pojawiło się na rynku wczoraj, technologie które mają już swoją pozycję na rynku przeważnie mają już dużą społeczność, fora, mnóstwo problemów już rozwiązanych przez inne osoby.

Rozwijaj nie tylko swoją główną technologię, ale również wszystko co się z tym wiąże. Ja na przykład pracując głównie w PHP ciągle miałem kontakt z JavaScript i przez lata pracy w różnych projektach przeszedłem od Prototype przez jQuery do Angulara, w międzyczasie ucząc się jeszcze całej masy rzeczy jeszcze bardziej pobocznych. I to wszystko się kiedyś przyda – nawet jak jakaś technologia się zestarzeje i zostanie porzucona na rzecz czegoś nowego, to pewne rozwiązania pozostaną, będą udoskonalane, nauka nie pójdzie na marne.

Warto też na początku spróbować pracy w różnych firmach, albo przynajmniej w różnych projektach. Z każdej pracy wyniesiesz inne doświadczenia, które częściowo będą się pokrywać. Ja na początku pracowałem przez kilkanaście miesięcy w firmie, w której bardzo dużo rzeczy się działo na poziomie baz danych, nieco mniej w PHP czy C++. Kiedy później przeszedłem do innej firmy gdzie projekt był bardziej PHPowy moja znajomość baz danych okazała się bardzo przydatna, ponieważ potrafiłem bardzo wydajnie pracować nad zapytaniami do bazy danych przez co miałem więcej czasu aby się skupić na innych aspektach, z którymi dotąd nie miałem do czynienia i które chciałem udoskonalić.



Ludzie

Hasło na jednym z memów głosi: “Nie po to studiowałem informatykę, żeby teraz rozmawiać z ludźmi”. To nieprawda. To właśnie od innych ludzi nauczysz się najwięcej. Możesz zdobyć wiedzę teoretyczną z książek, poprzeć ją praktyką z projektów, ale żaden kompilator nie wskaże ci palcem gdzie może znajdować się źródło potencjalnych problemów (o ile nie będą to błędy składniowe).

W jednym z moich projektów pracowałem w zespole gdzie programiści wzajemnie robili sobie przegląd kodu (code review). Mimo że inni programiści nie pracowali nad tą samą funkcjonalnością co ja, potrafili oni zauważyć rzeczy, których ja nie widziałem, bo byłem skupiony na danym rozwiązaniu, gubiąc obraz całości systemu. Samo programowanie ze świadomością, że ktoś Twój kod sprawdzi i albo go zaakceptuje albo zwróci ci do poprawki, powoduje, że starasz się pisać lepiej i z czasem dobre techniki programowania wchodzą Ci w nawyk. Jeśli trafisz na taki zespół, który będzie krytyczny, ale nie złośliwy, nauczysz się bardzo dużo, nawet od osób, które nie przewyższają Cię doświadczeniem.

Poziomy zaawansowania

Niektórzy mówią że podział na Juniorów, Regularów i Seniorów jest sztuczny i pewnie jest w tym sporo racji. Niemniej w każdej z firm w których pracowałem taka hierarchia była, choć nie zawsze była nazywana w ten sposób. W jednej firmie osobą z największym doświadczeniem był administrator, w innej project manager a jeszcze w innej starszy programista. W tych firmach, które wspominam najlepiej, hierarchia polegała na tym że ten bardziej doświadczony pomagał tym początkującym. W drugą stronę to nie ma przyszłości – kiedy ci mniej doświadczeni muszą wykonywać polecenia przełożonego, bez względu na to, czy potrafią rozwiązać dany problem, czy nie.

Jeśli miałbym opisać czego uczysz się na poszczególnych etapach to ujął bym to tak:

  • Junior – uczy się technologii, narzędzi, organizacji pracy
  • Regular – uczy się samodzielnego rozwiązywania problemów programistycznych, poznaje wzorce projektowe, buduje swoją bazę umiejętności
  • Senior – rozwiązuje problemy biznesowe klientów przy pomocy technik programistycznych, tym samym zdobywając umiejętności wykraczająco poza samo programowanie, a czasem nawet poza całą informatykę.

Zadania

Na różnych poziomach zaawansowania zadania różnią się stopniem skomplikowania oraz poziomem odpowiedzialności. Przykładowe zadania:

Junior

Zaimplementować formularz kontaktowy na stronie

Regular

Zaimplementować formularz kontaktowy z możliwością odpowiadania na wiadomości z poziomu panelu administratora. Zrobić raport ilości otrzymanych zapytań oraz podgląd historii konwersacji.

Senior

Zaprojektować architekturę systemu do wysyłki maili. Wybrać dostawcę usług mailowych i opisać dlaczego wybrałeś danego dostawcę usługi. Przeanalizować aplikację pod kątem funkcjonalności, które wymagają wysłania e-maili i zaimplementować wysyłkę. Zaprojektować moduł do wysyłania newslettera zgodnie z obowiązującymi na rynku standardami. Przedstawić wycenę czasową dla wszystkich funkcjonalności.

Jeśli jesteś liderem zespołu (team leader), dodatkowo będziesz musiał podzielić zadanie na mniejsze zadania i rozdzielić je na członków zespołu, a następnie dopilnować, żeby zadania zostały wykonane należycie i w wyznaczonym czasie.

Szybko zauważysz, że im wyższy poziom zaawansowania programisty, tym więcej dostaje on zadań analitycznych, inwestygacji, badań (research). Na początku może się to wydawać trudne a nawet niewykonalne, ale gdy zdobędziesz odpowiednią wiedzę i doświadczenie na każdym ze szczebli kariery, sam zobaczysz, że to jest właśnie to o co chodzi w programowaniu. Nie jest niczym skomplikowanym zaimplementowanie dokładnie opisanej funkcjonalności, prawdziwe wyzwanie stanowi zaprojektowanie i opisanie co ma zostać wykonane i jak ma to zostać zaimplementowane. A przecież wszyscy lubimy wyzwania, czyż nie?

Język angielski

Na pewno musisz uczyć się języka angielskiego. Na początku wystarczy, że zrozumiesz treść zadania i komentarzy do niego i będziesz umiał w miarę zrozumiale na nie pisemnie odpowiedzieć. Z czasem jednak dojdziesz do momentu gdzie trzeba będzie porozmawiać z klientem na Skype albo twarzą w twarz.

Osobowość

Cechami osobowości, które ci się przydadzą na pewno są: komunikatywność, rzetelność, chęć pomagania innym w rozwiązywaniu ich problemów (pamiętaj, że jeśli pracujecie w jednym projekcie to “ich” problemy są również Twoimi problemami). Pasja! Tak, jeśli nie wykazujesz pasji do tego co robisz, nie będziesz tego robił coraz lepiej, a przecież chcesz się rozwijać, czyż nie?

Co jeszcze?

Podyskutujmy o tym, pytajcie w komentarzach co jeszcze chcecie wiedzieć, chętnie odpowiem.

Skomentuj