Божественный Язык Математики™
Как-то так у человечества получилось, что все существующие методики программирования придумали математики. Может быть и странно, но вполне объяснимо, а большинство основополагающих, базовых, несущих шаблонов программирования либо процедурные, либо функциональные. Ооп придумали для облегчения создания Больших И Сложных систем. И если смотреть на ооп теоретически — действительно, очень удобно. Это удобство рушится, когда возникает необходимость использования сторонних библиотек (а она всегда возникает). Большое счастье, если создатели были хорошими и чуткими людьми, пожалели ваши нервы и многократно прогнали свой код через Unit-тесты, да еще снабдили всё это хозяйство логичной и понятной иерархичностью. Если они этого не сделали, код становится нечитабельным совершенно. У «эзотерических лиспов» с этим дела обстоят значительно лучше. Всё, что вам нужно знать — имя библиотечной функции, её параметры и что она даёт на выходе. Отлаживать такую систему намного проще (в том числе за счет отсутствия сайд-эффектов).
Миф о нечитабельности и эзотеричности ФП языков основан на разнице в восприятии кода программистами. Упор в императивных языках делается и на «человеческое, последовательное восприятие» кода. Например:
int life()
{ // начнём
human Peter = new human(); // Петя, пожалуйста родись
storage shelf = new storage(); // Полка, пожалуйста появись
Peter.Status = "Something good"; // Петя, ты молодец
Peter.getPie(shelf); // Возьми пирожок с полки
return 0; // У нас тут все хорошо, мы закончили, всем спасибо
} // закончим
Функциональные языки, как ни странно, нисколько не менее читабельны. Просто в них описывается не процесс, а решение, результат.
Вот например, функция переворачивающей список (Erlang):
reverse(List) ->
reverse(List,[]).
reverse([Head | Tail], ResultList) ->
reverse(Tail, [Head | ResultList]);
reverse([], ResultList) ->
ResultList.
Она трудна для восприятия нетренированным взглядом, за счёт своей рекурсивной природы, но если немножко
Периодически очень трудно понять, а где, собственно, происходит действие? По-моему это великий Дзен, уметь писать программы, которые работают за счёт определений.

