Разработчик портировал 60 000 строк PHP на TypeScript за 14 часов — и предупредил о главной ошибке

от автора

Канадский разработчик Дидье Мартин рассказал, как за 14 часов перенес 60 000 строк легаси-кода на PHP на бэкенд Node.js/TypeScript. Всю работу выполнял один ИИ-агент — Claude Code на модели Opus 4.8. Речь о REST-сервисе с аутентифицированными эндпоинтами, и требование к порту было жестким: воспроизвести те же эндпоинты, то же поведение, тот же контракт — ничего больше и ничего меньше.

Мартин — не случайный энтузиаст, а ветеран индустрии с более чем 20-летним стажем: в начале 2000-х он был соавтором книги Professional XML издательства Wrox и постоянным колумнистом xml.com. Тем весомее звучит его главный вывод: заголовок с «14 часами» — не то, ради чего стоит читать эту историю.

Проверку корректности упростило одно архитектурное решение: фронтенд Мартина умеет переключаться между бэкендами одним фрагментом URL. Направил его на старый PHP-сервис — все работает; направил на новый TypeScript-сервис — все должно работать точно так же. Это переключение стало эталоном: если экран вел себя одинаково на обоих бэкендах, паритет соблюден, если нет — найден баг.

Главная ошибка, от которой предостерегает разработчик, — верить нарративу «ИИ сделал все сам» и закладывать его в планирование. По словам Мартина, оставить такой процесс без присмотра нельзя: Claude Code периодически останавливался и просил уточнить намерение, которое не считывалось из исходников, или подтвердить поведение через фронтенд. Эти паузы он называет не сбоями, а правильными моментами: «Агент, который никогда не спрашивает, куда опаснее того, который спрашивает». Так что 14 часов — это не наблюдение за прогресс-баром, а плотный цикл: агент предлагает и строит, человек проверяет на живом фронтенде, курс корректируется совместно.

Отдельно Мартин отмечает: он ни разу не просил писать тесты, но Claude Code по собственной инициативе покрыл юнит-тестами каждый эндпоинт. Для него это важнее скорости: порт, который нельзя проверить, — не результат, а обязательство, и именно тесты превратили «вроде работает» в «могу доказать, что работает». В итоге TypeScript-версия стала не прототипом, а полноценной заменой оригинала.

Теперь разработчик портирует тот же бэкенд на Python и ожидает, что уложится примерно в то же время. А вот компилируемые языки вроде Java или C#, по его гипотезе, заняли бы заметно дольше — не из-за сложности самих языков, а потому что этап компиляции замедляет цикл итераций и запуск тестов на лету. Командам, которые планируют подобную миграцию, Мартин советует: «Не закладывайте бюджет на волшебную кнопку. Закладывайте его на очень быстрого напарника по парному программированию, которому иногда нужно, чтобы вы оторвались от своих дел».

P.S. Поддержать меня можно подпиской на канал «сбежавшая нейросеть», где я рассказываю про ИИ с творческой стороны.

ссылка на оригинал статьи https://habr.com/ru/articles/1055502/