Programowanie – od czego zacząć?

Wiele osób pyta mnie od czego zacząć naukę programowania. Wbrew pozorom nie jest to proste pytanie. Samo programowanie jest bardzo szerokim zagadnieniem – dziesiątki jak nie setki różnych języków, bibliotek, frameworków, platform, systemów itp itd. Aby odpowiedzieć na powyższe pytanie trzeba najpierw zastanowić się w czym najlepiej bym się odnalazł, co mnie interesuje i na co jestem w stanie poświęci kawał swojego życia. Tak, bo nauka programowania to ogrom pracy i czasu.

 

Bycie programistą to styl życia, ciągła nauka i poszukiwanie nowych metod, ślęczenie przed komputerem po nocach i rozwiązywanie skomplikowanych problemów.

 

Zastanawiając się jednak nad tym, co mogłoby nas zainteresować wydzieliłbym w uproszczeniu trzy typy aplikacji jakie chcielibyśmy tworzyć: aplikacje web, aplikacje po stronie serwera (backend) oraz  aplikacje mobilne. Trzymając się tych typów przybliżę każdy z nich oraz umiejętności jakie trzeba posiadać aby stać się programistą w danej dziedzinie. Osobiście uważam, że dobry programista powinien posiadać umiejętności w każdym z opisanych typów.

 

Web Developer

Mam tu na myśli programistę stron internetowych – może być to statyczna strona w rodzaju wizytówki firmy lub też interfejs użytkownika do większej aplikacji webowej np. strona internetowa banku. Ograniczamy się tu jedynie do zaimplementowania szaty graficznej strony i komunikacji Ajax z serwerem. Technologie jakie możemy tu wyróżnić to:

  • Protokół HTTP
  • HTML i CSS
  • JavaScript
  • jQuery
  • Bootstrap, Less, Sass
  • TypeScript, CoffeeScript
  • Grunt, Gulp
  • AngularJs, React.js, Ember.js

wymienione technologie posortowałem subiektywnie od tych najbardziej podstawowych do zaawansowanych.

Jak widzisz wcale nie jest tego tak mało, a jednak większość twierdzi, że z web jest najłatwiejszy start. Pierwsze 3 punkty to w zasadzie podstawy, bez których nie ma sensu ruszać dalej. Jeśli nie masz pojęcia o programowaniu i chcesz od czegoś zacząć to są właśnie tematy, które powinieneś poznać na samym początku. Co więcej, jeśli nie jesteś w stanie opanować tych rzeczy sam, korzystając jedynie z darmowej wiedzy w internecie to powinieneś sobie chyba odpuścić przygodę z programowaniem.

Praca Web developera polega na implementowaniu strony internetowej według projektu graficznego. Często też Web developer posiada umiejętności grafika aczkolwiek nie jest to wymagane. Czyli na początek wykorzystujemy wiedzę w technologii HTML i CSS. Następnie aby dodawać interakcje na stronie musimy poznać język JavaScript i bibliotekę jQuery do manipulowania obiektami na stronie. Gdy opanujemy już to wszystko będziemy gotowi aby przejść na wyższy level tworzenia stron tzn frameworki webowe Angular, React, Ember lub inne. To są już  technologie wymagające sporo czasu do opanowania. Wokół tego wszystkiego jest jeszcze wiele pomniejszych bibliotek do nauczenia. Chciałbym abyś wiedział, że pomimo iż Web jest uważane za najprostsze na start to wciąż nie jest to coś, co możesz opanować w kilka tygodni zaczynając od zera.

 

Deweloper aplikacji mobilnych

Mam tu na myśli głównie Android i iOS, Windows phone pomijaj gdyż ma bardzo mały udział w rynku i nauka tego w celach komercyjnych nie ma większego sensu – jeśli jednak chcesz programować na Windows phone to wystarczy znajomość javascript lub C# 😉

Poziom trudności tworzenia aplikacji iOS/Android w zasadzie umieściłbym na równi z Web a może nawet powiedziałbym, że tu jest jeszcze prościej. Nie bez powodu jest tak wielu młodych deweloperów iOS czy android, którzy mają na swoim koncie wypuszczonych kilka aplikacji bez żadnych studiów czy doświadczenia w komercyjnych projektach.

Aplikacje mobline podobnie jak webowe są typem interfejsu użytkownika. Cała skomplikowana logika umieszczana jest zazwyczaj po stronie serwera a sama aplikacja na telefonie pełni rolę interfejsu do komunikacji z serwerem. Przez to jest tu większe przyzwolenie na błędy, gdyż nie ma to krytycznego wpływu na cały system. Technologie jakie powinnismy znać:

  • iOS: Swift i wciąż jeszcze objectiveC – aczkolwiek ja bym został przy samym Swift 😉
  • android: Java, Kotlin

