Ладно, вот серебряная пуля всей инженерии агентов: декомпозиция. Темка, которую святые computer science развивают лет 70. Всё те же пресловутые low coupling + high cohesion, по которой спрашивают на собесах наверное каждого миддла.
Паттерны проектирования, GRASP, вот это вот всё.
Да, но почему тогда в мэйнстриме бесконечно длится "весь этот горький катаклизм, который я здесь наблюдаю, и Владимир Николаевич тоже"? :)
Ведь казалось бы, всё легко и просто: пообщались с заказчиками, подготовили какое-то неформальное ТЗ, декомпозировали его в более-менее чёткие спецификации/тикеты, затем эти спеки декомпозируем в абстракции (паттерны, модули, типы, классы, функции), забрасываем в жпт, профит!
Ведь факт, что уже даже средние нейронки сегодня способны реализовывать абстрактные задачи (по сути, чистые функции) на уровне олимпийских чемпионов по программированию.
Ключевая засада тут - в композиции, в синтезе. Декомпозировать текстовое описание например в классы Гном, Крепость, Оружие - элементарно, да вот только как их собрать в целостную работающую систему? С помощью каких инструментов (паттернов...)? И главное, как?
Вот это чистый Software Design и есть. Вся вторая часть Лаборатории по сути именно этому и посвящена. Объектно-ориентированный анализ и проектирование, функциональное проектирование/функциональные архитектуры и т.д.
Но, признаю, явный акцент на декомпозиции я стал делать только в последнее время, с развитием AI, когда это стало ключевым по сути. И нейронки тут пока слабы, и не факт что усилятся - просто потому, что нету подходящих датасетов, и уже никогда не будет.
С этой засадой -- хрупким синтезом - и связан поток тысяч статей и библиотек по инженерии агентов, харнессам-шмарнесам и прочей малополезной ереси, которые пытаются решить её различными инженерными приляпками.
Вот что я имею в виду: бешеная скорость генерации кода нейронками повышает ценность качественной модульной архитектуры, потому что стремительно накапливается связанность/запутанность, и big ball of mud раздувается прямо на глазах :)
С другой стороны, дешевеющая переделка нейронками снижает ценность архитектурных вложений, потому что переписать становится дешевле, чем заранее грамотно проектировать. Но это ненадолго: такая переделка быстро перестаёт быть дешёвой, когда локальное изменение требует понимания, проверки и модификации всё более значительной части системы. Понадобилось подправить одну функцию, и агент попутно перефигачил 128 файлов, где она использовалась, и наверняка что-то поломал в логике (на "Неявных механизмах логики" разбираю многие десятки таких побочек, и что с этим делать).
Теперь агент молниеносно превращает неоднозначность в большой объём кода, а то и спецификаций, и вроде бы всё смотрится согласованными. Ошибочное допущение успевает распространиться в проекте быстрее, нежели человек его заметит, а внешняя стройность и успешные тесты часто создают ложную уверенность что всё норм.
Короче, декомпозиция -- это не про "разбить на побольше маленьких задачек", а про то, как выбирать границы, внутри которых можно независимо понимать, проверять и реализовывать спеки, и как синтезировать из маленьких артефактов корректно работающую систему без потери общего смысла. Не принципиально новая проблема, но прежние подходы оказались слишком хрупкими -- ломаются под невиданным ранее темпом кодогенерации.
То есть когда декомпозиция проводится без сохранения целостности, это никакое не решение проблемы, а карго-культ. Сложность просто переносится на интеграцию, которая исходно не присутствовала в модели вообще!
Так вот мой подход: "ТЗ декомпозировали в более-менее чёткие спецификации/тикеты, затем эти спеки декомпозируем в абстракции (паттерны, модули, типы, классы, функции)" - добавляется промежуточный шаг, декомпозируем в абстракции, но не сразу в типы и функции, а в паттерны теории категорий (Last Principles Framework), и вот тогда уже появляется и явный синтез, и автоматическая сборка, и математически абсолютный Software Design.
Но, да, думать при этом придётся существенно больше и существенно тяжелее :) И нейронкам особо не делегируешь. Но зато и профит несравнимый.
Post #2681
360
- 👍 30
- ❤ 10
- ✍ 3
- 🙏 3