Чому в MIT більше не вивчають SICP

Чому в MIT більше не вивчають SICP

Днями широку увагу привернув виступ Джеральда Джей Сассмана, який відбувся на початку року на мітапі NYC Lisp, - одного з авторів великого і могутнього SICP, а також хрещеного батька Scheme. Всьому виною - відповідь на питання, чому в MIT припинили викладати легендарний курс 6.001, побудований на основі книги Сассмана і Абельсона «Структура та інтерпретація комп'ютерних програм» (питання поставлено на 59 хвилині).


Сассман назвав дві причини; втім, відразу зауважу, що в першій з них немає нічого особливого. До 1997 року Абельсон і Сассман вже втомилися розповідати практично одне і те ж з 80-их, тому вирішили залишити викладання і запропонували голові кафедри самостійно вирішити, як вчинити з самим курсом. Тут дивуватися дійсно нічому - що завгодно може осточертерти, якщо займатися ним досить довго.

Втім, друга причина набагато серйозніша. На думку Сассмана, вони з Абельсоном усвідомили, що навчальний план SICP більше не в силах підготувати інженерів до того, що являє собою «інжиніринг» сьогодні. У 80-их і 90-их інженери будували складні системи, комбінуючи прості і добре вивчені «частини». Метою SICP було надати мову абстракцій для міркувань про такі системи.

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

Зі слів Сассмана, "Програмування сьогодні більше нагадує науку: ви берете частину бібліотеки і «тикаєте» в неї - дивіться на те, що вона робить. Потім ви питаєте себе, «Чи можу я налаштувати це так, щоб воно робило те, що мені потрібно?». Підхід «аналіз через синтез», який використовується в SICP, коли ви будуєте велику систему з простих, маленьких частин, став неактуальним. Сьогодні ми програмуємо «методом тику».

Зрештою, в якості альтернативи для Lisp в MIT був обраний Python. На користь мови викладачів схилив той факт, що для Python доступна значна кількість бібліотек, які дозволяють використовувати її для вирішення вправ у найрізноманітніших типах проектів (наприклад, для написання ПЗ для управлінь роботами).

Втім, сам Сассман пожартував, що використання Python було рішенням у дусі «пізнього зв'язування» («late binding») - оскільки план навчання SICP був більш «послідовним» порівняно з тим, що зайняло його місце. Він зізнався, що разом з колегами як і раніше не уявляє собі, яким повинен бути оптимальний план навчання.

Думки щодо сучасної освіти в цілому і того, чому ж все-таки повинні навчатися майбутні software engineer, розходяться радикально - тому запропонувати однозначний висновок з нововведення неможливо. Згідно з одним з них, фундаментальною метою навчання CS є розуміння того, як працюють комп'ютери, а не вивчення конкретних мов програмування, і вже поготів - бібліотек. З думкою співавтора курсу Абельсона щодо кінця ери SICP в MIT можна познайомитися за посиланням.

Сучасна економіка гостро потребує присутності на ринку великої кількості прикладних програмістів, і університети виконують свій обов'язок у підготовці студентів до майбутнього. Природно, вивчити все, особливо на старті кар'єри, видається неможливим; і в той же час, серйозне вивчення CS дозволяє зменшити кількість поганого коду і страждань колег-розробників.

Одна з баєк про MIT завжди говорила про те, що «вивчення SICP і Lisp - це той момент, коли першокурсники починають залишати більшу частину світу позаду себе по частині можливості вирішення проблем (мається на увазі problem solving) і вмінню робити свою роботу»; більше того - багато випускників MIT надалі якраз і займаються тим, що пишуть бібліотеки самі, а не використовують чиїсь ще. Думається, що незважаючи на жорстокі реалії бізнесу, серед нас знайдуться ті, кому (потай) набагато більше задоволення приносить процес навчання програмуванню «з нуля», ефективне використання ресурсів і побудова своїх велосипедів, ніж щоденні розбірки з чужими API і пов'язування вже готових open source компонентів у прагненні зробити те, що потрібно - те саме «get work done», про яке вів мову Сассман (хоча новий підхід у цьому відношенні дійсно ближче до виробничих завдань). Однак, часи, коли студентам в ході навчання доводилося займатися створенням компіляторів/інтерпретаторів, можуть відійти в минуле швидше, ніж нам здається.

Зрозуміло, все це - не привід відмовлятися від знайомства з SICP. За традицією, посилання на саму книгу і лекції додаються.