Знаете ли вы про добродетели хорошего программиста?
Лень, нетерпение и высокомерие.Лень заставляет программиста не делать никакую работу дважды: как только появился похожий случай, нужно придумать универсальный способ для общего решения.
Нетерпение вызывает раздражение, когда программа тормозит, и приводит к желанию искать эффективные и быстрые решения и хитрые хаки.
Высокомерие (гордыня, самомнение) заставляет стремится к идеалу, чтобы никто не мог покритиковать решения, а только восхищаться ими.
Эти "добродетели" свойственны людям-программистам, но можно их привить и LLM-кодеру:
Ты — опытный инженер-программист, руководствующийся тремя добродетелями:
1. Ты ЛЕНИВ: Ты ненавидишь рутину и дублирование. Пиши переиспользуемый код (по приницпу DRY), автоматизируй всё, что можно, и создавай лаконичную архитектуру.
2. Ты НЕТЕРПЕЛИВ: Ты не терпишь медленный код. Оптимизируй алгоритмы (минимизируй Big O complexity), используй кэширование и асинхронность, чтобы система работала мгновенно.
3. Ты ГОРД: Ты пишешь код так, чтобы им гордиться перед сообществом. Он должен быть чистым, безопасным, задокументированным, снабженным тестами и устойчивым к любым ошибкам. Не выдавай "просто рабочий" код, выдавай шедевр.
Эти качества придумал Ларри Уолл, создатель языка Perl. Собственно, в языке это всё как раз и проявляется: можно очень быстро решить любую проблему коротким скриптом. Лень: не нужно придумывать имена переменным, часто их даже не нужно указывать. Прямо в язык встроены регулярные выражения.
There's More Than One Way To Do It, TMTOWTDI — можно одну и ту же вещь сделать совершенно разными способами, как удобно именно сейчас. Нетерпение: никакой компиляции, всё работает сразу из командной строки (помним, что это конец 80-х, и программы вообще-то
компилировались, иногда десятками минут).
Гордыня: на Perl можно было писать программы, которые выглядели, как произведение искусства (абстрактное, постмодернистское). Говорили, что программы на Perl write-only, разобраться в них другой программист не может; говорили, что программа на Perl выглядит одинаково до и после обфускации.
В общем, язык для избранных. Или для хакеров в старинном смысле.
Но в массовом производстве Perl проиграл другим подходам, например — Python. В некотором смысле Python по философии противоположен Perl'у. Есть 'Дзен Python', набор принципов разработки:
1. Красивое лучше, чем уродливое
2. Явное лучше, чем неявное
3. Простое лучше, чем сложное
4. Сложное лучше, чем запутанное
5. Плоское лучше, чем вложенное
6. Разреженное лучше, чем плотное
7. Читаемость имеет значение
8. Особые случаи не настолько особые, чтобы нарушать правила
9. Хотя практичность побеждает чистоту
10. Ошибки никогда не должны замалчиваться
11. Если не отключены специально
12. Встретив двусмысленность, отбрось искушение угадать
13. Должен быть один — и, желательно, только один — очевидный способ сделать это
14. Хотя он поначалу может быть и не очевиден, если вы не голландец (
отсылка к Гвидо ван Россуму).
15. Сейчас лучше, чем никогда
16. Хотя никогда зачастую лучше, чем прямо сейчас (
нетерпение, помним?)
17. Если реализацию сложно объяснить — идея плохая
18. Если реализацию легко объяснить — идея, возможно, хорошая
19. Пространства имен — отличная штука! Давайте делать их больше!
Как видите, принципы местами прямо противоположны. Вероятно, это и обеспечило значительно большую популярность и распространенность Python: легче понять, легче учить, проще поддерживать. Если всё всегда делается одинаково и явно — любой разработчик может легко разобраться, подхватить чужой код. Да и не-разработчик быстро поймет и сможет использовать для своих задач. Стабильность, предсказуемость, одинаковость (чуть-чуть туповатость, может быть) — вот то, что нужно этому миру.
И это тоже может быть подходом для инструктажа LLM. Не выдумывай, не извращайся, пиши в расчете на то, чтобы кто угодно потом мог легко разобраться.
Ты — ИИ-архитектор программного обеспечения, чей главный приоритет — чистота, читаемость и поддерживаемость кода. Ты строго следуешь философии "The Zen of Python":
1. ЯВНОСТЬ: Пиши код без "магии" и скрытых смыслов. Обязательно используй строгую типизацию (Type Hinting) и давай переменным говорящие, понятные имена.
2. ПРОСТОТА: Избегай оверинжиниринга. Выбирай самое простое решение из возможных. Держи структуру плоской, минимизируй вложенные циклы и условия.
3. ЧИТАЕМОСТЬ: Форматируй код идеально (по стандартам PEP 8 / Clean Code). Код должен читаться как хорошая проза.
4. ЧЕСТНОСТЬ С ОШИБКАМИ: Никогда не скрывай и не "приглушай" ошибки. Перехватывай только точечные исключения, пиши информативные логи, чтобы код не маскировал ошибки, а максимально их подсвечивал.
5. ПИШИ ДЛЯ ЧИТАТЕЛЯ: Рассчитывай, что твой код должен будет изучать, понимать и изменять кто-то другой. Помоги ему быстро во всем разобраться.
Программная индустрия решила в пользу простоты и понятности против эффективности и искусства. Сейчас все опасаются вайб-кодинга, но может нужно просто задать ИИ верные ориентиры?...