[Miesiąc Programowania:] Czy nadaję się na programistę?

Dodane:

Mateusz Sell Mateusz Sell

Udostępnij:

Każdy, kto zadaje sobie pytanie czy nadaje się na programistę, musi wiedzieć, że na rynku występują trzy typy programistów: programiści “pasjonaci”, programiści “rzemieślnicy” oraz programiści “z potrzeby”. Jak rozpoznać, jakim typem jesteś?

fot. unsplash.com

Programista “pasjonat”to osoba, której obraz masz przed oczami jak usłyszysz słowo “programista”. Oczywiście to nie zawsze jest zamyślony facet z brodą w koszuli w kratę, ze słuchawkami na uszach, kubkiem kawy w ręku, odcięty od świata na pół dnia, wpatrzony w ekran monitora, ale często ten opis jest zbliżony do prawdy. Pasjonat dąży do jak najlepszego poznania programowania. Bierze udział w konferencjach, spędza wieczory z kompilatorem, programuje do późnej nocy, jest uczestnikiem grupy open source na githubie. Godzinami siedzi i zajmuje się pisaniem kodu. Dopracowuje każdy szczegół, ma w zwyczaju wracać do zakończonego już projektu, nieustannie znajdując w nim coś do poprawienia. Albo i nie wraca, bo właśnie zaczyna nowy.

Programista “rzemieślnik”potrafi programować, zna język programowania i używa go do tworzenia programów zleconych przez klienta lub ubranych w taski korporacyjne. Programuje (głównie w korporacji) od 9 do 17, a potem wraca do domu i już nie myśli o kodzie, który stworzył w ciągu dnia. Następnego dnia siada przed komputerem żeby pisać dalej, “odhaczając” kolejne taski. Nową wiedzę (nowe technologie, frameworki) zdobywa na szkoleniach i konferencjach. 

Ostatnim typem programisty jest osoba, która nauczyła się programować, by ułatwić sobie swoją dotychczasową pracę. Słynne powiedzenie, że potrzeba jest matką wynalazku, sprawdza się tu doskonale. Programistą “z potrzeby”może być biolog uczący się Excela, żeby trzymać dane z pomiaru komórek w tabelce; później zamiast Excela był Python, a tabelka została zamieniona na bazę SQL. Może być to administrator Linuksa, który żeby jeszcze lepiej i szybciej wykonywać swoją pracę nauczył się PHP, by w ten sposób rozumieć, co piszą do niego programiści. Może być to też analityk danych, który nauczył się C++ żeby puszczana analiza trwała minutę zamiast godziny i dzięki temu ma większą wydajność w tym co robi. 

Wracając więc do pytania czy nadajesz się na programistę – aspirujesz niemal “z automatu” do typu programisty “rzemieślnika”. I tu przy dużym samozaparciu, motywacji do nauki i umiejętności logicznego myślenia – takim programistą może zostać każdy. Możesz być dobry. Nawet bardzo dobry, ale nie będziesz programować wybitnie. Programista “rzemieślnik” pozna wycinek wiedzy programistycznej konieczny do pracy nad projektem. Obudzony w środku nocy nie wymieni z głowy kodów błędów serwera. Będzie dużo googlować i nie będzie zarabiać jak “pasjonat”. 

Ten musi być pracowity i sumienny. Bardzo przydaje się umiejętność pracy zespołowej (ale nie jest konieczna, można przecież utrzymywać sklep internetowy w pojedynkę). Typem programisty “pracownika” są też webmasterzy, którzy robią ładne strony WWW, ale nie muszą programować w Javascript czy znać Angulara. Robią dobre, responsywne serwisy, ale nie napiszą od zera zestawu dużych formularzy czy interaktywnej mapy (korzystając w tym celu z gotowych wtyczek).

Programistą “z potrzeby” raczej nie zostaniesz ot tak. To zwykle pewien proces. Są to osoby na tyle dobre w swojej działce (inżynier, socjolog, przedsiębiorca itp.), że czują ograniczenia wynikające z niedoskonałości dostępnych narzędzi. Następnie są w stanie nauczyć się programować na tyle, żeby przygotować narzędzia „pod siebie”. Najczęstszym przykładem będzie przedsiębiorca, który uczy się HTML i CSS, żeby samemu zrobić swoją stronę lub sklep internetowy. Może to być inżynier pracujący z obliczeniami i przesiadając się z gotowych rozwiązań na Pythona. Albo menedżer decydujący się na R/Pythona żeby szybciej analizować dane i generować raporty dla dyrekcji. 

