Pull to refresh
Хекслет
Школа программирования

Письмо Дейкстры: почему обучение программированию нужно начинать с функционального языка

Reading time 4 min
Views 102K
Original author: Edsger Dijkstra


Недавний перевод статьи «Пора заменить Python как язык для обучения» спровоцировал большую дискуссию. Очевидно, что программисты считают эту тему очень важной. К сожалению, большинство споров были об императивных языках, и мало кто предлагал функциональные языки в качестве инструмента обучения программированию.

Мы в Хекслете недавно запустили новую версию, ключевой особенностью которой стали практические упражнения по программированию в браузере. В связи с этим мы стали получать еще больше писем от начинающих программистов с вопросами вроде «с чего начать». С одной стороны, они хотят выложить бета-версию приложения в app store через неделю. С другой стороны, мы понимаем, что за такой короткий срок, наверное, можно научиться кодить приложения, но нельзя научиться программировать. И сложно решить, что лучше: как можно быстрее научить созданию простых приложений без реального понимания программирования, алгоритмов и их вычислительной сложности, а потом начать знакомство с этими важными темами, или начать «с начала», и органично придти к созданию приложений и продуктов после освоения фундамента.

В 2001 году, Эдсгер Дейкстра написал письмо экономическому совету университета Техаса. В нем знаменитый ученый призывает членов совета задуматься о смене языка программирования для вводного курса. К сожалению, язык был заменен на Java. Примерно в то же время MIT сменили язык курса «Структура и интерпретация компьютерных программ» с функционального Scheme (диалекта LISP) на Python.

Сегодня мы публикуем перевод этого письма.

Членам Экономического Совета


Я пишу вам по поводу слуха о замене языка во вводном курсе по программированию с функционального языка Haskell на императивный язык Java. Я считаю, что Совет должен взять на себя ответственность, чтобы решение не было принято на неправильном уровне.

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

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

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

Наконец, сравнивая конкретно Haskell и Java, хочу сказать, что Haskell хоть и не идеален, но на порядки качественнее чем беспорядочная Java (которой потребовалась широкая рекламна кампания и агрессивные продажники чтобы стать коммерчески приемлемым продуктом). Она настолько плоха, что вся индустрия в целом принимает низкокачественный дизайн как стандарт де факто. Лично я считаю, что университет должен оставить более здоровую альтернативу на плаву.

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

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

Only registered users can participate in poll. Log in, please.
Обучение программированию следует начинать с
22.3% Функционального языка (Haskell, LISP, Scheme, etc) 746
26.04% Императивного языка (Java, C / C++, etc) 871
14.32% С того языка, на котором можно как можно скорее сделать продукт (приложение), а потом уже изучать функциональные языки, математику и алгоритмы 479
2.48% Функциональные языки, математику и алгоритмы вообще не нужно изучать если вас интересует только создание продукта (приложений) 83
34.86% С основ теории алгоритмов 1166
3345 users voted. 1038 users abstained.
Tags:
Hubs:
+57
Comments 309
Comments Comments 309

Articles

Information

Website
ru.hexlet.io
Registered
Founded
Employees
51–100 employees
Location
Финляндия
Representative
S__vet