Kiedy byłem na studiach, byłem nauczycielem wstępu do kursu programowania wśród innych kursów. Opisany problem nie jest rzadki. W zależności od konkretnej roli możesz mieć różne podejścia, które chcesz zastosować.
Po pierwsze, jeśli jest to szeroko rozpowszechniony problem mający wpływ na znaczną część uczniów w klasie, jeśli masz do tego dostęp, zwróciłbym się do profesora prowadzącego kurs z konkretną opinią na temat tego, jakie pojęcia studenci nie rozumieją, tak aby on lub on może albo dołączyć dodatkową recenzję tego materiału, gdy pojawi się on ponownie w tym terminie, albo ulepszyć program nauczania na przyszłe warunki.
Jeśli oprócz zajęć laboratoryjnych uczysz sekcji dyskusji na kursie, byłby to wspaniały czas na wyjaśnienie rzeczy, które były mylące podczas wykładu i pomogły uczynić je bardziej konkretnymi i upewnić się, że wszystkie podstawy zostały zrozumiane.
Jeśli jedyny czas, w którym pracujesz z tymi uczniami, spędzasz w laboratorium, możesz nadal wykorzystać ten czas, aby nauczyć uczniów jednego na jednego lub kilku na raz, pojęciowych elementów potrzebnych do zrozumienia i dokończ zadanie domowe.
Mogą czuć się tak zagubieni w klasie, że nawet nie wiedzą, gdzie się zatrzymać i zadawać pytania. W takim przypadku wróć z nimi do podstaw. Gdzie oni byli na kursie, kiedy ostatni raz rozumieli, co się dzieje? Jeśli nie są pewni lub „nigdy” nie zrozumiani, być może trzeba będzie cofnąć się do początku, aby wyjaśnić cześć światu, ucząc ich takich rzeczy, jak zmienna, jak komputer bierze listę „instrukcji” i próbuje rób to w porządku, ale komputer nie jest tak „inteligentny” jak my, więc musisz być bardzo dosłowny i mówić rzeczy dokładnie tak, aby komputer je zrozumiał itp.
To właściwie jest problem walki i frustracji, którą dość często widziałem na kursach programowania innych niż główne. Studenci piszą kod. Wydaje się, że jest „w porządku”, ale potem przystępują do jego kompilacji, co daje błąd, bardzo tajemniczy błąd. I nie mają pojęcia, co jest z tym nie tak. I godzinami wpatruj się w ich kod. Potem wreszcie zorientuj się, że to coś, co wydaje się trywialne, jak brakujący średnik lub orteza w niewłaściwym miejscu. Potem kompilują go ponownie i nadal występuje błąd, to coś innego. Przy drugim użyciu użyli innej nazwy. I tak dalej. Dlatego proszą przyjaciela, korepetytora lub kogoś o pomoc i mogą odpowiedzieć z góry „och, po prostu dodaj to, a wtedy zadziała”. Ich doświadczenie polega na tym, że programowanie jest nieco „tajemnicze”
Jest to obszar dla nauczyciela, w którym masz dużo miejsca do pomocy. W zależności od poziomu frustracji, mogę mieć różne podejścia, aby pomóc im dowiedzieć się, dlaczego ich kod nie działa. Jeśli w jakiś sposób to rozumieją, mogę dać im wskazówki i spróbować pomóc im samemu to zrozumieć. Ale jeśli są już na skraju gotowości do rezygnacji ze sfrustrowania, często dam im kilka darmowych odpowiedzi, a następnie spróbuję przynajmniej zadać im pytania typu „czy rozumiesz, dlaczego ta zmiana naprawiła twój program? ?
W przypadku niektórych studentów, zwłaszcza osób niebędących specjalnościami, mogą nie zwracać uwagi na szczegóły niezbędne do bycia dobrym programistą lub programowania. Możesz trzymać je w ręku za pomocą strategii, aby pomóc im zwrócić uwagę na szczegóły, i być wystarczająco metodycznym, aby rozwiązać problemy, nawet jeśli jest to dla nich wyzwanie.
Ale nie zapominają o tym, że uczniowie „prawidłowo” wciskają swój kod - tak często początkujący programiści mają problemy z zagnieżdżaniem i zakresem, ponieważ mają niepasujące nawiasy klamrowe itp., Ponieważ nie zwracają uwagi na to, co jest zagnieżdżone. Daj im listę kontrolną „rzeczy do sprawdzenia, kiedy twój program się nie skompiluje”, takich jak wcięcie całego kodu i upewnienie się, że nawiasy klamrowe pasują do siebie, upewnij się, że wszystkie linie kończą się średnikami, szczególnie wokół numeru linii, w której pojawia się pierwszy błąd w górę itp.
Naucz je kompilować wcześnie i często kompiluj. Napisz minimalny kod szkieletu (powiedzmy hello world), skompiluj / przetestuj. Dodaj kilka wierszy, skompiluj ponownie. O wiele łatwiej jest znaleźć błędy, jeśli patrzysz tylko na małe wiadro zmian, a nie duże.
Pomóż im nauczyć się rozkładać problem na mniejsze możliwe do rozwiązania problemy. To samo robimy jako profesjonalni programiści rozwiązujący znacznie trudniejsze problemy, których nie umiemy rozwiązać. Rozbijasz go na części, aż dojdziesz do czegoś, co albo umiesz rozwiązać, albo możesz przeprowadzić badania, aby dowiedzieć się, jak rozwiązać. „Jakie kroki należy podjąć, aby znaleźć działające rozwiązanie?” Najpierw potrzebujesz trochę kodu szkieletowego (witaj świecie). Czy wiesz jak to zrobić? Tak, świetnie, więc kiedy skończymy rozmawiać, możesz zacząć od zrobienia tego! Następnie musi odczytać plik jako dane wejściowe. Czy pamiętasz o tym w rozdziale 4? Nie całkiem? Dlaczego nie pójdziesz, rzuć okiem na to, kiedy zaczniesz czuć świat, i zobacz, jak daleko możesz się zbliżyć do tego, że działa, a potem oddzwoń do mnie, a ja Pomogę ci trochę, kiedy utkniesz w tym. Kilka pierwszych razy może być konieczne zrobienie dla nich numerowanej listy kroków niezbędnych do rozwiązania problemu, aby mogli nauczyć się na przykładach, jak rozłożyć problem.
Jeśli zdobywają część, ale nie wszystkie materiały w klasie, zachęć ich do zadawania pytań w klasie, ponieważ dziewięć razy na dziesięć nie są jedynymi uczniami, którzy nie rozumieją, a profesor prawdopodobnie po prostu pochylił się nad czymś ważnym.
Jeśli spędzają „godziny”, wpatrując się w jednego robaka, ale go nie rozgryzają, to strata czasu, niewiele się od niego uczą. Często błędy są problemami wglądu i jest to kwestia znalezienia właściwego wglądu, aby je rozwiązać, i mogą nie mieć talentu do tego rodzaju problemów. Zasugeruj inne ogólne podejścia, które należy zastosować, gdy utkną: poproś innego przyjaciela w klasie o pomoc (poznaj niektórych kolegów z klasy, jeśli to konieczne), rozpocznij zadanie domowe z wyprzedzeniem, aby mieli czas się zatrzymać, a później przyjdź laboratorium nauczyciela i zadawaj pytania w godzinach otwartych lub chodź do godzin pracy profesora. Jeśli są przyzwyczajeni do wkuwania, co dobrze sprawdza się w przypadku zapamiętywania, uderzą w ścianę frustracji, gdy „ w obliczu programowania, które bardziej dotyczy rozwiązywania problemów niż zapamiętywania. Pokaż, jak wyszukać przykłady składni ze swojego podręcznika, przepływu stosu itp. Zachęć ich do opublikowania pytania na forum pytań klasy prywatnej, jeśli takie istnieje.
Naucz ich, jak zawęzić obszar, w którym kod przestaje działać. Komentuj rzeczy, dopóki nie wrócisz do czegoś, co działa, a następnie powoli dodawaj rzeczy z powrotem, aż znowu pojawi się ten błąd.
Wiele z tych pomysłów można przekształcić w ulotki, jeśli się pojawią. Strategie są zwykle częścią, o której profesorowie się zastanawiają - spędzają czas na składni, semantyce pisania pętli, tablic, we / wy itd. Ale za mało czasu poświęconego na „co robię, kiedy próbuję uruchomić mój kod, a on po prostu się nie kompiluje lub nie powoduje awarii? ”
Jeśli chodzi o rzeczy koncepcyjne, zwłaszcza podstawy, takie jak „czym jest zmienna” lub „czym jest pętla?” niezrozumienie tego uniemożliwi im nadążenie za resztą kursu. Na kursie wykładowym profesor może nie mieć czasu, aby odpowiedzieć na każde pytanie lub pomóc żarówce zgasnąć dla każdego ucznia. I właśnie dlatego nauczyciele są tak ważni podczas nauki programowania. Mogą potrzebować zindywidualizowanych instrukcji z dodatkowymi analogiami, aby konkretny temat był konkretny.
Ponieważ uczysz w C ++, wyobrażam sobie, że zajęcia są abstrakcyjnym tematem, który niektórzy studenci mają trudności z „zdobyciem”. Często naucza się abstrakcji klas z przykładami odpowiadającymi jakimś losowym obiektom z prawdziwego świata, takim jak „bankomat”, i analogie do obiektu z prawdziwego świata. Możesz mieć zmienne, aby śledzić, ile pieniędzy jest w środku, masz metody, które są jak reguły, które mówią bankomatowi, jak reagować na określone warunki itp. Czasami jedną analogią jest ta, która „trzyma się” konkretnej osoby , a inni uczniowie lepiej rozumieją innego.
Jeśli to możliwe, narysuj dla nich zdjęcia. Jak schemat sekwencji tego, co dzieje się w czasie, aby pomóc im zobaczyć duży obraz tego, co robi kod, który piszą. Użytkownik klika ten przycisk. Następnie program powinien odpowiedzieć, wykonując x, yiz. Narysuj tablicę przypominającą paczkę skrytek pocztowych na poczcie, która może zawierać tylko jeden numer, oraz wskaźniki, takie jak strzałki wskazujące „adres” z przodu skrzynki. Itp.