Я преподавал C ++ в старшей школе как первый язык программирования, хотя это было больше похоже на "C +", теперь, когда вы упомянули об этом; мы использовали cout
для записи текста на консоль и файлы, но также довольно много функций Си ( getch()
было моим любимым).
Я думаю, что наиболее эффективным (и, возможно, забавным) способом обучения основам является использование целенаправленной учебной программы: начните с показа, как выводить данные, затем ввод с клавиатуры, затем простой файловый ввод-вывод и т. Д. Переходите к простому текстовому вводу. основанная игра (или эквивалент робототехники). Затем, когда они спрашивают: «Как мне сделать X?», Вы можете разбить X на примеры, которые они уже видели, например: «Сначала вам нужно получить информацию от пользователя, как мы делали в Z, затем ... "(очевидно, на практике это не так просто, поскольку X, вероятно, потребует дополнительных знаний, например" 3D-графики ", но вы все равно можете объяснить, как это будет работать на высоком уровне путь).
Примеры, которые вы им показываете, начнутся с чёрного ящика, скопированного копией магии, тайны которого раскрываются, когда кусочки головоломки программирования постепенно выясняются. Например, ваши студенты if
довольно быстро изучат основы s, но они, вероятно, не поймут, что булево выражение не ограничивается исключительно использованием в if
условии (что приводит к классическому if (blah) return true; else return false;
коду).
Тонкости выбора массива или вектора в качестве контейнера поначалу покажутся неуместными для студентов. Вектор / массив будет просто способом иметь множество переменных в качестве одной переменной, доступной через индекс. Придерживайтесь того, где вы можете. Указатели не будут поняты до позже тоже. Это не значит, что вы не должны объяснять вещи; только то, что вы не можете объяснить все сразу, и то, что вы объясняете, не будет полностью поглощено. Люди учатся органически, а не линейно. Я использовал cout
пару лет, прежде чем правильно понял, что такое перегрузка оператора!
Ох, и не бойся повторений. «Это похоже на программу Hello World, которую мы сделали - помните, как мы записывали текст в консоль?» (нет ...) «Давайте снова пройдемся, чтобы убедиться». ... и задавайте вопросы! Держите студентов увлеченными веселыми примерами и большим количеством взаимодействия.
C ++ - сложный язык, и независимо от того, что вы делаете, значительная часть этой сложности (и мастерства программирования в целом) будет потеряна для ваших учеников. Все, что вы им покажете, будет для них новым; большая часть этого не будет погружена в глубокий уровень понимания (по крайней мере, не сразу). Как работает память, как взаимодействуют компоненты ПК, что такое стек и куча, указатели, классы, даже циклы и цепочки if-else не будут должным образом поняты большинством. Хорошо! Их не нужно понимать, чтобы их использовать - огромное количество классных программ может быть написано с помощью супер-уродливых 1000-строчных функций с пятикратным вложением избыточных if
s и 43 переменных, называемых такими вещами x_2r
. Важно то, что студенты постоянно учатся и совершенствуются, Черные ящики хороши до тех пор, пока они становятся прозрачными (или, по крайней мере, полупрозрачными серыми) в долгосрочной перспективе. К концу курса они могут не знать, что такое шаблоны проектирования, но они должны иметь возможность оглянуться назад на программы, которые они написали в первые несколько недель, и съежиться в своем коде. Они должны понять на значительном уровне детализации, как на самом деле работает первая написанная ими программа (тогда как когда они писали это, они понятия не имели). Но они не будут знать все - пока .