Переосмысление профиля software-архитектора в эпоху AI

Source asciidoc: `docs/article/rethinking_software_architect_profile_ai_era.adoc`

Oleksandr :doctype: article :toc: macro :toclevels: 2 :sectanchors: :sectlinks: :icons: font :source-highlighter: rouge

Software как картина системы

В эпоху AI профиль software-архитектора приходится описывать иначе. Классическое резюме всё ещё может перечислять языки, frameworks, компании и роли, но оно всё хуже объясняет главное: как человек мыслит систему, как он принимает архитектурные решения и как удерживает смысл software, когда код может генерироваться быстрее, чем команда успевает его осмыслить.

Для меня software ближе к созданию сложной картины, чем к механическому заполнению списка требований. Сначала появляются крупные пятна: грубые контуры системы, skeletons, boundaries, manifests, trees, базовые ограничения и первые направления ответственности. На этом этапе важна не декоративная точность, а правильное расположение масс: где будет центр системы, где пройдут границы, какие области должны быть отделены, какие связи допустимы, а какие сразу начнут разрушать композицию.

Затем идут следующие итерации: тона, полутона, уточнение структур, выравнивание смыслов, исправление ложных акцентов, проявление hidden concepts, проверка naming, responsibility, dependency shape и workflow direction. Система начинает становиться читаемой. В этот момент архитектура уже не выглядит как набор папок и классов. Она начинает выражать внутреннюю форму: какие понятия действительно существуют, где живёт ответственность, какие переходы должны быть явными, какие ограничения нельзя оставлять только в голове разработчика.

После этого приходят более тонкие мазки: inspections, clean inspections, architecture inspections, SOLID inspections, static analysis, code-style checks, behavioral checks, validation gates, policy gates, testing iterations и уже затем проверка в реальном использовании пользователем. Это не отдельные бюрократические шаги, а последовательное доведение картины до состояния, где ей можно доверять.

Такой подход не похож на мотивацию “делай как мастер и когда-нибудь станешь мастером”. Не похож он и на “делай правильно, чтобы тебя не наказали”. И тем более не похож на “вот тебе всё, сделай в срок”. Мне ближе другое: видеть форму будущей системы, работать итерациями, держать ограничения, улучшать композицию и доводить software до состояния, где его можно понимать, расширять и безопасно автоматизировать.

От производства кода к интерпретации системы

AI меняет центр тяжести в software development. Раньше bottleneck часто находился в скорости реализации: кто быстрее напишет код, кто лучше знает framework, кто увереннее применит familiar pattern. Сейчас эта часть остаётся важной, но перестаёт быть главным отличием. Когда AI может генерировать функции, классы, тесты, команды и API, ценность инженера смещается выше: к суждению, интерпретации, направлению, постановке ограничений и сохранению модели.

Современный software-архитектор должен читать codebase не только на предмет syntax, correctness или style. Он должен видеть намерение системы. Какие понятия начинают проявляться? Какие решения были отложены? Где naming больше не соответствует ответственности? Где framework-структура есть, но смысл системы выражен слабо? Где бизнесовое поведение сплющено в процедурное перемещение данных? Где automation может усилить уже существующий architectural drift?

Это не обычный refactoring. Это architectural interpretation. Цель не в том, чтобы код выглядел более sophisticated. Цель в том, чтобы система стала более правдивой.

Современное объектное мышление без старого OOP-языка

Объектное мышление по-прежнему важно, но не как резюмейный keyword. Важно не сказать “я знаю OOP”, а показать, что ты понимаешь, как реальные системы формируются вокруг распознаваемых вещей, ответственности, переходов, ограничений, отношений и последствий.

Старый OOP-язык часто говорит о properties, behavior, inheritance и encapsulation. Этот словарь полезен, но его уже недостаточно. В AI-assisted development более глубокий вопрос звучит иначе: сохраняет ли software форму реальности настолько хорошо, чтобы будущие люди и AI-агенты могли безопасно её расширять?

Поэтому важны не классы как украшение, а software как structured meaning. Нужно видеть понятия, которые должны стать явными элементами системы. Нужно находить ответственность, которой нужен устойчивый дом. Нужно замечать переходы, которые должны быть видимыми, а не случайными. Нужно защищать constraints, а не просто подразумевать их. Нужно перенаправлять generated code до того, как он застынет в архитектуру.

Engineering judgment в эпоху AI

AI может предложить. Инженер должен оценить.

AI может сгенерировать. Инженер должен сохранить смысл.

AI может завершить локальную задачу. Инженер должен защитить систему.

AI может следовать инструкциям. Инженер должен знать, какие инструкции вообще стоит давать.

Именно поэтому AI-era software work требует structured prompts, repository scans, controlled patch waves, validation gates и architecture-first review. Это не просто workflow preferences. Это safeguards для сохранения смысла системы.

Generated code может быть локально правильным и всё равно глобально вредным. Он может решить задачу и размыть responsibility. Он может создать implementation, но не прояснить model. Он может сделать так, чтобы что-то запускалось, но стало труднее для понимания позже. Поэтому новая инженерная ценность не в blind generation, а в способности направлять генерацию так, чтобы она усиливала систему, а не разрушала её форму.

Harvest как пример failure visibility

Один из примеров такого мышления — Harvest, tooling-направление вокруг Symfony/PHP container-build diagnostics и failure visibility.

Поверхностная проблема проста: когда Symfony container build падает, разработчик часто видит только финальную или самую заметную ошибку. При этом внутри системы может быть более богатая failure chain, но tooling не всегда раскрывает полную диагностическую форму достаточно ясно.

Более глубокая проблема интереснее: современные системы часто знают больше, чем объясняют.

Сильная development environment должна не просто сообщать, что что-то упало. Она должна помогать увидеть, как ошибка сформировалась, какие dependencies участвовали, какие assumptions сломались и какая часть системы требует внимания.

Такой tooling становится ещё важнее в AI-assisted development. Агентам нужны inspectable systems. Людям нужен более богатый diagnostic context. Командам нужна failure visibility, которая поддерживает reasoning, а не только debugging.

Harvest как направление — это не только идея отдельной feature. Это способ видеть software: система должна раскрывать достаточно своей внутренней структуры, чтобы люди и AI-агенты могли рассуждать о ней ответственно.

Новый профиль software-архитектора

Профиль software-архитектора в эпоху AI должен показывать не только опыт, стек и набор паттернов. Он должен показывать способ мышления.

Такой специалист умеет видеть system form. Он понимает, где структура больше не выражает реальную модель. Он умеет отличать framework compliance от strong design. Он видит, когда service технически валиден, но скрывает concept, который должен быть явным. Он понимает, что generated solution может пройти локально и всё равно повредить global structure.

Это профиль не человека, который просто производит больше кода. Это профиль человека, который помогает системе становиться понятнее, правдивее и долговечнее.

Возможно, именно это и становится одним из главных профессиональных отличий в AI-era development: меньше code accumulation, больше system interpretation; меньше blind generation, больше architectural judgment; меньше механического следования шаблону, больше способности видеть будущую форму software и доводить её до зрелости.