Jak zacząć programować? Od czego zacząć naukę?

Moje początki w programowaniu

Featured image

Krótko o tym jak nauczyć się każdej umiejętności

Czasami słyszymy lub czytamy jak to ktoś chwali się, że on to od przedszkola programuje. Całe życie w kodzie. Nie zawsze, mówi, że owszem napisał ten pierwszy kawałek kodu, gdy miał 7 lat, ale potem przez kolejne 10 lat nic z tym nie zrobił. Super mieć zajawkę od samego dzieciństwa. Naprawdę podziwiam takie osoby. Zajebiste jest znaleźć coś, co Cię jara w tak młodym wieku. Większość z nas niestety nie ma takiego szczęścia. Często nie wiemy co chcemy robić w przyszłości. Idziemy wtedy na studia i w sumie. Co dalej? No właśnie. Często po prostu nie ma się pomysłu na siebie. Sam byłem w takiej sytuacji :)

Jak to się NIE zaczęło?

Na samym początku zamiast mówić Jak to się zaczęło, powiemy sobie Jak to się NIE zaczęło. Z tego, co pamiętam pierwszą styczność z kodem miałem w okolicach gimnazjum. Były to zajęcia z informatyki. Niezbyt interaktywne zajęcia. Suche przepisywanie tego, co rzucał projektor. Mimo to na początku mi się podobało. Napisałem wtedy swój pierwszy HTML. Była to szachownica na zasadzie tabelek. Potrafiłem nawet dodać link do CSS’a! Potem był jakiś język programowania. Nie jestem pewien co to było, ale chyba Delphi. Była to dosłowna masakra. O ile wyklikanie interfejsu graficznego jakoś szło to potem dodanie temu jakieś funkcjonalności… Czarna magia. Nie miałem wtedy pojęcia jak to wszystko połączyć pętla, funkcja, zmienna, klasa? Puff, Mind Blown. Kolejną przeszkodą był wtedy angielski. Byłem wtedy bardziej zainteresowany graniem w gry komputerowe niż dalszym rozwojem w tym kierunku. Tak minęło gimnazjum. Zdałem przedmiot i tyle mnie widziano. Zapomniałem o tym na kolejnych kilka lat. Sądziłem, że to nie dla mnie. To jest zbyt trudne. Zresztą, po co się męczyć? Granie w gry komputerowe jest bardziej rozrywkowe!

Następnie przyszły czasy szkoły średniej. Jak się domyślasz miałem kolejny świetny pomysł. Chciałem zostać hackerem! Kto by nie chciał? Zainstalowałem backtracka. Taki fajny linux z narzędziami dla hackerów. Obecnie nowsza wersja to Kali. Ale dobra. Udało się zainstalować. Poudawałem, że potrafię korzystać z konsoli. Potem przyszła pora na hacking. Ehh… Okazało się, że potrzebna jest specjalna karta sieciowa. Kupione! Przeszedłem tutoriale. Złamałem wifi, zrobiłem klon strony i nauczyłem kilku tricków. W sumie tyle. Zapał do zostania hackerem przeszedł. Musiałem na własnej skórze doświadczyć, z czym to się je. Okazało się, że nie jest tak jak w filmach. Dasz wiarę? Wróciłem do gier komputerowych. Następnie gdzieś pomiędzy studiami a szkołą średnią zapragnąłem robić gry. Były próby podejścia do C++ również nie wyszło, niemniej miałem już podwaliny do późniejszej nauki, o czym zaraz. Tak też przechodzimy do studiów. Każdy przecież idzie na studia. Nie wiedząc co dalej chcę robić ze swoim życiem poszedłem na studia. Programowanie w PHPie, Javie, Bashu i innych. Wszystko było! Do tego na komputerach z epoki kamienia łupanego, żeby nie było za łatwo. Tak minęły pierwsze dwa lata na studiach. Niestety, ale nie dowiedziałem się w tym czasie nic co mi się dzisiaj przydaje w jakimkolwiek stopniu. Nadszedł piąty semestr i wtedy zaczęły się pojawiać myśli. Co Dalej? W sumie to niedługo koniec, a ja jestem gdzie byłem. Myślę, że tutaj zaczyna się moja historia :)

