Я не читаю код. Я модный AI инженер… А что тогда читаешь?
Модная дискуссия последних недель: должен ли оператор кодового агента вообще читать код? Или достаточно проверить, что результат соответствует функциональным и нефункциональным требованиям?
Вопрос не новый, просто раньше он звучал в других отраслях.
Английское engine изначально означало не мотор, а «хитроумное устройство» от латинского ingenium, изобретательность. Софт это такой же engine в этом смысле. И если устройство работает и попадает в требования, так ли важно, насколько уродливо оно устроено внутри?
Иногда нет. Иногда критично. Решает не вкус, а три вещи.
Риск. Что произойдёт, если оно сломается? Сколько это стоит в деньгах и сколько людей при этом пострадает.
Скрытые качества. Насколько важно то, что вы не наблюдаете снаружи: производительность под нагрузкой, поведение на границах, утечки, безопасность.
Жизненный цикл. Придётся ли когда-нибудь это понимать, чинить и расширять или оно живёт до первой поломки.
Меня не волнует внутреннее устройство дешёвой светодиодной лампы. Перегорела ... хм, ок - купил новую. А вот конструкция пылесоса волнует: его ремонтопригодность и качество воздуха на выходе это как раз скрытые качества с длинным жизненным циклом.
С софтом ровно так же. Небольшое веб-приложение поверх готовых API, выглядит прилично, проходит вменяемый набор тестов и читать каждую строчку сгенерированного кода, скорее всего просто пустая трата времени. Может быть, вообще не надо этот код и вовсе читать. Но если сервис держит важные данные, сложную бизнес-логику, безопасность или просто должен прожить пять лет... тогда ключевые места смотреть придётся. И тут есть подвох.
Для нового продукта тесты - это его сертификация Единственное свидетельство того, что ваше AI поделие делает то, что заявлено - это качественный и однозначный TDD поверх SDD. А значит, при LLM-генерации вы обязаны убедиться, что тесты не фиктивные, не бессмысленные, не проверяют “не то” и самое неприятное - не повторяют ту же ошибку, что и реализация. То есть модель, которая неправильно поняла требование, напишет под это неправильное понимание идеально зелёный тест!
Так что, возможно, вы не читаете весь код приложения. Возможно, вы читаете код тестов. Но что-то вы читаете всё равно :)
Репутация Теперь про репутацию и здесь я возвращаюсь к предыдущему посту.
В наше мире репутация вендора способна зачастую закрывать часть вопросов: я могу купить условный iPhone просто потому, что Apple обычно делают нормально, и не вскрывать корпус. Я уверен в девайсе. Репутация - это накопленная информация о процессе, которого я не вижу.
С софтом, который сгенерирован агентами в рамках LLM модели(ей) каждый новый продукт - это новый вендор с нулевой репутацией. Вы не знаете, кто и как собрал это продукт.
И вот тут тема предыдущего поста смыкается с сегодняшней проблемой. Я писал про skills, hooks и агентов, которые живут в чьей-то домашней папке и не оставляют следов: reviewer смотрит на артефакт и не видит функцию, которая его произвела. Сложите два тезиса и получите систему, где процесс не наблюдаем, потому что не закоммичен, а артефакт не читается, потому что «работает же! Нууууу!».
А по факту наблюдаемость с тремится к нулю с обеих сторон. Проверить нечего.
Итог и выводы Репутацию сгенерированного кода нельзя купить. Но её можно построить ровно тем способом, о котором я говорил ранее.
1. Skill, правило, hook и промпт под git, на review, с историей изменений - это и есть описанный техпроцесс вендора 2. Тесты в репозитории - это сертификат вашего AI продукта.
Два пункта выше по отдельности мало что стоят, а вот вместе это единственная причина, по которой можно позволить себе не читать какой-то кусок кода.
Не читать код это нормальная инженерная стратегия. Но она работает только там, где вместо чтения кода есть что-то другое. и осознанное.
Если ни того, ни другого нет то у вас нет стратегии и вы просто бредите грезите :)
#разработка #ai #нейросети #it #codereview #тестирование #инженернаякультура
· 27.07
Мне близка мысль, что читать весь код не обязательно, но без репозитория с tests и hooks это легко превращается в веру на слово. Я бы смотрел на критические пути, границы и инварианты. Как вы отделяете «достаточно посмотреть тесты» от «надо лезть в реализацию»?
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответить
0
коммент удалён
· 27.07
Хороший вопрос. У меня тут не один критерий, а два, и они про разное на самом деле
Во-первых, тест что-то доказывает только тогда, когда он получен не из того же источника, что и реализация. То есть, если сам код и тесты написал один агент из одного промпта в одной сессии, тогда тест ни разу не проверяет код! По факту он второй раз фиксирует одно и то же понимание задачи. А по факту свидетельства нет, а самоподтверждение есть. Значит в этом случе либо читаю реализацию, либо восстанавливаю тест от независимого источника: требования, reverse engineering, prod данные, аналитика и тп
Во-вторых, задаю себе простой вопрос: если это сломано, то зелёный тест мне об этом скажет? Есть целый класс дефектов, где ответ будет «нет»: race condition и порядок блокировок, идемпотентность при повторе запроса, поведение при частичном отказе внешней системы, деградация под нагрузкой, отсутствующая проверка прав пользовательской/технической учетной записи. Последнее, кстати, особенно показательно, потому что тест проверяет наличие поведения, а дыра это как раз отсутствие проверки. Такой тест не то чтобы провален, он на самом деле просто не про это. И в этом случае я лезу в код и читаю.
Ваши критические пути, границы и инварианты на самом деле это ровно те места, где оба мои фильтра срабатывают одновременно. Поэтому список Ваш имхо хороший.
И третье, уже не про корректность: код, который придётся расширять и сопровождать, я читаю независимо от тестов. Тесты отвечают на вопрос «работает ли сейчас», а не на вопрос «смогу ли я это поменять через полгода». Тут чтение — не проверка, а инвестиция :)
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответить
0
ответ удалён