О темповой и программной педагогике

В последнее время я много размышлял о том, как научился программировать. Я посетовал, насколько сложными стали системы программирования; Я размышлял о периоде полураспада технических знаний; Я рассказывал о том, как мой неожиданный путь к вычислительной технике пролегал через простой графический калькулятор на батарейках, который помещался в моем кармане. Главный вывод всех этих размышлений заключается в том, что изучение вычислительной техники, возможно, является в большей степени продуктом обстоятельств, чем личности.

Но есть один аспект обстоятельств, о котором я много думал в последнее время: скорость, с которой человек изучает программирование. С одной стороны, темп кажется бессмысленным. Представьте себе инженера-программиста, впервые изучающего сложную веб-службу и API, например Firebase, и ему говорят: У вас есть ровно 4 недели, чтобы освоить их, иначе мы пометим вас как неудачника. Или старшему архитектору, который долгое время работал на C++, изучая Rust, говорят: У вас есть 2 недели, чтобы научиться свободно говорить, или вы потеряете работу. Или музыкант, берущий в руки Sonic Pi, пробующий живое кодирование, которому программа сообщает: Если вы сделаете слишком много синтаксических ошибок, я отзову вашу лицензию и заставлю вас снова заплатить. любые произвольные сроки обучения не имеют смысла в практическом контексте творчества и инженерии.

И тем не менее, в высшей школе мы регулярно навязываем студентам такие сроки. На вводном курсе по программированию мы говорим: «У вас есть одна неделя, чтобы выучить операторы if, и если вы этого не сделаете, вы провалите промежуточный экзамен и будете вынуждены отложить выпуск или бросить дисциплину». Или мы говорим: «У вас есть 15 недель, чтобы стать компетентным алгоритмистом, и если вы этого не сделаете, ваши родители и сверстники пристыдят вас, и вы будете вынуждены бросить учебу». Многие преподаватели высших учебных заведений считают такие бесчеловечные сроки нормальными; некоторые даже представляют их как тесты на то, кто такие «настоящие» программисты, как будто существует некая биологическая предрасположенность к обучению в произвольном темпе без небольшой поддержки или обратной связи. Хотя студенты часто принимают эти авторитетные указы, они на каком-то уровне знают, что они нелепы, несправедливы и жестоки.

Когда я вспоминаю темп своего обучения, мне трудно даже дать определение. Впервые я столкнулся с программированием на своем графическом калькуляторе ТИ-82, увлекшись версией Тетриса, которой одноклассник поделился со своим братом. Будучи замкнутой, неуклюжей, застенчивой транс-ученицей средней школы, я делила свое время после школы между домашним заданием, баскетболом с друзьями и чтением кода для этой игры Tetris и графического калькулятора TI-82 снова, и снова, и снова. Если я правильно помню, я изучал эту одну программу и много слов в руководстве по TI-BASIC, может быть, 6–9 месяцев с перерывами. Не было надзора; ни один учитель не оценивал мое обучение; не было тестов, заданий, викторин и лабораторных работ. У меня была только личная цель: сделать тетрис играбельным на моем калькуляторе.

Мое обучение продвигалось рывками. Я помню, как сначала изучил GOTO, поняв, что каждый номер строки имеет значение и что GOTO определяет порядок выполнения инструкций. Я сделал большие карты в бумажных журналах того, где и когда переходы GOTO, медленно осмысливая различные разделы тысяч строк в программе. Эта запутанная карта в моей голове и на бумаге была моим проводником к остальной части языка, поскольку я медленно понял, что такое переменная, что такое цикл и как различные загадочные функции отвечают за отрисовку пикселей на графике. составить Тетромино. Синтаксис был, вероятно, последним, чему я научился, так как большую часть времени я тратил просто на чтение программы. Прошли месяцы, прежде чем я попытался отредактировать его, так как очень боялся сломать его и никогда не смогу починить. На протяжении всего времени моим учителем были потертые страницы руководства по моему калькулятору, помогавшие обосновать примеры в коде Tetris на примерах в руководстве.

Месяцы спустя, когда я сделал свое первое редактирование, это было воодушевляюще: даже простые изменения в одну строку оказали глубокое влияние на поведение игры, и я начал понимать, как я могу планировать многократные изменения для достижения своей цели. Большая часть моего внимания была направлена ​​на часть рендеринга игры, которая была очевидным источником ее медлительности, поскольку я мог видеть, как фрагменты медленно стираются и перерисовываются, по одной строке за раз. Я помню, как создал свою собственную небольшую программу, чтобы попытаться рисовать тетромино разными способами, и, поработав в более безопасных песочницах, обнаружил, что рендеринг текстовой консоли намного быстрее. Я начал набрасывать другой способ рендеринга частей. Примерно через шесть месяцев после того, как я впервые начал читать программу, я начал целенаправленно изменять ее и стремиться к лучшему дизайну.

В целом, я, вероятно, не тратил на этот побочный проект больше времени, чем за семестровый курс. Но порядок, в котором я делал вещи, темп, в котором я это делал, критерии, по которым я управлял своим прогрессом, и способы, которыми я позволял своему любопытству управлять всем, были ничем не похожи на большинство курсов программирования в высших учебных заведениях. Моя траектория обучения была выстроена вокруг меня радикально с учетом культурных особенностей.

Ничто из этого не направлено на приукрашивание самодидактического обучения. Я отчаянно нуждался в учителе все это время, в ком-то, кто просто объяснил бы мне загадочные идеи, с которыми я сталкивался, помог бы мне, когда я застрял, помог бы мне увидеть более широкую картину, пока я застрял в сорняках отсутствующих скобок. Учитель превратил бы мой 6–9-месячный проект в веселую шестинедельную прогулку. Единственная действительно ценная вещь в моем самостоятельном обучении заключалась в том, что у меня была свобода действий в структурировании своего обучения. Эта ориентированность на студента не требует отсутствия учителей; это просто требует, чтобы учителя были сосредоточены на студенте.

