Articles

Jak nauczyć się informatyki: 100-godzinna podróż developera

Dość długo zastanawiałem się: czy tylko znajomość podstaw informatyki pomaga stać się lepszym developerem? I czy może przynieść wartość deweloperowi?

Jeśli też zadajesz sobie te pytania, a nie chcesz inwestować czasu (jeszcze) w naukę informatyki, oto historia mojego doświadczenia. W tym artykule, odpowiem na następujące pytania:

  • Dlaczego warto uczyć się informatyki?
  • Jaki był mój plan nauki?
  • Jakich zasobów używałem?
  • Czy nauczyłem się czegoś użytecznego, co można przenieść do mojej codziennej pracy jako deweloper?

Zacząłem od tej fantastycznej listy zasobów: naucz się sam informatyki. Jest to w zasadzie przewodnik po tym, jak studiować informatykę jako inżynier oprogramowania, bez wydawania mnóstwa pieniędzy próbując dostać się na MIT.

Więc, dlaczego uczyć się informatyki samemu?

To proste, ale ważne pytanie: dlaczego mielibyśmy to robić w pierwszej kolejności?

Dla każdego projektu, który wymaga sporej dawki motywacji, staram się najpierw zdefiniować odpowiednie cele:

  1. Bycie w stanie nauczyć się nowego języka / nowej technologii szybciej dzięki znajomości pewnych podstawowych koncepcji, które można zastosować w każdym języku / technologii.
  2. Poprawa mojego zrozumienia niższych poziomów abstrakcji. Zrozumienie nieco lepiej „jak to działa pod maską” może poprawić moje zrozumienie, a tym samym moją efektywność w rozwiązywaniu błędów lub projektowaniu algorytmów.
  3. Poprawa moich umiejętności logicznego rozumowania, aby mój kod był bardziej logiczny.
  4. Wierzę, że zrozumienie podstawowych koncepcji jest kluczem do innowacji w dziedzinie rozwoju.
  5. Zrozumienie historii branży: dlaczego jesteśmy tam, gdzie jesteśmy teraz, co możemy zrobić, aby poprawić świat komputerów?

Komputerologia 101: plan studiów

Nie jestem zainteresowany próbą przeczytania każdej książki o informatyce. Powinno to przynajmniej zapewnić mi jakieś poczucie zrozumienia.

Dlatego mój plan nauki skupiał się na zachowaniu pamięci, zrozumieniu i zbudowaniu szybkiego odniesienia do tego, czego się nauczyłem, aby móc łatwo do tego wrócić.

  1. Studiowałem około 2 do 3 godzin każdego tygodnia, w zależności od moich priorytetów. Nie chciałem robić zbyt wiele i czuć się wypalony i zmęczony informatyką. Najważniejsze dla mnie było to, aby uczyć się regularnie, niezależnie od ilości czasu. Powinno to być coś, co sprawia mi przyjemność.
  2. Podczas nauki nowego materiału, pisałem na nim podsumowania w formie mindmap. Ma to dwie zalety: pisanie pomaga zapamiętać to, czego się nauczyłem i mogę łatwo przypomnieć sobie pewne kluczowe pojęcia, kiedy ich potrzebuję, w mgnieniu oka.
  3. Mój czas nauki jest podzielony na dwie kategorie:
    • Nowa nauka (nowy rozdział w książce, oglądanie nowego kursu wideo, wykonywanie przykładów i ćwiczeń)
    • To, co nazywam „przypominaniem sobie bazy wiedzy”. Jest to głównie robienie (więcej) ćwiczeń na temat nowego materiału, który przeczytałem/obejrzałem tydzień wcześniej, czytanie moich mindmap i próba przypomnienia sobie tego, co w nich napisałem.
  4. Jeśli chodzi o ćwiczenia, staram się nie poświęcać więcej niż 30min na każde z nich. Cel jest taki, aby zmagać się na tyle, aby zapamiętać koncepcję, ale nie za dużo, aby czuć się spalonym. To delikatna równowaga.
  5. Staram się powtórzyć niektóre ćwiczenia, których nie udało mi się zrobić za pierwszym razem, kilka dni (nawet tygodni) po różnych próbach, aby zobaczyć, czy moje zrozumienie się poprawiło.

