Jaką drogę trzeba przejść by zostać programistą (od zera)?

6 lip 2020

W czasach nowoczesnych technologii i wszechobecnej automatyzacji wiele osób decyduje się na naukę programowania w celu utrzymania się na rynku pracy lub osiągnięcia wyższych dochodów. Niestety spora część z nich nie jest przygotowana na to co czeka je po drodze, a inna część nie jest pewna, od czego zacząć. W tym poście postaram się opisać krok po kroku co trzeba zrobić by zostać zarabiającym programistą!

Decyzja i konkretyzacja planów

Programowanie to bardzo szeroka dziedzina. Powiedzieć "chcę zostać programistą", to zdecydowanie za mało. To tak samo jakby powiedzieć "chcę zostać lekarzem". Okej, ale jakiej specjalizacji? Dentystą? Czy może chirurgiem? Tak samo jest w programowaniu. Możesz być programista mikrokontrolerów albo sterowników przemysłowych PLC i nie mieć najmniejszego pojęcia jak zrobić stronę internetową, a już na pewno aplikację mobilną, tak samo, jak dentysta nie wie jak wykonać operację mózgu a neurochirurg nie wie jak wstawić protezę zęba.

Uff, aha, ok, czyli pewnie, zanim zaczniemy naukę trzeba wybrać język, tak? Właśnie nie! Najpierw trzeba wybrać znacznie szerzej — dziedzinę technologii, platformę, w jakiej będziemy programować.

Zacznijmy od tego czym jest programowanie. Wikipedia mówi:

Programowanie komputerów – proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów komputerowych lub urządzeń mikroprocesorowych (mikrokontrolery).

Wygląda na to, że ta jednozdaniowa definicja ma odniesienia do czterech kolejnych! Daruję Ci nurkowanie w Wikipedię i powiem swoimi słowami:

Programowanie to tworzenie instrukcji postępowania dla maszyn elektronicznych, za pomocą zrozumiałego dla człowieka języka, który następnie jest interpretowany i wykonywany przez te maszyny.

Moja definicja tyczy się maszyn elektronicznych, czyli działających na prąd, bo wyłącznie takie w dzisiejszych czasach programujemy, choć dla ciekawskich Automaton Maillardet'a z okolic roku 1800 był również programowany — za pomocą metalowych krążków z wypustkami :)

Wracając do tematu — najważniejszą rzeczą do zapamiętania z mojej definicji jest to, że kod, który piszą programiści w kompletnie dowolnym języku programowania to instrukcje zrozumiałe dla ludzi! Maszyny nie rozumieją żadnego z języków programowania, maszyny rozumieją tylko "brak prądu" i "jest prąd", czyli potocznie "zera" i "jedynki". Podstawowa cześć każdego komputera, procesora czy mikrokontorlera jest tranzystor, czyli element elektroniczny, który w zależności od występowania prądu/napięcia na jednym z jego trzech końców przepuszcza prąd przez dwa pozostałe. Tyle. Naprawdę w komputerze nie ma żadnej innej magii :) jest tylko przełącznik - tranzystor, za pomocą którego sterujemy prądem w kolejnym tranzystorze i tak dalej i tak dalej, aż dojdziemy do bramek logicznych złożonych z kliku/kilkunastu tranzystorów, a następnie procesorów składających się nawet z kilkudziesięciu miliardów tranzystorów! Poziom skomplikowania i miniaturyzacji (jeden tranzystor w nowoczesnych procesorach jest zaledwie ~100 razy większy od atomu) nie zmienia faktu, że dalej rozumieją one tylko dwa pojęcia: "jest prąd" i "nie ma prądu".

Skomplikowane? Na szczęście nikt nie programuje bezpośrednio przepływu prądu w procesorach, no może z wyjątkiem inżynierów tworzących procesory :) Rzesze naukowców przez ostatnie dekady wprowadziły masy standardów, ujednoliceń i co najważniejsze — abstrakcji (poziomów szczegółowości), by można było programować, nie interesując się techniczną specyfikacją leżącą "pod spodem". W ten sposób programując np. w JavaScript aplikację przeglądarkową, kompletnie nie interesujemy się ani procesorem, ani pamięcią komputera. Sam język został tak stworzony, by można było w zrozumiały dla człowieka sposób wydać polecenie np. wyświetlenia na stronie przycisku etc. Pozostając w tym samym przykładzie — poziomy szczegółowości dla stworzenia przycisku na stornie WWW przy użyciu JavaScriptu wyglądają mniej więcej tak:

  1. JavaScript — wysokopoziomowy język programowania, wyglądający bardzo podobnie do ludzkiego angielskiego. Programista, za pomocą ludzkich liter, wydaje polecenie stworzenia przycisku. Dokładnie takie: document.createElement('button').
  2. Przeglądarka — na przykład Google Chrome. To w niej "żyje" JavaScript. Odbiera polecenie od JavaScriptu i renderuje (generuje) przycisk za pomocą instrukcji napisanych przez jej twórców w języku C++ (bliższym poziomem niż JavaScript systemowi operacyjnemu, lecz nadal wysokopoziomowy).
  3. System operacyjny — środowisko w którym, uruchamiają się Twoje programy. Prawdopodobnie jest to Windows, ewentualnie MacOS lub Linux. To on zarządza Twoim sprzętem i pozwala na działanie języków wysokopoziomowych. To dzięki niemu i sterownikom sprzętowym widzisz na monitorze przeglądarkę, a w niej przycisk :)
  4. Kod maszynowy — inaczej kod binarny, lista poleceń do wykonania dla procesora, która powstała po "przetrawieniu" przez system poleceń w C++.
  5. Prąd w tranzystorach — dopiero tu jest fizyczny sprzęt :)