Jak to się zaczęło?

Koniec studiów się zbliża. Piąty semestr prawie dobiega końca. Zaczęły się wtedy pojawiać myśli. Co dalej? Postanowiłem wtedy odinstalować wszystko co rozpraszało uwagę (głównie gry) i podejść ponownie do programowania. W międzyczasie zacząłem czytać różne książki z rozwoju osobistego, zmieniania i kształtowania swoich nawyków oraz samodyscypliny. Oczywiście w całym tym pędzie nie mogło również zabraknąć dobrego sci-fi. Stworzyłem plan działania, ale mimo to nie było łatwo. Nie zawsze się go trzymałem. Ale robiłem kolejne tutoriale i próbowałem pisać swoje małe kawałki kodu. Przeczytałem dwie książki o Javie. Pierwsza z nich to Java Podstawy - Horstmanna, a druga to Rusz Głową - Java (fajna książka, ciekawie napisana, ale nie nauczysz się z niej programować). W obu przypadkach przeczytałem tylko kilka rozdziałów. Dobrze, że z tego zrezygnowałem, bo teraz z perspektywy czasu można śmiało powiedzieć, że nie nauczysz się programowania z książek. Jest cała masa lepszych materiałów. Tak też codziennie starałem się coś robić. Nie zważając na to, że czegoś nie rozumiem. Pomyślałem, że jeśli będę robić to wystarczająco długo to w końcu coś zaskoczy. Podczas tej nauki postanowiłem złożyć CV do dwóch lokalnych firm. Nie bardzo wiedziałem co muszę umieć, żeby dostać się na staż, a fora programistyczne zdecydowanie przesadzały z wymaganiami. Pomyślałem, że najlepszym sposobem jest dowiedzieć się u źródła. Jak się można domyślić rozmowy nie poszły zbyt dobrze. Niemniej miałem doświadczenie czego się spodziewać na rozmowie. Obie różniły się od siebie diametralnie.

Super książka, żeby przezwyciężyć lęk przed nauką trudnych rzeczy. O tym jak sprytnie podejść do nauki. Jak działa twój umysł. Jak działa pamięć. Jak rozwijać wyobraźnię i wiele, wiele innych: Głowa do Liczb.

glowa-do-liczb

Poświęciłem kolejne trzy miesiące na uczenie się Javy. Z miesiąca na miesiąc miałem wrażenie, że umiem dwukrotnie więcej niż poprzedniego miesiąca. Było to raczej złudne, ale wystarczyło, żeby na początku szóstego semestru (początek roku

2015)

dostać się na pierwszy staż. Na pewno nie będzie zaskoczeniem, że przez parę miesięcy pracy dowiedziałem się więcej niż przez całe studia. Warto dodać, że nie tyle, co sama firma dała mi możliwości co to, że zmieniłem całkowicie swoje nastawienie. Mimo wstępnej znajomości w Javie przyszło mi napisać pierwszą aplikację w Qt (framework dla C++). Zadanie w skrócie polegało na przesyłaniu ramek i sprawdzaniu, czy dany mikrokontroler działa. Nie bardzo mi to odpowiadało, ale jakie miałem wyjście? Potrzebowałem doświadczenia. Przebolałem to, że nie zawsze można robić to, co się podoba. Czasami trzeba się przemęczyć i zrobić coś, mimo że nie sprawia to natychmiastowej przyjemności. Była to bardzo pożyteczna lekcja. Dzięki temu nie mam większego oporu przed zabraniem się do kolejnego języka. Wręcz polubiłem to. A co najważniejsze polubiłem mojego poprzedniego wroga C++. Myślę, że warto mieć jeden, czy dwa języki główne, ale nie zamykać się na inne. Zresztą jeśli myślisz o programowaniu jako o karierze to podczas swojego życia poznasz zapewne koło pięciu, dziesięciu języków.