Staram się stosować pewne zasady aktywnego uczenia się, wykonując jak najwięcej ćwiczeń i zadając sobie pytania podczas przeglądania moich map myśli.

Przeglądanie tego, czego się nauczyłem z tygodnia na tydzień jest naprawdę, naprawdę korzystne dla poprawy mojej pamięci i zrozumienia.

Co zrobiłem do tej pory

motywacja do nauki Matematyki Dyskretnej

Tutaj co dokładnie zrobiłem podczas tych (prawie) 100 godzin nauki informatyki, w porządku chronologicznym.

I. Programowanie (32 godz. 55m)

graph pomodoro robione w nadgodzinach część programistyczna
Pomodoro (25 min) robione w tygodniu dot. Część programistyczna

W artykule zatytułowanym „naucz się sam informatyki” określono, że powinienem postępować „mniej więcej” zgodnie z proponowaną przez nich kolejnością nauki, zaczynając od dziedziny programowania.

Źródło główne: Structure and Interpretation of Computer Programs (SICP)

Ta książka jest uważana przez wielu za biblię, którą każdy programista powinien przeczytać. Jest darmowa i możesz znaleźć najlepsze wersje epub i PDF tutaj.

Możesz znaleźć rozwiązania ćwiczeń tutaj.

Udało mi się zrobić prawie wszystkie ćwiczenia do momentu 1.2.5 Greatest Common Divisors.

Zasoby uzupełniające: Berkeley Videos

Wideo są dostępne tutaj. Notatki z kursu są tutaj. Jeśli szukasz przykładowych egzaminów z Berkeley, to są one tutaj.

Są one bardzo dobrym uzupełnieniem książki: koncepcje są wyjaśnione bez pytania o zbyt wiele o matematykę, w przeciwieństwie do książki. Jeśli chcesz studiować SICP, ale twoje matematyczne tło nie jest wystarczająco silne, po prostu podążaj za tym kursem. Moje notatki i ćwiczenia są tutaj.

Czego nauczyłem się z SICP do tej pory

  • Początek tej książki jest bardzo interesujący, aby naprawdę zrozumieć korzenie programowania funkcyjnego i rekurencji.
  • Definiuje wiele terminów, których programiści używają na co dzień, w bardzo precyzyjny sposób. Idealne, aby być jeszcze bardziej precyzyjnym podczas dyskusji technicznych.
  • Książka popchnęła moje umiejętności analityczne i rozwiązywania problemów z jej ćwiczeniami.

Co mogę wykorzystać w prawdziwym życiu?

Cała dyskusja o rekurencji w książce pomogła mi dość znacząco, aby łatwo je napisać. Jest to temat, z którym zawsze się trochę zmagałem. Teraz z łatwością mogę przejść przez każdy problem, który chcę rozwiązać za pomocą rekurencji.

Jakie trudności napotkałem?

Ta książka nie jest dla miłośników matematyki. Została napisana z myślą o studentach MIT, którzy mają już sporą wiedzę matematyczną. Bez tej wiedzy ćwiczenia mogą być dość trudne i frustrujące.

To było przyczyną innego problemu: spędziłem zbyt dużo czasu na ćwiczeniach. Mogłem rozwiązać większość z nich, ale zajęło mi to godziny w niektórych przypadkach.

Zdecydowałem, że nie będę spędzał więcej niż 30 minut na ćwiczeniach, aby utrzymać frustrację na niskim poziomie bez odrzucania ogromnych korzyści z ich wykonywania.

II. Matematyka Dyskretna (50 godzin)

graph pomodoro robione w nadgodzinach część programistyczna
Pomodoro (25min) robione w tygodniu dla Matematyki Dyskretnej

