Членам Бюджетного комитета. (О Haskell и Java.)

To the members of the Budget Council. (On Haskell and Java.) EWD Haskell.

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

Дело в том, что вопрос не мелкий. Коллеги за пределами штата (до сих пор!) часто интересуются, как я выживаю в таком месте, как Остин, Техас, автоматически предполагая, что густой техасский консерватизм гарантирует настолько же густую заурядность. Я обычно отвечаю примерно так: «Не волнуйтесь. Кафедра информатики — вполне просвещённое место, например, во вводном курсе мы преподаём нашим первокурсникам Haskell». Сначала они почти не верят, потом начинают завидовать — обычно оказывается, что их учебная программа для студентов не оправилась от перехода от Паскаля к чему-то вроде C++ или Java.

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

Фундаментальная причина такого выбора следующая: функциональные программы намного проще рассматривать как математические объекты, чем императивные, благодаря чему можно научить строго рассуждать о программах. Дополнительное преимущество функционального программирования с «ленивыми вычислениями» состоит в том, что его среда отбивает охоту к операционному мышлению.

Наконец, сравнивая конкретно Haskell и Java, Haskell, хотя и не идеален, на несколько порядков качественнее Java. Java — это бардак, и понадобилась широкая рекламная кампания и агрессивное впаривание, чтобы его приняли в коммерческом мире. Достаточно плохо уже то, что индустрия принимает явно хромые проекты как стандарты «де-факто». Я лично считаю, что университет должен поддерживать жизнь в более здоровых альтернативах.

* * *

Не только скрипка делает скрипача, нас всех формируют инструменты, которыми мы научились пользоваться, и в этом аспекте язык программирования приводит к отдалённому последствию: он формирует привычки нашего мышления. Поэтому выбор первого языка программирования настолько важен. Было бы хорошо использовать вводный курс программирования как основу для создания культуры, которая может служить фундаментом изучения информатики. Не стоит начинать с забывания того, чему учили раньше (если это вообще возможно: то, что стало нашим прошлым, навсегда останется таким). Этот выбор — огромная ответственность по отношению к нашим студентам, поэтому его нельзя поручить случайному председателю чего-то там, выбор должен быть сделан Бюджетным комитетом. Этот вопрос не из тех, с которыми справятся чиновники или политики, здесь нужны государственные деятели.

Остин, 12 апреля 2001 года.

Эдсгер Вибе Дейкстра

Расшифровка: Maria Fronczak.
Откорректирован 12 ноября 2014 года.