Wpisem zatytułowanym „Nauka programowania – od czego zacząć?” rozpoczęłam publikacje na tym blogu. Ukazał się w dniu startu bloga i jak najbardziej jest aktualny.
Przyznam jednak, że za każdym razem, gdy ktoś mnie o to pyta – muszę go uzupełniać o kolejne informacje. A jest to pytanie, które dostaję baaaardzo często. Dużo częściej niż poruszam ten temat na blogu.
Postanowiłam zebrać pewien pakiet informacji na start i opublikować w formie tego kompendium wiedzy. Będzie ono stale rozszerzane o kolejne artykuły, które z czasem pojawią się na blogu.
Jest to ogólna droga, od momentu zaświtania w Twojej głowie pomysłu o programowaniu do wdrożenia się w pierwszy język, technologię. Informacje o różnych językach programowania, ścieżkach jakie możesz obrać.
No dobrze, zaświtała Ci w głowie myśl o nauce programowania. Pierwsze pytanie brzmi: Dlaczego?
Dlaczego?
Bo nie ma uniwersalnej ścieżki, która dowiedzie Cię tam, gdzie chcesz.
Dajmy na to: chcesz tworzyć gry komputerowe!
Ale słyszałeś, że najłatwiej jest zacząć w Front-endzie albo jako tester. Wbijesz się do branży, a wtedy będzie łatwiej. Zdobędziesz kolejne doświadczenia i napiszesz własną grę!
Nie, nie tędy droga. Stracisz pewnie sporo czasu zanim się tego dowiesz. (no chyba, że wbijesz jako tester gier komputerowych, gdzie będziesz miał styczność z ich programistami – tak, to jest opcja)
Ogólnie jest wiele języków programowania i wiele obszarów. Dlatego warto już na starcie ukierunkować się. Twoja motywacja jest bardzo istotna!
Więc co jest Twoją motywacją?
Chcesz tworzyć strony internetowe. W związku z tym idziesz na studia informatyczne, by zdobyć potrzebną wiedzę.
Błąd. No chyba, że naprawdę znajdziesz studia ukierunkowane na tworzenie stron. Ale studia zazwyczaj prezentują całkiem inny rodzaj wiedzy.
Podejrzewam, że dlatego wiele osób szuka odpowiedzi na pytanie: od czego zacząć naukę programowania? I dostaje ją. A ja chwilami się załamuje czytając te porady oraz kłótnie w temacie od czego zaczać…
Tu NIE MA uniwersalnej odpowiedzi! Wszystko zależy!
No chyba, że jest Ci obojętne w czym wylądujesz, chcesz tylko wbić do branży. Wtedy spoko, wybierz dowolną ścieżkę.
Co może być Twoją motywacją?
Wspomniane:
Tworzenie stron internetowych
Widzisz potrzebę na rynku. A nuż potrzebujesz strony dla siebie, swoich znajomych, rodziny. Nie chcesz za nią płacić albo rzeczywiście nie masz komu… Chcesz zrobić to samodzielnie. A może po prostu sprawdzić czy by Ci się to spodobało? Wydaje się to przecież takie fajne. I ścieżka dość rozwojowa.
Tak czy inaczej, jeśli chcesz tworzyć strony internetowe – nie polecałabym studiów. Wyniesiesz wiele wiedzy, ale nie tą, której potrzebujesz. Koszt przewyższy zysk. No chyba, że rozważasz również inne opcje. Wtedy studia dadzą Ci duży przekrój tego, czym mógłbyś się zajmować. No, ale nie o studiach dzisiaj 🙂
Od czego zacząć w tym przypadku?
Od tworzenia stron. I to dość szybko. Pierwsze kroki skieruj do HTML & CSS, naucz się JavaScriptu, zajrzyj do jQuery. O tej ścieżce nauki pisałam już dość szczegółowo w artykule Od zera do Front-end Developera. Ciebie będzie interesował początek tej ścieżki: HTML & CSS, JavaScript, jQuery, Bootstrap. I praktyka! Dużo praktyki! Tworzenia stron.
A skoro zaczęliśmy od Front-endu:
Chcesz tworzyć aplikacje webowe
Chcesz stworzyć drugie Google Calendar, drugi Youtube, Toggl. Potrzebujesz jakiejś aplikacji na własne potrzeby. Finansowej, planera. Coś co idealnie spełniałoby TWOJE potrzeby!
Nie ma aplikacji idealnej. Nie da rady, żeby aplikacja napisana przez kogoś innego spełniała WSZYSTKIE Twoje potrzeby. Więcej, jeśli taką napiszesz, nie jest powiedziane, że za dwa lata to będzie za mało! Pytanie co da Ci to teraz? Może być np. świetną motywacją do nauki programowania 🙂
Akurat o tworzeniu aplikacji webowych naprawdę dużo piszę na blogu. Seria: Tworzymy aplikację webową! ma już dwa sezony. Drugi jeszcze nie do końca zamknięty (czeka mnie m.in. długo odkładane podsumowanie), trzeci powoli się klaruje (niedługo rozpoczynam nagrania).
Tak czy inaczej Twój pierwszy krok to nauka HTML & CSS, JavaScript. Resztę ścieżki znajdziesz bardzo szczegółowo rozpisaną w artykule „Od zera do Front-end Developera” (gdzie znajdziesz jeszcze milion innych odnośników).
I teraz tak: aplikacje webowe to nie tylko Front-end. Żeby stworzyć aplikację webową potrzebujesz również Backendu. Z dwojga jednak uważam, że jeśli zależy Ci na czasie, dużo łatwiej zacząć od Front-endu. Są rozwiązania dostarczające Ci backendu (np. Firebase, Heroku). Możesz zacząć, przetestować swój pomysł, a dopiero później zdecydować, czy chcesz budować swój backend od zera czy pozostać na rozwiązaniu typu Backend as a service, itp.
Po drodze może się okazać, że wcale Cię ten Front-end nie kręci… Co wtedy?
Po drugiej stronie barykady znajdziesz…
Back-end
Który jak wspomniałam także jest potrzebny do stworzenia aplikacji webowej. Więc jaki język do opanowania w tym przypadku?
No właśnie tu się robi ciekawie 🙂 Języków backendowych jest całkiem sporo. Wszystkie mają swoje plusy i minusy. Jeśli zadasz pytanie: z jakiego języka skorzystać, dostaniesz multum różnych odpowiedzi. Najczęściej będą to języki, którymi zajmują się dani autorzy. Nie wiem, czy są osoby, które mają doświadczenie z min. czterema głównymi językami backendowymi (tymi najpopularniejszymi), a jeszcze mniej znajdziesz osób, które mają KONKRETNE doświadczenie w tych językach (nie mówię o znajomości podstaw). Po prostu, jeśli zaczynasz naukę danego języka, zaczynasz pracę w projekcie go wymagającym, często go specjalizujesz. Specjalizacja języków trwa latami.
A jeśli ktoś podjął zły wybór?
Zdefiniuj zły 🙂 Wbrew pozorom te najpopularniejsze języki programowania, jak: Java, C/C++, Python, C#, PHP, Ruby, mają sporo mocnych stron. To nie jest tak, że ucząc się któregoś z nich przegrasz życie. Wygrasz 🙂 Pod kątem zawodowym też skarżyć się nie będziesz.
Z jakiej racji wymieniam akurat te języki jako najpopularniejsze? Zajrzyj do tego artykułu.
Więc który z języków wybrać?
Jeśli to Twój pierwszy język – zaczęłabym jednak od Pythona. Ma swoje plusy jako pierwszy język programowania.
Nie mówię, że wybór podjęty i masz w nim zostać. Po prostu Python dostarczy Ci podstaw do zgłębiania innych języków. Java i C# są ciężkimi językami na start, choć wiem, że niektórzy też od nich zaczynają (respect 🙂 ).
A PHP? Sama zaczynałam od tego języka 😀 Zresztą, większość programistów ma za sobą bardzo losowe ścieżki na start. To teraz wyszła moda na idealną ścieżkę nauki programowania. Choć przyznam, że nie wszystkie języki są rzeczywiście dobrą opcją na start. Niektóre mogą boleć… i mocno Cię zniechęcić.
Nie jest też tak, że będziesz korzystać tylko z jednego języka programowania. Przeciętny programista zna ich całkiem sporo. A jak jest po studiach to pomnóż to jeszcze przez dwa 😀 Co nie znaczy, że możesz iść pracować w danym języku, bo przewinął Ci się na studiach – to zdecydowanie nie wystarczy.
Python
Jak wspomniałam świetny język na start, ale nie tylko. Python ma bardzo szerokie zastosowanie. Może być wykorzystywany jako backend dla aplikacji webowych (Django, Flask), można w nim tworzyć aplikacje desktopowe, parsować dane z wykorzystaniem krótkich skryptów i wiele wiele więcej. Bardzo popularny język w przypadku Data Science. Jest językiem bardzo uniwersalnym i bardzo szybko możesz wykorzystać tą wiedzę praktycznie.
Dodatkowo wg indeksu TIOBE plasuje się na czwartej pozycji, jeśli chodzi o najpopularniejsze języki programowania:
Jeśli szukasz materiałów do nauki tego języka – zapraszam do artykułu.
Java
Język, który otwiera przed Tobą wiele możliwości. Backend dla aplikacji webowych, aplikacje mobilne (Android) i wiele wiele więcej. Od lat najpopularniejszy język programowania i jeden z pewniaków na najbliższe lata, jeśli chodzi o zapotrzebowanie na rynku.
C#
Przyznam, że chyba najczęściej kojarzony z backendem dla aplikacji webowych, Xamarin’em & aplikacjami mobilnymi, silnikiem gier Unity. Często przyrównywany do Javy, spośród wymienionych tu języków backendowych łączy je chyba najwięcej.
PHP
Backend dla aplikacji webowych. Szczerze mówiąc, nie wiem czy nie najpopularniejszy.
PHP siedzi w backendzie m.in. WordPress’a (CMS wielu blogów) – także, jeśli myślisz o tworzeniu stron internetowych w oparciu o ten CMS, prędzej czy później będziesz musiał się z nim zapoznać. A jeśli już go znasz: czemu nie wykorzystać jego możliwości jako backendu dla aplikacji webowej?
Node JS
JavaScript w Backendzie? Czemu nie. Na przykład w postaci Node JS.
Ruby
Inne języki
Żeby nie było – to nie koniec ?
Powiesz: ale zaraz! Przecież one wszystkie służą do tego samego… No, właśnie. Ich obszary mocno się przeplatają, pokrywają. Dlatego nie jest tak, że jeśli wybierzesz Javę nie będziesz mógł pisać np. aplikacji webowych. No, ale jeśli wybierzesz Swift to raczej z nim nie napiszesz aplikacji na Android’a (chyba? :P)
Każdy z tych języków idzie ze swoimi frameworkami, narzędziami, zakresem wiedzy do opanowania. Dużo je łączy i nauka każdego kolejnego jest łatwiejsza, co nie zmienia faktu, że każdy ma swój zestaw najczęściej wykorzystywanych z nim narzędzi.
I tak np.
Python – Django, Flask
Java – Hibernate, Spring
C# – ASP.NET (a od niedawna ASP.NET Core)
PHP – Laravel, Symfony, Zend
Ruby – Ruby on Rails
Języki backendowe często służą do komunikacji z bazą danych. Tak, to część Backendu. Baz danych jest również od groma i jeszcze więcej. Ranking najpopularniejszych z nich znajdziesz na db-engines:
Różnią się wieloma rzeczami, jak np. typem. Jak widzimy powyżej najpopularniejsze z nich są bazy relacyjne. Bazy danych to cały nowy obszar wiedzy, który warto prędzej czy później nadrobić. Projektowanie baz danych, normalizacja postaci. Bazy relacyjne, bazy NoSQL (wśród nich najpopularniejsze rozwiązanie tego typu – MongoDB). Bazy danych, hurtownie danych. To tylko część wiedzy związanej z bazami.
Nie mogę też nie wspomnieć o języku służącym do operowania na tych danych – SQL.
Aplikacje mobilne
Tutaj również polecę Ci na start Python.
Do tworzenia aplikacji mobilnych? Nie. Nauki podstaw programowania, Twój pierwszy język.
Jeśli jednak już się uprzesz, że chcesz zacząć od języka docelowego, masz co najmniej dwie ścieżki (języki):
- Java
- Swift
Od czego zależy wybór języka w tym przypadku? Od tego na jaką platformę chcesz pisać. Java = Android, Swift = iOS.
Powiedziałam, że masz do wyboru co najmniej dwie ścieżki – jakie są więc kolejne?
- Kotlin
- Objective-C
- JavaScript
- C#
Kotlin jest alternatywą, jeśli chodzi o język tworzenia aplikacji mobilnych na platformę Android. Od 2017 stał się oficjalnym językiem programowania na platformę Android.
Objective-C był poprzednikiem Swift’a. Myślę, że na chwilę obecną warto już jednak zainwestować swój czas w Swift, jeśli celujesz w platformę iOS.
JavaScript? Tutaj? Jak najbardziej! JavaScript swoją ekspansją objęło również aplikacje mobilne.
Inną opcją są aplikacje międzyplatformowe, tworzone np. z językiem C# i Xamarinem.
Także jak widzisz masz sporo altenatyw. Którą ścieżkę obrać?
Jeśli celujesz w aplikacje mobilne – polecałabym mimo wszystko zainteresowanie się pierwszymi trzema opcjami: Java/Kotlin (Android), Swift (iOS). Jeśli chodzi o JavaScript – może być to świetna opcja dla osób, które znają ten język bądź bardziej celują w tworzenie aplikacji webowych i ich wersji mobilnych. Podobnie C# polecałabym osobom, które znają bądź celują w ten język, a aplikacjami mobilnymi są zainteresowane niejako „obok”.
Są jeszcze inne alternatywy, inne platformy mobilne. Tutaj jednak skupiłam się na najważniejszych z nich, które swoim zasięgiem obejmują ok. 99% rynku (Android, iOS). Jeśli ktoś myśli na poważnie o tworzeniu aplikacji mobilnych – powinien raczej celować w dużych graczy.
W przypadku aplikacji mobilnych trochę mogłam wypaść z obiegu w ciągu ostatnich lat, więc odsyłam Was do raportu Realm Report – Facts and Trends in Mobile Computing – Q4 2017.
W przeciągu najbliższego roku planuję publikować wywiady z osobami zajmującymi się tworzeniem m.in. aplikacji mobilnych zawodowo, profesjonalnie. A także specjalistami w innych dziedzinach ?
C/C++
Nie było tutaj C/C++. To co, programowanie w tych językach nie ma sensu? Ma. Jak najbardziej. W przypadku C/C++ obszar zainteresowań to głównie gry komputerowe, systemy wbudowane. Wszędzie tam, gdzie liczy się wydajność, pamięć i jej dobre wykorzystanie.
Chcę tworzyć:
Gry komputerowe
Nie przeglądarkowe, webowe. Poważne produkcje pokroju „Wiedźmina”.
Tutaj dodam, że mam najmniejsze doświadczenie z powyższych, ale mogę powiedzieć jak sama podeszłabym do tematu dzisiaj.
Przyznam, że sama lata temu myślałam o takiej ścieżce. To był właśnie jeden z powodów, dla którego poszłam na studia i uważam, że w tym przypadku jest to mocno uzasadnione.
Tworzenie gier komputerowych na pewno wymaga dużej wiedzy z zakresu matematyki, fizyki (!). Nie tylko znajomości języka programowania.
Od czego bym zaczęła gdybym celowała w ten kierunek teraz?
C/C++, ewentualnie ze wstępem w postaci Pythona
Na start. Następnie zainteresowałabym się jednak jakimś silnikiem tworzenia gier. Przyznam, że z własnych obserwacji wyłania mi się dwóch graczy: Unity 3D oraz Unreal Engine. Myślę, że prywatnie zainwestowałabym swój czas w Unity i naukę C#.
Czy to wszystkie opcje, które możesz obrać? Nie. Jest tego dużo, dużo więcej. Problem w tym, że nie lubię wypowiadać się na tematy, na których się nie znam. Nie powiem Ci więc od czego zacząć, jeśli interesuje Cię temat Big Data czy Sztucznej Inteligencji (AI).
Zamiast tego, jak wspomniałam wyżej, mam zamiar zaprosić osoby, które zajmują się danymi tematami profesjonalnie, na co dzień. I to je odpytać o polecaną ścieżkę dojścia do takiego a nie innego zajęcia. Od czego zacząć? Na co zwrócić uwagę? Wszystkie wywiady zostaną tu podlinkowane.
Inne wskazówki dotyczące nauki programowania
Wiedz, że wybór pierwszego języka programowania nie wiąże Cię z nim na zawsze. Choć drastyczna zmiana może powodować poważny spadek, jeśli chodzi o poziom Twojego życia.
Dlatego dużo osób krzyczy: Specjalizuj się! Zostań tu gdzie jesteś!
Sama miałam poważny problem rezygnując z C++ na rzecz JavaScriptu. Miałam już wtedy 3-letnie, komercyjne doświadczenie z C++. Początkowo kochałam ten język i to z nim wiązałam swoją przyszłość. Jednak sytuacja uległa zmianie.
Kiedy już jednak znudzi Ci się bycie specjalistą w swojej dziedzinie, wiedza ogólna przyda Ci się w obraniu kolejnego kierunku. IT naprawdę jest świetną branżą pod tym kątem. Daje dużo możliwości, dużo ciekawych obszarów rozwoju.
Osobiście bardzo podoba mi się podejści zaprezentowane w książce Macieja Aniserowicza, „Zawód programista” :
„Know something about everything and everything about something”
Thomas Henry Huxley
„Wiedz coś o wszystkim i wszystko o czymś”. Zgadzam się w 100%! Świetnie odzwierciedla to moje podejście. A naprawdę, pierwszy raz przeczytałam to w tej książce. Maciej zaznacza, że na starcie warto jednak starać się zgłębiać wiedzę w jednym obszarze – i tu również się zgodzę. „coś o wszystkim” warto zaczać zgłębiać, gdy już wie się naprawdę dużo w swojej dziedzinie. Wiedza ogólna się przydaje. Jednak na rynku pracy poszukiwani są specjaliści.
Bądź gotowy na ciągłą naukę! Dokształcanie się, zdobywanie nowej wiedzy.
To nie jest tak, że zaczynasz i ciągle masz pod górę, bo nie wiesz TEGO, TAMTEGO i OWEGO. Owszem, na starcie jest najwięcej tych braków, ale programowanie to ciągła nauka. Są szybciej i mniej rozwijające się obszary, ale wszystko się zmienia.
Jednocześnie musisz mieć świadomość, że nie dasz rady opanować wszystkiego, nauczyć się wszystkiego, wiedzieć wszystkiego. Po prostu się nie da! Ogarniaj to, co jest Ci potrzebne dalej. Patrz na to jak na proces, który musisz przejść. Bez nerwów, z dystansem. (wiem, łatwiej pisać niż mówić, przerabiałam to)
Kolejne pojęcie do opanowania? Wpisz na listę bądź zajmij się tym od razu, jeśli ma Cię blokować. Podkreślam: za kryterium wyboru obierz przydatność tej wiedzy. Inaczej możesz zginąć w otchłaniach sieci, gdzie poznanie jednego pojęcia pociągnie Cię do kolejnych pięciu tematów.
Staraj się trzymać to w ryzach. Ale też popuszczaj je od czasu do czasu. Nauka nowych rzeczy może być frajdą. Postaraj się tylko dobrze to wyważyć. Inaczej pierwsze kroki potrwają dziesięć razy dłużej.
Zwłaszcza w Front-endzie pojawia się mnóstwo nowości. I choć mogą wydawać się fajne, może się okazać, że ich znajomość nigdy nie przyda Ci się praktycznie. I nie mówię, że nie warto ich zgłębiać – sama to robię, od czasu do czasu, ale musisz zachować proporcje. Zgłębienie jakiegoś tematu dla samego siebie jest fajne, ale każda wiedza ma swoją datę ważności, jeśli teraz przez lata z niej nie skorzystasz to za x lat:
- niewiele będziesz pamiętał,
- a to, co będziesz pamiętał i tak może się okazać nieaktualne w kontekście tego, co będzie.
Co chciałam osiągnąć tym artykułem?
Zmusić Cię do przemyśleń w temacie tego, co chcesz rzeczywiście robić. Jaki jest Twój cel? Świadomość tego, może być dla Ciebie świetną motywacją w całym procesie nauki. A będzie to długi proces.
Co jeszcze mogę Ci zaoferować w tak ogólnym temacie jakim jest nauka programowania?
Analiza zeszłorocznych wyników Stack Overflow pod kątem osób rozpoczynających naukę programowania
Q&A: Programowanie (na start), a w nim:
- Czym nie zajmuje się programista?
- Czy studia są potrzebne by pracować w IT?
O temacie studiów pisałam również we wpisie „Studia informatyczne – tak czy nie?”. Jeśli jesteś w liceum/technikum i myślisz o studiach informatycznych zajrzyj również do Q & A, które napisałam w tym temacie.
- Jeśli studia – to jakie?
- Ile wymagań oferty o pracę muszę spełniać, by aplikować?
Wspominałam o najpopularniejszych językach programowania i gdzie znaleźć taką listę.
Swojego czasu prowadziłam również Live w temacie Q&A, gdzie odpowiadałam na Wasze pytania. W tym powiedziałam naprawdę dużo nt. samej nauki programowania.
Jeśli interesuje Cię jak wygląda dzień programisty i na czym tak w ogóle polega programowanie – zapraszam do artykułu, poświęconego temu tematowi. Swojego czasu opisałam również umiejętności i kwalifikacje przydatne w pracy programisty.
Oczywiście mój ebook „Programowanie na start, czyli kilka przydatnych rzeczy, które chcesz wiedzieć nt. programowania.
Jeśli chodzi o moją, już ponad 10-letnią ścieżkę – możecie o niej przeczytać tutaj. Uczyłam się dokładnie w opisany powyżej sposób – moją motywacją były potrzeby własne. Tak się zaczęło 🙂 Dlatego zdecydowanie polecam taką ścieżkę.
Polecam również całą kategorię „Od zera”.
No i oczywiście zapraszam do grupy wsparcia – Programowanie – wsparcie na starcie, a zwłaszcza do działu z najczęściej zadawanymi pytaniami w temacie nauki programowania.
W temacie samej nauki programowania wypowiadałam się również na łamach serwisu Marketing i Biznes: Nauka programowania.
No i zdecydowanie polecam książkę Macieja Aniserowicza, „Zawód: programista”. Osoby, które dopiero myślą o pracy jako programista mogą z niej wyciągnąć naprawdę dużo informacji! Choć w książce wiele osób znajdzie coś dla siebie – niezależnie od etapu na jakim się znajduje 🙂 Ja znalazłam.
Jeśli mimo wszystko masz jeszcze jakieś pytania – zadaj je w komentarzu lub napisz do mnie na kontakt@nettecode.com. Postaram się odpowiedzieć + planuję kolejne wpisy skupione wokół nauki programowania w ogóle.
Mam zamiar również odpytać programistów zajmujących się zawodowo różnymi obszarami programowania czy IT. Programistów aplikacji mobilnych (zarówno iOS jak i Android’a), back-end’owców (piszących w różnych językach programowania, Java, C#, Ruby, PHP, itd.), front-endowców, specjalistów od baz danych, big data, data science, może AI? Wszystkich, których uda mi się zaprosić do współpracy, by w ramach artykułu podzielili się swoim doświadczeniem oraz wskazówkami dla osób, które interesuje dana ścieżka rozwoju. Pierwsze zaproszenia lada moment wyjdą z mojej skrzynki pocztowej ? Publikacje rozpocznę, kiedy zbiorę kilka pierwszych odpowiedzi.
A jeśli jesteś taką osobą, a temat wydał Ci się interesujący – napisz do mnie na kontakt@nettecode.com lub zostaw swój adres e-mail, korzystając z tego formularza – skontaktuję się. Chętnych nigdy za wiele, zakładam, że jeśli publikacje się spodobają potrwają nie tygodnie, a lata ?
Myślę również, że mogę już powoli ogłosić, że pracuję nad kanałem na Youtube, gdzie jednym z poruszanych tematów będą odpowiedzi na Wasze pytania 🙂 Aktualnie buduję bazę filmów na start. O całym pomyśle oraz tematyce jaką chcę tam poruszać możecie przeczytać we wpisie odnośnie moich planów względem NetteCode.
Uff… i to tyle. Mam nadzieję, że wpis okaże się przydatny, motywujący bądź inspirujący (a najlepiej wszystko na raz! ? )
A jaka jest Twoja motywacja do nauki programowania? Jak wpływa (wpłynęła) na Twoją ścieżkę?
A może dopiero jej szukasz? Co chcesz robić? Dlaczego właśnie programowanie?