Im więcej czytałem SICP, tym bardziej ćwiczenia wydawały mi się trudne, zwłaszcza, że dotyczyły pewnych pojęć matematycznych, których nie znałem. Dlatego postanowiłem pójść dalej i zacząć studiować Mathematics przedmiot.

Zasoby główne: Matematyka dyskretna i jej zastosowania

Naucz się informatyki radzi przeczytać notatki z wykładów László Lovásza, swobodnie dostępne tutaj jako dokument ps. Dla tych, którzy nie wiedzą, co to jest dokument ps, przekonwertowałem go tutaj do PDF. Ja też nie wiedziałem.

Jednakże, wybrałem inne główne źródło wiedzy, najwyraźniej bardziej przyjazne dla początkujących: Discrete Mathematics and its Application autorstwa Kennetha H. Rosena. Jest to całkiem spora książka, dość niedroga w swoich wcześniejszych wydaniach.

W ciągu 50 godzin udało mi się skończyć pierwszy rozdział (logika propozycjonalna) i zaliczyć 54 ćwiczenia.

Zasób uzupełniający: MIT 6.042J matematyka dla informatyki, jesień 2010

Te filmy z MIT są bardziej zaawansowanymi kursami o matematyce dyskretnej. Ponownie, zakładają one, że wiesz już całkiem sporo z matematyki. Niemniej jednak, są one bardzo interesujące, nawet jeśli miałem trudności z ich śledzeniem.

W najgorszym wypadku przynajmniej dadzą Ci dobry wgląd w to, o co chodzi w Matematyce Dyskretnej.

Jeden nauczyciel (Tom Leighton) ma lepsze umiejętności nauczania niż inni. Jednak wszyscy oni posiadają bardzo głęboką wiedzę na temat swoich przedmiotów.

Czego się nauczyłem do tej pory

  • Książka nauczyła mnie podstaw logiki, bardzo dobrej umiejętności, którą warto posiadać jako programista. W końcu nasza praca opiera się na poprawnej logice.
  • Logika przyimkowa z kwantyfikatorami i regułami wnioskowania. W zasadzie jest to sposób na pisanie twierdzeń logicznych, sprawdzanie czy twierdzenia logiczne mają sens i udowadnianie ich wartości prawdy.
  • Podstawy teorii zbiorów i grafów, dzięki filmikom. Jest to bardzo interesujące i przydatne do wielu rzeczy: maszyny stanów, sieci…

Co mogę wykorzystać w prawdziwym życiu?

  • Tablice prawdy mogą być bardzo przydatne do uporządkowania złożonych deklaracji warunkowych lub do ich refaktoryzacji.
  • Ostatnio mogłem zastosować prawa DeMorgana, aby poprawić czytelność niektórych stwierdzeń warunkowych.
  • Wyrażanie zagmatwanych i krótkich specyfikacji za pomocą predykatów, spójników i dysjunkcji (język logiki propozycjonalnej) może pokazać sprzeczności i brakujące szczegóły. Może bardzo zwięźle i precyzyjnie podsumować złożone specyfikacje. Może być dobrym pomostem pomiędzy specyfikacją a samym kodem.

Jakie trudności napotkałem?

  • Zrozumienie jak napisać dowód matematyczny jest trudne, szczególnie gdy nikt nie może ci pomóc ani poprawić twojego dowodu.
  • Wciąż brakuje mi kilku podstaw z matematyki, szczególnie potrzebnych do filmów z MIT.

III. Powrót do podstaw matematyki (11 godz. 15)

graph pomodoro zrobione nadprogramowo część programistyczna
Pomodoro (25 min) robione w tygodniu na podstawy Matematyki

Po kilku innych (drobnych) problemach z moją wiedzą matematyczną z Matematyki Dyskretnej, postanowiłem wrócić do podstaw.

Inny ważny powód, który kierował moim wyborem: naprawdę lubiłem zajmować się matematyką. Bez tego nie kontynuowałbym studiów informatycznych.