Moja historia nie jest nadzwyczajna. Pewnie wielu ludzi może powiedzieć, że mieli bardzo podobnie. Nie było fajerwerków. Nie rzuciłem studiów. Nie zamknąłem się w piwnicy. Wszystko można się nauczyć trzeba tylko poświęcić wystarczająco czasu na przyswojenie materiału. No i przyda się CEL. Co chcesz osiągnąć? Chcesz dostać pierwszą pracę? Chcesz zarabiać X? Chcesz tworzyć gry? Chcesz stworzyć łazik na marsa? A może współtworzyć autonomiczne samochody razem z Elonem? Chcesz pracować w Google, Facebooku? Bez względu co to jest zacznij od czegoś PROSTEGO. Chcesz tworzyć roboty? Naucz się podstaw języka i kup Raspberry Pi. Stwórz małego robota. Dopiero wtedy będziesz wiedział, czy to jest to co chcesz robić. Gdybanie tutaj nie pomoże. A może chcesz tworzyć stronki? Spróbuj zrobić prosty szablon (jakiś prosty wygląd strony) i dorób do tego jakieś proste API. Sam zobaczysz co bardziej ci odpowiada. Będziesz miał punkt odniesienia czy chcesz iść we frontend, czy backend. Umiejętność programowania otwiera na prawdę wiele ciekawych drzwi. Ale zanim to nastąpi trzeba zdobyć podstawową wiedzę, która pozwoli zobaczyć te drzwi :)

Co na początek?

Jeśli miałbym polecić tylko jedną jednyną rzecz to były to kurs CS50 z harvardu. Jest po prostu tak dobry, że nie możesz go nie zrobić na początku swojej przygody!

Książki: Jak pisałem wcześniej nie warto czytać książek o danym języku. Po prostu dużo szybciej nauczysz się programować w praktyce, ale warto wyróżnić książki opisujące jak tworzyć kod:

Czysty Kod - Martina - nie ma co pisać. Po prostu przeczytaj WARTO. Lektura obowiązkowa!

Pragmatyczny Programista - od czeladnika do mistrza - dowiesz się jak pisać elastyczny, przejrzysty kod. Dowiesz się o pułapkach na jakie wpadamy. Jak stworzyć zespół i wiele, wiele więcej. Wszystko przeplatana ciekawymi anegdotami.

Algorytmy - Ilustrowany Przewodnik - czy algorytmy się przydają? Ależ tak! Pomogą ci myśleć w pewien określony sposób co ma wymierne korzyści w codziennej pracy.

Kod Doskonały - mniej popularna, ale warta przejrzenia. Sporo ciekawych i nieczęsto bardziej zaawansowanych tematów.

Frontend freecodecamp, a z tych co nie mają free w nazwie EggHead lub też po opanowaniu podstaw JSa jakiś tutorial na Udemy z angulara, vue, reacta.

Backend jeśli twoim wyborem jest Java to polecam zrobić jakikolwiek tutorial z podstaw języka i przenieść się od razu na Springa. Tutaj możesz przerobić przykłady z oficjalnej strony springa.

Jest jeszcze nowa Java, czyli Kotlin. Tutoriali niestety nie mam, bo uczę się na bieżąco pisząc kod. Niemniej łatwo jest przejść z pisania w Javie na Kotlina. Nowy język wydany przez JetBrains’a (czyli firmę, która ma monopol na najlepsze IDE, IntelliJ Idea). Jest za wcześnie, żeby mówić, że wyprze Jave, ale z mojej perspektywy tak się właśnie stanie. Będzie wiele kodu, który jest napisany w Javie (nie da się ominąć długu technicznego), ale nowe backendowe usługi będą już pisane w Kotlinie. Oszczędza on dużo boiler-kodu i po krótkim zaprzyjaźnieniu się pisze się w nim o wiele wygodniej, aniżeli w Javie : ) (oraz NIE Kotlin nie jest tylko do Androida)

Najważniejsza rzecz, Angielski! Bez tego nie ma co zaczynać.

Choć można się uczyć angielskiego i jednocześnie programowania.

A jak wygląda codzienność? 😅