Jak uczyć się programować?

0

Hej

Jak w tytule, jak uczyć się programować? Ile potrzeba wiedzy na start?

Rozpocząłem studia informatyczne i poprzeglądałem trochę różne języki, jest dużo podobieństw w tym co robią.

Znalazłem taką listę projektów: projekty

No i jak to teraz zrobić, żeby możliwie najlepiej, najwięcej i najszybciej się nauczyć? Na studiach mam C i chcę się trzymać C w tej chwili. Jedyne co przychodzi mi do głowy to na szybko przerobić tą składnię C, wybrać jakiś projekt i spróbować go napisać. Tylko jak? No bo nie bardzo wiem jak działa taka todo lista. Mam googlować za czyimś kodem i próbować go przepisywać, modyfikować, dodawać własne funkcjonalności? Czy jak to wyglądało w Waszym przypadku? Mam też pomysł, żeby zrobić sobie generator do treningów crossfit. Mogę wziąć jakikolwiek generator do czegokolwiek i napisać go w nieco inny sposób, np.na podstawie chain markov sentence generator napisać crossfit generator.

Czy w ten sposób nauczę się programowania czy to bezmyślne kopiowanie? Chciałbym progresować.

Kolega polecił mi przerobić pierwsze pięć części Harvard CS50 na początek, to jest C, arrays, algorithms, memory i data structures, to wystarczy, żeby zacząć pisać projekty?

Też jak już na szybko przerobię te podsatwy z CS50 i zacznę robić projekty to doczytywać jakieś książki o języku lub standardy żeby go zgłębić czy jak to robicicie?

2
ryan11 napisał(a):

No i jak to teraz zrobić, żeby możliwie najlepiej, najwięcej i najszybciej się nauczyć?

Im więcej umiesz z programowania, tym szybciej się uczysz. Więc, żeby móc jak najszybciej się nauczyć, musisz się najpierw sporo nauczyć z tego programowania, żeby potem wychwytywać różnego rodzaju schematy i lecieć z nauką w przyśpieszonym tempie.

Czyli niby się da, ale nie na etapie, jak dopiero zaczynasz.

Myślę, że dobrze ilustruje to ten komiks:
https://www.reddit.com/r/ProgrammerHumor/comments/7eyrbx/how_to_learn_programming_in_21_days/

Chciałbym progresować.

To możesz gdzieś zapisywać swoje notatki, to ułatwia naukę, bo czasami coś gdzieś przeczytasz i nie wiesz gdzie. A notatki jednak pomagają, żeby sobie pewne rzeczy przypomnieć i żeby wiedza nie przepadła. Tak samo możesz swoje refleksje(coś, do czego sam doszedłeś) pisać, wtedy też masz pod ręką.

Możesz też bloga pisać, wtedy dodatkowo będziesz musiał ułożyć tę wiedzę tak, żeby coś innym przekazać. Inni też mogą ci skomentować, dać jakiś feedback itp.

1

Dobrym sposobem na naukę teorii i nie zapominanie jej jest robienie sobie fiszek na Anki, ja tak robię i przeglądam je w wolnych chwilach jak jade autem/stoje w kolekcje zamiast scrollować social media :D

2

Fiszek na anki oj tak byczku +1
Tutaj p. Banas tlumaczy jak to robic dobrze:

1

@veneficus @p_agon i co tam wrzucacie? tak z ciekawosci, bo najczej konczy sie to u mnie na wrzucaniu jakis bezuzytecznych rzeczy...

2

Oj byczqi ale Anki to tylko mała część zacnych metod
Tu pan Jonathan wszytko tłumaczy:
https://www.udemy.com/course/become-a-superlearner-2-speed-reading-memory-accelerated-learning/

1

Teorii nigdy nie należy wkuwać teorii na blachę, trzeba raczej zrozumieć o co w niej chodzi i zrozumieć po co została wymyślona. Także Anki poleciłbym jedynie do nauki języków obcych.

Można wkuć na pamięć system binarny i związane z nim algosy, ale jak się zrozumie ideę to będzie prosto korzystać z dowolnego systemu o podstawie P. Ba nawet takie cuda jak system trynarny (!= trójkowy) oparty na -1, 0 i 1 nie będzie niczym strasznym.