Przykładów jest sporo, natomiast tutaj też uczymy się podzbioru programowania, bo ważny jest czas. Istotne nie jest bycie programistą, tylko użycie programowania do ułatwienia sobie “tej prawdziwej” pracy. Można to porównać do nauki języka obcego żeby się dogadać na konferencji. Celem nie jest czytanie poezji, tylko bycie komunikatywnym.

Pasjonaci programowania czytają porównania języków pod względem zoptymalizowania na zużycie prądu w serwerowni. Śledzą każdą zależność od zewnętrznych repozytorium we własnym kodzie. Piszą testy jednostkowe do najmniejszej nawet funkcji. Bywają na meetupach i konferencjach, często jako prelegenci a nie jedynie jako słuchacze. Są to osoby żyjące programowaniem. Oni zwykle chcą nauczyć się wszystkiego na temat funkcjonowania komputera, systemu operacyjnego, składni języka czy tego jak kompilator optymalizuje kod źródłowy przed przystąpieniem do konwertowania go na kod binarny. Tego typu osoby najczęściej uczą się z książek, często poświęcając na to bardzo dużo czasu, bo muszą starannie zrozumieć o co chodzi i jak wszystko działa. Często też mają duże podstawy teoretyczne do zrozumienia, że „system git jest zwykłym grafem skierowanym”.

Przedstawione typy programistów są dość przerysowane. Każdy programista jest w pewnym stopniu mieszanką powyższych wzorców. Są też przypadki przenikania się typów, bo znane są przypadki kiedy na przykład “rzemieślnik” łapie bakcyla i staje się “pasjonatem”; nie jesteś też nigdy skazany na tkwienie w jednym miejscu. Ale jakieś uproszczenie jest potrzebne żeby pogrupować ludzi i zdecydowałem się akurat na takie.

Nauka programowania to nie tylko nauka języka programowania. To coś więcej. To nauka specyficznego patrzenia na świat. Kawałkowania całości. Z pomocą doświadczonej osoby, która nauczy fundamentów programistycznych każdy jest w stanie nauczyć się programować. Każdy. Jednak różni ludzie będą potrzebować na to większej lub mniejszej ilości czasu i pracy, no i każdy ma jakąś granicę, powyżej której się nie rozwinie. Tutaj wchodzimy w indywidualne predyspozycje każdego człowieka. To też nie znaczy, że wystarczy iść na jeden kurs, albo przeczytać jedną książkę. Różne osoby mają różne potrzeby i coś co zadziała w jednym przypadku może nie sprawdzić się w innym. Na pewno potrzeba samozaparcia i czasu, a nawet wtedy może się okazać, że maks czego możesz się nauczyć to tworzenie prostych stron www albo pisanie najprostszych skryptów. No i pozostaje kwestia blokady. Jeśli widząc potęgowanie krzyczysz “ALE JA JESTEM HUMANISTĄ!” to problemem nie będą zdolności intelektualne, a wyjście ze strefy komfortu.

Jeśli jesteś “pasjonatem”, to wiesz o tym. Siedzisz z książkami i jeśli czytasz ten tekst, to tylko dlatego, że szukasz w środku czegoś o startupach (albo chcesz się wyżyć w komentarzach). Czytasz książki o programowaniu, a kodować zacząłeś w wieku ośmiu lat (może nie to ostatnie, ale takich też znam).

Nawet jeśli nie jesteś jeszcze na takim poziomie, to czas wolny spędzasz przy pobocznych projektach, nawet jeśli jeszcze nie programujesz, to coś próbujesz. Masz pewnie ścisły umysł, a być może nawet jakieś umiejętności miękkie. Dobra robota, czytaj dalej swoje książki. Zapraszamy na kurs, jak postanowisz oszczędzić trochę czasu by być na bieżąco z nowościami z ostatniego roku, a na konferencję będzie za daleko. Albo jak chcesz nauczyć się wreszcie Linuxa.

Jeśli chcesz się rozwijać w kierunku programowania “z potrzeby”, to jest to dobry pomysł. Programowanie i automatyzacja bardzo zwiększa wydajność pracy i pozwala unikać powtarzalnych, często nudnych czynności.

Zła wiadomość jest taka, że pewnie nie masz czasu na błądzenie we mgle i pracę samodzielnie z kompilatorem. Warto pomyśleć o kursie jako drodze “na skróty”. Otrzymasz wystarczającą dawkę wiedzy, żeby móc dalej rozwijać się już samodzielnie. Pamiętaj, że ucząc się samemu uczysz się pracować samemu.

