3 11 2017
Jakbym dzisiaj zaczynał z Javą od zera? Porady i darmowe materiały do nauki
To pytanie często pada na grupie facebookowej tego bloga. – gdybym dzisiaj zaczynał naukę programowania (z naciskiem na Javę) od zera: jakbym się uczył? Jakie materiały do nauki bym wybrał? Starałem się wybrać ścieżkę oraz materiały, które dają dobry obraz tego „z czym się to wszystko je?„. Można wybrać inne materiały do nauki, zawsze wiele dróg prowadzi do celu, ale jeśli miałbym się dzisiaj uczyć od zera, to mniej więcej taką drogę nauki bym wybrał.
Najważniejsze 3 punkty:
- „żeby pisać, trzeba pisać”. Nie wpadaj w pułapkę ciągłego czytania o nauce programowania, bez faktycznego programowania (jak za dużo czasu poświęcasz na czytania wpisów jak ten, to jest to już czerwona lampka!),
- naucz się gita,
- ucz się w takim kierunku, by potrafić napisać prosty webserwis i aplikację klienta (np. aplikację na Androida) która z niego korzysta.
Te parę punktów to parę miesięcy nauki. Szczegóły znajdziesz rozpisane w punktach poniżej.
Ten materiał powstał w ramach współpracy ze szkołą Coders Lab. Dla zainteresowanych: pod koniec wpisu znajdziecie ofertę kursu z częściowym (50%) zwrotem kosztów, albo nawet 100% zwrotem (w przypadku zatrudnienia). Zwrot kosztów jest możliwy dzięki współpracy Coders Lab z firmą Amelco. Zgłaszać można się do 8.11.2017. Szczegóły na tej stronie lub pod koniec tego wpisu.
Quick and dirty – „żeby pisać, trzeba pisać”
Początek to kwestia dyskusyjna. Można przerobić od deski do deski jakąś książki i wtedy brnąć dalej (np. polecam na początek książkę „Java Podstawy„), ale nie wszystkim taki początek odpowiada.
Istnieje grupa, która lubi widzieć jak ktoś porusza się w środowisku programistycznym, co gdzie klika etc. tej grupie polecam kurs dla początkujących kanału YouTube Cave Of Programming:
Ucząc się podstaw (z książki, czy z videotutorialu) należy próbować pisać coś samodzielnie (z wykorzystaniem tego co już umiemy). Tym sposobem zaczniemy napotykać się na problemy i będziemy starali się je rozwiązywać. Na tym polega programowanie: chcę coś zrobić -> zastanawiam się jak to zrobić -> jak czegoś nie wiem, to szukam rozwiązania -> robię to. To oczywiście duże uproszczenie, ale na początek warto mieć taki proces w głowie.
Dużo osób wpada pułapkę tak zwanego „siedzenia w jaskini”, czyli ciągłego oglądania lekcji, bez faktycznego programowania. Przygotowałem na ten temat kiedyś osobny materiał:
O problemie „Siedzenia w jaskini” jako programista (i nie tylko)
Co jeśli nie wiesz co pisać, na czym ćwiczyć? Zapraszam do następnego punktu w tym wpisie.
Na czym ćwiczyć? Co pisać w ramach nauki?
Po sieci przewija się pewna popularna lista z zadaniami. Wystarczy coś sobie wybrać (kliknij by widzieć ją powiększoną w nowym oknie).
Oprócz tego do ćwiczeń polecam zadania ze strony r/dailyprogrammer. Są one podzielone na różne poziomy trudności. Znajdziesz też przykładowe rozwiązania danych problemów.
Te materiały i zadania są po angielsku?
Bez angielskiego się nie obejdzie. Nim szybciej zaczniesz się do niego przyzwyczajać tym lepiej.
O nauce języków (z naciskiem na angielski) też przygotowałem kiedyś materiał:
Wspomniany GIT – system kontroli wersji
Jeśli nauczysz się pracować z gitem, to nigdy nie będziesz sobie wyobrażał pracy bez niego… dlaczego nie był to pierwszy punkt w tym wpisie? Uważam, że należy samodzielnie natknąć się na niektóre problemy, by docenić jakieś rozwiązanie. Chciałbyś wiedzieć jak krok po kroku program został rozbudowywany, albo kto dodał jakiś fragment kodu? Chciałbyś może wrócić do wersji kodu sprzed 2 tygodni, albo zrobić osobną „gałąź” kodu, by tylko coś wypróbować? Do tego właśnie jest git.
To potężne narzędzie, ale na początku może trochę przytłoczyć. Nie przejmuj się tym: na sam początek warto nauczyć się czym jest checkout, commit, push i pull. To wystarczy, by zacząć. Cała reszta przyjdzie później.
Do nauki polecam ten film:
Istnieje parę wizualnych narzędzie do gita. Osobiście polecam (i stosuję w pracy) Source Tree.
Spring? Android?
Jak już znasz podstawy, to możesz spróbować swoich sił w napisaniu czegoś prostego wykorzystują Springa. Później możesz to połączyć z prostą aplikacją na Androida.
Do podstaw Springa skorzystałbym z tego kursu Java Brains:
Do podstaw Androida polecam materiały Dereka Banasa:
W idealnym przypadku efekt końcowy powinien być taki, że Twoja aplikacja na Androida korzysta z tego, co napisałeś wcześniej w Springu. Nawet jak będzie to strasznie brzydkie (swoją drogą: zakopanie się we własnym kodzie pokaże Ci, dlaczego warto zainteresować się wzorcami i testami jednostkowymi), to jednak da Ci ogólny obraz tego, co można robić jako programista. To oczywiście tylko bardzo mały wycinek całości, ale gdybym dzisiaj zaczynał od zera i miał miał komuś polecić jakąś ścieżkę nauki, to byłoby to właśnie to.
W całym procesie nauki Springa lub Androida (albo jednego i drugiego) pamiętam o poprzednich zasadach. Nie ma być to ślepe przepisywanie przykładów, tylko pisanie programów (pisanie czegokolwiek, naprawdę nie znaczenia co piszesz i to, że to co piszesz już gdzieś istnieje). Kiedyś nagrałem film o tym, jaki projekt pisać typowo pod kątem nauki do pierwszego stażu, czy pracy – warto tam zerknąć w ramach uzupełnienia.
Narzędzia do budowania aplikacji: Gradle i Maven
Gdy to co piszesz trochę urośnie, zaczną pojawiać się problemy z różnymi zależnościami. Budowanie i konfigurowanie takiego projektu będzie męczące. W przypadku Javy rozwiązaniem jest tutaj parę popularnych narzędzi do budowania projektu. Obecnie warto uczyć się Gradle. Zastosowanie nadal ma Maven (chociaż coraz częściej jest wypierany przez Gradle). Możesz również jako ciekawostkę zerknąć sobie na coś takiego jak Ant (ale głównie jako ciekawostkę… współcześnie trudno spotkać projekty, które z niego korzystają: skup się na Gradle lub Maven).
By zrobić pierwsze kroki z Grandle możesz np. zerknąć ten tutorial ze strony Springa (w przypadku typowo Javy), a to pod kątem Androida. Podobny poradnik mają również dla Mavena.
Webserwisy i protokół HTTP
Wyżej wymieniony był już Quick Start do Spring Boot. W ramach uzupełnienia warto sobie zobaczyć pierwsze 8-9 filmów z tego kursu. Pomoże Ci trochę w uporządkowania podstawowej wiedzy na temat webserwisów i samego http.
Co dalej?
To co opisałem wyżej, to już parę dobrych miesięcy nauki. Ważne, by uczyć się regularnie – tego materiału jest NAPRAWDĘ DUŻO, ale nie jest to żadna wyższa matematyka. Gdy rozbijemy pojedyncze tematy, to jest to wszystko do ogarnięcia. Jest to dużo łatwych i trochę średnio trudnych tematów. Nim więcej z tej układanki weszło Ci już do głowy, to kolejne rzeczy będą trochę prosztsze.
Po tym wszystkim zacząłbym się informować:
- czym są testy jednostkowe (w przypadku Javy na początek zerknij czym jest np. JUnit i Mockito),
- pierwsze wzorce projektowe. Na początek polecam: strategię oraz obserwator. Później możesz zerknąć do książki Head First Design Patterns,
- czym jest Continuous Integration Server. Np. Jenkins: https://jenkins.io.
Wspomniany kurs ze zwrotem kosztów od Coders Lab – dla tych, którzy preferują naukę w grupie
Dla tych, którzy preferują naukę w grupie: szkoła programowania Coders Lab we współpracy z firmą Amelco organizują kurs Java od podstaw. Termin goni, bo zgłaszać można się tylko do 8 listopada! Oferta jest atrakcyjna, ponieważ dzięki współpracy z firmą Amelco osoba, która ukończy kurs otrzymuje zwrot 50% kosztów kursu.
Dodatkowo: każdy Absolwent, którego zatrudni Amelco, otrzyma 100% zwrotu kosztów kursu oraz 3-miesięczne, płatne szkolenie w Londynie z wynagrodzeniem 2000£ brutto na miesiąc + 5000zł przeznaczone na pokrycie kosztów mieszkania. Firma zwróci też koszt przelotu do Londynu. Po szkoleniu na Absolwenta czeka praca na cały etat w warszawskim biurze Amelco z atrakcyjnym wynagrodzeniem.
Po szczegóły zapraszam tutaj: https://www.amelco.coderslab.pl – przypominam, że zgłaszać można się do 8 listopada.
Więcej na temat mojego zdania o szkołach programowania opisałem w osobnym materiale:
Nadgodziny/Crunch – doświadczenia i opinie osób z branży IT Stworzenie GRY MOBILNEJ, która ZARABIA – (podcast) Blocky Farm, Jet Toast
Ze swojej strony dodałbym jeszcze zerknięcie czym jest SOLID w programowaniu.
Słuszna uwaga. 🙂
Gdzieś tam po drodze kiedy jest się już w stanie pisać programy w kilku klasach, dorzuciłbym zainteresowanie się Clean Codem:)
„Clean Code” jak najbardziej można dorzucić. Edytuję później post i do dopiszę. Dzięki:)
Bardzo ciekawy wpis, sporo wiedzy w bardzo zwięzłym artykule.
Ja mogę potwierdzić 2 kwestie, o których tu piszesz. Po pierwsze „siedzenie w jaskini” to poważny problem. Dotknął on i mnie. Niby znam już podstawy, ale jakoś nie mogę poza nie wyjść. Uczę się programowania, ale nie programuję. Próbuję znaleźć wyjście z tej sytuacji.
Druga sprawa, to bardzo ogranicza mnie znajomość angielskiego. Znam go słabo, zwłaszcza jeśli chodzi o słuchanie np. jakiś tutoriali z youtube. Wydaje mi się, że gdybym znał lepiej ang to nauka byłaby łatwiejsza. No ale nie poddaje się i przy okazji nauki programowania uczę się też ang. Zacząłem od książki po polsku, ale teraz już szukam materiałów tylko po ang.
Każdy kolejny materiał po angielsku będzie trochę bardziej jaśniejszy. Życzę wytrwałości!
Bardzo pomocny artykuł, dzięki 😀
A co z takimi rzeczami jak: UML, object oriented design, algorytmy (search, sort etc.), data structures – sets, maps, heaps, binary tree, database design (ERD) oraz jakies podstawy project management? Mam takie rzeczy na studiach (niektóre z tych przedmiotów trwają i po 2 semestry z 3 w ciagu roku) i powiem szczerze, że przebrnąć przez to muszę, przyjemności mi to nie sprawia tak jak kodowanie, rozumiem to ale nie wiem na ile jest to faktycznie potrzebne później w pracy i czy nie jest to tak, że i tak co będzie z tego potrzebne w pracy to się nauczę na bieżąco.
Że tak powiem jestem świeżo po studiach(a właściwie nadal w trakcie tylko, że na drugim stopniu) i zacząłem pól roku temu pracę. Te rzeczy o których napisałeś – warto o nich wiedzieć, bo czasem mogą się naprawdę przydać. Zdarzyło mi się robić kilka diagramów w UML, używanie struktur na porządku dziennym(fakt, że nie implementujesz ich, ale wiesz kiedy jakiej użyć, to samo z algorytmami)
No i przez takich jak Wy wszystko mi się pozmieniało :D.
Dzięki temu artykułowi dowiedziałem się o kursie CL/Amelco.
Dzięki Tweeterowi – w czas.
No i udało się.
Zawieszam studia i przyspieszam – w konkretnym kierunku.
Dzięki wielkie.
Witam, dopiero co zacząłem programować, chciałbym zostać android devem (na studiach mamy programowanie, ale w pythonie(też dopiero podstawy)) i szukając jakiegoś wzorca na ścieżkę rozwoju natknąłem się na ten artykuł. Zacząłem się już bawić Javą, ale znowuż na internecie się natknąłem na artykuł o Kotlinie, co o tym sądzisz? Uważasz, że totalny newbie powinien najpierw się rozwinąć pod kątem javy przez ten +-rok za pomocą wyżej opisanego patternu i potem próbować coś z Kotlinem, czy od razu bez żadnego doświadczenia rzucić się na głęboką wodę i próbować od początku uczyć się Kotlina? Z niecierpliwością czekam na odpowiedź.
Z góry dzięki wielkie!
Według mnie lepiej zacząć z samą Javą. Kotlin ewentualnie później.
Na prawdę świetny artykuł. Sam właśnie zacząłem naukę w programowaniu Javy i testowaniu oprogramowania. Na pewno wykorzystam rady! Dziękuje za bezinteresowną pomoc dla malutkich 🙂
A co do przykładów które podałes to są gdzieś do tego rozwiązania aby móc porównać swój kod z profesjonalnym kodem?
Chodzi mi oczywiście o te przykłady „Na czym ćwiczyć? Co pisać w ramach nauki?”
[…] Jeśli potrzebujesz tu rozwinięcia, to możesz zerknąć na wpis oraz video, na blogu Mateusza Kupilasa pt. Jak bym dzisiaj zaczynał z Javą od zera?. […]