Не «тренируйтесь» писать код, вы — лимбическая система

Я регулярно встречаю в чатиках программистов людей, которые считают, что нужно продолжать кодить руками, «чтобы не деградировать». Не чтобы сделать лучший продукт, не чтобы защититься от накопления техдолга, а именно вот в физкультурном смысле, чтобы так сказать мозг жиром не заплывал. Все это, на мой взгляд, указывает на фундаментальное непонимание, куда сейчас движется ИИ. Он все еще уступает человеку в 3 аспектах: «Сила» системы 2 по Канеману. Пока что ИИ тупо хуже думает, чем лучшие из людей (это важно: в большинстве задач ИИ уже умнее среднего человека, но прогресс вперед двигают лучшие, и вот им он пока уступает)....

February 2, 2026

Абстракции приходят с подарками, но они не друзья

Гравитация как сила практически не существует в мире атомов и молекул, но она определяет, как устроен мир глобально: на уровне звезд, галактик и так далее. В программировании есть один трейдофф, который ведет себя точно так же: незаметен «снизу», но определяет практически все «сверху». Мы, программисты, мыслим абстракциями. Не все одинаково, конечно. Там, где написанный код видно сразу, то есть например во фронтенде или в графическом софте, слой «абстрактности» потоньше и вещи немного поосязаемее....

January 29, 2026

Кажется, LLM неожиданно хороши в создании DSL

Предметно-ориентированные языки, когда они используются эффективно, поднимают уровень абстракции над программными идиомами и паттернами проектирования. Они позволяют разработчику выразить свои намерения на соответствующем уровне абстракции. Роберт Мартин, «Чистый код» Многие программисты считают создание собственного языка программирования чем-то типа вершины возможного творчества. Но не потому что это требует насмотренности и развитого дизайнерского чутья, а потому что это просто технически сложная задача, требующая многих часов работы редких по интеллекту людей. Но теперь, кажется, это больше не так....

December 11, 2025

Beautiful reprs

When creating libraries in Python, I have always strived to make their behavior transparent to other programmers. No matter how complex the library is internally, it should have a clear and obvious facade externally. One of the important parts of such a facade is the way objects are presented as strings. What does a user do when they first encounter my library? I assume they try to run it in REPL....

November 19, 2025

INSTLD: делаем с пакетами странное

Чуть больше года назад я задался вопросом, из которого потом вырос целый небольшой пэт-проект: возможно ли прямо в рантайме установить питонячий пакет и воспользоваться им? Оказалось, что да, можно. Сегодня я расскажу, как это сделать, как это работает, и какие уязвимости открывает перед всей питонячьей экосистемой. Первая доза бесплатно Инструмент, который я по итогу написал, называется INSTLD. Устанавливается он одной командой: pip install instld Давайте проверим, что он работает. Вбив команду instld в консоль, вы увидите приглашение ко вводу текста, которое выглядит примерно так:...

February 12, 2025

Многопоточный Python на примерах: токены отмены

В этой статье мы обсудим паттерн “Cancellation Token” (или по-русски - “токен отмены”), популярный в некоторых других языках, но почему-то обойденный вниманием в Python-сообществе. Он о том, как безопасно и красиво завершать работу функции, треда или корутины. Эта статья — уже третья в серии про многопоточное программирование на Python. Предыдущая была про защиту от дедлоков, но читать её для понимания этой не обязательно. Вся серия предназначена для программистов, знакомых с базовыми концепциями многопоточного программирования....

November 21, 2023

Многопоточный Python на примерах: избавляемся от дедлоков

Дедлоки — распространенная проблема в многопоточном программировании. В больших приложениях вручную отслеживать порядок блокировок может быть достаточно сложно, причем эта проблема может не всплыть на этапе тестирования и случиться только в каких-то сложновоспроизводимых кейсах при реальном использовании. Существует много способов их избегания, но здесь мы рассмотрим только один — автоматическое выявление дедлоков на основе графа ожидания. Эта статья — продолжение серии про многопоточное программирование на Python. Предыдущая была про хранение настроек в многопоточном приложении, но читать её для понимания этой не обязательно....

June 16, 2022

Многопоточный Python на примерах: как правильно хранить настройки приложения

Если опустить первое и самое главное предубеждение относительно питонячьей многопоточности у большинства программистов — что её не существует из-за GIL, — то остается другое, и, наверное, вполне достоверное: многопоточность — это сложно, и нам этого, пожалуйста, не надо. И знаете что? Так оно и есть. Многопоточность — это сложно, особенно когда выбираешься за пределы стандартных руководств и попадаешь со своей многопоточной поделкой в реальный мир. И, возможно, вам не нужно....

November 18, 2021

«Оптимизируем» функции на уровне AST

Python предоставляет программисту огромное пространство свободы. Увы, обычно это довольно дорогая в плане производительности свобода, зато при правильном применении иногда она позволяет творить сущую магию. Но сегодня мы поговорим не о таких вот «богоугодных» применениях свободы, а о том, что никогда не стоит использовать в прикладном программировании — о модификациях кода на уровне AST. Да кто такой этот ваш AST? Обычно принято говорить, что CPython выполняет код построчно. Это не совсем правда, и прежде, чем идти дальше, я должен сделать небольшую паузу и кратко описать схему его работы....

September 7, 2021