Ладно, я опять вставил кликбейт в название — надеюсь, это вызовет у вас улыбку. А рассказать я хотел вот про что: как я писал в прошлом посте, я стал воскрешать свои старые проекты. И одним из них стал Snakeskin — мой язык программирования для работы с текстом, который я создал в 2013 году и продолжал развивать почти шесть лет. Седьмая версия Snakeskin много лет использовалась мною в различных проектах, в том числе и в работе в Яндексе.
Язык был достаточно целостный, а компилятор — надёжный. Да, были недостатки, которые я хотел поправить, но свободного времени на это не хватало. И где-то в 2019 году я стал накидывать концепцию восьмой версии, где хотел сделать самую амбициозную итерацию развития языка: метакомпиляцию (большая часть функционала должна писаться на самом Snakeskin) и мультитаргетинг (компиляция в кучу разных языков — от JS до Rust). Ну и кучу вещей сверху: статическую типизацию, вывод типов, оптимизирующий компилятор и все на Rust.
Я даже начал писать спеку, хотя это было больше похоже на заметки идей. Но до конкретной реализации дело не дошло. Проект был слишком амбициозен, и я не смог найти время и силы для его реализации.
И вот теперь, буквально неделю назад, я решил, что развитие современных ИИ-инструментов может мне тут подсобить — и то, что казалось слишком долгим в реализации, теперь может стать быстрее. И это оказалось действительно так: я скоро планирую закончить 0.1-итерацию компилятора. И, предвкушая ваш вопрос: нет, я не вайбкожу.
Честно говоря, я не знаю, как правильно назвать то, как я создаю этот проект. Это выглядит примерно так: я написал модуль и попросил модель поревьювить его. В процессе у нас начинается дискуссия — где-то права она, где-то я. Дальше я собираю некоторый драфт замечаний и прошу модель реализовать их. Потом я проверяю полученный код и мы обсуждаем доработки снова.
Большая часть кода физически пишется моделью, но мы двигаемся не по фичам, а буквально по функциям, объектам и прочему. То есть правильнее сказать, что этот код пишу я, а модель выступает в роли механического писателя, ревьювера и соавтора.
Да, такой подход сильно медленнее каноничного вайбкодинга, но и многократно быстрее ручного написания. Я бы назвал это парным программированием — и на самом деле похожую штуку я практикую уже достаточно давно. Но тут разница в том, что сейчас я сам механически стал писать меньше кода, но всё равно остаюсь в нём.
Что же это даёт? Тут есть несколько очень важных поинтов:
- Высочайшее качество кода. Каждый модуль, каждая функция следует одной строгой архитектуре. Код понятный, простой и функциональный.
- Я полностью понимаю досконально 100% кода и согласен с ним. Я понимаю, что делать дальше и как.
- Архитектура полностью определяется мною.
Из минусов могу отметить, что навык именно написания кода тут развивается слабо — упор на чтение и анализ. И я не могу пока понять, насколько это плохо лично для меня, как для разработчика. Но проблема в том, что у меня жёсткие ограничения по времени.
Мне кажется, что такой вот вдумчивый подход к разработке — это то, как нужно организовывать любое серьёзное ПО. И классно то, что чем сильнее программист, тем лучше будет выхлоп. Модель же по сути одновременно знает и умеет всё — и не умеет ничего.