Философия
Все наблюдаемое нами бесконечное разнообразие окружающего нас мира в самых различных его проявлениях получено одним единственным способом: бесконечным комбинированием экземпляров базисных сущностей, набор которых минимален с точки зрения их количества и способов взаимодействия. Причем на каждом последующем, качественно новом уровне детализации, базис закономерно будет меняться, по-прежнему строго следуя этому принципу минимализма.
И уж коли мы упомянули способы взаимодействия, то вспомним также, что природа просто обожает симметрию, и в частности симметрию взаимодействия, выраженную принципом "действие равно противодействию". Это наблюдение будет нам полезно.
"Программа - последовательность действий для достижения результата" © Wiki
Мы привыкли считать ключевыми словами этого определения "последовательность действий". Ее выражают средствами того или иного языка программирования при активном использовании API ОС и различных фреймворков. Полученная таким образом программа различными путями трансформируется в последовательность команд процессора, исполнение которой в конечном итоге и обеспечивает желаемый результат.
При правильном использовании языка программирования может быть достигнут практически любой результат, что безусловно хорошо, так как гибко, универсально и всеобъемлюще. Но обратим внимание: ни для человека, понятийный аппарат которого оперирует смысловыми образами, ни для компьютерной вычислительной среды, оперирующей командами процессора, — ни один из существующих языков программирования не является естественным.
Решая те или иные задачи, современные средства программирования используют базис, весьма далекий от этих принципов. И хотя этот базис вполне себе работоспособен, но в силу своей обширности он бесконечно далек от совершенства и эффективности. Подтверждением этому служит постоянство, с которым появляются все новые и новые способы и средства программирования.
Между тем, если воспользоваться идеей, подсказанной природой, то мы обнаружим, что для качественной информационной эмуляции окружающего нас слоя действительности достаточно базиса, состоящего из всего четырех элементов и шести методов их взаимодействия.
Есть смысл задуматься, может ли нужный результат быть получен каким-то иным способом программирования? И вспомнить, что помимо человека и компьютера есть еще и третий участник процесса — предметная область задачи. Может результат следует рассматривать как прямое следствие соблюдения естественных правил поведения субъектов в целевой предметной области, как это мы наблюдаем в реальном мире? Если последовать этой логике, то предметом программирования становятся сущности, составляющие предметную область, и законы, управляющие их взаимодействием. И тогда естественным языком программирования становится язык, выражающий термины и правила предметной области, и к тому же использующий для этого близкие человеку смысловые образы.
На первый взгляд направление кажется тупиковым — предметных областей существует поистине бесконечное множество. Но еще 40 лет назад Э.Ф.Кодд доказал, что любую предметную область можно описать системой связанных таблиц. То же самое утверждение стоит перефразировать так: "любую объективно существующую предметную область можно представить как систему принадлежащих объектам значений, связанных причинно-следственной зависимостью"©.
На смысловом уровне нашего восприятия, конкретная предметная область — это конечное множество взаимодействующих субъектов, причем на уровне логической абстракции это множество описывается понятийными сущностями и их характеристиками (свойствами), а на предметном представляет собой совокупность объектов с их значениями, которые являются экземплярами, производными от абстрактных сущностей и их характеристик. Абстрактные сущности связаны между собой количественными отношениями, а их характеристики - причинно-следственной зависимостью, и все вместе образует логическую модель предметной области, правилам и законам которой подчиняются объекты с их значениями. Но самое примечательное заключается в том, что сущности и связи логической модели сами являются экземплярами, производными от сущностей и связей еще более высокого уровня абстракции.
Иными словами, существует совершенно крохотный набор абстрактных базисных сущностей, множеством экземпляров которых можно информационно описать любую предметную область в любом ее состоянии. Базисные сущности с правилами их взаимодействия и дают тот простой язык, с помощью которого можно создать модель требуемой предметной области, используя которую можно гораздо эффективнее достичь того же результата, что и традиционным программированием.