steker Sistematičan pristup učenja C++a:
1. Prođi kroz drugo izdanje A Tour of C++ od Bjarnea.
- cilj je s ovim korakom dobiti širi pogled na C++a, odnosno više-manje sintkasu tako da možeš što prije početi kuckati
2. Kupi Demistificirani C++ (zadnje, 5. izdanje; 15. i 16. poglavlje možeš preskočit. isto poglavlje s mutlithreadingom možeš preskočit) i kreni to čitat. Paralelno uz čitanje počni raditi na nekom mini projektu (3k - 5k linija koda; Vidi prijedloge projekata dolje) . Znat ćeš osnovnu sintaksu iz koraka 1. , a isto tako će te natjerati da naučiš malo CMake-a. Unatoč tome što knjiga ima 1000 stranica, dosta se lako čita. Možeš to progutat u jednom semestru ko od šale.
Digresija: vjerujem da je setupiranje programming environmenta ključno odraditi na početku. Kasnije je jednostavno sve lakše. Kod C++ za početi ti je dovoljno imati setupirani Intellisense (naravno), nekakav autoformater (naravno) i CMake - i na konju si. Isto tako, dokumentacija. Bitna stvar. Doxygen pogledaj.
3. U jednom trenutku ćeš trebati počet gledati konferencije, posebno CppCon. I to posebno serijal predavanja “Back to Basics.”
Za prvi mini projekt preporučam izgradnju biblioteke za matrični račun. Pogledaj si prva dva predavanja iz APRa. Kreni od APR 20200928 01 2 i pa sve do APR 20201012 03 1 (neuključujući) - namjerno sam stavio da je prvi video uključen, a zadnji video isključen (tako su dizajnirane granice u Cppu 🙂 ). Moraš, basically, implementirati prvi labos/dz kolegija.
Zašto smatram je baš taj labos, odnosno mini projekt, dobar? Više je razloga, a prvenstveni je da sadrži sve fundamente s kojima bi jedan C++ developer trebao baratati. To uključuje:
- regularne tipove (tip/klasa Matrix koju implementiraš treba se ponašati kao int) vrlo bitna stvar kod C++a
- imat ćeš priliku baratati s smart pointerima (alocirana memorija u kojoj ćeš spremati podatke matrice u stvari bi trebala biti handlana pomoću smart pointera; alocirat ćeš niz veličine r * s, gdje je r broj redaka, a s broj stupaca)
- imat ćeš priliku definirati operatore (tzv. operator overloading): +, -, *, -=, += , …
- praktično ćeš se upoznati s https://en.cppreference.com/w/cpp/language/rule_of_three
- imat ćeš priliku napisati jednostavne unit testove za operacije (inverz, determinanta, općenite operacije)
- možda sam nešto propustio, ali vjerujem da sam više-manje argumentirao svoj stav
Nakon što si napravio gornji projekt, jebeno. (Obavezno koristi git za to i prijavi se na github. Repozitorij mora biti javan. ) Sada već znaš što i kako. Pročitaj do kraja demistificirani c++ da si to skineš s dnevnog reda. Ponovno se vratiš na “Back to Basics.”
Čestitam kolega, upravo znate i razumijete više C++a od 99% FERovaca.
U međuvremenu ćeš otkriti da imaš još nekoliko knjiga koje treba pročitati, a prvenstveno mislim na C++ Concurrency in Action, 2nd Edition (i sam bi trebao to pročitat, ali sam skrenuo u python radi MLa/RLa). Postoji još tu i Templates, 2nd Edition.
Nemoj previše zabrazdit u učenje jezika. Bitno je da dobiješ dobru podlogu, a to ćeš dobiti s Demistificiranim C++om + Back to Basics.
Za sljedeće projekte, ako te zanima game dev, a i ako te ne zanima, možeš dosta dobro algoritme naučiti kroz programiranje 2D igre, pogledaj si SFML. Čista dokumentacija i uredan dizajn.