Powyższy przykład odnosił się do JavaScriptu i przeglądarki internetowej działającej na komputerze PC, ale nie zmienia się on drastycznie w zależności od sprzętu. Np. na smartfonie z Androidem wystarczyłoby podmienić punkt 1. na język Java/Kotlin a punkt 2. na JVM, czyli maszynę wirtualną Javy (środowisko w którym "żyje" ten język).

Powyższy przykład oznacza, że od lat pięćdziesiątych, kiedy powstawały komputery, programowanie przeszło ogromną drogę w celu ułatwienia człowiekowi porozumiewania się z maszyną, przez wykorzystanie abstrakcji. To znaczy, że w dzisiejszych czasach opanowanie języka programowania nie różni się specjalnie od opanowania języka mówionego, takiego jak angielski, francuski czy hiszpański!

Wybór branży, w której chcemy programować

W zależności od urządzenia, jak i systemu operacyjnego będziemy programować w różnych językach. Dobrze wiesz, że aplikacja na iPhone nie zadziała na telefonie z Androidem, a programu ze swojego komputera nie uruchomisz na smart TV lub konsoli. Oczywiście nie da się nauczyć wszystkiego, w szczególności wszystkiego na raz, więc dobrze jest zapoznać się z językami, w jakich programuje się na dane platformy. W tym momencie jesteś na świetnym etapie, ponieważ w zależności od Twoich zainteresowań możesz wybrać taki język, w którym realizowane są interesujące Cię projekty.

Poniżej wymieniłem branże, w jakich możesz się odnaleźć, wraz z językami i technologiami, które są w nich używane:

  • Automatyzacja przemysłu — w tej branży od lat królują sterowniki PLC, które mają swoje specyficzne języki, często zbliżone strukturą do schematów elektrycznych.
  • Smartfony i tablety Apple  — by tworzyć aplikację do AppStore potrzebujesz komputera od Apple, płatnego konta na AppStore, oraz znajomości języka Objective C (tak to inny język niż C++ :)) lub nowszego i promowanego przez Apple języka Swift.
  • Smartfony i tablety z Androidem — by tworzyć aplikację na tę platformę potrzebujesz dowolnego komputera, płatnego konta deweloperskiego na Sklepie Play, oraz znajomości Javy lub promowanego przez Google języka Kotlin.
  • Mikrokontrolery i IoT — mikrokontorlery są wszędzie gdzie nie trzeba całego smartfona/komputera: w telewizorze, lodówce i w pralce. Ostatnio coraz częściej pralki mają internet i to jest właśnie IoT (Internet of things, internet rzeczy). Mikrokontrolery wykorzystują języki niskopoziomowe oraz popularny język C. Aby programować mikrokontrolery warto znać choć podstawy elektroniki. Prostą drogą, by zacząć jest projekt Arduino, oferujący gotową płytkę z mikrokontolerem i wiele tutoriali.
  • Aplikacje desktopowe — czyli takie, które działają na komputerach PC, programuje się najczęściej w C++ lub Javie.
  • Uczenie maszynowe, sztuczna inteligencja — w tej branży niepodzielnie króluje Python, jako że w tym języku powstało najwięcej bibliotek wspomagających tego typu obliczenia.
  • Automatyczne testowanie oprogramowania — czyli tworzenie automatów, które "przeklikują" nowe wersje programów w poszukiwaniu błędów. Króluje tu Java i Selenium. Jest to branża z pogranicza programowania i zapewniania jakości (QA).
  • Strony internetowe i aplikacje webowe — czyli wszystko, co wyświetlane jest w przeglądarce. Należy tu zauważyć, że wszystkie programy działające w internecie można podzielić na backend, czyli cześć serwerową, która najczęściej udostępnia i przechowuje dane, oraz część frontendową, czyli to, co widzi użytkownik w przeglądarce i z czym wchodzi w interakcje. Na backendzie mamy wiele możliwości i możemy tworzyć przy użyciu PHP, Javy, C#, Pythona lub JavaScriptu, a frontend zawsze tworzymy przy użyciu HTML, CSS i JavaScript.

