Jak zostać programistą – Część 2

W poprzedniej części opisałem różne strategie rozwoju dostępne aspirującym programistom. Tym razem chciałbym skupić się na technologiach które warto rozważyć jako perspektywiczny punkt wejścia do świata IT.

Może na początek warto wspomnieć parę słów o trendach. Nie zamierzam się tu bawić w futurologa ani przedstawiać obszernej analizy rynku, gdyż co tu kryć, jest to temat rzeka. Warto pamiętać o tym, że nowe technologie pojawiają się i znikają i nigdy do końca nie wiadomo co pozostanie popularne w dłuższej perspektywie czasu.  Wiele organizacji szuka możliwości pozostania na szczycie fali, widząc na to sposób w technologicznych nowinkach.  Sztuczna inteligencja, Data Science czy Block chain to obecnie często używane buzz wordy którymi łatwo oczarować takich słuchaczy. Prawda jest jednak taka, że to poprostu kolejne eksperymentalne cegiełki w trwającej od dawna cyfrowej przebudowie naszej rzeczywistości. Rynek szuka nowych rozwiązań i firmy które postawią wcześnie na właściwego konia mogą wyprzedzić konkurencję. Dlaczego o tym wspominam? Aby uzmysłowić jak płynne są trendy w IT i należy się raczej liczyć z tym, że nasze kwalifikacje również powinny być elastyczne i często rozwijane.  Znając jeden język łatwo poznamy kolejny. Poniżej przedstawię kilka najpopularniejszych języków, które dadzą nam solidne podstawy.   

Jaki język na początek?

Z punktu widzenia świeżaka ważne jest przede wszystkm aby uczyć się czegoś przydatnego co jak najszybciej zapewni pierwszą pracę. Technologie zmieniają się i rozwijają tak szybko, że poprostu niema obecnie sensu inwestować dużo czasu w naukę teorii nie praktykując jej w tym samym czasie. Ważne jest też jednak aby wybrać język na którym można zbudować swój dalszy rozwój. Czyli coś dość uniwersalnego do czego można dobudować kolejne cegiełki lub szybko przeskakiwać na technologie podobne, a różniące się głównie niuansami.
Podział technologii najbardziej przystępnych do nauki jest w sumie obecnie dość prosty. Albo ktoś zamierza zajmować się na początek tzw front-endem albo back-endem. Pierwszy termin obejmuje wszystko to co wiąże się interakcją z użytkownikiem i tym co jest widoczne dla ludzkiego oka, czyli są to strony internetowe, graficzne interfejsy aplikacji itp. Termin drugi obejmuje to co dzieje się za kulisami, czyli złożone operacje przetwarzania danych oraz kluczowe algorytmy stanowiące biznesowy kręgosłup naszych aplikacji. Tutaj też pasuje cały zbiór technologii związanych z bazami danych ale w zasadzie można by je wymienić jako wręcz trzecią ścieżkę. 
Z czasem większość programistów i tak będzie musiała dotknąć wszystkich aspektów ale na początek łatwiej skupić się na jednym fragmencie całości.

Front-End

