Алексей Егоров. Комментарий на статью ⚡️ Lean как язык формализации многоуровневых рассуждений
Оригинал статьи:
https://leanmodelling.substack.com/p/lean
1. Начну с притчи собственного сочинения. Умник говорит странствующему дервишу - спрячь что-нибудь за спиной и я отгадаю это с двух попыток. Дервиш что-то поднимает с земли, прячет и умник ему говорит: "Ты спрятал камень", "Нет", - отвечает дервиш. "Всё, теперь я знаю, ты спрятал НЕ камень", - радуется умник (не зная того, что А.С.Нариньяни по этому поводу создаст целую концепцию Н-моделей). "Нет", - отвечает дервиш. Умник сильно удивляется, долго думает и отвечает: "Ааааа, я понял и знаю, что ты спрятал. Ты спрятал камень и/или НЕ камень!". "Нет", - отвечает дервиш.
2. Что является критически важным? Что ни формальность, ни формализация не работают в реальных сложных задачах. Они работают исключительно в исчислениях. Сводится реальность к исчислениям? Нет. Феномен нельзя выразить языком, всякое описание - это упрощенная модель. Более того, для одного и того же являения можно предложить огромное число описаний с разным уровнем детализации и разной специализацией. И финальной точкой в проблеме "самого правильного описания" является примат задачи: сначала ставится задача и формулируются требования к ее решению (качество, время, стоимость, ресурсы), а уже затем подбирается адекватная модель для ее решения.
3. Поэтому патетическая "многоуровневая формализация проектов" сводится к задаче сопровождения кода, который удовлетворяет требованию логической верифицируемости.
4. Второй по значимости момент, который мне кажется принят без серьезного обоснования - это эквивалентная выразительность DSL и формального языка. Проблема в том, что предметно-ориентированный язык работает с семиотическими конструкциями, то есть явно или (чаще всего) неявно опирается на модели объектов предметной области и их смысловые отношения, DSL - это обычная знаковая система, формальная только в своей заключительной части - выражения в коде. Ее ценность именно в предметной части, в смысловой, а не в формальной.
5. Теперь поговорим о "многоуровневости". Нужно понимать, что иерархия не является многоуровневой структурой, она - плоская, она представима деревом и может быть отображена планарным графом. Настоящая невырожденная многоуровневость - это слойность, где любой из слоев не может быть представлены в парадигме соседнего слоя. Поэтому заявление о том, что текст на каком-то формальном языке может быть многоуровневым - это просто реклама.
6. Таким образом, чтобы решить задачи бизнес моделирования необходимо вернуться к тому, что должны быть средства описания категорий (классов), отношений и правил, свойств и поведения, то есть какая-то система метаописания задачи и должны быть средства генерации такого описания в исполняемый (компилируемый/интерпретируемый) код с возможностью реконструкции кода в дизайн.
7. Вывод: как было показано выше формальный (и даже формализованный) язык для этого не подходит, большая часть предметной области останется за пределами описания модели, а код, который на каком-то этапе может быть отображен в какую-то формальную конструкцию не может быть синхронизирован с возможными изменениями в проблемной области.