С момента выпуска Opus 4.7 в апреле я больше не пишу код вручную. Я только общаюсь с Клодом Кодом. Не потому, что я ленив или не люблю программирование, а потому что он лучший программист, чем я. Также быстрее и намного дешевле. Однако, для большинства задач я не могу позволить ему работать в “автоматическом режиме”. Потому что его стандарты ниже, чем я бы ожидал даже от начинающего разработчика. Он как Маугли: умный и сильный, но грубый и неуклюжий. Моя задача - научить его элегантности, по-своему. И в отличие от большинства разработчиков, с ним я могу это сделать.
Я знаю, что он провел первые несколько месяцев своей жизни в дикой природе. Технически, на GitHub, StackOverflow и в блогах и книгах по разработке программного обеспечения. Именно там он узнал, как другие пишут код, глядя на миллиарды строк кода. Очевидно, мы не можем ожидать, чтобы большая часть строк была красивой. Мы даже не можем ожидать, чтобы они были правильными.
Однако, в то время как правильность - это проверяемая детерминированная категория, красота кода - нет. Это не только почти невозможно проверить, но и трудно сформулировать. Не только потому, что это вопрос личного вкуса, но и потому что это эмоция, а не алгоритм. Вы либо чувствуете это, либо нет.
Позвольте мне привести пример, поделившись списком того, на что я особенно аллергичен в программировании:
Дублирование знаний
Global state
Изменяемые атрибуты объекта
“Поглощенные исключения”
NULL references
Класс, наследующий другой класс
Приведение типов или интроспекция
Функции, принимающие 10+ аргументов
Объекты, инкапсулирующие 10+ атрибутов
Имена составных переменных
Комментарии в коде
Эмодзи в документации 😢
Это крохотная часть того, что я могу назвать уродливым исходным кодом. Я уверен, что вы согласитесь с некоторыми пунктами, не согласитесь с другими и не поймете остальное. Клод бы по-прежнему реагировал так же, если бы увидел этот список.
Функциональность идет впереди, эстетика затем. Мы неявно учим этот принцип в школах программирования. Клод тоже научился этому, глядя на эти миллиарды строк. Если алгоритм не работает, не имеет значения, насколько красив ваш код. Это его философия и философия миллиона человеческих программистов.
Я верю в противоположное: эстетика превыше функциональности. Просто потому, что элегантно спроектированное программное обеспечение легче починить, чем сделать работающее программное обеспечение элегантным.
Отсутствие элегантности подразумевает не только несогласованное форматирование, хотя это очевидный грех. Я также имею в виду отсутствие модульности, недостаточную обработку ошибок, несогласованное именование, тесную связь, низкую сцепленность и высокую сложность. Если вы прочтете Code Complete (2004) и Object Thinking (2004), вы поймете, о чем я говорю. Программное обеспечение может быть правильным с точки зрения функциональности, даже если нарушены большинство принципов. Но это будет уродливое программное обеспечение. Для меня и, возможно, для некоторых из вас. Но не для Клода.
Миллиарды программ на Java научили его видеть исходный код как промежуточный продукт между намерением пользователя и компьютером. Однако я предпочитаю работать с программистами, которые видят исходный код как произведение искусства, продукт сам по себе. Я ожидаю от них ощущать красоту кода, который они пишут.
Трудно найти и нанять таких людей. Еще сложнее превратить обычного программиста, которому не важна эстетика, в эстета. В отличие от большинства людей, Клод Код может быть преобразован.
С помощью привычного метода кнута и пряника.
Пряник - это файл CLAUDE.md, агентическое манифесто. Вот мое, в этом репо. В файле я проповедую Клоду, пытаясь сформулировать, что для меня означает красота. Это трудно, так как мне нужно быть кратким в системном приглашении. Поэтому звучу довольно резко, как вы можете видеть.
Кнут - это стайл-чекеры и статические анализаторы. Я использовал их в своих репозиториях много лет, но мой арсенал был ограничен. Мне приходилось использовать PMD, Checkstyle, Rubocop, Pylint и все, что предлагал рынок. Создать свои собственные чекеры было сложной задачей, на которую у меня не было времени или навыков. Сегодня я могу создавать свои собственные чекеры, потому что у меня есть Клод.
Вот пример. Недавно я запустил новую версию Qulice, чекера для Java-кода. Он расширяет PMD и Checkstyle на 59 дополнительных чекеров. Новые чекеры выражают мой личный вкус к Java-коду, который иногда противоречит тому, что сообщество считает правильным. Qulice не новый проект. Ему 14 лет. Однако я только недавно смог реализовать все эти дополнительные чекеры. Потому что у меня не было Клода 14 лет.
Еще один пример. Я пользуюсь Rubocop более 10 лет. Удивительный стайл-чекер для Ruby-кода. Однако у него не хватает нескольких важных правил, которые требует мой личный вкус. Месяц назад я реализовал расширение для Rubocop. Теперь я полностью оборудован. Конечно, это сделал Клод, а не я.
Комбинация и пряника (манифест) и кнута (чекеры) делает свое дело. Манифест вдохновляет Клода делать правильные вещи. Чекеры наказывают его за неправильные вещи. Конечно, чекеры покрывают только формализуемую часть красоты. Несогласованное форматирование, ссылка NULL или приведение типов - на них может обратить внимание инструмент. Тесная связь, низкая сцепленность или неловкая обработка ошибок - ни один чекер не может их ощутить (пока!). Эта более тяжелая часть остается на манифесте.
Когда манифест вдохновляет и чекеры сильны, Клод начинает “ощущать” меня. Ну, по крайней мере, так кажется (или может быть, это действительно оно ощущает меня?!). Он ценит мои взгляды и редко пишет что-то, что им противоречит. Когда это происходит, чекеры наказывают его, и он помнит.
Я не могу представить, чтобы человек поступил так же. Несколько лет назад я нанял парня, которому не очень важна была элегантность кода. Однако он был хорош с алгоритмами и хорошо знал Java. По-видимому, он не был готов поставить эстетику выше функциональности. Он ушел через две недели.
Клод не уходит. И он стоит всего $108 в месяц.
Translated by ChatGPT gpt-3.5-turbo/42 on 2026-05-29 at 11:34
