Экстремистское программирование

Термин «экстремистское программирование» предложил в 2012 г. студент Стэнфорда Edward Yang, однако если порыться в сети, окажется, что первые упоминания такой концепции приходятся ещё на 2001-й. Американский профессор Eugene Wallingford упоминал экстремизм ещё в контексте паттерна «Three Bears», который в оригинале вообще был придуман самим Кентом Беком.

Начнём с конца. Паттерн Three Bears (говорят, что его любил использовать Уолт Дисней, пытаясь преувеличить или преуменьшить выразительность анимации персонажа) предлагает схему, которая позволяет человеку находить баланс между сложностью решаемых проблем. Ведь решение и слишком простых, и слишком сложных задач скорее только демотивирует: либо становится скучно, либо грустно.

Этот обучающий паттерн состоит из трёх шагов.

1. Определяем пространство решения. Например, мы хотим познакомиться с Type Driven Development.

2. Придумываем три задачи по теме. Первая должна быть очень простой, вторая — очень сложной. Третья задача должна распологаться где-то посередине.

3. Решаем (или пытаемся решить) задачи и рефлексируем, насколько изменилась наша оценка сложностей задач после решения.

Eugene Wallingford уточняет этот подход, поясняя, что мы хорошо учимся именно тогда, когда интуиция нас обманывает, и мы понимаем это на практике. Подобные паттерны предназначены именно для этого.

Экстремистское программирование предлагает взять любую концепцию программирования, и вставить её в шаблон
«XXX потрясающи! Что, если мы сделаем язык программирования, где будут только XXX?»

Что интересно, этот подход хорошо работает. Например:

— Функции потрясающи! Что, если мы сделаем ЯП, где будут только функции? (языки функционального программирования)
— Объекты потрясающи! Что, если мы сделаем ЯП, где будут только объекты? (Smalltalk)
— Ленивые вычисления потрясающи! Что, если мы сделаем ЯП, где будут только ленивые вычисления? (что-то типа Haskell)
— Файлы потрясающи! Что, если мы сделаем ОС, где будут только файлы? (Unix)
— Списковые ячейки потрясающи! Что, если мы сделаем ЯП, где будут только списковые ячейки? (Lisp)
— Массивы потрясающи! Что, если мы сделаем ЯП, где будут только массивы? (APL)
— Математика потрясающа! Что, если мы сделаем ЯП, где будет только математика? (пруф-чекеры, ???)

Добавлю свои три копейки:

— Типы потрясающи! Что, если мы сделаем ЯП, где будут только типы?
— Тесты потрясающи! Что, если мы сделаем ЯП, где будут только тесты?
— AST потрясающе! Что, если мы сделаем ЯП, где будет только AST? (Форт?)

Есть даже такой «тотально функциональный» язык программирования Charity, который строится на принципе
— Категории потрясающи! Что, если мы сделаем ЯП, где будут только категории?

В общем случае, это конечно такая хитрая уловка. Пока мы не попробуем разрабатывать в ограниченном стиле «всё есть функция», мы как следует не поймем лямбда-исчисление. Когда мы считаем, что всё есть объект, нам придётся признать, что и целое значение, и тип класса — также объекты. И т. д.

Экстремистское программирование очень хорошо работает в обучении, практически независимо от языка. Как только решаешь придерживаться аскетичного подхода «всё есть только то, что я сейчас изучаю», множество вещей проясняется очень быстро.

Поделиться статьей ...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Share on VKPrint this page

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *