Новая статья в ACM Inroads описывает все, что не так с образованием CS на уровне средней школы. Многие из нас, посторонних, вероятно, знали об этом с самого начала.
Скотт Портнофф, учитель информатики в средней школе, много думал о том, что не так с образованием в области компьютерных наук. Он отмечает, что, хотя CS-образование выглядит успешным, в основном оно состоит из студентов, увлекающихся образовательно-развлекательными проектами, такими как робототехника. Если присмотреться внимательнее, кажется, что ученики на самом деле не достигают значительного прогресса.
Статья очень длинная, и если вы ее прочитаете (а вам следует это сделать), вы вполне можете убрать некоторые идеи, отличные от тех, которые я выбрал. Ключевое наблюдение, однако, заключается в том, что программирование занимает центральное место в информатике, но не в центре образования в области информатики.
Первый вопрос: почему?
Ответ заключается в том, что хорошо известная проблема начинающих программистов показывает, что многие студенты бросают курсы CS, потому что не умеют программировать. Решение, конечно, состоит в том, чтобы улучшить способ обучения программированию, но это решение не принято. Вместо этого, если программирование слишком сложно, целесообразно избавиться от него и заменить его «обзорными» или обзорными курсами. Цитата из CSTA K-12 Computer Science Standards:
«Практически с самого начала информатике мешало представление о том, что она сосредоточена исключительно на программировании. Это заблуждение было особенно разрушительным в классах K – 12, где часто приводило к тому, что курсы были чрезвычайно ограничены по объему и негативно воспринимались студентами. Это также послужило причиной других неудачных представлений об информатике как об изолированном занятии, оторванном от остального мира и имеющем мало отношения к интересам и заботам студентов ».
Таким образом, решение заключалось в меньшем упоре на программирование и больше на «основных концепциях CS» — как если бы программирование не было основной концепцией CS!
«Какой вред в преподавании курса опроса? Утверждать, что поверхностное знакомство с упрощенными темами, не связанными с программированием, — даже если они будут включать ограниченное освещение коротких программ — позже позволит студентам преодолеть NPFP и волшебным образом приобрести компетентность в программировании, — все равно что спорить что просмотр французских фильмов, приготовление блюд парижской кухни и изучение нескольких туристических фраз могли бы надлежащим образом подготовить студентов к второгоднему курсу французского языка. Скорее, эти курсы просто откладывают трудности, с которыми столкнется подавляющее большинство этих студентов, если они позже пройдут курс обучения французскому языку. последующие занятия по CS, которые, без исключения, потребуют от них знания фундаментальных концепций программирования и навыков «.
Вы, наверное, думаете — «очевидно»! Об этом действительно нужно говорить? Да, это так.
Ключевая проблема, недооцененная в статье, вероятно, из-за желания не рассердить коллег, заключается в том, что большинство преподавателей CS не являются опытными программистами. У них слишком мало профессионального развития по этому предмету, а когда они его получают, то обычно ученики будут подвергаться образовательно-развлекательному разнообразию. Проще говоря, учителя должны быть лучше учеников, чтобы преподавать предмет, а, за некоторыми заметными исключениями, это не так.
«Применение текущей модели обучения AP для новых учителей CS похоже на то, чтобы просить учителя, не имеющего математического образования, начать новый курс AP Calculus всего за одну неделю обучения».
Мы уже видели это раньше, когда курсы компьютерного программирования трансформировались в курсы компьютерной грамотности. Это может быть хорошо, если все, что вы пытаетесь сделать, — это создать недорогого компьютерного универсального специалиста, но студент CS нуждается и заслуживает большего.
Проблема в том, что как учителя математики преподают арифметику вместо математики, потому что это проще, так и учителя CS преподают все, кроме программирования.
Хотя я согласен со многими вещами в статье, я расстаюсь с ее предложениями, когда она начинает отстаивать механический подход к программированию.
«Один из возможных механизмов того, почему это работает, заключается в следующем. Как уже говорилось, синтаксис языка не может быть изучен явно, например, с помощью правил грамматики; скорее, он неявно усваивается путем повторяющегося воздействия на языковые данные / вводимые данные. Запоминание программы и ее воспроизведение без ошибок имитирует этот процесс, поскольку учащиеся должны выполнять многочисленные циклы чтения программы, написания ее, не глядя и сравнивая. При этом они неоднократно бомбардируют свой мозг идеализированными языковыми данными. Как и в случае с естественными языками, мозг подсознательно конструирует внутреннюю мысленную неявное представление правил синтаксиса путем индукции по шаблонам в данных «.
Это просто неправильно и пустая трата времени. В программировании есть глубокие идеи, не зависящие от языка. Как программист, который знает несколько языков в прошлом и в настоящее время, я могу сказать вам, что у меня мало проблем с переходом с одного языка на другой, если они вообще есть, потому что у меня есть структура концепций, которая работает на Java, JavaScript, Fortran и Python, C и другие. Именно эту структуру нам нужно научить и сделать так, чтобы синтаксис выглядел неважным, раздражающим и тривиальным.
Обучив многих студентов разного возраста, опыта и подготовки, я могу поручиться за тот факт, что наступает момент, когда они понимают взаимосвязь между статическим текстом, который представляет собой программу, и динамической, зависящей от времени вещью, которая является алгоритмом. что он описывает. Это похоже на раскрытие цветка, и оно того стоит.
Программирование является важным и необходимым условием для CS.
Программирование — это не синтаксис или изучение отдельного языка, а наблюдение за тем, как алгоритмы фиксируются и выражаются статическим текстом.
Нам нужно учить программированию, но нам нужно учить его более глубоким аспектам.