вторник, 13 октября 2009 г.

[comp.prog.thoughts] Причины шума вокруг функционального программирования

Начинал писать этот текст как комментарий. Но потом решил вынести в отдельную заметку, уж очень понравилось самому как написано ;)

По поводу шума вокруг ФП у меня в последнее время вот какая теория.

Когда-то давно, больше двадцати лет назад, в мейнстриме было структурное и модульное программирование. Которое подразумевало обычную функциональную декомпозицию задачи. Для ряда актуальных на тот момент задач (GUI, например) функциональная декомпозиция была не очень удобна. Соответственно, народ искал альтернативы, поскольку трудоемкость решений зашкаливала. И тут подворачивается что-то новое и неизведанное под названием ООП. Которое наглядно демонстрирует, что вот это и вот это в ООП решается гораздо проще и быстрее, чем в структурном программировании.

Ура! Все толпой в ООП!

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

Однако время шло. Выросло новое поколение программистов, которое начинало учиться сразу на ООП. Что такое структурное программирование и функциональная декомпозиция сейчас мало кто знает и/или помнит. Везде ООП – и где нужно, и где не нужно. Как обойтись без ООП знают не многие. Даже на C программируют с использованием ОО идей о полиморфизме и инкапсуляции (сам видел примеры такого кода в OpenSSL и gSOAP).

Соответственно, писать в ОО стиле некоторые задачи сложно, трудоемкость решений зашкаливает. А тут подворачивается что-то “новое и неизведанное” под названием ФП. Которое наглядно демонстрирует, что вот это и вот это в ФП решается гораздо проще и быстрее, чем в ООП. Ну и плюс шумиха вокруг multi-/manycores и concurrency: “Как! Вы все еще кипятите выискиваете баги в shared memory из-за side effects?! Тогда мы идем к вам!”

Ура! Все толпой в ФП!


Естественно, что все это утрирование и передергивание. Современное ФП – это далеко не структурное программирование середины 80-х годов. Но в плане декомпозиции задачи я честно не вижу принципиальной разницы между ФП и структурным программированием. А различия между декомпозицией в функциональном и объектном программировании были хорошо описаны в книге Бертрана Мейера “Объектно-ориентированное конструирование программных систем”.

Отправить комментарий