Będziesz popełniać błędy typu “copy-paste” nie będąc nawet ich świadomym. Nie będziesz też znać konwencji i “typowych rozwiązań”, które później umożliwiają wspólną pracę zespołom. Osoby rozwijające się nie będą mieć mentora-programisty (bo przeważnie są pierwszymi osobami w zespole lub departamencie uczącymi się programowania), który wymusi na nich dobre praktyki. Jednocześnie ich projekty często nie wymagają solidnej znajomości podstaw programowania, bo ważne jest żeby “jakoś to działało”. Kurs daje podstawy i oszczędza czas poświęcony na ponowne odkrywanie koła.

Jeśli chcesz być programistą “rzemieślnikiem” to jest to najprostsza ścieżka. Nie jest ona prosta, ale nie musisz ani poświęcać każdej chwili na myślenie o programowaniu (pasjonaci też nie muszą, ale chcą to robić), nie musisz też być biegły w innej dziedzinie zanim zaczniesz programować.

Poświęcając 8 godzin dziennie na (dość ciężką) pracę jesteś w stanie zdobyć umiejętności młodszego programisty, znaleźć zatrudnienie w teamie programistycznym z niezłym wynagrodzeniem. To nie znaczy, że będzie prosto, a jakakolwiek książka, tutorial lub bootcamp nauczy Cię wszystkiego. Najwięcej nauczysz się w pracy, używając docelowego stosu technologicznego swojej firmy, no i mając pod ręką bardziej doświadczonych kolegów. Kurs jest w tym przypadku prawem jazdy, bez którego nie wyjedzie się samodzielnie na ulicę, a praktykę zdobywa się spędzając wiele godzin samodzielnie za kółkiem.

Pytania:

  • Czy mam umysł ścisły?

To pytanie jest najważniejsze, bo najprościej wskaże jak wysoko w programowaniu możesz zajść. Studia ścisłe, profil matematyczny w liceum lub technikum w naturalny sposób przygotowują do pracy programisty. To nie oznacza że osoba myśląca o sobie jako o humaniście nie może być programistą, jeśli ma inne predyspozycje, natomiast umysł ścisły pomaga zwłaszcza w “twardym programowaniu”. Niemal każdy jest w stanie zrozumieć podstawy HTML czy CSS, ale warunki logiczne czy wskaźniki przychodzą humanistom z większym oporem. Ograniczenia da się przezwyciężyć odpowiednią ilością pracy, ale humanistom jest po prostu trudniej wytrwać na obranej ścieżce. Umysł ścisły to niewątpliwy atut.

  • Czy lubię łamigłówki?

Praca programisty to w dużym stopniu szukanie błędów i niespodziewanego zachowania programu. Potrzeba wiele cierpliwości i zacięcia w tropieniu “tego ostatniego błędu”.

  • Czy lubię się uczyć?

Programista nigdy nie przestaje się uczyć. Nowe frameworki i języki programowania wychodzą dosłownie co roku. Nie trzeba uczyć się każdego, ale bez rozwijania się nie można liczyć na utrzymanie się na rynku pracy.

  • Czy jestem otwarty na krytykę?

Zwłaszcza na początku kariery ciągłe czytanie Twojego kodu będzie normą. To jest element nauki. A nawet później na każdym kroku inni będą szukać dziur w Twoim kodzie. Trzeba być na to przygotowanym 

  • Czy jestem metodyczny i zorganizowany?

Programowanie polega na podzieleniu jednego dużego problemu na wiele mniejszych, a następnie rozwiązanie ich po kolei. Każde zadanie, nieważne jak ogromne, można podzielić na małe kroczki.

  • Czy umiem wyobrazić sobie efekt końcowy znając tylko elementy składowe?

Czy potrafisz złożyć meble z Ikei bez instrukcji? A klocki Lego?

Poza podzieleniem problemu na małe kawałki trzeba potem z tych kawałków stworzyć jedną całość. Umiejętność wyobrażenia sobie całej aplikacji jest pomocna na tym etapie pracy. 

  • Czy lubię porządek?

Prawie na pewno nie będziesz jedyną osobą korzystającą z kodu jaki napiszesz. To znaczy że zarówno Ty za pół roku, jak i zupełnie nowa osoba, będziecie musieli zrozumieć “co autor miał na myśli”. Czytelności kodu poświęcono niejedną książkę, a pisząc program tworzysz go przede wszystkim dla innych.

__

Mateusz Sell

Dyrektor placówki oświatowej. Ekspert – ALX szkoła IT.