Когда мы смотрим на педагогику программирования в высших учебных заведениях и ее строгий, неумолимый темп, трудно увидеть какое-либо пространство для свободы действий. Некоторые подходы к мастерскому обучению, подобные тем, которые изучают мои коллеги Бретт Вортцман и Кевин Лин, делают успехи в направлении студенческого агентства. Но даже в этом случае более широкие структуры остаются нетронутыми: оценки определяют поведение, а 10-недельная четверть определяет темп. Настойчивую индустриализацию обучения, давно заложенную в основу высшего образования, трудно искоренить полумерами, несмотря на героические и амбициозные реструктуризации моих коллег. И поэтому темп продолжает господствовать над потребностями учащихся.

Как профессор в Информационной школе, я не имею привилегии преподавать вводные курсы по программированию или определять учебные программы по вычислительной технике. Моя компетенция связана с информационными учебными программами, которые лишь косвенно пересекаются с программированием. Но если бы я это сделал, я бы попробовал следующее:

  • У меня было бы целых два года обучения программированию на основе проектов. Будь то четверти или семестры, каждый студент будет записываться на один и тот же курс — назовем его CS 1 Программирование. Это будет оцениваться как зачет/нет зачета и будет длиться примерно 15 часов в неделю.
  • Прямое обучение будет включать набор ресурсов для обучения, особенно учебников и тщательно подобранных видео. Учащиеся будут использовать их, когда они им понадобятся, а преподаватели укажут на них, когда у учащегося возникнет необходимость изучить концепцию. Классное время будет студийным, чтобы помочь организовать сообщество, соединить студентов с ресурсами и масштабировать проекты, как в мастерской.
  • Оценка будет основываться на значках, охватывающих сотни различных небольших единиц знаний, включая все, от конкретного синтаксиса и семантики в конкретном языке до идей в алгоритмах и структурах данных, а также конкретных технологий для определенных областей. Преподаватели оценивали студентов на получение значков в ходе беседы, при этом студенты демонстрировали, чему они научились, отмечали свою работу, а преподаватели оценивали, усвоили ли они концепцию. Получение значков вообще не потребуется; они будут просто личным инструментом для студентов, чтобы отмечать, праздновать и делиться своим прогрессом, а также обрести уверенность в своем понимании.
  • Через два года студенты получат доступ к широкому набору продвинутых тем, которые в настоящее время предлагаются в учебной программе высшего образования, основанной на двухлетней практике программирования под руководством студентов. На курсах будет указано, какие значки будут наиболее полезными для успешного прохождения курса, что-то вроде предварительных требований, но студенты смогут свободно записываться, не встречая их, приобретая навыки по ходу дела.
  • В течение этих двух лет роль инструкторов и ассистентов будет в первую очередь сводиться к роли наставников, помогая учащимся выбрать прямое обучение, помогая им изучать концепции в контексте их проектов, формируя оценку их знаний посредством получения значков и помогая развивать их интересы, самосознание. -эффективность, мужество и идентичность программистов. Конечно, все сверстники также будут играть эти роли, помогая учащимся учиться одинаковым образом, а в процессе обучения обучаться сами.
  • В течение этих двух лет учащиеся выполнят остальные общеобразовательные требования по гуманитарным и социальным наукам, что даст им критический взгляд на их творческое творчество. На протяжении всех этих курсов эти курсы помогут дополнить творческую работу студентов постоянными вопросами о том, почему они делают то, что делают.
  • По истечении двух лет студенты будут отмечать свое обучение, демонстрируя то, что они создали, ведут хронику своего обучения, делятся своими заработанными значками и благодарят многих друзей, сверстников, ассистентов и инструкторов за помощь в их путешествии. Такие праздники устраивались в конце четверти/семестра, чтобы новички могли увидеть и отпраздновать «выпуск» курса своих сверстников и представить себя в подобном месте через пару лет.

Это видение основано на многих научных идеях, включая культурно-чувствительные вычисления, мастерское обучение, подключенное обучение и конструктивизм. Но это также происходит из гораздо более старых традиций ученичества, когда люди учатся на практике, но под наблюдением сообщества практиков, которые могут направлять и учить по требованию. Эти мощные идеи гораздо более проверены и основаны на исследованиях в области образования, чем нынешняя педагогика, которая в значительной степени основана не на изучении науки, а на капитализме, индустриализации и статистике.

Кто-нибудь хочет нанять меня, чтобы разработать это видение для своей программы? Я сделаю это! Это будет потрясающе, красиво, инклюзивно и трансформирующе, и это станет предметом зависти всей академии во всем мире. Филантропы осыпают вашу школу деньгами не только за инновации, но и за выдающихся, уверенных в себе выпускников. Нет? Хорошо. Кто-нибудь хочет попробовать на себе? Вы говорите, что не готовы драться с коллегами? Боишься рискнуть? Хм. Хорошо. В таком случае давайте продолжим возиться с низшими элементами педагогики программирования еще три десятилетия и посмотрим, как далеко это нас продвинет. У меня свои прогнозы :)

А если серьезно, изменения даются тяжело. Я понимаю. Думать о преподавании и обучении по-новому страшно, а применять их еще страшнее. И редко нам даются ресурсы для фактического планирования таких изменений. Но мы должны думать смелее. Системы, которые у нас есть сейчас, не служат ни студентам, ни миру, и мы должны их изменить.