do tego wszystkiego należałoby dodać sporo wiedzy o samej architekturze aplikacji mobilnych oraz popularnych frameworkach. Dodatkową trudność dla początkujących może sprawiać język obiektowy.

Plusem tworzenia aplikacji mobilnych jest niewątpliwie sam rezultat czyli aplikacja, którą możemy płatnie lub darmowo udostępnić wszystkim użytkownikom telefonów. Proces ten jest bardzo prosty, nie potrzebujemy też serwera ani domeny.

 

Backend developer

Bardzo obszerna dziedzina, która często wymaga znajomosci wielu technologi, frameworków oraz czasem nawet nie jednego języka programowania. Do tego potrzebna jest znajomość architektury systemu osadzonego na wielu serwerach aplikacji, zagadnień skalowalności, wielowątkowości, baz danych itd. Aby zostać programistą rozproszonych systemów informatycznych należy biegle opanować chociaż jeden język obiektowy np:

  • Java – chyba najbardziej popularny język to tworzenia dużych serwisów w chmurze. Daje ogromne możliwości, jest OpenSource i posiada wiele gotowych bibliotek. Poza tym jest conajmniej kilka języków (Groovy, Scala, Kotlin) wywodzących się od Java wiec znajomość tego jednego otwiera furtkę na dalszy rozwój
  • C# – język stworzony przez Microsoft. Zazwyczaj używa się go na maszynach z Windows. Jest to bardziej nowoczesny język w porównaniu do javy, posiada również bardzo dobry framework ASP.net do aplikacji serwerowych. Jeszcze pare lat temu powiedziałbym, że tworzenie aplikacji przy użyciu technologii Microsoftu jest dużo prostsze, ale odkąd pojawił się spring boot w java to nie wiem czy role się nie odwróciły. Mam wrażenie, że ASP.net stracił trochę na popularności, mniej też widać ofert pracy
  • Ruby – najmłodszy z wymienionych języków. Ruby jest bardzo nowoczesny, szybko się w nim pisze i także ma bardzo dobry framewrok do tworzenia aplikacji webowych Ruby on Rails. Nie jest tak popularny jak java czy c#, jest też dużo wolniejszy i z tego względu nie słyszałem żeby był stosowanych w serwisach o bardzo dużym obciążeniu i skomplikowanej architekturze.
  • Python – wydaje mi się, że znajomość python również może być przydatna. Python jest szeroko stosowany przez Google i ogólnie ma wielu zwolenników. Podobnie jak ruby jest językiem interpretowanym, przez co jest trochę wolniejszy i nadaje się do mniejszych aplikacji webowych. Framework Python Django stawia na prostotę – postawienie aplikacji webowej jest naprawdę łatwe i przyjemne.
  • PHP – przez wielu programistów znienawidzony język, jest nawet najkrótszy żart informatyczny: „programista php” 😉 język ten stosunkowo późno wprowadził obiektowość przez co stworzone w nim strony miały bardzo słaby, nieczytelny kod. Sama składnia również nie jest zbyt praktyczna. Poza tym dziś, choć język ten jest nadal popularny, to nie stosuje się go w dużych systemach informatycznych, ale raczej do stworzenia bloga czy wizytówki firmy. Dobrze jest znać podstawową składnię, jednakże zagłębianie się w PHP to strata czasu.

Powyższa lista mogłaby być dużo dłuższa, ale chciałem wymienić te najbardziej popularne języki. Osobiście uważam, że na dzień dzisiejszy nauka javy ma największy sens, aczkolwiek inne języki również dadzą Ci pracę 😉

Poza znajomością języka jest jeszcze do nauczenia mnóstwo frameworków, technologii, algorytmów, struktur danych, wzorców projektowych itd. Sama java to za mało, do tego trzeba znać Spring Framework, Hibernate, Jpa, MVC, Rest api, SQL i wiele innych. Są to dosłownie lata nauki i doświadczeń.

 

Jak zostać programistą 30k?

