«Я напишу вам CLAUDE.md, и всё полетит»: как я провалил первую неделю внедрения ИИ и что пришлось менять

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

Как Макконнелл завещал

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

Я использую LLM в повседневной разработке уже больше года и довольно быстро упёрся в типовую проблему: модель генерирует “красивый код”, но по мере роста проекта появляется дублирование, разъезжается стиль, растёт число заглушек и отладка становится дорогой. В статье покажу процесс, который мне помог: как разделять контекст по чатам, какие артефакты требовать на каждом шаге и какими чек-листами я проверяю результат.

Когда я прихожу в новый проект и провожу аудит, почти всегда вижу одну и ту же картину. Код аккуратный, линтеры строгие, CI настроен. Но стоит открыть разметку или конфиги — и начинается творческий беспорядок. Кто-то форматирует по одному, кто-то по другому, кто-то копирует куски из StackOverflow, не особо понимая синтаксис.
Получается парадокс: мы защищаем самую очевидную часть системы и игнорируем инфраструктуру, документацию и шаблоны. Хотя по факту это такие же контракты проекта, просто записанные не на языке программирования, а на языках разметки.
Со временем я перестал разделять «код» и «не код». Если файл участвует в работе продукта — он должен быть проверяемым. Автоматически. Без надежды на внимательность разработчика.
В данной статье я покажу, как именно это выглядит на практике и какие инструменты я использую каждый день.

У меня была привычка. Вижу классную статью про архитектуру —-сохраняю. Репозиторий с примерами DDD - в закладки. Видео про CQRS - в плейлист «Посмотреть потом».
Вы знаете, чем кончаются плейлисты «Посмотреть потом».
В какой-то момент закладок стало 300+. Половина ссылок битые, треть дублируют друг друга, остальное - статьи, которые казались гениальными в два часа ночи. Я сел и вычистил всё до 106 ресурсов. Собрал их в awesome-list на GitHub.
Но статья не про список. Статья про три вещи, которые я для себя открыл в процессе и которые почему-то мало обсуждают.

В последнее время мне довелось много заниматься распараллеливанием однопоточного кода и показалось уместным свести воедино более-менее всё, что нам известно про разные типы многозадачности, с примерами и комментариями.
Примеры на Ruby, Go, Java.

Писать или не писать тесты — выбор очевидный. Конечно, писать. Но если проект масштабный, одних unit‑тестов будет недостаточно: они бессильны на границах модулей, в интеграциях и пользовательских сценариях, а значит в этих местах будут пролезать баги. Такой код будет сложно поддерживать, вносить в него изменения и получать ожидаемый результат.
В статье поговорим про разные стратегии тестирования под разные риски и кейсы. Поднимемся над привычными unit‑тестами и заглянем, что там есть еще. Спойлер: а еще там workflow‑, integration‑, property‑based‑ и resilience‑тесты.

Я хотел решить простую инженерную задачу: отсеять «шум» в комментариях на код-ревью. Обучил модель на 10 000 примеров, получил точность 87%. Потом открыл список ошибок. Оказалось, модель научилась предсказывать увольнения сотрудников за два месяца до того, как они принесут заявление. Рассказываю, как «пустые» комментарии выдают выгорание и почему данные иногда знают о нас больше, чем мы сами.

В прошлой статье я рассказывал, как мы оживили техрадар: научили систему автоматически обходить git репозитории, определять стек технологий, находить устаревшие зависимости и визуализировать технологический ландшафт компании.
Это важный шаг в развитии внутренних процессов, но он покрывал только часть потребностей команды. Со временем стабилизация сбора и анализа состава ИТ-ландшафта позволила нам выйти на следующий логический этап - управление изменениями.
Сегодня техрадар — это уже не просто система наблюдения, но полноценный пункт управления вашим ИТ-ландшафтом, умеющий управлять миграциями технологий системно и автоматически.

В середине 90‑х я получил первый домашний компьютер — IBM‑совместимую машинку на процессоре Intel 286. Установка Windows требовала кучу дискет, а жёсткий диск вмещал «весь» 20‑30 МБ. Информация тогда хранилась в бумажных книгах и в полках библиотек.
Сейчас, спустя почти три десятилетия, обучение программированию выглядит совершенно иначе. Ниже я расскажу, как менялись возможности обучения, и почему сейчас Large Language Models (LLM) могут стать вашим личным наставником.

Есть ощущение, что мы сейчас живём в странный период: LLM-агенты уже умеют “делать работу”, но ещё не умеют быть предсказуемыми.
На демке всё выглядит идеально:
• один агент пишет код,
• второй — тесты,
• третий — делает ревью,
• четвёртый — собирает артефакты и отчёт,
• пятый — «оператор», который всё это оркестрирует.
Первые пару запусков ты сидишь и думаешь: «Ну всё. Завтра индустрия будет другой». На третьем запуске агент уверенно сообщает: «Я исправил проблему», и одновременно:

Последние месяцы я вижу одну и ту же сцену.
Кто-то начинает активно применять нейросети в разработке — и первые недели ощущение кайфовое:
код появляется быстрее, задач закрывается больше, “как будто полетели”.
А потом начинаются знакомые фразы:

Последние месяцы я полностью пересобрал свой подход к разработке. Раньше я писал код сам. Теперь я стратегически управляю нейросетями.
Раньше я тратил время на архитектуру, чтение документации и разбор чужого кода. Сейчас я трачу время на выбор правильной модели и обсуждение в твиттере, какая из них реально game changer.
Я купил все самые дорогие подписки на AI-инструменты для разработки на 500 долларов. Вот лохи те, кто до сих пор этого не сделал. Я-то подписан на всех владельцев AI-инструментов и читаю их посты. Если кто-то пишет, что их инструмент заменяет мидла, я вижу это первым. Нужно мыслить на шаг впереди рынка.

