LLM в программировании
Программисты, как вы используете языковые модели в своей работе и как не используете? Какие модели или дополнительные фреймворки предпочитаете? Что работает хорошо, а что плохо, сейчас, в апреле 2025?Дам несколько ссылок по теме, и потом расскажу про себя.1. https://www.anthropic.com/engineering/claude-code-best-practices - Антропик рассказывают, как они рекомендуют пользоваться Клодом для написания кода, и что у них работает лучше, а что хуже.2. https://crawshaw.io/blog/programming-with-llms3. https://simonwillison.net/2025/Mar/11/using-llms-for-code/Два полезных поста от программистов о том, как они используют LLMы. Был еще отличный пост 1-2 месяца назад, где автор показывал подробно, как он пытался использовать LLM для небольшой игры на Lisp-like языке, и было хорошо видно, с чем модель справляется хуже, но я потерял эту ссылку. Если найду или кто-то мне кинет, добавлю сюда.Мои личные мнения и предпочтения:Последний год я пишу 80% времени на Питоне и 20% на C++. Я не использую autocomplete, и не пользуюсь специализированными средами (Cursor, GitHub Copilot, Claude Code). Мое использование моделей можно выделить в три категории:- во-первых, и это наверное 70% использования, я задаю вопросы о том, какие есть библиотеки для тех или иных нужд и какая между ними разница; какой API следует использовать для чего-то, и почему; какой алгоритм может подойти к такой-то задаче; как объяснить такой-то баг или такую-то непонятную ошибку. Очень важно стараться задавать модели вопросы так, чтобы ответ можно было легко проверить, или как альтернатива, чтобы в случае неправильного ответа это стало быстро понятно (fail fast). - реже (20% случаев), я прошу LLM сгенерировать мне кусок кода, делающий что-то конкретное и четко определенное, используя API, который я знаю нетвердо. Например, мне нужно нарисовать график в pyplot или изменить существующий график неким образом, который мне не очевидно, как сделать. Я не помню API pyplot и никогда его подробно не изучал, так что плохо понимаю, чего в нем добиться легко, а чего очень тяжело. Если LLM справляется с задачей, я настаиваю на том, чтобы внимательно прочитать и понять каждую строчку кода перед тем, как внести в репозиторий.- совсем редко (5% случаев), я прошу LLM написать мне небольшую законченную программу, которая делает что-то четко определенное. Скажем, я хочу нарисовать определенные фигуры в 3D-пространстве, и менять параметры их размеров и расположения с помощью каких-то кнопок в графическом интерфейсе. Или мне нужно использовать библиотеки доступа к файлам нейронных моделей ONNX, чтобы внести определенные изменения в интерфейс уже готовой нейронной сети. В обоих случаях я понимаю, что надо сделать, и нет никаких особых сложностей, но разбираться в незнакомых API и писать весь код, склеивающий их вместе, заняло бы часы, вместо 5-10 минут на то, чтобы сформулировать запрос, получить программу, проверить, что она работает и внимательно прочитать код. Я не пользуюсь моделями таким образом для центральной функциональности моего продукта, только для программ "на периферии": что-то конвертировать, визуализировать, быстро изменить что-то в структурированных файлах итд.
Дам несколько ссылок по теме, и потом расскажу про себя.
1. https://www.anthropic.com/engineering/claude-code-best-practices - Антропик рассказывают, как они рекомендуют пользоваться Клодом для написания кода, и что у них работает лучше, а что хуже.
2. https://crawshaw.io/blog/programming-with-llms
3. https://simonwillison.net/2025/Mar/11/using-llms-for-code/
Два полезных поста от программистов о том, как они используют LLMы. Был еще отличный пост 1-2 месяца назад, где автор показывал подробно, как он пытался использовать LLM для небольшой игры на Lisp-like языке, и было хорошо видно, с чем модель справляется хуже, но я потерял эту ссылку. Если найду или кто-то мне кинет, добавлю сюда.
Мои личные мнения и предпочтения:
Последний год я пишу 80% времени на Питоне и 20% на C++. Я не использую autocomplete, и не пользуюсь специализированными средами (Cursor, GitHub Copilot, Claude Code). Мое использование моделей можно выделить в три категории:
- во-первых, и это наверное 70% использования, я задаю вопросы о том, какие есть библиотеки для тех или иных нужд и какая между ними разница; какой API следует использовать для чего-то, и почему; какой алгоритм может подойти к такой-то задаче; как объяснить такой-то баг или такую-то непонятную ошибку. Очень важно стараться задавать модели вопросы так, чтобы ответ можно было легко проверить, или как альтернатива, чтобы в случае неправильного ответа это стало быстро понятно (fail fast).
- реже (20% случаев), я прошу LLM сгенерировать мне кусок кода, делающий что-то конкретное и четко определенное, используя API, который я знаю нетвердо. Например, мне нужно нарисовать график в pyplot или изменить существующий график неким образом, который мне не очевидно, как сделать. Я не помню API pyplot и никогда его подробно не изучал, так что плохо понимаю, чего в нем добиться легко, а чего очень тяжело. Если LLM справляется с задачей, я настаиваю на том, чтобы внимательно прочитать и понять каждую строчку кода перед тем, как внести в репозиторий.
- совсем редко (5% случаев), я прошу LLM написать мне небольшую законченную программу, которая делает что-то четко определенное. Скажем, я хочу нарисовать определенные фигуры в 3D-пространстве, и менять параметры их размеров и расположения с помощью каких-то кнопок в графическом интерфейсе. Или мне нужно использовать библиотеки доступа к файлам нейронных моделей ONNX, чтобы внести определенные изменения в интерфейс уже готовой нейронной сети. В обоих случаях я понимаю, что надо сделать, и нет никаких особых сложностей, но разбираться в незнакомых API и писать весь код, склеивающий их вместе, заняло бы часы, вместо 5-10 минут на то, чтобы сформулировать запрос, получить программу, проверить, что она работает и внимательно прочитать код. Я не пользуюсь моделями таким образом для центральной функциональности моего продукта, только для программ "на периферии": что-то конвертировать, визуализировать, быстро изменить что-то в структурированных файлах итд.