Когда я учился в колледже, я был репетитором для введения в курс программирования среди других курсов. Проблема, которую вы описываете, не редкость. В зависимости от вашей конкретной роли у вас могут быть разные подходы, которые вы хотите использовать.
Во-первых, если это широко распространенная проблема, затрагивающая значительную часть учащихся в классе, если у вас есть доступ к этому, я бы обратился к преподавателю, который преподаёт курс, с конкретными отзывами о том, какие концепции студенты не понимают, чтобы он или она может либо включить дополнительный обзор этого материала по мере его появления в семестре, либо улучшить учебный план для будущих терминов.
Если вы будете преподавать дискуссионный раздел для курса в дополнение к вашему лабораторному занятию, это было бы прекрасным временем, чтобы разъяснить вещи, которые сбивают с толку в лекции, и помочь сделать их более конкретными и убедиться, что все основы поняты.
Если вы работаете с этими студентами только в течение учебного курса, вы все равно можете использовать это время для обучения студентов один на один или несколько за раз, концептуальным строительным блокам, которые им нужны для понимания и завершить свою домашнюю работу.
Они могут чувствовать себя настолько потерянными в классе, что даже не знают, где остановиться и задать вопросы. Если это так, вернитесь к основам с ними. Где они были в курсе, когда в последний раз понимали, что происходит? Если они не уверены или «никогда» не поняли, вам, возможно, придется вернуться к началу объяснения «привет», научить их таким вещам, как переменная, как компьютер берет их список «инструкций» и пытается делайте их по порядку, но компьютер не такой «умный», как мы, поэтому вы должны быть очень буквальными и говорить то, что компьютер должен понимать, и т. д.
На самом деле, это точка борьбы и разочарования, которые я довольно часто видел на курсах программирования не по специальности. Студенты пишут код. Это кажется «примерно» правильным, но затем они идут на компиляцию, и это дает ошибку, очень загадочную ошибку. И они понятия не имеют, что с этим не так. И смотреть на их код в течение нескольких часов. Затем, наконец, выясните, что это было что-то, что кажется тривиальным, например, отсутствующая точка с запятой или скобка в неправильном месте. Затем они снова компилируют его, и все равно есть ошибка, это что-то еще. Они записали имя переменной по-разному во второй раз, когда использовали его. И так далее. Поэтому они просят помощи у друга, репетитора или кого-то другого, и они могут ответить на вопрос «о, просто добавь это туда, и тогда это сработает». Таким образом, их опыт показывает, что программирование немного "загадочно"
Это область для репетиторов, где у вас есть много возможностей, чтобы помочь. В зависимости от их уровня разочарования, у меня могут быть разные подходы, чтобы помочь им понять, почему их код не работает. Если они что-то понимают, я мог бы дать им подсказки и попытаться помочь им разобраться самостоятельно. Но если они как раз в конце своей веревки готовы отказаться от разочарования, я часто даю им пару халявных ответов, а затем пытаюсь хотя бы задать им вопросы типа: «Вы понимаете, почему это изменение исправило вашу программу? ?»
Для некоторых студентов, особенно не-майоров, у них может не быть методического внимания к деталям, необходимого, чтобы быть хорошим программистом или получать удовольствие от программирования. Вы можете держать их в руках с помощью стратегий, чтобы помочь им обратить внимание на детали и быть достаточно методичными, чтобы решать проблемы, даже если для них это вызов.
Но сохраняйте анальный интерес к тому, что студенты делают свой код «правильно» - так часто начинающие программисты создают проблемы с вложенностью и областью видимости, потому что у них несовпадающие фигурные скобки или тому подобное, потому что они не обращают внимания на то, что вложено под чем. Дайте им контрольный список «вещей, которые нужно проверить, когда ваша программа не скомпилируется», например, правильно сделайте отступ для всего кода и убедитесь, что фигурные скобки совпадают, убедитесь, что все строки заканчиваются точкой с запятой, особенно вокруг номера строки, где отображается первая ошибка и т. д.
Научите их собирать рано и часто собирать. Напишите минимальный скелетный код (скажем, привет мир), скомпилируйте / протестируйте. Добавьте несколько строк, скомпилируйте снова. Гораздо проще находить ошибки, если вы смотрите только на маленькую корзину изменений, а не на большую корзину.
Помогите им научиться разбивать проблему на более мелкие разрешимые проблемы. Это то же самое, что мы делаем как профессиональные программисты, решающие гораздо более сложные задачи, которые мы не знаем, как их решить. Вы продолжаете разбивать его на части, пока не доберетесь до того, что вы либо знаете, как решить, либо сможете провести какое-то исследование, чтобы узнать, как решить. «Какие шаги нужно предпринять, чтобы получить рабочее решение?» Ну, во-первых, вам понадобится код скелета (привет мир). Ты знаешь как это сделать? Да, отлично, поэтому, когда мы закончим говорить, вы можете начать с этого! Затем он должен прочитать файл в качестве ввода. Вы помните, что читали об этом в главе 4? На самом деле, нет? Почему бы вам не взглянуть на это после того, как вы запустите привет, и посмотреть, как далеко вы можете добраться до того, чтобы заставить это работать, а затем перезвоните мне, и я Я помогу вам еще, когда вы застряли на этом. В первые несколько раз вам может понадобиться составить нумерованный список шагов, необходимых для решения проблемы, чтобы они могли на примере узнать, как разобрать проблему.
Если они получают некоторые, но не все материалы в классе, предложите им задавать вопросы в классе, потому что в девяти случаях из десяти они не единственные ученики, не понимающие, и профессор, вероятно, просто замаскировал что-то важное.
Если они тратят «часы», уставившись на одну ошибку, но не выясняя ее, это пустая трата времени, они не многому учатся на этом. Часто ошибки - это проблемы со способностью проникновения в суть, и для их решения необходимо придумать правильное понимание, и у них может не быть ловкости для подобных проблем. Предложите другие общие подходы, которые следует использовать, когда они застряли: попросите другого друга в классе о помощи (узнайте некоторых одноклассников, если это необходимо), начните выполнять свою домашнюю работу заранее, чтобы у них было время остановиться, а затем приходите в Учебную лабораторию и задавайте вопросы в нерабочее время, или идите в кабинет профессора. Если они привыкли к зубрежке, что хорошо подходит для запоминания предметов, они попадут в стену разочарования, когда они сталкиваются с программированием, которое больше о решении проблем, чем запоминание. Покажите им, как искать примеры синтаксиса в их учебнике, в стеке и т. Д. Предложите им опубликовать вопрос на форуме вопросов частного класса, если таковой имеется.
Научите их, как сузить, где код перестает работать. Комментируйте вещи до тех пор, пока не вернетесь к тому, что работает, а затем медленно добавляйте вещи обратно, пока вы снова не получите этот сегмент.
Многие из этих идей могут быть превращены в раздаточный материал, если они много выдвигаются. Стратегии - это, как правило, профессора-часть, которая затушевывает - они тратят свое время на синтаксис, семантику того, как писать циклы, массивы, ввод-вывод и т. Д. Но не хватает времени на то, «что мне делать, когда я пытаюсь» запустить мой код, и он просто не скомпилируется или не зависнет? "
Когда речь идет о концептуальных вещах, особенно основах, таких как «что такое переменная» или «что такое цикл?» непонимание, которое помешает им не отставать от остальной части курса. На лекционном курсе у профессора может не быть времени, чтобы ответить на каждый вопрос или помочь лампочке сработать каждому студенту. И это одна из причин, почему репетиторы так важны для обучения программированию. Им может потребоваться индивидуальное обучение с дополнительными аналогиями, чтобы конкретизировать конкретную тему.
Поскольку вы преподаете на C ++, я представляю, что уроки представляют собой абстрактную тему, которую некоторые студенты пытаются «получить». Часто абстракция классов преподается с примерами, соответствующими некоторому случайному объекту реального мира, например, «банкомату», и проводятся аналогии с объектом реального мира. У вас могут быть переменные для отслеживания того, сколько денег находится внутри, у вас есть методы, которые похожи на правила, которые сообщают банкомату, как реагировать на определенные условия, и т. Д. Иногда одна аналогия является той, которая «придерживается» определенного человека и другие студенты лучше понимают другого.
По возможности, рисуйте для них картинки. Как диаграмма последовательности того, что происходит со временем, чтобы помочь им увидеть общую картину того, что делает код, который они пишут. Пользователь нажимает эту кнопку. Затем программа должна ответить, выполнив x, y и z. Нарисуйте в почтовом отделении массив, похожий на группу почтовых ящиков, каждый из которых может содержать только один номер, а указатели - стрелки, указывающие на «адрес» на передней части коробки. И т.п.