Непрерывность мысли

Jul 20, 2010 16:48

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

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

Возможность непрерывно записывать свою мысль в языке делает его лучшим выбором для прототипирования и вообще любой быстрой проверки идей, чем в языке "дискретном".

Исходя из такого определения, рассмотрим следующие наблюдения:
  • Типизированные языки "дискретней" динамических. Потому что нужно отрывать курсор и убегать вверх, объявляя необходимые типы.
  • Языки с HOF и с синтаксическим сахаром типа "let" и "where" "непрерывней" языков без оных. Опять же потому, что необходимые функции и переменные можно объявлять сразу по месту.
  • Объектно-ориентированный стиль дискретней процедурного и функционального. Надо постоянно прыгать менять классы.
Ну и так далее.

Наверное, как следствие отсюда: в "непрерывных" языках мысль сконцентрированая ближе к одному месту, а в "дискретных" -- размазана по программе.

Вот например: самый "дискретный" и неудобный язык получается Java. Каждый класс обязательно в своем файле, HOF нет, let/where нет, типизация строгая, исключения обязательно протаскивать. Все программирование сводится к тому, чтобы постоянно прыгать из одного места в другое, дописывая по паре символов. Как следствие -- программировать практически невозможно без мощного IDE, которое эти прыжки автоматизирует.

Си -- поудобней, но для объявления структур, функций и переменных нужно гонять курсор. Си++ -- еще чуть поудобней, так как переменные и классы (локальные) можно объявлять прямо по месту.

Например, хаскель -- очень хорош. HOF, типы выводятся автоматически, недостающие функции можно прописывать прямо по месту через let/where. Но для ввода новых типов все равно надо скакать вверх.

Классический лисп еще удобней: динамический, типы организуются по мере их надобности s-exp'ами, и вообще вся вода из алгоритма убирается DSL'ями.

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

Эталоном здесь, наверно, должен стать J :) Четко утверждать я это не могу (языком не владею), но, по-идее, для быстрой проверки своих мыслей это должен быть идеальный инструмент.

continuous, programming, code, discrete, idea, language

Previous post Next post
Up