Subiektywna pomoc z wyborem języka

Jak widzicie opcji jest wiele, a ja wypisałem tu wyłącznie te kluczowe. Prawdopodobnie zauważyłeś/aś, że niektóre języki się powtarzają. Na przykład w Javie możesz programować zarówno aplikacje desktopowe, jak i mobilne (Android), a także backend aplikacji webowych. Oczywiście każde z tych zastosowań wykorzystuje inne rozwiązania wewnątrz danego języka i ma swoją odrębną specyfikę, ale na pewno ucząc się serwerowej Javy szybciej nauczysz się pisania aplikacji na Androida niż nie znając Javy w ogóle :)

Niektóre języki, jak np. C i jego pochodne są bardzo stare i napisanych w nich jest tyle kodu, że na pewno jeszcze długo będzie zapotrzebowanie na takich programistów. To samo tyczy się PHP, który jeszcze pięć lat temu królował nad innymi językami na serwerach aplikacji webowych, a w tym momencie mimo straty pozycji lidera nadal jest bardzo popularny.

W mojej, w 100% subiektywnej opinii,  król jest tylko jeden — JavaScript! Ja, na początku nauki programowałem w Turbo Pascalu, następnie na studiach chwilę w Javie oraz C, pierwsze komercyjne projekty robiłem w PHP, a od 5 lat praktycznie nie napisałem linijki kodu w innym języki niż JavaScript! Dlaczego wybrałem JavaScript (w skrócie JS)?

  • ma prostą składnię i nie wymusza na programiście nauki skomplikowanych paradygmatów na samym początku drogi (np. Java wymaga pisania w sposób obiektowy, pewnie nie wiesz co to jest, nic dziwnego, a w JS nie musisz wiedzieć, by zacząć ;))
  • jest bardzo wysokopoziomowy i wygląda prawie tak jak mówiony angielski
  • jest bardzo elastyczny — można w nim pisać zarówno frontend, jak i backend, a nawet aplikacje mobilne i desktopowe
  • jest jedynym językiem na świecie, który działa w przeglądarce internetowej, w Javie czy Pythonie napiszesz aplikację desktopową, czy backendową, ale nigdy frontwndowej
  • jest ogromnie, naprawdę ogromnie popularny, to znaczy, że na 99% problemów znajdziesz rozwiązanie w pierwszym wyniku w Google :)
  • istnieją projekty takie jak Espruino umożliwiające programowanie mikrokontrolerów w JavaScripcie

P.S. Java i JavaScript mają tylko podobną nazwę . To dwa kompletnie, najzupełniej różne języki, które w żaden sposób nie są do siebie podobne.

Obiektywna pomoc z wyborem języka

Ilość ofert pracy wg Pracuj.pl (z dnia 1 lipca 2020 roku, kliknij ilość ofert by przejść do aktualnych wyników):

Wybrałem oferty z Pracuj.pl, ponieważ jest to bardzo znany portal oraz zawiera oferty nie tylko z branży IT, więc jego oferty są dobre dla powyższego zestawienia. Z zestawienia wynika, że najłatwiej znaleźć prace właśnie w JavaScript zaraz potem w Javie i Pyhtonie. Omówmy po krótce tę sytuację. W Javie oprócz programowania tworzone są również testy oprogramowania i Java od JavaScriptu jest językiem starszym, przez co bardziej ugruntowanym na rynku, stąd od lat zajmuje topowe miejsce w ofertach pracy. JavaScript za to cały czas rośnie w siłę, ponieważ oprócz zastosowań frontendowych, gdzie jest jedynym wyborem, coraz częściej tworzy się w nim aplikacje mobilne i backend. Najgorzej w zestawieniu wypadają języki dedykowane platformom mobilnym. Oczywiście to nie znaczy, że nagle przestały być wydawane aplikacje na smartfony. Rynek jednak wyraźnie przesunął się w kierunku aplikacji PWA, czyli aplikacji webowych (JavaScript), które oferują użytkownikowi dodanie do pulpitu na smartfonie po czym zachowują się bardzo podobnie do aplikacji dedykowanych tym urządzeniom (natywnych Java, Kotlin, Swift, Objective C). Daleko nie trzeba szukać, kilka miesięcy temu nasz rodzimy Filmweb wyłączył dedykowaną aplikację ze Sklepu Play i AppStore przerzucając się na aplikację PWA, którą możemy "zainstalować" dodając ją do pulpitu po odwiedzeniu strony filmweb.pl. De facto w takiej aplikacji nadal jest ukryta aplikacja webowa, ta sama co pod stroną filmweb.pl, ale dla użytkownika sprawia wrażenie aplikacji natywnej. Dla firmy oferującej takie aplikacje jest to oszczędność czasu i pieniędzy, bo teraz utrzymują jedną aplikację PWA dostępną na wszystkich platformach, a nie trzy — webową, iOS oraz Androidową.

Osobną kwestią jest kwestią wynagrodzeń. To wymaga osobnego artykułu, który na pewno napiszę, ale w dużym skrócie:

  • wynagrodzenia nie różnią się aż tak bardzo w zależności od języka, żeby od tego uzależniać swoją decyzję
  • nie, nie dostaniesz 10 tys. zł na start :) wynagrodzenia na początku kariery w IT są porównywalne do tych w innych branżach
  • swobodnie zarobisz około lub ponad 10 tys. złoty miesięcznie po zdobyciu kilkuletniego doświadczenia, w tej branży płacą za umiejętności, które łatwo sprawdzić na rozmowie
  • większość umów w branży to umowy B2B (czyli własna działalność), ale oczywiście można dostać umowę o pracę (najczęściej skutkuje to mniejszą ilością pieniędzy do ręki, ale to kwestia podatków w Polsce, a nie specyfika branży :))

Ile możesz zarobić pisząc w danym języku? Najprościej sprawdzić oferty pracy na dedykowanych portalach dla IT. Na tych portalach każda oferta pracy obowiązków ma załączone widełki wynagrodzeń!

Nadal wahasz się z wyborem języka? Napisz do mnie! Postaram się pomóc!

Język wybrany? Sprawdź, czy to lubisz!

Gdy już wybierzesz jakiś język, koniecznie sprawdź, czy naprawdę podoba Ci się to, co można w nim wykonać. Nie jest dobrym pomysłem "iść na całość" i angażować wiele miesięcy na naukę języka i jego bibliotek bez uprzedniego sprawdzenia, czy czujesz się w danej technologii dobrze. Powinieneś/aś zobaczyć jak tworzy się aplikacje w danym języku — zobaczyć efekty programowania.

  • Zapisz się na bezpłatny tygodniowy newsletter "Jak zostać programistą (od zera)" – szczegóły na dole posta.
  • Wybierz się na spotkanie entuzjastów danej technologii, bezpłatne spotkania są organizowane w prawie każdym mieście. W tym przypadku weź pod uwagę, że będą często poruszane bardziej zaawansowane tematy — ale na pewno zobaczysz praktyczne zastosowania technologii. Spotkania można znaleźć na Facebooku albo na portalu Meetup. Najpopularniejsze spotkanie dotyczące JavaScriptu to meet.js.
  • Sprawdź, za pomocą jakich języków są stworzone aplikację, z których korzystasz. Możesz to zrobić zaglądając do artykułu na Wikipedii lub po prostu wpisać w Google.

Dzięki powyższym krokom nabierzesz pewności co do Twojej decyzji i zobaczysz jak wygląda proces budowania aplikacji, zanim jeszcze rozpoczniesz naukę!

Sprawdź co umiesz, zanim zaczniesz się uczyć

Na tym etapie wiele osób pomija ważny krok. Sprawdzenie własnych umiejętności. Istnieje wiele kursów programowania od zera. To znaczy, że te kursy uczą programowania od zera, ale nie uczą obsługi komputera od zera! Takie kursy zawsze zakładają, że potrafisz:

  • sprawnie pisać na komputerze (niekoniecznie bezwzrokowo i bardzo szybko, ale sprawnie)
  • potrafisz pobrać z internetu i zainstalować program na komputerze
  • wiesz jak wygląda struktura plików (dyski, foldery)
  • wiesz co to są i do czego służą rozszerzenia plików (np. .jpg, .txt)
  • znasz podstawowe skróty klawiaturowe (Ctrl + C, Ctrl + V, Ctrl + X, wiesz co robi Caps Lock)
  • potrafisz sprawnie wyszukiwać informacji w internecie (tak, mówię o Google ;))

Powyższe umiejętności mogą się zdawać prozaiczne, ale jeśli chcesz uczyć się programować, braki w podstawowej obsłudze komputera zdecydowanie będą przeszkadzać.

Tagi

Mateusz Choma

I am a scientific mind, passionate about technology, an engineer "squared" - a graduate of two universities in Lublin ;) But mostly, I'm a JS developer.