C++ dla żółtodziobów. Jak się uczyć, czego unikać
C++ stworzył duński informatyk, Bjarne Stroustrup w latach 80-tych - jako obiektowe rozszerzenie języka C. Od lat C++ należy do najpopularniejszych języków. Wg. naszego Badania społeczności IT 2020 dla 51% programistów embedded jest to główny język programowania, a 25% profesjonalnych programistów zaczynało właśnie z tym językiem.
Pozostaje bezkonkurencyjny, jeśli chodzi o wysokobudżetowe gry komputerowe, oprogramowanie wbudowane, programowanie systemowe. W oparciu o język C++ powstał Amazon, a także systemy operacyjne Windows.
Wersje C++
Zanim przejdziemy dalej trzeba wspomnieć o tym, że w ostatniej dekadzie C++ rozwinął się jako język programowania. Wydano 3 wersje, które zmieniły sposób, w jaki programuje się w C++.
- C++11 - wydanie 8 lat po poprzedniej wersji. Wprowadziła wyrażenia lambda, ulepszenia w implentacji sprytnych wskaźników, możliwość automatycznego przypisania typu, czy zastąpienie
NULL
przeznullptr
. Zmian było naprawdę sporo, również w biblitece standardowej, gdzie pojawiły się m.in. nowe struktury danych (jak krotki), klasastd::thread
ułatwiająca obsługę wątków, szablon funkcjistd::async
, która umożliwia asynchroniczne wywołania. - C++14 - rozbudowało możliwość dedukcji typów, o użycie tej funkcji języka również w wyrażeniach lambda czy typach zwracanych.
- C++17 - dalsze rozszerzenie dedukcji typów, dodanie możliwości użycia if i lambd w konstrukcji constexpr (czyli takiej, której wartość zostaje określona w czasie kompilacji. W bibliotece standardowej pojawił się np.
std::optional
, czyli szablon klasy, która zawiera opcjonalną wartość, czystd::filesystem
, czyli zunifikowany sposób obsługi systemu plików.
To oczywiście nie są wszystkie nowości w każdej z wersji i jest ich znacznie więcej. Dobre podsumowanie na ten temat znajdziecie na liście "Modern C++ Features". Dodatkowo w tym roku powinniśmy się doczekać wydania C++20, które wprowadzi m.in. współprogramy i moduły.
Może to wyglądać przerażająco, ale pokazuje, że C++ ciągle się rozwija, z czego trzeba sobie zdawać sprawę przy nauce. Co prawda podstawy C++ pozostają takie same, jak kilkanaście lat temu, jednak z profesjonalnym developmencie używa się sporo funkcji dostępnych dopiero we współczesnych wersjach. Dlatego obecnie nie ma sensu zaczynać nauki od C++ starszego niż wersja 11.
Dalej zajmiemy się kwestią materiałów edukacyjnych i podpowiemy, z czego podczas nauki korzystać, a czego unikać. Zacznijmy... od końca.
Efektywna nauka C++ - czego unikać?
Na naukę można poświęcić wiele czasu, a i tak zdobyć niewiele wiedzy. Wszystko dlatego, że skuteczne uczenie się jest sztuką.
Czego unikać, aby szybko opanować podstawy C++? Na pewno nie warto ograniczać się jedynie do książek. Oczywiście polecamy czytanie i materiały drukowane, ale warto zdawać sobie sprawę, że dość szybko się tracą na aktualności. Przykładem jest tu niezwykle popularna w Polsce książka "Symfonia C++", która została wydana ostatni raz 10 lat temu. Od tego czasu pojawiły się wprowadzające wiele zmian kolejne wersje języka C++11, C++14, C++17 (o których autor, Jerzy Grębosz napisał kolejne książki) Jeśli już wybieracie książki, sprawdźcie opinie i recenzje. Nie warto marnować czasu i pieniędzy na słabe tytuły.
Częstym błędem jest ograniczanie się tylko do polskojęzycznych serwisów internetowych i materiałów. Najwięcej wiedzy, a do tego najświeższej, znaleźć można w anglojęzycznym Internecie. Im szybciej przyzwyczaicie się do używania tego języka, tym lepiej. Bez angielskiego ani rusz.
W nauce programowania nie chodzi o to, aby uczyć się metodą pamięciową. Ważna jest umiejętność wyszukiwania wiedzy, studiowania dokumentacji i próba samodzielnego rozwiązywania problemów. Istotne jest rozumienie, a nie deklamowanie oklepanych formułek. Dlatego warto czytanie przeplatać pisaniem kodu, dużą ilością kodu.
A teraz pytanie: Gdzie szukać wiedzy?
Kursy C++
Internet to oczywiście kopalnia wiedzy i najlepsze źródło informacji dla programisty. W sieci bez problemu znajdziecie kursy C++ na różnym poziomie. Wśród nich nie brakuje tutoriali w różnej formie (tekst, wideo). Oto nasze propozycje:
- Learn How to Program with C++ - bardzo dobry, ale płatny, kurs po angielsku (C++11);
- Cpp0x – zbiór bardzo dobrych, polskich, bezpłatnych kursów na różnym poziomie (C++11);
- Kurs C++ od zera do bohatera – ciekawy, polski kurs, za który trzeba zapłacić.
Książki
Pomimo ograniczeń źródeł drukowanych, nie należy całkowicie z nich rezygnować, bo są dobrym wsparciem.
- C++ Primer Plus– bardzo dobrze napisany podręcznik Stephena Prata, do którego warto często zaglądać (C++11)
- Skuteczny nowoczesny C++ - dobre wsparcie w poznawaniu najnowszych standardów języka programowania (C++11 i C++14);
- C++ Primer- nie, to nie powtórzenie pierwszej pozycji z listy. To piąte wydanie książki Stanleya Lippmana, która jest również często polecana przez programistów (C++11)
- Algorytmy bez tajemnic– przy okazji nauki programowania, warto wkroczyć w świat algorytmów (nie jest to książka bezpośrednio powiązana z C++);
- Czysty kod- z tej książki można dowiedzieć się m.in. jak pisać czysty kod o dobrej strukturze, a dobrych nawyków warto nabierać od samego początku przygody z programowaniem (nie jest to książka bezpośrednio związana w C++)
Zadania online
Prawdziwa nauka programowania to samodzielne zmaganie się z różnymi programistycznymi wyzwaniami, a nie bezmyślne kopiowanie kodu. Takie wyzwania znajdziemy bez problemu w Internecie.
- HackerRank– bardzo popularny serwis (ponad 2 mln użytkowników), gdzie warto sprawdzać swoje umiejętności w praktyce;
- Sphere Online Judge– tym razem serwis w języku polskim, gdzie można znaleźć wyzwania o różnym poziomie trudności;
- Code Chef– kolejne miejsce, gdzie można sprawdzić swoje umiejętności, dużo konkursów i zadań.
- Leetcode - duży zbiór problemów do rozwiązania i przećwiczyć w praktyce pisanie kodu w C++ (i nie tylko)
Zasoby internetowe
W sieci jest mnóstwo materiałów na temat C++. Można przebierać w stronach internetowych i społecznościach, które dotykają tematyki powiązanej z językiem. Oto kilka naszych propozycji:
- C++ Patterns - świetna strona, na której prezentowane są częste problemy wraz z konkretnymi rozwiązaniami. Przykład? Sortowanie elementów czy zamiana dwóch wartości. Znajdują się tam też przykłady implementacji niektórych wzorców projektowych.
- Simplify C++ - blog zachęcający do kodowania w C++ w jak najprostszy sposób, przy okazji zawiera znakomite omówienie kolejnych feature’ów języka.
- Standard C++ Foundation - strona komitetu pracującego nad C++. To swego rodzaju centrum życia społeczności, gdzie znajdziesz artykuły, newsy i informacje o eventach dotyczących języka.
- C++ na Reddicie - bardzo przydatny subreddit do śledzenia nowości i ciekawych artykułów o C++
- Pytania na Reddicie - subreddit służący do zadawania pytań. Pozwala na zadawanie pytań bardziej konkretnych niż np. StackOverflow.
Podsumowanie
Na koniec małe przypomnienie: programista nigdy nie przestaje się uczyć. Jeśli zamierzacie na poważnie zająć się kodowaniem, oswójcie się z myślą o nieustannym rozwijaniu swoich umiejętności. Mamy nadzieję, że powyższe materiały i rady przydadzą się Wam w tym.