home Преподавание Информационных Технологий в России
Открытая всероссийская конференция

АПКИТ

Конференция
Информационное сообщение

Место проведения

Программа конференции

Регистрация

Участники

Фоторепортаж

Программный комитет

Программный комитет

Спонсоры
Информ. спонсоры
 
Орг. поддержка

AT-SOFTWARE

ПРЕПОДАВАНИЕ ФУНКЦИОНАЛЬНОГО ПРОГРАММИРОВАНИЯ НА БАЗЕ МУЛЬТИПАРАДИГМАЛЬНОГО ЯЗЫКА F# НА ПЛАТФОРМЕ .NET

Сошников Дмитрий Валерьевич (d.soshnikov@phystech.edu, dmitryso@microsoft.com)
Московский физико-технический институт (Москва), Майкрософт Россия

Аннотация
В докладе обсуждается актуальность внедрения курса «Функциональное программирование» в учебный план студентов, изучающих IT и, в частности, будущих разработчиков. Аргументируется выбор языка F# как базового функционального языка и платформы Microsoft.NET, что позволяет студентам реализовывать мультиязыковые мультипарадигмальные проекты, приближенные к индустриальным задачам. Дается краткий обзор языка, демонстрируется несколько примеров, позволяющих заинтересовать студентов (и слушателей доклада) и побудить их к более мотивированному изучению курса. Обсуждается опыт преподавания курса на основе F# на факультете ФИВТ МФТИ.

USING F# MULTIPARADIGM LANGUAGE FOR TEACHING FUNCTIONAL PROGRAMMING ON .NET PLATFORM

Dmitry Soshnikov (d.soshnikov@phystech.edu, dmitryso@microsoft.com)
Moscow Institute of Physics and Technology (Moscow), Microsoft Russia

Annotation
In this presentation we discuss the importance of teaching Functional Programming course to IT students, especially those planning future career in software development. We present several arguments in favour of using F# programming language and Microsoft .NET framework as the main tools for the course, which gives students the opportunity to develop multi-paradigm projects similar to those in industrial settings. We give brief overview of the language, and show several motivating examples, as well as discuss the experience of teaching the language on the faculty of Innovation at MIPT.

Одной из наиболее острых проблем современной компьютерной науки является разработка доступных методов и средств параллельного программирования для многопроцессорных и многоядерных систем. В этой связи наблюдается растущий интерес к использованию в индустриальном программировании функционального подхода, и извечные дебаты по поводу того, почему функциональное программирование редко используется на практике [1], приобретают новую окраску.

Функциональный подход находит своё место в ключевых языках и инструментах программирования компании Майкрософт. Версия языка C# 3.0 содержит множество функциональных элементов (вывод типов, лямбда-выражения, анонимные типы и др.) и функциональное ядро LINQ с поддержкой мета-программирования и ленивых вычислений. Недавно, компания Майкрософт сделала еще более сильный ход - объявила о включении в состав поставки Visual Studio 2010 мультипарадигмального языка программирования F#. Построенный на основе OCaml, этот язык наследует многие элементы классического энергичного функционального языка программирования, расширяя его императивными расширениями (в виде mutable-переменных, циклов и т.д.), удобным монадическим синтаксисом (используемым, в т.ч., и для организации прозрачных параллельных вычислений и асинхронного ввода-вывода) и объектной моделью, совместимой с .NET Framework. Всё это позволяет эффективно использовать F# совместно с другими традиционными языками при создании программных систем, ориентированных на обработку данных и параллельное программирование, делая его широко применимым на практике.

В этой связи особенно актуальным становится преподавание курсов функционального программирования студентам, обучающимся по направлению прикладной математики и информатики, а также другим связанным с разработкой ПО специальностям. При этом функциональное программирование имеет смысл рассматривать не только как чисто теоретическую дисциплину в рамках Computer Science, но и затрагивать его прикладной аспект, использование принципов функционального программирования в реальных системах и языках (например, LINQ, XSLT и др.). Использование в качестве базового языка программирования на базе .NET Framework позволяет студентам воспользоваться имеющимися знаниями об основных библиотеках для построения достаточно функциональных примеров программ, строить достаточно богатые мультиязычные проекты на основе сочетания различных парадигм программирования, наподобие того, как это делается при создании реальных программных систем. Например, применяя функциональный язык для решения задач обработки данных, параллельного программирования или математических расчётов, можно при этом использовать мощь императивного подхода и наработанные инструменты разработки и библиотеки (DirectX, XNA, WPF и др.) для создания эффективных пользовательских интерфейсов и средств визуализации.

При выборе базового языка функционального программирования также имеет смысл уделять внимание функциональной чистоте языка и его теоретической красоте и привлекательности. С этой точки зрения многие учебные заведения используют Haskell в качестве базового, достигая таким образом компромисса между теоретической привлекательностью и практической ценностью языка. Однако автор считает, что использование полноценного промышленного языка функционального программирования F# является не менее оправданным, поскольку позволяет студентам использовать приемы функционального программирования в контексте мультипарадигмальных программных проектов (в которых интерфейс зачастую реализуется на императивном языке, и приходится уделять внимания вопросам сопряжения парадигм и эффективного взаимодействия различных частей программной системы). Важное значение имеет также наличие качественной и доступной литературы по языку [2,3], в том числе на русском языке (книга [4] свободно распространяется по Интернет в русскоязычном переводе).

Автором поставлен курс функционального программирования на основе языка F#, который читался студентам Факультета инноваций и высоких технологий (ФИВТ) МФТИ. Теоретическая часть курса во многом основана на классическом учебнике [6], в то время как язык F# используется в течение курса для демонстрации всех примеров и возможностей функционального программирования. В курсе рассматривается введение в математические основы функционального программирования (λ-исчисление), формальное построение на его основе языка программирования, конкретные приемы программирования на F# и синтаксис языка, ленивые и энергичные вычисления и языки, вопросы реализации функциональных языков (с примером реализации модельного функционального языка «с нуля»), метапрограммирование, параллельное программирование и программирование асинхронных операций ввода-вывода, монадический синтаксис/computational workflows и др. Попутно рассматриваются примеры, позволяющие начать использовать F# для решения различных научных, исследовательских и практических задач.

По следам прочитанного в МФТИ курса в ближайшее время ожидается выход курса видео-лекций в интернет-университете информационных технологий ИНТУИТ.

В докладе, помимо обсуждения вопросов преподавания функционального программирования на языке F# на базе .NET Framework и описания места такого курса в рамках обучения студентов-разработчиков, дается краткое описание языка и демонстрируется несколько эффектных примеров, позволяющих заинтересовать студентов и побудить их к более мотивированному изучению курса.

Литература

  1. Hughes, J. Why functional programming matters. Comput. J. 32, 2 (Apr. 1989), 98-107.
  2. R.Pickering, Foundations of F#, A-Press, 2008.
  3. D.Syme, A.Granicz, A.Cisternio. Expert F#. A-Press, 2008
  4. E. Chailloux, P. Manoury, B.Pagano. Разработка программ с помощью Objective Caml. O’Reilly. Русский перевод: http://shamil.free.fr/comp/ocaml/
  5. J.Harrop, F# for Scientists, Wiley, 2008.
  6. Филд А., Харрисон П. Функциональное программирование. – М.: Мир, 1993.

В начало :: О конференции :: Программа :: Доклады :: Контакты

Техническая поддержка сайта:
Copyright © АП КИТ, 2005
hosted by AT-SOFTWARE
webmasters: perez&helga
webmasters: Arta