Jak się uczyć programowania? Najprościej w Polsce iść na studia informatyczny i nie marnować na nich czasu - to jest robić projekty wychodzące za to czego oczekuje uczelnia, udzielać się w open source (choć początki mogą być trudne, najlepiej na jakimś nowym języku). Potem pierwsza roboto, potem jeszcze jakieś 10 lat i boom umiesz programować ;)

Słynny esej Norviga: https://norvig.com/21-days.html

1
ryan11 napisał(a):

Hej

Na studiach mam C i chcę się trzymać C w tej chwili.

...

Kolega polecił mi przerobić pierwsze pięć części Harvard CS50 na początek, to jest C, arrays, algorithms, memory i data structures, to wystarczy, żeby zacząć pisać projekty?

C jest językiem niskopoziomowym, bardzo rozgadanym (pominę, że strasznie podatnym na błędy tzw UB)
Skrajnie trudno ci będzie na tym etapie uzyskać autentycznie użyteczne projekty typu "todo lista". Torvaldsem szybko nie zostaniesz.

1

W naszych czasach to co jest do czegoś przydatne, już dawno zostało napisane, trzeba szukać odpowiedniego kodu, przeglądać i próbować zrozumieć. Pierwszy język do nauczenia to Angielski, chociaż google już potrafi tłumaczyć zdaniami, więc tłumaczenie z Ang. na Pl jest łatwiejsze i sprowadza się do odczytania poprawnego kontekstu. Na topie jest język c/c++ - jeśli chcesz pracować. Jeśli pasjonuje ciebie zagadnienie programowania, to trzeba zacząć od jak najbardziej logicznego języka (Pascal, ADA, Java, C#, PHP), potem C/C++, potem Assembler. Jest takie powiedzenie - "myśl w języku Pascal, program pisz w C, aktualizacje pisz w Assemblerze".

0

Generalnie nie rzucaj się na C. Proponuję zacząć od C# i WinForms. Jest tak:
C jest językiem niskopoziomowym. Baaaaardzo dużo musisz się nauczyć i ogarnąć, żeby zrozumieć jak działają pewne mechanizmy. Będziesz miał dzięki temu szeroką wiedzę, ale to ma się nijak do szybkiej nauki. No i w C też ciężko będzie znaleźć Ci pracę. Poza tym C nie ma ŻADNYCH wbudowanych mechanizmów do tworzenia aplikacji okienkowych, a z tego co rozumiem takie właśnie chcesz tworzyć. Tutaj musiałbyś tworzyć okienka bezpośrednio w WinAPI (dodatkowo spoooro nauki). Generalnie będziesz dużo zastanawiał się nad tym jak coś ogarnąć w tym języku (chociażby stringa) niż nad tym jak napisać program.

C# - język wysokiego poziomu. Tu masz mało zastanawiania się jak coś ogarnąć w języku, bo jest proste, intuicyjne, a w necie jest mnóstwo materiałów. Czyli skupiasz się głównie na tworzeniu programu, a nie na pierdołach. Poza tym w C# masz kilka możliwości tworzenia okienek. Ja zaproponowałem WinForms, bo na początek jest najprostsze do ogarnięcia. Po prostu masz edytor wizualny, na którym umieszczasz komponenty przez przeciąganie z listy. Prościej się nie da.

Co powinna robić aplikacja TODO?

  • Dodanie elementu "do zrobienia" - taki element powinien mieć tytuł, opis, ewentualnie datę wykonania, a także jakąś flagę, która Ci powie, czy zadanie zostało wykonane, czy nie. Np:
    Tytuł: "Kupić prezenty"
    Opis: "Trzeba kupić prezenty na mikołajki dla siostry, brata, dziewczyny, żony"
    Data wykonania: 5-06-2021
    Wykonano: NIE

Aplikacja powinna być w stanie wyświetlić listę takich rekordów, np:

Tytuł | Data | Zrobione
---------------- | -------------------
Kupić prezenty | 5-06-2021 | X
Dentysta | 2-12-2021 | V

Teraz np. po kliknięciu na dany element dwukrotnie, powinno otworzyć się okienko do modyfikacji - to samo jak przy tworzeniu elementu. Tylko tym razem nie tworzy, a modyfikuje.
Możesz dodać guzik w stylu - "Oznacz jako zrobione", który będzie aktywny tylko wtedy, gdy zaznaczony element na liście nie jest zrobiony. Oczywiście kliknięcie tego guzika spowoduje modyfikację zaznaczonego elementu - status na zrobiony.

No i jeszcze możesz dorobić filtrowanie danych, a także ich usuwanie.

Tak w skrócie powinna wyglądać taka aplikacja.

Ale na Twoim miejscu zacząłbym od napisania Notatnika. W C# jest to naprawdę proste, ale zrozumiesz jak działa designer, jak pisać zły kod itd. Dopiero potem ruszyłbym ToDoList, bo tutaj w grę wchodzi jakaś baza danych (czy to tekstowy plik CSV, czy faktyczna baza).

Dlaczego napisałem, że nauczysz się pisać zły kod? Bo nie nauczysz się od razu pisać dobrego kodu. To wymaga czasu i doświadczenia. Tak jak z poezją. Musisz napisać mnóstwo kiepskich wierszy, żeby napisać w końcu dobry.

Więc zacznij od Notatnika (niech wygląda tak samo jak Windowsowy Notepad i robi przynajmniej to samo).

No i najważniejsze - pamiętaj o takich zasadach jak

  • DRY (Don't repeat yourself) - nie powtarzaj fragmentów kodu; jeśli jakiś kod (więcej niż 2, 3 linijki) powtarza Ci się kilka razy w kodzie, to prawdopodobnie łamiesz zasadę DRY
  • KISS - Keep it simple stupid - czyli pisz najprościej jak się da. Chociaż na tym etapie raczej nie będziesz kombinował
  • YAGNI - You ain't gonna need it - nie pisz czegoś na wyrost - czegoś, czego nie potrzebujesz a wydaje Ci się: "być może użyję tego kiedyś"
  • SRP - Single Responsibility Principle - jedna metoda ma być odpowiedzialna za wykonanie jednej operacji; to jest czasem trudne do ogarnięcia, ale przykład: metoda, która zapisuje plik na dysku ma TYLKO zapisać ten plik, a nie otwierać okienko do wyboru pliku i zapisywać. Rozumiesz?

No i jeszcze:

  • nazywaj klasy, zmienne i metody po angielsku
  • staraj się, żeby Twoje metody nie były dłuższe niż te mityczne 20 linijek, jeśli są dłuższe, prawdopodobnie łamiesz zasadę SRP

To być może wygląda skomplikowanie i być może na tym poziomie nie jest zbyt istotne, ale staraj się na to zwracać uwagę.

Przede wszystkim:
Notatnik
Lista ToDo
Odtwarzacz muzyki.

0
SQra1975 napisał(a):

W naszych czasach to co jest do czegoś przydatne, już dawno zostało napisane, trzeba szukać odpowiedniego kodu, przeglądać i próbować zrozumieć.

Zgodzę się tylko częściowo. Tj. ogólne algorytmy niezależne od języka (np. "jak rozpoznać twarz", "stworzyć silnik 3d", "napisać fizz-buzz") faktycznie są dobrze pokryte przez kolektywną wiedzę.

Problemy zaczynają się wtedy, kiedy:

  • szukamy czegoś o konkretnej technologii: jak użyć biblioteki X do zrobienia Y, gdzie albo X jest mało popularną technologią, albo Y mało popularnym zastosowaniem (albo i to i to). Wtedy źródeł jest mało i trzeba samemu kminić. Np. jakby ktoś chciał zintegrować Google Maps w Algol 68, to pewnie nie miałby wielu konkretnych przykładów.
  • chcemy napisać, coś lepiej niż inni przed nami albo mamy specyficzny usecase. Co z tego, że są przykłady, jak coś napisać, jak istniejące rozwiązania mogą być nie wystarczające. Postęp w programowaniu ciągle się dokonuje. Być może istniejące algorytmy są niedoskonałe, być może możemy to zrobić lepiej albo połączyć kilka technik w jakieś unikalne zestawienie itp. Nie wszystko da się rozwiązać za pomocą metody szukać odpowiedniego kodu, przeglądać i próbować zrozumieć., bo często ten "odpowiedni kod" trzeba samemu sobie dopiero wymyślić. W szczególności zbytnie bazowanie się na istniejących przykładach może być antyedukacyjne, bo łatwo nasiąknąć złymi praktykami, których pełno w istniejących rozwiązaniach (a ktoś początkujący nie będzie umiał rozpoznać brzydkiego kodu od ładnego).

1 użytkowników online, w tym zalogowanych: 0, gości: 1