Moim zdaniem technologie związane z budową stron internetowych są najlepszym punktem wejścia. Nauka języka javascript (nie mylić z Java) w połączeniu z podstawami HTML i CSS ma dużo zalet:
Podstawy można ogarnąć samemu w domu, – jakiś tutorial tworzenia pierwszej strony – zobaczyć czy to coś dla nas
1. Dużo materiałów do nauki – Łatwo będzie nam znaleźć zarówno miejsca z których można się uczyć wszystkiego od podstaw (np darmowy https://www.w3schools.com/) jak i społeczności w których możemy zadawać pytania.
2. Javascript jest dość prosty w swej podstawowej formie a jego składnia przypomina wiele innych popularnych języków programowania do których można później przejść
3. Strony internetowe to dość wdzięczny temat bo pracujemy nad czymś co od razu widzimy i każda nasza zmiana jest łatwa do zauważenia. Ten punkt można w pełni docenić kiedy weźmiemy się za naukę któregoś z większych, backendowych języków takich jak java (nie mylić z javascript 😉 ), wymagających dużo konfiguracji i przygotowań zanim napiszemy nawet najprostszy kawałek kodu. W przypadku javascriptu można zacząć w dowolnej chwili, używając nawet przeglądarki internetowej, której używasz do czytania tego bloga! Obecnie każda nowoczesna przeglądarka ma wbudowany zestaw narzędzi pozwalających modyfikować strony internetowe, a w każdym razie ich końcową treść wyświetlaną na twoim laptopie czy innym urządzeniu. Wystarczy kliknąć prawy przycisk myszy gdzieś na stronie i wybrać opcję zbadaj (lub zbadaj element itp. zależnie od przeglądarki). Zobaczymy wtedy dodatkowy panel dający nam możliwość podglądu i dokonania tymczasowych zmian w kodzie strony internetowej którą oglądamy. Zmiany są tymczasowe i istnieją tylko w naszej przeglądarce do czasu odświeżenia strony więc można się dowolnie nimi bawić bez obaw. Używanie tych narzędzi to dłuższy temat więc zainteresowanych odsyłam do googla pod hasłami typu html inspect tool albo firebug.
Na początek wygląda to pewnie dość skomplikowanie i zniechęcająco ale po kilku tutorialach szybko zaczniesz się w tym odnajdować.
Do szybkich testów własnego kodu polecam za to https://jsfiddle.net/ Jest to bardzo przystępna strona do nauki i eksperymentów gdzie na szybko możemy przetestować jakiś mechanizm nad którym pracujemy.
Pomijają łatwość ich tworzenia, strony internetowe są poprostu czymś z czym każdy z nas ma na codzień do czynienia, wielu z nas prowadzi własne blogi lub posiada jakieś inne „własne miejsce w sieci” zatem umiejętność modyfikowania stron może dać nam trochę dodatkowych korzyści.
4. Javascript zapewni nam też podstawy do dalszego rozwoju, gdyż jest jednym z najpowszechniejszych obecnie języków. Możemy kontynuować jego naukę zgłębiając dodatkowe biblioteki i frameworki takie jak JQuery, Angular, React czy wiele innych, albo przerzucić się na któryś z popularnych backendowych języków o podobnej składni.

Jako następny punkt nauki warto pomyśleć o języku który działałby po stronie serwera abyśmy mogli połączyć swoją front-endową wiedzę z chociażby podstawowymi umiejętnościami backendowymi. To nie jest temat na ten artykuł więc ogólnie tylko wspomnę, że strony internetowe działają w oparciu o serwery, które przetwarzają dane i wysyłają je do naszych przeglądarek, gdzie są wyświetlane za pomocą połączenia technologii HTML, CSS i Javascript. Aby zatem posiąść umiejętność budowy prostych stron, powinniśmy zainteresowac się też i tym tematem. Znam wielu programistów specjalizujących się głównie w javascrypcie i otaczających go technologiach frontowych, nie czujących potrzeby zagłębiania się w serwerowe tematy, ale pewne podstawy moim zdaniem poprostu warto znać. Na tym etapie nauki raczej unikałbym tylko przejścia na język PHP, który chociaż bardzo popularny ma dość nietypową składnię mogącą trochę nam namieszać.

Back-end czyli Java, Python, .Net C#, SQL

Temat backendu w skrócie sprowadza się do tych 4 powyższych technologii. Nie musimy się jednak uczyć ich wszystkich a skupić się bardziej na wybranej z nich. Przynajmniej na początek 🙂

Java jest nadal najpopularniejszym językiem backendowym. Ma ugruntowaną pozycję w świecie dużych projektów korporacyjnych i bankowych, dużą wszechstronność i wsparcie doświadczonych programistów oraz wiele darmowych bibliotek (czyli istniejącego kodu, ktory możemy wykorzystać). Łatwo poprostu znaleźć na sieci rozwiązania problemów na które możemy się natknąć pisząc w javie. Niestety nie jest też najłatwiejszym językiem do nauki ze względu na ilość dodatkowej pracy i technologii potrzebnych do napisania najprostszej nawet aplikacji w tym języku. Java to dość uniwersalne spoiwo dla różnych technologii, dające się skonfigurować pod wiele potrzeb. No ale ta konfiguracja właśnie wymaga nieco pracy. Jest to jednak dalej jedna z najbardziej perspektywicznych opcji do nauki.

Dużo łatwiejszy próg wejścia ma Python. Obecnie jeden z najbardziej popularnych języków, przeżywający właśnie swoisty renesans. Wszystko wygląda na to, że popularnością przebije (o ile już tego nie zrobił) Javę. Jest tak za sprawą jego użyteczności w tematach  obróbki dużej ilości danych na potrzeby datamining, machine learning oraz sztucznej inteligencji. To są obecnie bardzo seksowne kierunki rozwoju w IT.

.NET C# to technologia Microsoftu konkurująca swego czasu mocno z Javą. „.NET” ( czyta się „dot net”) to cała rodzina technologii do tworzenia aplikacji, której głównym motorem napędowym jest język c#. Podobnie jak java jest to narzędzie uniwersalne chociaż chyba trochę łatwiejsze w konfiguracji. Tutaj też mamy duże wsparcie pod postacią powszechnie dostępnej wiedzy. .NET nadal jest bardzo użyteczny i ma wielu zwolenników, ale raczej nie jest już takim gorącym towarem jak jeszcze jakiś czas temu. Nadal jednak jest dosyć perspektywiczny do nauki i warto go rozważać.

SQL umieściłem na tej liście ponieważ każdy szanujący się programista powinien znać chociaż jego podstawy. Nie jest to język programowania w przeciwieństwie do powyższych a raczej język operacji bazodanowych służący np do filtrowania zbiorów danych w celu wyłonienia interesującego nas podzbioru, albo modyfikacji danych zapisanych w naszej bazie. Istnieją inne rozwiązania ale można spokojnie założyć że jeśli będziemy korzystać z bazy danych (a będziemy) w jakimś projekcie, to będziemy też musieli napisać jakąś SQLową „kwerendę”(od angielskiego „query”). SQL to też punkt wejścia do data science, hurtowni danych i tym podobnych tematów związanych ze zbiorami danych, które stały się bardzo popularne w ostatnich latach.

Oczywiście języków jest dużo więcej, także tych bardzo popularnych ale nie wszystkie z nich poleciłbym na początek. Wspomnę tu o PHP oraz C++ jako technologiach których bym raczej unikał chyba że jesteśmy mocno zdecydowani na niszę do której służą. PHP to bardzo popularny język do budowy stron internetowych, ma jednak dość specyficzną składnię oraz bardzo luźne wymuszanie dobrych praktyk programistycznych. Może więcej namieszać w głowach nowym programistom niż przynieść korzyści.
C++ to za to mocny język trochę niższego poziomu bardziej ostatnio związany z obsługą sprzętu i pisaniem bardzo wydajnego obliczeniowo kodu. To coś co można spotkać np w branży gier komputerowych. Warto się przyjrzeć dokładnie jego zastosowaniom i pomyśleć czy naprawdę dobrze pasują do naszego planu rozwoju zanim się na niego zdecydujemy.

Napisz własny projekt!

Tutoriale to fajna sprawa ale do zgłębiania odizolowanych kawałków wiedzy. To najczęściej zabawa w piaskownicy prowadząca się spokojnie od punktu A do B. Chyba nie muszę nikomu tłumaczyć, że prawdziwe życie tak nie wygląda. Zatem aby naszą nowo nabytą wiedzę ugruntować najlepiej napisać jakiś własny projekt na prywatne potrzeby. Coś małego aby uniknąć problemu „niekończącej się historii” czyli sytuacji gdzie po napisaniu jakiejś części kodu odstawimy projekt na półkę z powodu braku czas z nadzieją że kiedyś do niego wrócimy. No więc prawdopodobnie nie wrócimy. A jeśli tak to istnieje spora szansa że cały temat będziemy wtedy musieli zgłębiać od nowa, tracąc czas na ponowne zrozumienie własnego kodu i w rezultacie i tak zaczniemy pisać całość od nowa. Dlatego lepiej aby projekt był na tyle mały abyśmy zmieścili się z nim w dłuższy weekend lub maksymalnie dwa tygodnie. Jakaś strona internetowa np z naszym cv lub innego rodzaju wizytówka w sieci to popularny wybór ale opcji jest naprawdę dużo. Najlepiej wybrać coś co naprawdę by się przydało wam lub waszym znajomym. Wtedy motywacja i końcowa satysfakcja będą dużo większe. No i będzie się też czym pochwalić naszemu potencjalnemu pracodawcy, gdyż mając zgłębioną wiedzę teoretyczną dodatkowo popartą małą praktyką nadejdzie czas aby swoje umiejętności zacząć sprzedawać. Ale to historia na inny dzień.

Dodaj komentarz

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