Będę mentorem zespołu uczniów szkół średnich w PIERWSZYM konkursie robotyki, większość zespołów rozwija tutaj [swoje oprogramowanie robotów przy użyciu C ++. Dla wielu uczniów w zespole będzie to ich pierwsze wprowadzenie do programowania. Nie wybrałbym C ++ do nauczania programowania dla uczniów szkół średnich (np. Python lub Javascript byłoby łatwiejsze), ale wybór jest już ustalony.
Chcę nauczyć ich właściwego języka C ++ (tj. Unikać mieszanego dialektu C / C ++, tj. C +), ale nie chcę ich straszyć niepotrzebną złożonością. Z tego powodu:
- Czy powinienem zacząć używać STL od pierwszego dnia, szczególnie.
vector
lub po prostu trzymać się standardowych tablic? Tablice są łatwiejsze do wprowadzenia, ale błędy wskaźnika mogą być trudniejsze do uchwycenia. - W przypadku I / O powinienem się trzymać
cout
itp., Czy uważasz,printf
że łatwiej byłoby się tego nauczyć? - Czy są jakieś zasoby internetowe dla C ++, które są odpowiednie dla takich młodych uczniów?
Dzięki!
EDYCJA : Dzięki za tak wiele doskonałych odpowiedzi. Oprócz przyspieszonego C ++ , który jest sugerowany przez wiele osób, przekonałem się, że C ++ For Everyone to doskonały tekst.
Odpowiedzi:
Myślę, że powinieneś zacząć od typów danych wbudowanych w język, takich jak tablice i wskaźniki, a kiedy twoi uczniowie to zrozumieją, przejdź do klas i OO, a następnie STL.
Powodem jest to, że możesz nauczyć ludzi rozumieć tablice, nie rozumiejąc wiele więcej poza zmiennymi i podstawową architekturą komputerową, ale nie możesz nauczyć ich rozumienia
vector
bez uprzedniego nauczenia ich klas. Jeśli użyjesz STL od samego początku, twoi uczniowie będą musieli żyć, nie mając pojęcia, jakvector
dokładnie działa. A potem, kiedy dojdziesz do tego punktu, nie będą mieli wystarczającej wiedzy na temat wskaźników i tablic oraz rzeczy, które otrzymujesz po robieniu rzeczy takich jak pisanie własnej klasy wektorowej, pisanie własnej klasy listy połączonych itp., Które będą konieczne docenić i wykorzystać jego funkcje. Denerwuje mnie, gdy uczniowie mówią „co to jest?” a nauczyciele mówią „po prostu zignoruj to, nauczysz się później”.I jak zauważył Demian w komentarzach, odszyfrowanie stosunkowo tajemniczych wiadomości otrzymanych z błędów szablonów jest znacznie trudniejsze niż zrozumienie błędów, które możesz uzyskać z tablic / konstrukcji innych niż szablony.
Nie czuję tego samego
cout
iprintf
. Żaden poziom nie jest niższy niż drugi, z wyjątkiem tego, żecout
wykorzystuje przeciążenie operatora.To może wydawać się głupie, ale jestem absolutnie fanatykiem, gdy ludzie rozumieją podstawowe elementy składowe wszystkiego przed przejściem do abstrakcji. Nie powinieneś używać inteligentnych wskaźników, dopóki nie opanujesz surowych wskaźników, żadnych wektorów przed tablicami, tego rodzaju rzeczy.
Często to mówię, ale powiem to jeszcze raz: lepiej najpierw nauczyć uczniów długiego podziału, a potem pozwolić im korzystać z kalkulatora, niż pozwolić im na korzystanie z kalkulatora, a następnie nauczyć ich długiego podziału.
Jeśli chodzi o książki do nauki początkujących, zobacz główną listę dobrych książek w C ++ .
źródło
vector
tablic. Jestem rozdarta.std::string
istd::vector
! Czy to programiści 32 C upvoting? Uczę języka C ++ od dekady, początkujących programistów, studentów, którzy mieli rok pracy w Javie, oraz programistów. Używamstd::string
istd::vector
od pierwszego dnia. Są łatwe w użyciu, bez względu na ich wnętrzności. (Niestd::vector
aby móc z niego korzystać. A klasy są niezwykle podstawową częścią C ++. To, co nie jest podstawowe, to debugowanie wszystkich błędów, które dostaną przy użyciu natywnych tablic i wskaźników.new
słowo kluczowe, masz rację z powrotem do terrirory zarządzania pamięcią. I często biblioteki proszą o wskazówki, a ty musisz zadać sobie pytanie: „czy to przejmie na własność? Czy nadal muszę to wyczyścić?”. Podstawa mojej stopy. Bardziej jak gwóźdź, uszczelka czy coś takiego.To jest moje własne doświadczenie. Weź to za cokolwiek jest warte.
Patrząc wstecz, kiedy zacząłem programować, naprawdę chciałbym dowiedzieć się o pamięci jako pierwszy . Nie, to nie jest ekscytujące. Sprawi, że się oszklisz. Ale jest to bardzo łatwa koncepcja do nauczenia. Po prostu pokaż tabelę 1-D i zmuś ich do wykonania kilku ćwiczeń mentalnych:
etcetera. Po wyczerpaniu podstawowej pamięci wszystko inne jest ciastem. To biedni studenci, którzy zakładają, że kompilator robi coś magicznego (lub że nigdy nie muszą myśleć o zarządzaniu pamięcią), którzy mają najwięcej problemów. A C ++ zamazuje wody, ponieważ niektóre rzeczy są automatycznie czyszczone (np. Normalny wektor), podczas gdy inne rzeczy nie (np. Wektor przydzielany przy użyciu „nowego”). I nawet nie zaczynaj od ciągów (char * vs. std :: string - spróbuj wyjaśnić to bez znajomości wskaźnika).
Nie wiem, na jaką platformę będą kierowane konkurencje robotów, ale jeśli jest to środowisko o ograniczonej pamięci, umiejętności zarządzania pamięcią są kluczowe.
EDYTOWAĆ
Kiedy nauczysz ich podstaw, to tak, mówię C ++. Technicznie są to po prostu różne biblioteki, ale tak, nie ma sensu mylić ich z więcej niż jednym paradygmatem. Daj im narzędzia C ++ (które zawierają wskaźniki i tablice).
źródło
zdecydowanie przejdź od razu do korzystania ze standardowych typów bibliotek. a
std::string
lubstd::vector
jest tym, czego często powinni używać, a (zdecydowana większość implementacji) tego typu oferuje pewną formę wykrywania błędów i obsługi błędów, jednocześnie odrywając wiele złożoności od uczniów.możesz poświęcić sporo czasu na nauczenie uczniów, jak zbudowana jest pamięć i jak zarządzać pamięcią (styl C), lub możesz od razu przystąpić do pracy z użyciem idiomatycznych typów języka, a następnie wyjaśnić szczegóły implementacji, jeśli to konieczne (i kiedy mają lepsze zrozumienie, czym jest tablica i gdzie są używane).
składnia
std::vector
(tworzenie / odczyt / zapis) nie jest dużo bardziej skomplikowana niż tablica C. dla porównania, ręczne zarządzanie pamięcią i wszystkie typowe błędy popełniane przez nowych uczniów przy użyciu tablic C są znacznie trudniejsze do nauczenia się, nauczenia i używania.cout
. osobiście uważam, żecout
łatwiej się nauczyć. co ważniejsze, powinieneś wybrać,cout
ponieważ jest bardziej bezpieczny, wszechstronny i pozwala zdefiniować sposób drukowania obiektu, co oznacza, że masz już wbudowane funkcje i bezpieczeństwo typów przy użyciu niektórych standardowych typów bibliotek. W końcu, to po prostu skończyć z programów mieszanych, kiedy zdajesz sobie sprawę, mogą one też muszą nauczyćcout
opróczprintf
.w rzeczywistości uważam, że powinieneś przeczytać Accelerated C ++, autorstwa Koeniga i Moo, i ewentualnie użyć go do instrukcji (pośrednio odpowiadając na pytanie 3). w książce wprowadzają
std::cout
tuż przedreturn
(strona 3) i zapisują wskaźniki i tablice do rozdziału 10. Gdybym mógł skopiować i wkleić przedmowę tej książki jako odpowiedź na twoje pytanie, zrobiłbym to. (uwaga: polecam przeczytać ją z perspektywy nauczania c ++).Edytuj Oto przedmowa
jeśli nie chcesz używać Accelerated C ++ (który ogólnie zakłada pewne podstawy programowania), być może chciałbyś Eckel's Thinking in C ++ . Nie przeczytałem go, ale jest to swobodnie rozpowszechniany tekst wprowadzający do C ++.
źródło
std::cout
wprowadzeniem wprowadzane są nawiasy klamrowe =) (jest to prosty podział wszechobecnego „Hello, World”)Jedną rzeczą do rozważenia jest to, że w typowym PIERWSZYM kodzie struktury danych dowolnej postaci (struktury, klasy, tablice, wektory, listy) odgrywają bardzo małą rolę. Zwykle masz do czynienia z bardzo małą ilością danych czujnika i używasz ich do decydowania o bardzo małej ilości ruchów siłownika.
Ale co ma odgrywają ogromną rolę, a może być bardzo trudne do zrozumienia, są różne formy kontroli , które idą dalej.
Położyłem więc duży nacisk na kontrolę. Zacznij od podstaw:
if
,for
,while
. Niech często je ćwiczą. Poznaj ich dobrze ....... ale potem robi się trudniej. Każdy kod robota o umiarkowanym rozmiarze ostatecznie przechodzi w trudniejsze wzorce sterowania:
Duża „główna” pętla, która nazywa wszystko
Automaty stanowe (te często się wyświetlają)
Zapisywanie poprzednich wartości / bieżący licznik (jak dla PID)
Trudno je zrozumieć początkującym. Myślenie o tym, jak program porusza się po kodzie w ten sposób, jest mylące, możesz nie zdawać sobie z tego sprawy, ale tak jest. Sprawi to twoim studentom o wiele więcej problemów niż sam język.
Powodzenia! Mam nadzieję, że sezon idzie dobrze.
źródło
Problem z tablicami polega na tym, że wszystko oprócz prostych przykładów z podręczników będzie wymagało tablic o dynamicznym rozmiarze, a moment, w którym potrzebujesz tablic o dynamicznym rozmiarze,
std::vector
jest o wiele łatwiejszy. Ponadto jedynym sposobem na bezpieczne obsługiwanie tablic o dynamicznym rozmiarze jest zawinięcie ich do własnej klasy, co byłoby złymstd::vector
zdzierstwem.W przeciwieństwie do niewytłumaczalnie popularnych przekonań, uczniowie mogą korzystać z funkcji, które wymagają wdrożenia złożonej mechaniki, nie wiedząc, jak samodzielnie wdrożyć takie bestie. Jak powiedziałem w komentarzu: nie pomyślałbyś nawet o tym, aby nie uczyć ciągów w innych językach, tylko dlatego, że ich implementacja jest złożona, prawda?
Dlaczego zestaw konwencji ciągów w formacie archaicznym, które powodują, że Twój program wysadza się w powietrze, gdy coś się nie powiedzie (co dzieje się w momencie zmiany
typedef
jakiegoś pozornie niezwiązanego nagłówka), jest lepszy niż bezpieczeństwo typustd::cout
?Większość zasobów C ++, online lub nie, jest zła. I nie mówię o używaniu trudnych do odczytania czcionek lub języka. Mówię o rażąco oczywistych błędach faktycznych. Istnieje bardzo niewiele dobrych zasobów C ++, głównie jeden lub dwa tuziny książek . Jedyne, o czym wiem, że jest online, to Myślenie Bruce'a Eckela w C ++ .
Przez dekadę uczyłem języka C ++ dla studentów o bardzo różnym pochodzeniu, korzystając z Accelerated C ++ Koeniga / Moo jako podstawy. Mój kurs bardzo się zmienił w ciągu tej dekady, nie jest nigdzie w pobliżu książki, z wyjątkiem podstawowej zasady: używaj nowoczesnych, poprawnych, bezpiecznych idiomów od samego początku. Nie ucz swoich uczniów, jak ręcznie manipulować pamięcią, po to, aby później mogli oduczyć się tego na rzecz bezpieczniejszych idiomów. Jak widać na niektórych zamieszczonych tutaj odpowiedziach, to nie działa: Ci, którzy kiedyś uczyli najpierw ręcznych sposobów, rzadko zrozumieją zaletę korzystania z nowoczesnych, bezpiecznych idiomów.
źródło
Jeśli chcesz nauczyć C ++, zacznę od konstrukcji C ++ jako wektora i cout, zamiast podzbioru C, takiego jak printf.
źródło
Tak. Używanie rodzimych tablic w C ++ jest podatne na błędy i po prostu złe praktyki w 99% przypadków.
Tak.
Nie są tacy młodzi. Nauka programowania nie wymaga mądrości, tylko motywacji i otwartego umysłu. Nie mogę wymyślić niczego, czego nauczano w ciągu ostatnich dwóch lat liceum, które lepiej przygotowałoby ucznia do nauki programowania. Czy spojrzałeś na myślenie Bruce'a Eckela w C ++ ? Jest dostępny do pobrania za darmo i bardzo dobrze sprawdzony. Unikaj popularnego, ale okropnego C ++: Jak programować i wszystkich książek Sam's Teach Yourself C ++ ....
źródło
Uczono mnie, C ++ w liceum jako pierwszego języka programowania, chociaż to było bardziej jak „C +”, teraz, że można wymienić go; pisaliśmy
cout
tekst na konsolę i pliki, ale także sporo funkcji C (getch()
było moim ulubionym).Myślę, że najskuteczniejszym (i prawdopodobnie zabawnym) sposobem nauczania podstaw jest zastosowanie programu nauczania zorientowanego na cel: zacznij od pokazania, jak wypisywać dane, następnie wprowadzania danych za pomocą klawiatury, a następnie prostych operacji we / wy pliku itp. gra oparta (lub odpowiednik robotyki). Następnie, gdy pytają: „Jak mam zrobić X?”, Możesz rozbić X pod względem przykładów, które już widzieli, np. „Najpierw musisz uzyskać informacje od użytkownika, tak jak to zrobiliśmy w Z, a następnie ...”(oczywiście nie jest to łatwe, ponieważ w praktyce X będzie prawdopodobnie coś, że potrzebują dodatkowej wiedzy w tym celu, na przykład«grafiki 3D», ale można jeszcze wyjaśnić, jak to będzie działać na wysokim poziomie droga).
Przykłady, które im pokażesz, zaczną się jako magia wklejana w czarne skrzynki, której tajemnice zostają odkryte, gdy powoli układane są fragmenty układanki programistycznej. Na przykład, twoi uczniowie
if
dość szybko nauczą się podstaw s, ale prawdopodobnie nie zdadzą sobie sprawy, że wyrażenie boolowskie nie ogranicza się wyłącznie do użycia wif
warunku (prowadzącym do klasycznegoif (blah) return true; else return false;
kodu).Subtelności, czy wybierzesz tablicę czy wektor jako pojemnik, na początku będą wydawać się nieistotne. Wektor / tablica będzie po prostu sposobem na posiadanie wielu zmiennych jako jednej zmiennej, dostępnej za pośrednictwem indeksu. Trzymaj się tego, gdzie możesz. Wskaźniki zostaną zrozumiane dopiero później. Nie oznacza to, że nie powinieneś wyjaśniać rzeczy; po prostu nie możesz wszystkiego wyjaśnić naraz, a rzeczy, które wyjaśniasz, nie zostaną całkowicie wchłonięte. Ludzie uczą się organicznie, a nie liniowo. Używałem
cout
przez kilka lat, zanim właściwie zrozumiałem, co to było przeciążenie operatora!Och, i nie bój się powtórzeń. „To tak, jak zrobiliśmy program Hello World - pamiętasz, jak napisaliśmy tekst na konsolę?” (nie ...) „Przejrzyjmy to jeszcze raz, żeby się upewnić”. ... i zadawaj pytania! Zachowaj zaangażowanie uczniów w zabawne przykłady i dużo interakcji.
C ++ jest złożonym językiem i bez względu na to, co robisz, znaczna część tej złożoności (i ogólnie umiejętności programowania) zostanie utracona na twoich uczniach. Wszystko, co im pokażesz, będzie dla nich nowe; większość z nich nie zagłębi się na głębokim poziomie zrozumienia (przynajmniej nie od razu). Jak działa pamięć, jak współdziałają komponenty komputera, jaki jest stos i stos, wskaźniki, klasy, nawet pętle i łańcuchy if-else nie zostaną właściwie zrozumiane przez większość. To jest wporządku! Nie trzeba ich rozumieć, że są używane - niesamowitą liczbę fajnych programów można napisać za pomocą super-brzydkich funkcji 1000-wierszowych z pięciokrotnie zagnieżdżonymi redundantnymi
if
si 43 zmiennymi o nazwanych rzeczachx_2r
. Ważne jest to, że uczniowie stale się uczą i doskonalą. Czarne skrzynki są w porządku, o ile na dłuższą metę stają się przezroczyste (lub przynajmniej półprzezroczyste szare). Pod koniec kursu mogą nie wiedzieć, co to są wzorce projektowe, ale powinni być w stanie spojrzeć wstecz na programy, które napisali w ciągu pierwszych kilku tygodni i żałować kodu. Powinni zrozumieć na znacznym poziomie szczegółowości, w jaki sposób działa pierwszy napisany program (podczas gdy go napisali, nie mieli pojęcia). Ale nie będą wiedzieć wszystkiego - jeszcze .źródło
Brałem kilka zajęć programistycznych w moim życiu od liceum do college'u. Mogę powiedzieć, że tak naprawdę nie nauczyłem się zbyt wiele z mojej pierwszej klasy c ++ poza tym, jak drukować rzeczy do strumienia.
Moja rada, jako młody student, który dopiero od kilku lat ma jakąkolwiek prawdziwą pracę jako programista, polega na tym, aby nie ogłuszać ich. Powiedz im, co robią i jak to działa do poziomu systemu operacyjnego (nie trzeba wchodzić w język IMO).
Myślę, że nauczenie ich języka C jest lepszym sposobem na obejście tego (nadal prawie zawsze kompiluje się jako C ++, jak wiesz). Uczenie ich, czym tak naprawdę jest terminal, w jaki sposób ich program oddziałuje z nim, że ciąg znaków jest tablicą znaków zakończonych \ 0 w pamięci, czym jest malloc i jak C ++ go wyodrębnia, jak char i int są przechowywane w pamięci , ect ... Te rzeczy sprawiają, że ktoś naprawdę wie, jak rozwiązać problem, gdy napotka go w fazie rozwoju.
Nie mogę podkreślić, jak ważne jest, aby pozwolić dzieciom programować i być tam głównie po to, aby odpowiadać na pytania. Z mojego doświadczenia uczysz się języka, używając go. Książki i lekcje mogą być pomocne i są niezbędne, aby zacząć, ale w końcu mówię, daj im plik C / C ++ i powiedz: To jest przykład X, chciałbym, żebyś zrobił Y (co można zrobić hakując X). Pokaż im, jak korzystać ze stron podręcznika man (jeśli używają * NIX) lub pokaż im cplusplus.com i pozwól im zbadać biblioteki standardowe, aby samodzielnie wymyślili różne rzeczy.
TL; DR Niech dzieci uczą się. Bądź tam, aby zapewnić strukturę i odpowiadać na pytania.
Również: Połączone listy są prawdą!
źródło
Nie uczysz ich programowania w sposób ogólny, uczysz ich pewnego rodzaju programowania wbudowanego za pomocą robotów i tym podobnych. Jeśli dobrze zrozumiałem.
Po pierwsze, uważam, że powinieneś sprawdzić, jakich bibliotek będziesz używać i czego potrzebujesz.
Jeśli zdarzy ci się mieć bibliotekę C do użycia lub podobną do C z wieloma wskaźnikami i tablicami C, to myślę, że potrzebujesz sposobu, aby nauczyć ich, jak go używać i dlaczego go używać.
Ale możesz pokazać im kilka prostych kodów, aby zacząć od ciągów i wektorów, tak działa C ++. To nie znaczy, że nie możesz nauczyć ich wskaźników.
Może powinieneś wyjaśnić różnice między niskim poziomem C ++ (który przypomina C) a wysokim poziomem C ++ w STL. Jedną z najtrudniejszych rzeczy w C ++ dla początkujących jest sprawdzenie, czym jest C, czym jest C ++ i jakie są różne systemowe interfejsy API.
Ponieważ celem tutaj nie jest nauka programowania ogólnego, ale udział w konkursie robotów, tak zorientowałem nauczanie.
źródło
Zacząłem uczyć studentów C ++ pod koniec zeszłego roku, a tego lata również dla naszego PIERWSZEGO zespołu robotyki.
Używamy programowania Stroustrupa - zasady i praktyka posługiwania się C ++ . Uważam, że książka jest przystępna, czytelna i dobrze zorganizowana. Kazało nam około 6 uczniów samodzielnie przeczytać rozdziały. Jestem tutaj, aby pomóc im w terminologii i pytaniach. Wykonują wszystkie ćwiczenia z książki.
Kazałem uczniom pracować przez rozdział 14. Pomijanie rozdziałów na temat strumieni (nieprzydatne w programowaniu FRC). Rozdział 14 jest przydatny, ponieważ otrzymują wprowadzenie do podklas. Jednak prawdopodobnie muszą pójść dalej w książce, aby lepiej zrozumieć konstruktory i destrukty związane z podklasami.
Nie lekceważ swoich uczniów. Uczniowie chętnie korzystają z książki, czytają, uczą się i wykonują ćwiczenia; i to było latem w ich własnym czasie! Jest wielu studentów, którzy nie zrozumieją. Powinni przejść do czegoś innego; nie każdy rozumie programowanie.
Największą barierą nie jest język ani książka; to środowisko programistyczne. Visual Studio Express może zniechęcać początkujących użytkowników. Możesz być cenny, pomagając uczniom skoncentrować się na programowaniu, a nie na środowisku. Jednak nauka środowiska jest cenna, ponieważ programiści spędzają dużo czasu na dostosowywaniu się do nowych systemów programistycznych.
Powodzenia.
źródło
Mówisz, że chcesz nauczyć ich języka C ++, ale nie uczysz żadnych konstrukcji C, ale większość konstrukcji programowych, które będą musiały wiedzieć najpierw, są wspólne dla wszystkich języków, a wersje C ++ są zakorzenione w C:
Oto jak tworzysz program [int main (..) {return 0; }]. Podaj podstawowy przegląd środowiska programistycznego, które również chcesz wypróbować. Będą musieli wiedzieć, jak stworzyć projekt i faktycznie go skompilować / uruchomić.
To jest zmienna. Zmienne mogą przechowywać dane (int, char, float itp.).
Ciągi (C ++ są łatwiejsze w użyciu z cin).
W ten sposób odczytujesz i zapisujesz dane (cin, cout). „Witaj% s!”
Warunki (komputery muszą podejmować decyzje).
Pętle (komputery są dobre w robieniu tego samego w kółko). Pokaż podczas i dla pętli.
To powinno zająć około dwóch lekcji na godzinę. Przygotuj zwięzły zestaw notatek, do których mogą się odnosić w części praktycznej. Nie próbujesz uczynić ich genialnymi programistami, więc podaj przykłady, jak czytać z konsoli, tworzyć struktury i wszystko, co powinni zrobić. Używaj tylko funkcji obsługiwanych przez język, a nie niestandardowych bibliotek narzędzi. Będziesz ich bardziej mylić.
Od samego początku prowadź za przykładem i pokaż im przykłady dobrze ułożonego kodu. Wcięcia powinny być poprawne, nawiasy klamrowe i nawiasy spójne ze stylem, w którym czujesz się najlepiej. Nazwy zmiennych powinny mieć znaczenie. Jeśli podasz slop jako przykład, dowiedzą się, że jest on do zaakceptowania. To zły punkt wyjścia. Podkreślaj znaczenie poprawnego wcięcia - odkryłem, że kiedy dużo nauczałem, wciskałem konsekwentnie ich kod, łatwiej było im dostrzec, gdzie popełniają błąd. Stało się tak, ponieważ większość ich błędów była niepoprawnym zakresem dla operacji (umieszczanie operacji w pętlach / warunkach, które nie miały być, lub odwrotnie).
Następnie przejdź do praktycznej pracy. Najlepszym sposobem na nauczenie się czegoś jest złamanie tego i ustalenie, dlaczego. Musisz się upewnić, że mają łatwe w użyciu środowisko do kompilacji swojego kodu. Dokumentuj to za pomocą zrzutów ekranu w dłoni.
Dobrym przykładem, który pomógł mi zrozumieć niektóre koncepcje, było zbudowanie maszyny do coli:
Następnie możesz przejść do konstrukcji C ++; nie chcesz zanurkować zbyt daleko, zanim będą mogli przynajmniej stworzyć podstawowy program.
A przede wszystkim dużo czasu i cierpliwości, aby poświęcić się pytaniom. Będzie ich wielu, a większość z nich spowoduje, że będziesz się kulił, ponieważ są tak trywialne, że odpowiedź jest dla ciebie oczywista.
źródło
Myślę, że nie powinieneś uczyć rzeczy z punktu widzenia C ++ („C ++ hello world”), ale z dziedziny problemów - w tym przypadku robotyki - z punktu widzenia. Tak więc, twój cześć świat będzie mrugał diodą LED lub prowadził silnik.
Oczywiście można / należy rozłożyć każde małe zadanie robotyki na podzbiór rosnących znaczących pod względem koncepcyjnym akcji C ++, obejmujących typy, funkcje i operacje IO.
Jeśli chodzi o mnie, nie jestem profesjonalnym programistą i próbowałem nauczyć się Java, C ++ i Python. Naprawdę zacząłem coś osiągać (Python), kiedy miałem prawdziwe (proste) problemy do rozwiązania. To doprowadziło mnie do rzeczy, unikając nadmiernej uwagi na przypadkowe szczegóły implementacyjne samego języka.
Radziłbym więc: nie czytaj podręcznika danego języka, ale naucz się robić rzeczy z wybranym językiem. Myślę, że to motywuje ludzi.
źródło
Nauczę ścisłego C ++. Wiesz, jak piszesz printf i podajesz go małemu params lub niewłaściwemu typowi, że dzieje się coś dziwnego? a jeśli użyjesz nieprawidłowych wskaźników, mogą wystąpić złe rzeczy? NIE UCZYĆ, ŻE
Od pierwszego dnia uczyłem, jak używać referencji, STL i mówiłem, że tracicie ZNAKI za używanie wskaźników. Nie ucz też inteligentnych wskaźników. Zauważyłem, że używam wskaźników tylko wtedy, gdy wykonuję GUI, a obiekty (takie jak pole obrazu) muszą istnieć i być poprawnym obrazem lub mieć wartość null. Do programowania konsoli nie używałem wskaźników (inteligentnych lub surowych) od dłuższego czasu.
Krótko mówiąc, nie ucz ich wszystkiego, co może przysporzyć im kłopotów. Ucz iostreams, struktury, powiedz im, że tracą znaki także na typecastu i nie próbuj uczyć projektowania. Nie chcesz, aby ktokolwiek stał się doświadczonym profesjonalistą
źródło
To nie jest seria wykładów C ++, ale COMP1917 Richarda Bucklanda to doskonale wykonana seria wykładów na temat programowania w C (wraz z COMP1927 , strukturami danych).
Moim zdaniem, C ++ jest zbyt skomplikowane dla nowych studentów, ale C jest prostsze w świecie i zapewnia dobrą podstawę do programowania systemów, których nowym programistom C ++ zbyt często brakuje.
źródło
Zaczynam od znacznych fragmentów kodu na płycie, pomagam im „zrobić coś fajnego” przy programowaniu i udoskonalić ich zrozumienie tego, jak rzeczy działają w czasie. Nie muszą doceniać ani rozumieć wszystkich zawiłości C ++, aby dioda LED mrugała. Muszą tylko wiedzieć, „jeśli umieścisz tam ten kod, spowoduje to mrugnięcie diody LED”. A potem „hej, porozmawiajmy o tym, czym jest teraz pętla, jeśli napiszesz pętlę, możesz sprawić, że dioda LED będzie mrugać 50 razy bez konieczności pisania 50 linii kodu, prawda?” Porozmawiajmy teraz o warunkach warunkowych, kiedy użytkownik naciśnie przycisk A na skrzynce kontrolnej, chcemy aktywować pneumatykę, aby podnieść flagę, oto jak dodamy do tego kod. Lub jeśli przełącznik 2 na naszej skrzynce sterowniczej jest włączony, uruchamiamy silnik wiertarki do tyłu zamiast do przodu.
Jeśli skupisz się na nauczaniu ich „na tyle”, aby rozwiązać problemy, którymi są zainteresowani, sprawi, że będzie to o wiele mniej przytłaczające i łatwiej dostępne. Jeśli są naprawdę zainteresowani i chcą zrozumieć zawiłości, prawdopodobnie wrócą i przeczytają obszerną książkę o programowaniu lub na letnim kursie szkolnym w lokalnym JC.
Zrób listę „rzeczy, które chcą kontrolować” na swoim robocie i zmień każdą z nich w lekcję… co najmniej powinni wiedzieć…?
Trzymałbym się nauczać konstrukcji, które są najbardziej niezawodne, tak jak uczyłbym couta nad printf, ponieważ specyfikatory formatu są bardzo łatwe do pomieszania, a niepoprawny specyfikator jest często automatyczną receptą na awarię twojego programu. Podobnie wektor zaciemnia niektóre złożoności zarządzania pamięcią. Nie przejmuj się każdym szczegółem, jak to działa, lub czym jest biblioteka STL, przynajmniej muszą wiedzieć, aby osiągnąć X (co może wymagać na przykład użycia struktury danych biblioteki STL)
źródło
Użyj Jak zaprogramować C ++ przez Deitel i Deitel. DOSKONAŁY podręcznik według mnie.
Wygląda na to, że próbujesz nauczyć nowicjuszy, jak programować, a następnie pozwolić im programować na pewnym zaawansowanym poziomie w tym samym czasie. Jeśli masz nadzieję, że dasz im małpę, zobacz, jak małpa koduje fragmenty bez zrozumienia, że jesteś skazany na porażkę.
Trzymaj się z dala od STL dla początkujących.
Jeśli masz już rozwiązanie kodujące dla swojego robota - lub BARDZO DOBRY POMYSŁ, jak to będzie wyglądać, być może możesz „przyporządkować” lekcje z podręcznika do zadań kodowania dla robota. Ale niech podręcznik napędza naukę.
Jeśli zmuszasz się do kodowania, dając uczniom bardzo wąskie lekcje i kontakt z językiem, myślę, że gdy ocean kodu, który piszesz, staje się coraz większy, to będzie tak, jakbyś dopiero nauczył się pływać w wiosłach i utoniesz, ponieważ PRAWDZIWE pływanie jest wymagane.
To nie jest pytanie „czy powinni się uczyć cout czy printf?” Jest to kwestia wystarczającej wiedzy, aby mieć wgląd w sposób pisania kodu dla danych zadań programistycznych do rozwiązania.
Gdyby to było zadanie do czytania, jakie byłyby wyniki, gdyby wszystko, co wiedzieli, to proste zdania z podmiotem i tylko połowa słownictwa, którego WIESZ, będzie wymagana.
źródło