Od czego zacząć naukę programowania?
Spis treści
W poprzednim wpisie dotyczącym wyboru języka programowania poruszyliśmy kwestię tego jaki język programowania wybrać. My w tym wpisie oczywiście założymy, że wybraliśmy Javę, ale postaramy się, aby wpis przekładał się na dowolną technologię. Na początku znowu zacznę ponownie od wybrania kilku popularnych i powtarzających się w internecie porad.
Wymyśl sobie jakiś projekt, np. stronę internetową albo grę i go realizuj Zacznij od algorytmów, języka nauczysz się później Po prostu pisz kod i przerabiaj jakiś kurs lub książkę
Na pierwszy rzut oka wszystko wygląda bardzo fajnie, bo w końcu, czy może być lepszy sposób na naukę programowania niż praktyka? Moim zdaniem nie i dlatego też nasz kurs opieraliśmy właśnie na takiej idei. Przejdźmy jednak po kolei przez typowy proces nauki przeciętnego Kowalskiego.
Jestem zielony
Punkt startowy każdego z nas. Etap ten przychodzi w różnym wieku i z doświadczenia z naszymi kursantami mogę stwierdzić, że najczęściej jest to przedział 18-25 lat, jednak zdarzają się także osoby w wieku gimnazjalnym jak i ludzie ze stabilną pracą i 40 wiosnami za sobą.
Pierwszym wyborem większości osób na początku jest książka. Jest to wybór dobry i niedobry jednocześnie. Książki najczęściej są niezastąpionym źródłem wiedzy teoretycznej, prawdziwymi kompendiami, do których wraca się nawet po kilku latach programowania. Problemem jest jednak ten aspekt teoretyczny. Większość książek, niezależnie od języka programowania prowadzi nas przez kolejne rozdziały, pokazując pojedyncze elementy danego języka. Mikro przykłady napisane w kilku linijkach świetnie obrazują ten pojedynczy element, tylko najczęściej nie pokazują go w szerszym kontekście. Jednym z aspektów, za który ludzie cenią nasz kurs jest to, że pokazujemy jak każdy nowo poznany element wykorzystać nie tylko w teorii, ale też w rozwoju nieco większej "aplikacji krok po kroku" (zarządzanie biblioteką, odtwarzacz mp3). Przed rozpoczęciem opracowywania treści przeprowadziliśmy ankietę wśród osób już korzystających z naszej strony i bezpłatnych materiałów i zdecydowana większość z głosujących uznała taką formę za najbardziej efektywną. Można więc sobie teraz powiedzieć, ok to wraz z przerabianiem książki będą sobie rozwijał swoją aplikację. Z doświadczenia wiem, że cel jest bardzo ambitny i słuszny, jednak w praktyce bardzo trudny do zrealizowania. Odcinając się zupełnie od nauki programowania, załóżmy, że mamy solidny kawałek drewna, wszelkie narzędzia jakie sobie wymarzymy i chcemy zrobić szafę. Pomimo iż mamy wszystko co potrzebne, wiemy jak używać poszczególnych elementów osobno, to najprawdopodobniej bardzo ciężko będzie nam sobie zaplanować pracę, aby dojść do ostatecznego celu. Bez pomocy kogoś, kto będzie nam wskazywał prawidłową drogę lub przynajmniej dobrego pojęcia o całym procesie tworzenia szafy (aplikacji), ciężko będzie nam ją zbudować. Warto więc mieć kogoś, kto chociaż raz pokaże nam prawidłową drogę. Dlatego pierwszy z cytatów przytoczonych na początku uważam za zgubny. Bez znajomości ogólnego przekroju technologii i klocków, które właściwie mamy do ułożenia nie będziemy w stanie zaplanować sobie pracy nad "większym projektem". Algorytmy o których mowa w drugim punkcie też nam się na nic nie zdadzą, bez możliwości ich wizualizacji. Bez znajomości języka nie będziemy w stanie implementować algorytmów.
Liznąłem Javę, C++, Pythona, Javascript, co dalej?
Ten etap najczęściej przychodzi po ok 1-2 miesiącach nauki. W tym czasie zdążymy przerobić kilkaset stron książki, będziemy mieli za sobą trochę aplikacji napisanych w konsoli w stylu "zgadnij moje imię", "kalkulator" i podobnych. Często na tym etapie zaczynają się pojawiać rzeczy trochę bardziej skomplikowane, nieznajomo brzmiące słowa jak polimorfizm, coraz więcej klas, obiektów, dziedziczenie. Możliwe, że to bariera psychologiczna, ale wielu ludzi na tym etapie albo zaczyna się uczyć innego języka myśląc, że tam będzie może łatwiej, albo porzuca na jakiś czas naukę programowania całkowicie. Możliwe, że natknęliście się w internecie na takie słowa:
od czego zacząć naukę jeśli do tej pory liznąłem tylko c++, javy i pythona?
Jeżeli będziemy się skupiali na "lizaniu" danej technologii, a nie zgłębianiu się w niej naprawdę, to nigdy nie dojdziemy do etapu tworzenia naprawdę użytecznych aplikacji. Na tym etapie skup się przede wszystkim na biegłym poruszaniu się w danym języku, postaraj się poznawać biblioteki danego języka, ucz się pracować z dokumentacją. Jeżeli trafiasz na problem i znajdujesz rozwiązanie w internecie to nie podchodź do tego w sposób "jakoś to działa", tylko postaraj się to naprawdę zrozumieć. W innym przypadku te same problemy będą wracały bez końca. Wbrew popularnej opinii różne języki i ekosystem wokół nich mocno się różnią i nie da się w krótkim czasie poznać innej technologii na biegłym poziomie. Z tego powodu nikt nie daje ogłoszeń o pracy typu "szukamy programisty", tylko raczej "szukamy programisty java" albo "szukamy programisty python".
Już coś potrafię!
Ostatni etap młodego adepta sztuki programowania, który warto wyróżnić, to taki, w którym prawdopodobnie potrafimy już napisać aplikację z graficznym interfejsem użytkownika, obiły nam się o uszy frazy typu wzorce projektowe, czy bazy danych, a polimorfizm i obiekty to już dla nas chleb powszedni. Tutaj najczęściej zaczyna się przyjemniejsza część nauki. Korzystanie z posiadanej wiedzy i jej rozwój. Będziemy tutaj już coraz bliżej podjęcia pierwszej pracy, czy stworzenia "poważnej aplikacji", ale będziemy już potrafili sprawnie korzystać z narzędzi jakie daje nam konkretny język/technologia, nauka nowych rzeczy będzie rzeczą naturalną. Czytanie kolejnych stron książek, czy dokumentacji nie będzie czarną magią, tylko czymś co układa się w sensowną całość. Jeśli dojdziesz do tego etapu, to można powiedzieć, że najprawdopodobniej dalej pójdzie już z górki. Z doświadczenia naszych kursantów mogę uznać, że etap ten przychodzi najczęściej po ok 4-5 miesiącach nauki, u tych bardzo zaangażowanych nieco wcześniej. Na tym etapie zorientujemy się też, że sam język to dopiero początek. Przeglądając oferty pracy natrafimy na takie pojęcia jak Java EE, Spring, czyli biblioteki i frameworki wymagane w pracy. W zależności od tego z jakiego języka programowania korzystamy będzie się to mocno różniło. Na szczęście na naukę tych dodatkowych rzeczy będziemy poświęcać już raczej czas na stażu, czy w pracy i będzie nam to zajmowało kolejne lata.
Jak ja bym zaczął?
Ja bym chciał zacząć od kursu, który sam stworzyłem, bo połączyliśmy w nim niezbędną teorię z praktyką w postaci zadań i rozwijania większych projektów, ale wiem, że nie każdy musi mi wierzyć ;) Jeżeli uczę się dziś nowych rzeczy technologicznych to stosuję strategię, która pozwala mi połączyć teorię z jak najszybszą praktyką. Jeżeli korzystam z książki to staram się ją przerabiać szybko, nie po 10 stron, mozolnie przepisując przykłady, tylko czytam ją najczęściej przed snem np. po 40-50 stron. Większości przykładów nie przerabiam, bo książka ma mi pokazać ogólny zarys tego czego się uczę. Bezmyślnie przepisywanie kodu źródłowego nic Ci nie da, skup się na samodzielnym rozwiązywaniu zadań. Jeśli opanujesz większy wycinek technologii (np. nauczysz się co to zmienne, pętle, warunki sterujące, klasy i obiekty) to możesz sobie wymyślić mały projekt podsumowujący. Rozrysuj sobie najpierw ogólne założenia na kartce, nie porywaj się od razu na pisanie kodu, bo najprawdopodobniej szybko się w nim pogubisz. Staraj się nie skupiać zbytnio na teorii . Wiele ludzi wpada w pułapkę tego, że szuka książki, która ma jak najwięcej stron, zakładając, że będzie w niej wszystko. Prawda jest taka, że na co dzień wystarczy Ci prawdopodobnie 20% jej zawartości, cała reszta, a szczególnie tabelki z długimi listingami różnych funkcji języka to zaśmiecanie sobie głowy. Dodatkowo większość ludzi bardzo szybko się zniechęci, jeśli zauważy, że po przerobieniu 200 stron książki nadal tworzy zaledwie trywialne przykłady. Dużo lepiej jest skupić się na rozwoju i tworzeniu czegoś praktycznego, a wiedzę teoretyczną uzupełniać w międzyczasie. Nawet po kilku latach nauki ogromna ilość programistów nie do końca wie jak wszystko działa "pod spodem" i zazwyczaj nie jest to wielkim problemem, jeśli zauważysz, że czegoś Ci brakuje, to będzie dobry moment na "powrót do korzeni". Na koniec dodam tylko, że w programowaniu liczy się wytrwałość . Nauka programowania jest jak nauka dowolnej innej rzeczy np. gry na instrumencie. Żeby ją opanować należy po prostu poświęcać trochę czasu. Liczy się regularność, praktyka i nieustanna próba bycia coraz lepszym. Nie licz na to, że kiedyś poznasz wszystko co związane jest z danym językiem - możesz być w nim ekspertem, ale nigdy nie będziesz wiedzieć wszystkiego i nie ma w tym nic złego. Więcej na ten temat przeczytasz też w naszym wpisie czy programowanie jest trudne i ile zajmuje czasu. A jak wyglądają wasze początki? Czego próbowaliście? Może macie z czymś problem, w którym możemy wam doradzić?
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.