
Как вы преподаете ввод/вывод перед Монадами? Внутри радикального учебного плана для курса FP 1000-Student
17 июля 2025 г.Таблица ссылок
1 Введение
2 Структура и условия курса
2.1 Условия
2.2 программа
3 лекции
4 Практическая часть
4.1 Механизмы взаимодействия
4.2 Техническая настройка и автоматическая оценка
4.3 Выбранные упражнения и инструменты
5 Проверьте свое доказательство по примеру
6 экзаменов
7 Связанная работа
8 Заключение, подтверждения и ссылки
2 Структура и условия курса
2.1 Условия
Курс 5 ECTS [2] был обязательным для студентов компьютерных наук в своем третьем семестре и факультативным для других связанных степеней, таких как Games Engineering или информационные системы. Все студенты изучали Java в своем первом семестре и проходили курсы по алгоритмам и структурам данных, дискретной математике и линейной алгебре. Курс проходил в течение 14 недель с одной 90-минутной лекцией, одним 90-минутным учебником и одним листом спорта каждую неделю.
1057 студентов зарегистрировались на первую итерацию [3], которая проходила в кампусе в зимнем семестре 2019 года (WS19) и 1031 для второй итерации [4] в зимнем семестре 2020 (WS20), проходивших в виртуальном пространстве из-за пандемии Covid-19.
Обе итерации были организованы лектором, Тобиасом Нипкоу и авторами этой статьи. Первый спроектировал материал лекции, создал слайды [5] и прочитал лекции. Остальные позаботились о практической и организационной части курса. Все приобрели ценный опыт в проведении онлайн -курса по теории вычислений для 1071 студентов в летний семестр 2020 года. Наконец, Мануэль Эберл имел честь помогать нам в еженедельном конкурсе программирования (см. Раздел 4.1).
Само собой разумеется, управление учебными пособиями для более чем 1000 студентов каждый семестр сам по себе невозможно. Нам также помогали 13 студентов -помощников в WS19 и 22 студенческих помощниках в WS20. В WS19 их основной задачей было запустить учебные пособия и предоставить обратную связь для домашних заданий (например, качество кода). Тем не менее, нам стало ясно, что эта ручная обратная связь не эффективна и что их время лучше потрачено на создание увлекательных упражнений (см. Раздел 4.1). В среднем каждый помощник работал 10 часов в неделю, проводив 4 часа на управляемые учебники, а оставшиеся 6 часов готовились к учебным пособиям, оценивая студенческие представления и внедряя новые упражнения для студентов.
2.2 программа
Курс посвящен основам функционального программирования и проверкой функциональных программ. Большинство частей курса могут быть выполнены с использованием любого функционального языка. Мы выбрали Haskell из -за его простого синтаксиса, большого сообщества пользователей и хороших тестирования (в частности QuickCheck). Программа оставалась рядом с тем, что представлена в [4]. Изменения являются пропуском тематического исследования анализатора, строгого внедрения индукции вычислений и вывода типа, а также решение о разделении ввода -вывода от Monads и ввести его ранее. Последнее сделано в попытке быстрее убедить студентов, что чистые функциональные языки могут быть практичными и иметь дело с побочными эффектами. Для облегчения ссылки мы перечислим программу ниже. Новые или модифицированные темы помечены (∗):
Введение в функциональное программирование
Основные Haskell: Bool, Quickcheck, Integer и Int, охраняемые уравнения, рекурсия на числах Char, String, Cute
Понимание списка, полиморфизм, проблеск прелюдии, базовые типичные кладки (num, eq, ord), сопоставление рисунков, рекурсия в списках (включая накопление параметров), оценка по примеру
Доказательство по структурной индукции и индукции вычислений в списках (∗)
Алгоритм вывода типа (∗)
Функции высшего порядка: MAP, Filter, FoldR, λ-Abstractions, Extensionlishy, Currying
Typeclasses
Алгебраические данные дата и структурная индукция
Бетон ввода/вывода без введения Monads (∗)
Модули: синтаксис модуля, абстракция данных, доказательства правильности
Тематические исследования: Huffman Coding
Ленивая оценка и бесконечные списки
Сложность и оптимизация
Monads (∗)
Концепции вводятся в небольших, автономных шагах. Характерные особенности функциональных языков программирования, таких как функции более высокого порядка и алгебраические типы данных, представлены только на полпути через курс. Это делает дизайн интересных практических задач труднее, но гарантирует, что студенты не перегружены разнообразием новых принципов, которые не являются частью вступительных императивных курсов программирования. В целом, курс продвигается от идей, близких к тому, что известно из императивных языков (например, логические условия, рекурсия по числам, вспомогательные функции и т. Д.) До простых применений новых концепций (например, рекурсии и индукции в списках) для обобщенных новых концепций (например, алгебраических типов и структурных индукций).
Авторы:
(1) Кевин Каппельманн, кафедра информатики, Технический университет Мюнхена, Германия (Кевин.kappelmann@tum.de);
(2) Джонас Радл, факультет информатики, Технический университет Мюнхена, Германия (raedle@in.tum.de);
(3) Лукас Стивенс, факультет информатики, Технический университет Мюнхена, Германия (stevensl@in.tum.de).
Эта статья есть
[2] Европейская система передачи кредита; Один кредит ECTS равен 30 часам работы
[3] https://www21.in.tum.de/teaching/fpv/ws19/ (веб -сайт - кроме «wettbewerb» - немецкий материал; материал курса английский)
[4] https://www21.in.tum.de/teaching/fpv/ws20/ (английский)
[5] https://www21.in.tum.de/teaching/fpv/ws20/assets/slides.pdf
Оригинал