Nie dajcie się zmylić: matematyka związana z informatyką jest inna niż ta, której uczyliście się (i być może nienawidziliście) w szkole. Radziłbym Ci spróbować.

W tym momencie zdecydowałem się studiować na przemian Matematykę Dyskretną i podstawy Matematyki.

Główne źródło: How to learn basic arithmetic fast

To video trwające 4 godziny jest naprawdę dobre, aby odświeżyć wiele rzeczy, od sum i iloczynu poprzez procenty, wykładniki, logarytmy… Obejmuje dużo ziemi bardzo szybko z wieloma ćwiczeniami.

Podane wskazówki są bardzo dobre, jak również, aby zrozumieć i rozwiązać podstawowe problemy szybko.

Możesz zobaczyć na youtube godzinny podgląd video. Jeśli ci się spodoba, możesz go kupić na Vimeo.

Czego się nauczyłem do tej pory

  • Moje umiejętności obliczeń umysłowych poprawiły się bardzo dobrze. Jeśli masz problemy z szybkim obliczaniem procentów lub nawet z wykonywaniem prostych mnożeń bez kalkulatora, ten kurs bardzo Ci pomoże.
  • Podstawy manipulacji ułamkami, wykładnikami, pierwiastkami kwadratowymi, logarytmami i tak dalej.

Co mogę wykorzystać w prawdziwym życiu?

  • Możliwość wykonywania obliczeń umysłowych jest bardzo pomocna w wielu rzeczach w prawdziwym życiu. Obliczanie szybkich promocji, przybliżony koszt pełnego koszyka na zakupy…
  • Mogę zastosować całą tę wiedzę podczas studiowania informatyki.

Jakie trudności napotkałem?

Po studiowaniu SICP i Matematyki Dyskretnej, było bardzo relaksujące, aby w końcu zrozumieć wszystko przy odrobinie pracy. Nie miałem wielu trudności.

Moje rady dla początkujących w informatyce

podstawy-matematyki-ilustracja

Gdybym mógł wrócić do początku tej przygody, studiowałbym poszczególne przedmioty w takiej kolejności:

  • I. Podstawy matematyki
  • II. Matematyka dyskretna
  • III. SICP

Studiowałbym równolegle Podstawy i Matematykę Dyskretną, a następnie przeszedł na SICP, próbując po drodze zdobyć wiedzę z zakresu matematyki, której wciąż mi brakowało.

Będę kontynuował naukę podstaw Matematyki i Matematyki Dyskretnej przez co najmniej 150 godzin:

  • Trochę wiedzy, którą już posiadam, pomogło mi w codziennym życiu dewelopera.
  • Czuję (i czytam), że jest to podstawa dla każdej innej dziedziny informatyki.
  • Cieszę się, że ją studiuję! Ponownie, jest to niezbędny składnik, aby pozostać zmotywowanym.

W skrócie: bardzo dobre doświadczenie, leżące u podstaw wielu moich słabości, ale także uczące mnie solidnych podstaw, których mi brakowało.

Pamiętaj jednak: jeśli oczekujesz, że będziesz super czarodziejem programistą studiując informatykę, możesz być rozczarowany. Informatyka jest trudna do studiowania. Ma silne strony teoretyczne i nawet jeśli już znalazłem jakieś zastosowanie w mojej codziennej pracy, to nie jest to wcale porywające.

Przejście przez tę podróż wymaga pracy, cierpliwości i poświęcenia. Posiadanie jasnych celów, konkretnego planu nauki i cieszenie się procesem są obowiązkowe.

Ten artykuł został napisany przez Matthieu Cneude i został pierwotnie opublikowany na The Valuable Dev, blogu skupiającym się na ważnych i ponadczasowych koncepcjach w rozwoju oprogramowania. Możesz przeczytać ten fragment tutaj.

Opublikowany 1 października 2020 – 12:46 UTC

Dodaj komentarz

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