Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020)

Материал из 0x1.tv

(перенаправлено с «20200207A»)
Докладчик
Сергей Абрамов.jpg
Сергей Абрамов

В 2005 году в Университете города Переславля имени А.К.Айламазяна был создан учебный курс «Haskell, как первый язык программирования». Курс задумывался для чтения первокурсникам, не имеющим устоявшихся навыков в программировании. В течение почти 15 лет курс читался в УГП имени А. К. Айламазяна, ЯрГУ имени П. Г. Демидова, в средней школе 2101 г. Москвы, филиале МГУ имени М.В. Ломоносова в г. Севастополе. Только в двух последних случаях удалось прочитать курс действительно «новобранцам» в программировании, и это был интересный преподавательский опыт.

Видео

on youtube

Презентация

Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020).pdf

Thesis

Целью курса является знакомство студентов с функциональной парадигмой программирования и развития у них алгоритмических навыков. Использование языка Haskell позволяет студентам быстро выйти на написание достаточно серьезных задач в разных областях за счет следующих свойств языка: строгая статическая типизация, чистая функциональность, ленивая семантика, поддержка параметрического полиморфизма и функций высшего порядка, полное освобождение программиста от управления памятью (захват, освобождение, сборка мусора). Все это позволяет концентрироваться на алгоритмической сути задачи, описывать решение в декларативном стиле.

Базой для курса послужила книга . Постепенно была создана оснастка для преподавателя и накоплены материалы для студентов , включающие: 370 слайдов, 120 вопросов для формирования билетов письменных контрольных работ, 112 заданий для самостоятельного написания студентами различных программ (от 1 до 20 строк) на языке Haskell.

Курс рассчитан на один семестр — минимум 30 пар (45 астрономических часов) лекций и очень большую самостоятельную работу студентов с консультационной поддержкой преподавателя, конечно.

Слайды для лекций содержат достаточно много включений работы студента у доски: излагается некая порция материала, ставится задача для программирования и звучит команда «Доброволец — к доске». Один студент у доски, с обсуждением всей остальной аудитории, пишет код решения. После полировки кода всем залом, студент садится, лектор переходит к следующему слайду и все сравнивают то решение, что найдено студентами с тем, что написано на слайде. В последние годы достаточно много таких фрагментов для работы у доски создано на базе математических и даже шахматных головоломок, заимствованных из Facebook-ленты А. В. Шкреда.

Конечно, лекции и даже работа у доски не могут дать студенту глубокое понимание функциональной парадигмы. А письменные контрольные мероприятия не более чем повод освоить самые начала предмета. Основной образовательный эффект дают 112 задач для самостоятельного программирования.

Задачи имеют разную сложность. Начинаются с проблем, которые даже новичок решит в одну строчку. Десяток несложных однотипных задач вида «найти минимальный корень уравнения…» и «найти все (список) корней уравнения…» являются этюдом, прививающим навык выделения фрагментов со свойством «reusable code». Этот навык закрепляется затем во многих других задачах. К концу цикла студент решает вполне серьезные задачи. Например, разрабатывает полный комплект функций для работы с полиномами одной переменной (для двух разных представлений полиномов): упрощение полиномов, сложение, вычитание, возведение в степень, деление с остатком, дифференцирование, вычисление для заданного значения переменной.

Практическое программирование поддержано «сервером автопроверки» http://haskell.pereslavl.ru/. Написав в файле несколько решений заданий, студент может загрузить этот файл на сервер. Система для каждого решенного задания проверяет его на наборе тестов на некоторое соответствие получаемых результатов эталонным значениям. Если тест провален, то студент получает данные для отладки — сообщение: «на входных данных ожидался результат , а получен ». Успешное прохождение сервера автопроверки всех заданий дает студенту допуск к следующему этапу: проверки кода преподавателем. Здесь речь идет о качестве стиля написания, чистоте и красоте кода — о тех вещах, которые сервер автопроверки проконтролировать не сможет.

В 2019 году был опыт преподавания курса в абсолютно дистанционном режиме — преподаватель ни разу не встречался со студентами филиала в г. Севастополе МГУ имени М.В. Ломоносова. Лекции читались с помощью Scype — в Севастополе к компьютеру со Скайпом были подключены колонки и проектор, лектор использовал режим «демонстрация экрана» для показа слайдов и для показа процессов написания кусочков кода и запуска их в Hugs. Поддержка работы студента у доски во время лекции обеспечивалась еще одним компьютером в Севастополе: здесь «доброволец» писал Haskell-код в Google-документе, доступ к которому был и у преподавателя. За счет этого преподаватель на своем экране смотрел (и мог вмешаться) на процесс написания кода и (режим «демонстрации экрана»!) все студенты это тоже видели на экране проектора.

Планы и мечты по дальнейшему развитию курса связаны с тремя направлениями:

  • развитие сервера автопроверки — здесь ясно, что надо доработать;
  • расширение и улучшение набора задач — здесь было бы полезно взаимодействие с любыми заинтересованными партнерами;
  • перевод курса в статус открытого проекта — здесь просто нужны партнеры, обладающие технологическими навыками.
Haskell, как первый язык программирования (Сергей Абрамов, OSEDUCONF-2020)!.jpg

Примечания и ссылки

  • Роганова Н. А. Функциональное программирование: учебное пособие для студентов высших учебных заведений. — M.: ГИНФО, 2002. — 260 с. Абрамов С. М., Пармёнова Л.В., Юмагужин Н.В. Материалы для студентов к курсу лекций «Haskell как первый язык программирования» — УГП имени А.К. Айламазяна, Переславль-Залесский, https://goo.gl/r2IKNz.


Plays:400   Comments:1