VisualData

Философия

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

И уж коли мы упомянули способы взаимодействия, то вспомним также, что природа просто обожает симметрию, и в частности симметрию взаимодействия, выраженную принципом "действие равно противодействию". Это наблюдение будет нам полезно.

Философия программирования

"Программа - последовательность действий для достижения результата" © Wiki

Мы привыкли считать ключевыми словами этого определения "последовательность действий". Ее выражают средствами того или иного языка программирования при активном использовании API ОС и различных фреймворков. Полученная таким образом программа различными путями трансформируется в последовательность команд процессора, исполнение которой в конечном итоге и обеспечивает желаемый результат.

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

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

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

Философия предметной области

Есть смысл задуматься, может ли нужный результат быть получен каким-то иным способом программирования? И вспомнить, что помимо человека и компьютера есть еще и третий участник процесса — предметная область задачи. Может результат следует рассматривать как прямое следствие соблюдения естественных правил поведения субъектов в целевой предметной области, как это мы наблюдаем в реальном мире? Если последовать этой логике, то предметом программирования становятся сущности, составляющие предметную область, и законы, управляющие их взаимодействием. И тогда естественным языком программирования становится язык, выражающий термины и правила предметной области, и к тому же использующий для этого близкие человеку смысловые образы.

На первый взгляд направление кажется тупиковым — предметных областей существует поистине бесконечное множество. Но еще 40 лет назад  Э.Ф.Кодд доказал, что любую предметную область можно описать системой связанных таблиц. То же самое утверждение стоит перефразировать так: "любую объективно существующую предметную область можно представить как систему принадлежащих объектам значений, связанных причинно-следственной зависимостью"©.

На смысловом уровне нашего восприятия, конкретная предметная область — это конечное множество взаимодействующих субъектов, причем на уровне логической абстракции это множество описывается понятийными сущностями и их характеристиками (свойствами), а на предметном представляет собой совокупность объектов с их значениями, которые являются экземплярами, производными от абстрактных сущностей и их характеристик. Абстрактные сущности связаны между собой количественными отношениями, а их характеристики - причинно-следственной зависимостью, и все вместе образует логическую модель предметной области, правилам и законам которой подчиняются объекты с их значениями. Но самое примечательное заключается в том, что сущности и связи логической модели сами являются экземплярами, производными от сущностей и связей еще более высокого уровня абстракции.

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