Ok rozpisałem się trochę o tych technologiach i językach, ale Ty pewnie nadal nie wiesz od czego zacząć. Dlatego napiszę Ci poniżej instrukcję krok po kroku jak stać się programistą zarabiającym 30000zł miesięcznie, a Ty sam zdecyduj czy jesteś w stanie się tego podjąć 🙂

  1. Nauka języka angielskiego. Tak, naukę programowania musisz rozpocząć od nauki angielskiego. Bez tego nie masz co marzyć o super karierze programisty. I czytanie dokumentacji to trochę za mało – musisz umieć mówić po angielsku. Dobrze płatne oferty pracy często wymagają współpracy w międzynarodowym zespole, gdzie wszyscy komunikują się po angielsku. Czas – minimum 2 lata.
  2. Naucz się podstaw tworzenia stron w html, css i javascript/jQuery wyłącznie za pomocą darmowej wiedzy z internetu. Jeśli nie jesteś w stanie nauczyć się najprostrzych rzeczy samemu to znaczy, że kariera programisty nie jest Ci pisana. Czas – około 3 miesiące.
  3. Idź na studia informatyczne. Wielu powie, że nie jest to wymagane aby zostać programistą i to prawda, ale studia bardzo to ułatwią. Oczywiście są wyjątki, osoby które osiągnęły duży sukces w IT, ale włożyły one w to dużo pracy i determinacji. Poza tym studia nie tylko uczą Cię programować, ale także kształtują analityczne myślenie, uczą algorytmów itp. Jeśli nie umiesz sam zmusić się do nauki to może studia informatyczne Ci w tym pomogą 🙂 czas – 3 lata. Jeśli jednak chcesz pominąć studia to zrób to:
    • Naucz się podstaw języka C/C++. Każde studia informatycznego tego uczą, ponieważ jest to podwalina każdego innego języka programowania. Z C poznasz architekturę komputera, wskaźniki i alokowania pamięci – ułatwi to zrozumienie wszystkiego innego, co będzie dalej. Czas – 3 miesiące.
    • Naucz się języka java i programowania obiektowego. Czas – 3-6 miesięcy.
    • Pora poznać podstawy framework Spring, JPA oraz SQL. Czas – 6-12 miesięcy.
    • wszystkiego powyżej powinieneś nauczyć się samemu z darmowych kursów, tutoriali i zwykłej dokumentacji. Polecam bardzo dobrą stronę, na której znajdziesz dosłownie wszystko, co potrzebne: Google.com
  4. Na tym etapie masz już sporą wiedzę, znasz składnię kilku języków programowania, umiesz napisać prosty skrypt lub stronę www oraz postawić prosty serwer aplikacji w spring boot. Możesz szukać pracy jako junior developer! Jest to bardzo ważny moment w karierze, aby trafić do odpowiedniej firmy. Najlepiej szukaj niezbyt dużej firmy z kapitałem zagranicznym. Upewnij się, że będziesz pracował w nowych technologiach. Pierwsze zarobki mogą być małe – ważniejszy jest rozwój. Czas – 1-2 lata jeśli dobrze trafisz, jeśli źle – zmieniaj pracę!.
  5. Po pracy ciagle się uczysz. Poznajesz wzorce projektowe i starasz się ich używać w pracy. Twój szef to zauważa i daje Ci podwyżkę, jesteś coraz lepszy.
  6. Aby szybciej awansować najprawdopodobniej będziesz musiał jednak zmienić pracę. Nie zwlekaj z tym zbyt długo, na początku trzeba zmieniać pracę w miarę regularnie. Po dwóch latach w pierwszej pracy i systematycznej nauce po pracy jesteś już łakomym kąskiem dla firm IT. Szukaj teraz czegoś co, wciąż będzie dla Ciebie rozwojem, ale i dobrze płatne. Ta zmiana musi dać Ci conajmniej 50% podwyżkę zarobków. Weź pod uwagę przeprowadzkę za granicę na parę miesięcy aby podszlifować angielski. Czas – 1-2 lata.
  7. Jeśli się przykładałeś jesteś już senior developer. Zakładasz jednodobową działalność gospodarczą i pracujesz tylko na kontrakty B2B. Nie przyjmujesz ofert pracy poniżej 5000 euro miesięcznie (nie zarabiasz już w złotówkach ;)). W między czasie pracujesz po godzinach nad projektem, który zorganizował Twój szef (a teraz kolega) z poprzedniej firmy. Czas – 1-2 lata.
  8. Pracując za granicą poznałeś kilka ciekawych osób. Kolega Stephen proponuje Ci pracę u nich w firmie. Mówisz, że już nie chcesz przeprowadzać się za granicę, po małych negocjacjach zgadzają się abyś pracował zdalnie za 6k euro miesięcznie. W tym samym czasie Twój projekt, który robiłeś po godzinach właśnie zdobywa pierwszych klientów, przynosząc dodatkowe 5k zł miesięcznie.
  9. The end 🙂

Jak widzisz, nie jest to wszystko takie proste jakby się mogło wydawać, a opisałem tylko jeden z tysiąca scenariuszy. Tobie może się to udać dużo lepiej/szybciej aczkolwiek zasada jest jedna – bez ciężkiej pracy niczego nie osiągniesz.

Posted on: Kwiecień 15, 2018

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *