Absolutnie. W dzisiejszych czasach trzy rzeczy, które zwykle znajdują się w lekcji 2, powinny poruszać się znacznie, znacznie później:
- łańcuchy jako tablice char *, metody strlen, strxxx i tak dalej
- tablice w ogóle i arytmetyka wskaźników
- usuń to, co nowe, usuń [] to, co nowe [], a nawet destruktory
Te rzeczy, które zwykle znajdują się w lekcji 99, powinny poruszać się znacznie wcześniej
- szablony jako rzeczy do użycia (pisać, nie tyle)
- std :: string
- std :: shared_ptr <>
- std :: vector <>, iteratory, inne kolekcje
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:
- naprawdę inteligentne wskaźniki, które są przyjazne dla kolekcji, eliminują potrzebę takich rzeczy jak „tablica wskaźników pracowników”, które powodowały, że zawsze wracaliśmy do nowego / usuwania, arytmetyki wskaźników itp.
- auto usuwa ból deklaracji iteratora
- lambdowie sprawiają, że przepowiadanie jest czymś, co zrobiłby zwykły człowiek
- nawet coś tak trywialnego jak parsowanie
>>poprawnie eliminuje gotcha, która byłaby przy deklarowaniu niektórych szablonów szablonów
- i tak dalej
Z 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.