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



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

Ми в Хекслете нещодавно запустили нову версію, ключовою особливістю якої стали практичні вправи по програмування у браузері. &Nbsp;згідно з цим ми стали отримувати ще більше листів від початківців програмістів з питаннями на кшталт «з чого почати». З одного боку, вони хочуть викласти бета-версію додатка app store через тиждень. З іншого боку, ми розуміємо, що за такий короткий термін, напевно, можна навчитися кодити програми, але не можна навчитися програмувати. І складно вирішити, що краще: як можна швидше навчити створення простих додатків без реального розуміння програмування, алгоритмів і  обчислювальної складності, а потім почати знайомство з цими важливими темами, або почати «з початку», і органічно прийти до створення додатків і продуктів після освоєння фундаменту.

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

Сьогодні ми публікуємо переклад цього листа.

Членам Економічної Ради

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

Розумієте, це не дрібна деталь. Колеги з інших штатів (все ще!) не розуміють, як я можу виживати в у такому місці як Остін, Техас, автоматично вважаючи що консервативний Техас означає посередність. Зазвичай я відповідаю «Не хвилюйтеся. Департамент інформатики   досить освічене місце, наприклад, у вступному курсі програмування ми знайомимо студентів з Haskell». Спочатку вони не вірять, а потім починають заздрити. Зазвичай виявляється, що їх навчальний план до дотепер не оклигав від переходу з Pascal на щось на зразок C++ або Java.

Гарною причиною вибору функціонального мови програмування у курс для новачків є те, що більшість студентів трохи знайомі з імперативним програмуванням. Побачивши новизну функціонального програмування, вони розуміють, що програмування ширше, ніж вони думали. І студенти досить швидко помічають елегантність функціонального підходу для рішень, які дуже важко (або неможливо) сформулювати знайомими їм з школи інструментами.

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

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

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

Хочеться використовувати вступний курс з програмування для створення культури, яка була б фундаментом для всього навчального процесу. І щоб навчання не починалося з спроб забути або розучитися чогось (якщо таке взагалі можливо: те, що стало нашим минулим, назавжди їм залишиться). Вибір передбачає серйозну відповідальність перед нашими студентами, тому його не можна залишати на совісті випадкового голови чогось. Він повинен бути зроблений Економічною Радою. Це питання не можуть вирішувати чиновники чи політики. Тут потрібні державні діячі.


Навчання програмуванню слід починати з

/>
/>


<input type=«radio» id=«vv64879»
class=«radio js-field-data»
name=«variant[]»
value=«64879» />
Функціонального мови (Haskell, LISP, Scheme, etc)
<input type=«radio» id=«vv64881»
class=«radio js-field-data»
name=«variant[]»
value=«64881» />
Імперативного мови (Java, C / C++, etc)
<input type=«radio» id=«vv64883»
class=«radio js-field-data»
name=«variant[]»
value=«64883» />
З тієї мови, на якому можна як можна швидше зробити продукт (додаток), а потім вже вивчати функціональні мови, математику та алгоритми
<input type=«radio» id=«vv64885»
class=«radio js-field-data»
name=«variant[]»
value=«64885» />
Функціональні мови, математику та алгоритми взагалі не потрібно вивчати якщо вас цікавить тільки створення продукту (додатків)

Проголосувало 16 осіб. Утрималося-3 людини.


Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.