View Transitions API: полное руководство по плавным переходам в браузере
View Transitions API часто показывают на демках с одной карточкой. Но когда вы начнёте внедрять его в реальный проект с асинхронной загрузкой, React, кастомными анимациями и поддержкой старых браузеров, — окажется, что демки умалчивают о массе деталей.

Программист часто копирует и вставляет, переименовывает и рефакторит. Выделил (подсветил) мышкой переменную или функцию и вот бы сразу видеть их количество в статусной строке. Увы, стандартный поиск (Ctrl+F) требует лишние клики.
Мой небольшой Python-скрипт для Notepad++ по дабл-клику
отображает в Status-Bar количество вхождений,
частичных или полных, с учетом регистра и без.

Эта статья — не критика Agile или Kanban как подходов и не попытка доказать, что в IT «всё делают неправильно». Я делюсь наблюдениями из собственного опыта работы с качеством в промышленности, энергетике, а затем — в IT‑продуктах.
Речь пойдёт не о терминах и инструментах, а о том, как часто теряется системное мышление, когда сложные управленческие модели упрощаются до ритуалов.
Если у вас уже выстроена работа и всё стабильно — это отлично. Если нет — возможно, некоторые наблюдения покажутся полезными.

У нас в компании был один проект, с которым я не справился.
Дело было так: мне сообщили, что знакомый плюсовик написал какой-то скелет проекта на питоне, а теперь мне надо его допилить, подставив в нужные места реализации. Почему тогда делал он, а не я, а сейчас должен делать я, а не он? Да чёрт его знает. Но я подумал, что смогу — унаследуюсь и переопределю методы где нужно, подставлю зависимости во всякие DI, ну что там может быть плохого?
Оказалось, что плохо вообще всё.
Проект был раздут и переусложнён настолько, что буквально не умещался у меня в голове. Я уже начинаю подозревать, что, похоже, я LLM, и у меня контекст в районе 4096 токенов, потому что чем дольше я читаю код, тем меньше помню, что там было в начале. Изучая проект, я прыгал по стеку вызовов, пытаясь понять, что откуда вызывается и в какой последовательности, и просто в какой-то момент терялся. Проект меня победил, и его передали кому-то другому.
Недавно мне дали черновик статьи на редактуру, чтобы я её подправил где считаю нужным. А статья-то оказалась как раз про тот самый проект — автор рассказывал, как он классно всё написал. Вы даже не представляете, как сложно писать дифирамбы проекту, который настолько плох и полон антипаттернов, что можно собрать по нему целую статью. Так, подождите-ка, а что если...
Короче, вот она — анти-статья, собранная из того проекта. А где мне не хватало примеров, я брал код из Django, потому что он вообще полностью собран на антипаттернах.

Месяц назад я закинул задачу на рефакторинг модуля авторизации и пошёл варить кофе. Кофе я допить не успел. Через двадцать минут пришло уведомление в ТГ: «staging обновлён, 94 теста пройдено, 0 упало».
Открыл репозиторий. Ветка, diff на два экрана. Code review от второго агента. Три замечания, два по делу. Третий агент прогнал тесты и задеплоил.
Код был чище, чем я обычно пишу по пятницам.
Но до этого момента были три месяца граблей, упавший продакшен, и одна ночь, когда агенты сделали десятки бесполезных коммитов. Обо всём по порядку.

Разработка программного обеспечения не стоит на месте: меняется технологический стек, совершенствуются подходы к созданию ПО. Вместе с тем уточняются и требования к ПО и процессу разработки в целом. Все больше людей узнает о понятии SSDLC (Secure Software Development Life Cycle) или безопасный жизненный цикл разработки ПО. Как же построить такой цикл в команде? Как сформировать качественную стратегию построения безопасной разработки? Давайте разбираться!

Хаотичные события в Android (навигация, тосты, запросы) часто превращаются в источник багов и нечитаемого кода. В этой статье вы узнаете, как использовать sealed-интерфейсы Kotlin для создания полной, типобезопасной модели экрана, где состояния и события управляются отдельно и предсказуемо. Вы научитесь превращать одноразовые побочные эффекты в строго контролируемый поток команд, получите compile-time гарантии, избавитесь от багов с поворотом экрана и сможете легко тестировать любые события UI. Рассмотренный подход не только защищает от ошибок, но и кардинально упрощает масштабирование логики. Вы сможете добавлять новые события без риска сломать существующую функциональность, а ваш UI-слой станет чистым и декларативным. При этом всё, что нужно для внедрения - это понимание базовых принципов Flow и ViewModel.

Здравствуйте, коллеги программисты!
Большинство фейлов в CI — это мелочи: забытый console.log, форматирование, линт, сломанный импорт, файл без теста. Такие ошибки не должны доезжать до сборки или код-ревью.
Git-хуки позволяют запускать проверки прямо во время git commit и блокировать коммит, если были обнаружены нарушения.
В прошлой статье я рассказывал про скрипты, которые я использую для проверки качества кода в PHP/Laravel.
В этой статье я хочу рассказать о скриптах для JavaScript/TypeScript и Python — линтинг, форматирование, тесты, статический анализ и проверка наличия тестов.
Все скрипты, описанные в статье, находятся здесь.