Chciałem nauczyć się C ++ na jakiś czas i wziąłem programowanie komputerowe AP w liceum (w czasach, gdy był to C ++, a nie Java). Lubię C i po prostu nie znalazłem czasu na naukę C ++, albo po prostu powrócę do C #, gdzie jestem znacznie bardziej produktywny.
Moje pytanie brzmi: biorąc pod uwagę, że C ++ '11 zostało zatwierdzone (choć wiem, że nie jest w pełni wdrożone), czy to zmienia sposób, w jaki powinienem podejść do nauki C ++? Posiadam C ++: The Complete Reference autorstwa Herb Schildt, który pochodzi z 1998 roku. Czy nowo zatwierdzony standard sprawia, że uczenie się z takich książek jest mniej ważne niż niektóre nowsze samouczki / książki zawierające elementy ze standardu? Czy korzystanie ze starszych książek przynosi jakieś korzyści?
Odpowiedzi:
Absolutnie. W dzisiejszych czasach trzy rzeczy, które zwykle znajdują się w lekcji 2, powinny poruszać się znacznie, znacznie później:
Te rzeczy, które zwykle znajdują się w lekcji 99, powinny poruszać się znacznie wcześniej
Surowy wskaźnik Evey powinien zostać natychmiast przekazany do inteligentnego opakowania wskaźnika (zacznę od udostępnionego, a później uważam go za wyjątkowy, ponieważ wymaga wyjaśnienia referencji std :: move i rvalue). Dzięki temu nauka języka C ++ będzie przypominać naukę języka Java lub C #, w którym uczysz się biblioteki w tym samym czasie co język. Zabierze też wiele pracy z pamięcią i sprawi, że ludzie będą mniej zaniepokojeni gotchami.
Pracowałbym również nad lambdami w obrazie, gdy po raz pierwszy chcieliśmy iterować kolekcję i zrobić coś z każdym elementem.
Uwaga: Piszę teraz kurs C ++ dla Pluralsight i używam tego podejścia. Ostatnim modułem jest „zrozumienie kodu innych ludzi” i tutaj umieszczę mylące rzeczy, takie jak ciągi char *, ręczne zarządzanie pamięcią, arytmetyka wskaźników i tak dalej.
Aktualizacja: kilka osób zapytało, dlaczego istnienie C ++ 0x inspiruje do nauczania rzeczy, których można by nauczyć z C ++ 03. Myślę, że to wiele rzeczy:
>>
poprawnie eliminuje gotcha, która byłaby przy deklarowaniu niektórych szablonów szablonówZ mojego punktu widzenia mogliśmy zmienić pewne rzeczy w sposobie nauczania C ++ jakiś czas temu, ale niektórzy z nas powstrzymywali się, ponieważ nadal potrzebowaliśmy starej szkoły na wypadek awarii lub ponieważ nauczanie jej wymagało dużo tajemnej wiedzy.
źródło
std::for_each()
będzie znacznie bardziej popularna niż kiedyś,auto
będzie bardzo ważna, a nowa składnia deklaracji funkcji (w połączeniu zdecltype
) będzie często używana w kodzie szablonu. Są to rzeczy, których nie uczy obecna książka C ++. Ale tak, ogólnie zgadzam się z tobą (+1
). Kiedy zacząłem prowadzić kursy C ++, zacząłem od Accelerated C ++ i chociaż mój kurs zaczął coraz bardziej się od niego odchylać, nadal jest zgodny z podstawową zasadą.Prawie tak. Prostym faktem jest to, że w C ++ 98 i 03 wiele dobrych praktyk było zasadniczo bezużytecznych z powodu niskiej jakości obsługi języka np. W programowaniu funkcjonalnym. Teraz, gdy lambdy istnieją i działają, ludzie akceptują interfejsy funkcjonalne o wiele lepiej niż kiedyś, a ogólne programowanie jest jeszcze silniejsze niż wcześniej.
W 1998 r. Ludzie dopiero zaczynali odkrywać, jak pisać wysokiej jakości, bezpieczny i szybki kod za pomocą C ++, a dużo kodu brzmiało „C było klasami”. W C ++ 11 jest bardzo różna - idiomy takie jak kopiowanie i zamiana oraz Reguła Trzech (obecnie Pięć) są dobrze znane i zdefiniowane, a wiele innych rodzajów zarządzania zasobami stało się Standardowymi, takimi jak
shared_ptr
iunique_ptr
tam, gdzie poprzednie Normy po prostu je opuściły jak rozwarte dziury.Możesz zobaczyć to pytanie, aby uzyskać doskonałą listę materiałów referencyjnych w C ++.
źródło
+1
ode mnie.Nie znam konkretnej książki, o której wspominasz. Ale ogólnie można powiedzieć, że wszystkie podstawowe informacje o składni C ++, typach danych i OOP są nadal aktualne. To samo powinno dotyczyć bibliotek STL wymienionych w większości książek dla początkujących.
Chociaż książka tak stara, jak z 1998 roku mogła przegapić kilka aktualizacji i zmian w stylu programowania C ++, które gromadziły się w społeczności przez lata. Poszukałbym nieco więcej aktualnych zasobów. Jest więcej niż wystarczająca liczba bezpłatnych samouczków online i dokumentów, które powinny zapewnić dobry początek. Niektóre z nich mogą nawet wspomnieć o C ++ 0x.
C ++ 0x na pewno wiele zmieni w kwestii tego, jak programiści widzą i używają języka w przyszłości. Miałoby to jednak wpływ na bardziej złożone projekty, w których nowe funkcje zaczynają mieć sens. Dla początkującego nie powinno to mieć znaczenia i możesz skoncentrować się na opanowaniu istniejących koncepcji, to już wystarczy, aby się uczyć. Na przykład większość książek dla początkujących nie zagłębia się w szablony, więc nowe szablony variadic nie są już tym, co musisz wiedzieć.
Może rzucisz okiem na listę zmian . Przynajmniej kilka koncepcji, takich jak zakres oparty na pętlach , najprawdopodobniej pojawi się w nowych samouczkach nawet dla początkujących. Warto więc rzucić okiem.
źródło
cprogramming.com
.Oczywiście, jeśli chodzi o wszystko, co związane z technologią, być na bieżąco z najnowszymi materiałami jest zawsze sprytnym posunięciem, jednak zmiany wprowadzone w C ++ 11 nie mają na celu wstrząsania łodzią. Jeśli jesteś nowy w C ++ (lub ogólnie programowaniu), nie martwię się o to.
Dodatkowo, jeśli jesteś profesjonalnym programistą, możesz założyć się, że będziesz pracował nad kodem innej osoby w przyszłości, więc zawsze warto zrozumieć sposób działania rzeczy, nawet jeśli jest to przestarzała technika w praktyce.
źródło
auto
i wykonywanie funkcji asynchronicznych może zrobić coś innego niż „wstrząsnąć łodzią”?