Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

1 334
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

А что мы получим, делегировав разработку ИИ

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели8.5K

Всем привет! Я молодой java-лид в одной из "гостех" контор и меня мучает вопрос, или навязчивая мысль "А что мы получим, делегировав разработку ИИ"...

Во-первых, мне, скорее всего, страшно за себя любимого, что мое место отберет машина, и что писать код отдадут языковой модели, а я останусь неудел и будут вынужден заниматься какой-то другой, не связанной с IT, или лучше сказать, разработческой деятельностью.

Скорее всего, я сильно потеряю в деньгах, могу попасть под призыв в армию, забуду все, что так долго учил и узнавал. Эта фоновая нагрузка, которую транслируют все вокруг, заполоняет свободные разделы моей головы и буквально, как пластинка, повторяясь по десять раз на дню, отнимает силы от простого отдыха, от переключения с работы на себя, друзей, хобби.

Во-вторых, разве нам, кто пишет код, так интересно становиться "операторами IDE"? Это же насколько унылой стала работа: пишешь промт, ждешь n секунд/минут, получаешь какое-то решение, ревьюишь его, а кто-то и ревьюит агентами, коммитишь, а кто-то и это делает агентами. Все..? Это же не инженерия, а очень вялый cuк-OLD-инг :)

Читать далее

Skill of the week: Spring Explore — первичный сбор контекста

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели8.4K

Первичное наполнение контекста — крайне важная задача, результаты которой влияют на качество решения/сгенерированного кода, возможно, даже больше, чем выбранная модель. В Claude Code за это отвечает Explore sub-agent, который, к слову, справляется неплохо, ровно до тех пор, пока вы не начинаете "по настоящему" использовать Spring: добавляя собственные starters, используя OpenAPI (Spec-first), определяя Bean/Components в стиле Josh Long (описывая их в конфигурациях), а также внедряя множество других инструментов фреймворка. В этом случае качественный анализ можно провести, только зная особенности работы Spring Framework и экосистемы.

В этом выпуске еженедельного дайджеста Skill of the week разберёмся, как, используя Spring Explore Skill, научить агента понимать специфику Spring-приложения и выполнять качественный первичный анализ.

Читать далее

Прикладное применение математических распределений в имитационном моделировании на примере AnyLogic

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.1K

Новички часто воспринимают математику и имитационное моделирование как две совершенно разные, никак не связанные между собой вещи. Возникает этакая отчуждённость. И это понятно: современное программное обеспечение позволяет закрывать глаза на разного рода «ненужные» тонкости – достаточно перетащить блок, нажать кнопку, и модель уже работает. Проблема в том, что именно из-за этого мы постепенно теряем понимание основ. Но то, что кажется сиюминутно бесполезным, может быть стратегически важным. Потому что сама возможность моделировать – генерировать случайность, описывать динамику, получать достоверные результаты – опирается на дифференциальные уравнения и вероятностные распределения.

Поэтому я считаю важным данной статьёй провести небольшой экскурс в мир нестрашной математики на примере самых востребованных распределений имитационного моделирования. Зная их и немного статистики, уже можно называть себя неплохим «модельером». Так давайте сделаем ещё один шаг к этому званию.

Делаем шаг!

Харнесс вокруг кодящего агента, или Как я создал собственного монстра

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.6K

Качество работы с кодящим агентом почти не зависит от того, какая под капотом модель. Я довольно долго в это не верил — менял модели, крутил промпты, ждал следующий релиз. А разница, оказалось, не в модели. Она в том, что вокруг модели: есть ли у агента память между сессиями, карта проекта, правила, руки и место под результат. Голая модель — это эрудит без рабочего места. Каждый разговор она начинает с чистого листа.

Вот это всё вокруг модели — память, карта, правила, руки — и называется харнесс. Ниже — разбор моего харнесса целиком, слой за слоем, на одном реальном проекте: пять сервисов, Kubernetes, прод. Не идеальная схема из README, а то, что видно в логах: что реально вызывается каждый день, а что я нагородил и забыл. Спойлер: половина подключённых MCP-серверов за 98 сессий не вызвалась ни разу. Сразу оговорюсь: сессии сохранились не все — у Claude Code, похоже, есть ротация логов, часть истории потерялась. Так что мои числа — это нижняя граница, реальные ещё выше.

Читать далее

SOLID в Python без воды

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели9.3K

Открываешь чужой код на Python, а там — Java. Абстрактные базовые классы в местах, где хватило бы простой функции, фабрики фабрик и нагромождение паттернов, усложняющих чтение бизнес-логики. Знакомая картина?

Многие разработчики механически переносят архитектурные привычки из строго типизированных языков в Python, создавая переусложненный неидиоматичный код. В этой статье мы возьмем классические правила SOLID и переведем их на язык динамической типизации (Pythonic way). Разберем на реальных примерах, где принципы спасают проект, а где слепое следование им скатывается в карго-культ.

Читать далее

Black-box тесты на Java: функциональные тесты за секунды и в параллель и почему я остался на своих

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели6K

Я наткнулся на подход к функциональным тестам, который меня по-настоящему удивил. Тесты в нём вообще не знают, что внутри Spring: стучатся в реально поднятый сервис по HTTP, как обычный клиент, гоняются параллельно и проходят за секунды. Я разбирал это на код-ревью и сначала прифигел, а потом не стал переходить на него сам, но кое-что забрал себе. В статье сравниваю оба подхода, разбираюсь где какой уместен, и показываю три вещи, которые подсмотрел и притащил в свой Spring

Сравнить подходы

Codex жрёт контекст? Я дал ему локальную память на SQLite — и перестал кормить его простынями промптов

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели16K

Codex хорош, пока не приходится в пятый раз объяснять ему одни и те же правила проекта: где проверки прав, как запускать тесты, почему не надо тащить старые alias-модули и что мы уже решали в прошлом чате.

Поэтому я сделал Hermes Codex Plugin — плагин, который хранит правила, summaries и прошлые решения в SQLite, ищет их через FTS5 и подкладывает Codex только маленький релевантный кусок контекста.

Читать далее

Свой биллинг для ИИ-агента: микрокредиты и контроль расходов

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели5.8K

На связи Сергей Смирнов, AI-инженер и основатель LLMStart.ru. Сегодня разбираем, как написать биллинг для продакшн ИИ-агента.

Когда ваш ИИ-бот начинает отвечать клиентам в B2B-сегменте, каждый его ответ стоит токенов. Чтобы экономика продукта сходилась, расходы на LLM нужно жестко контролировать и тарифицировать. Кажется, что достаточно просто прикрутить калькулятор, но на деле всё сложнее: один HTTP-запрос может дергать до пяти разных нейросетей, и не все они идут через стандартный граф фреймворка.

В новой статье на Хабре рассказываю: — Почему считать деньги по чатам — это путь к хаосу. — Зачем мы изобрели «микрокредиты» вместо наивных токенов. — Как протащить контекст биллинга через пять LLM-вызовов в одном запросе с помощью магии ContextVar + Mixin.

Разбор для тех, кто делает multi-tenant LLM-сервисы и уперся в ограничения готовых прокси-решений.

Читать далее

C++101

Время на прочтение179 мин
Охват и читатели36K

Про C++ часто шутят, что любую вещь можно сделать пятью разными путями, четыре из которых компилируются, три работают, а два правильные, но один зависит от фазы луны. Часто такие шутки и идиомы откладываются в коллективной памяти сообщества какой именно из этих путей правильный в каждой конкретной ситуации.

Большинство этих примеров родилось в эпоху до C++11, когда у языка ещё не было ни умных указателей в стандарте, ни move-семантики, ни constexpr, ни концептов, и приходилось руками собирать из шаблонов и перегрузок некоторые конструкции, которые в более поздних стандартах язык даёт почти бесплатно. Многие идиомы, примеры и идеи стоит читать в двух смыслах сразу, как исторический артефакт, объясняющий «почему старый код выглядит вот так», и как живой приём, который всё ещё применяется в движках и играх.

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

Когда я собирал оглавление Game++, раздел про идиомы, идеи, паттерны и механизмы C++ планировался шестым и завершающим, и должен был занять страниц сто, по одной на каждый пункт, но чем дальше я собирал материал, тем яснее становилось, что каждая секция тянет за собой историю, а каждая история требует контекста, а каждый контекст в игрострое никогда не бывает простым. В итоге текст разросся до размеров, при которых он просто сломал бы структуру книги, и мне пришлось выбирать между «урезать до неузнаваемости» и «отпустить жить отдельно». Пришлось выбрать второе.

Перед вами то, что могло бы стать половиной Game++, но стало самостоятельным материалом. Здесь собраны идиомы, идеи, паттерны и механизмы C++, которые сложились в сообществе за несколько десятилетий и продолжают жить в кодовых базах игровых движков, иногда под своими именами, иногда под другими, иногда вообще без имён, потому что их давно перестали объяснять. У большинства имена все же есть, есть и история с ответом почему именно так, а не иначе.

Вероятно вам потребуется вспомнить некоторые правила вывода шаблонов, и что такое конструктор и деструктор, чем стек отличается от кучи, что у объекта есть время жизни, но это не точно. Я также намеренно убрал обработку краевых случаев и разные проверки из кода, которые в реальном коде заняли бы половину всего текста и утопили бы саму мысль в деталях. Паттерн механизма в моем случае важнее конкретной реализации, и почти каждая из них существует в десятке вариаций под разные компиляторы и стандарты.

Читать далее

210 тысяч звёзд за пять месяцев. Как отличить накрученный харнес от рабочего и при чём тут домашняя еда

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели9.1K

Последние полгода наблюдается дикая истерия из-за этого харнеса. Репозиторий affaan-m/ECC появился в январе 2026-го и к началу июня собрал 210 тысяч звёзд. Для сравнения, freeCodeCamp набирал свои 446 тысяч двенадцать лет. В конце марта два независимых awesome-листа почти одновременно вписали в заголовок термин «harness engineering» — будто он всегда был. На GitHub завелись «фабрики скиллов», которые обещают сгенерировать тебе команду агентов из одного абзаца. Появилось то самое неприятное чувство: не поставил себе мета-харнес — отстал от поезда.

Я полез проверять. Прошёлся по истории звёзд, по README и выборочно по аккаунтам тех, кто эти звёзды ставил. Ниже, что под звёздами настоящее, что накрутка, и как одно от другого отличить. А под конец — про домашнюю еду, и это не лирическое отступление, а ровно то, ради чего вся эта обвязка вообще нужна.

Читать далее

Что aбсолютно каждый разработчик должен знать о лицензиях и Copyright

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели8.6K

Привет, Хабр!

В Axelix мы в последнее время начали получать contribution-ы извне. И как по приватным обсуждениям, так и по GitHub я могу сделать вывод, что у очень многих людей есть довольно серьёзное непонимание того, что означает та или иная лицензия, что вообще такое “Open Source” и даже что такое Copyright.

Мне кажется, что я пару вещей в этой теме немного понимаю, и я чувствую некоторую ответственность этим знанием поделиться. Поэтому я решил написать небольшую статью, которая объясняет базовые концепции в Software, начиная с Copyright и Licensing.

Позже я, возможно, ещё напишу про CLA, Open Core и про то, как AI Agents и AI в целом вписываются в эту картину. Так что, если вам интересно, дайте знать :)

Прежде чем мы начнём: я не юрист, и я не советую вам выбирать ту или иную лицензию, или подход. Я всего лишь Software Engineer, который писал много кода под разными лицензиями, в том числе проприетарными и Open Source.

Давайте я попробую объяснить, как вообще вся юридическая часть вокруг софта устроена, шаг за шагом.

Читать далее

Актуальный гайд на Cursor в 2026 году

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели26K

Привет, Хабр!

К 2026-му году Cursor стал полноценной средой для кодинга без…. кодинга. Вместо этого вы оперируете ИИ-агентами и отдаете им приказы. Ручное программирование с каждым годом становится ближе к статусу «истории». Cursor является лучшим ПО для работы с агентами и вайбкодинга.

В этом гайде мы без воды рассмотрим такие аспекты программы как: интерфейс, работа с контекстом, режимы агента, модели, правила проекта, MCP, skills, hooks и др.

Актуально на лето 2026 года. На момент написания самая свежая версия — Cursor 3.6.

Поехали.

Читать далее

verified by n8n: Как мы сгенерировали ноду из OpenAPI и почему пришлось выбросить рукописную версию

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели8.6K

Привет, Хабр! Меня зовут Андрей и я развиваю портал для разработчиков в корпоративном мессенджере Пачка. Эта статья про то, как мы превратили рукописную ноду для n8n в артефакт, который генерируется из одного файла спецификации, и как она прошла официальную верификацию и встала в каталог n8n со статусом verified by n8n.

По дороге мы выбросили целиком первую версию ноды и перевели всю документацию API на новый процесс генерации. Ниже — как это устроено внутри, с кодом и граблями.

Если коротко, что получилось: правка в одном .tsp-файле автоматически расходится в документацию, CLI, SDK и n8n-ноду, а CI публикует всё по реестрам. Нода больше не может отстать от API, потому что собирается из того же источника.

Читать далее

Ближайшие события

Ошибка в коде, на которую приходится не обращать внимание

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели10K

В разработке статического анализатора, как и в случае с любым ПО, приходится идти на компромиссы. Иногда мы вынуждены отсекать хорошие срабатывания, чтобы инструмент в целом стал лучше. В этой заметке на реальном примере посмотрим на такой компромисс.

Читать далее

Создание своего языка программирования на Rust #3: Парсинг стейтментов вывода и присвоения

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели8K

Третья часть написания своего языка программирования на Rust с нуля: Парсинг первых стейтментов языка: вывод и присвоение.

Читать далее

Простые желания: разработаем максимально простой и дешевый бэкенд интернет-банкинга

Уровень сложностиПростой
Время на прочтение29 мин
Охват и читатели7K

Анализ, архитектура, вайбкодинг и даже комиксы — всё это здесь.

Цели статьи: 1) проверить жизнеспособность концепции максимально простого и дешевого интернет-банкинга и заодно 2) протестировать возможности ИИ в качестве инструмента прототипирования.

Читать далее

Бум ИИ — это твой шанс стать тем, кем ты хочешь

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели10K

Наступило время, когда рынок ИТ-специалистов начал чётко разделяться на суперпрофессионалов и вечных джунов. Промежуточного звена больше не будет.

Перейти в высшую касту можно будет, только развивая параллельную ветку навыков отдельно от основной. Но многие этого даже не поймут.

Забудьте о привычном карьерном росте, который вы знали. Правила уже поменялись. Вас заменила не нейронная сеть. Вас заменили четырёхрукие сеньоры-Шивы, которые в одиночку выдают результат за целую команду.

Каково ваше место за этим столом? Давайте разбираться вместе.

Читать далее

Контекстный менеджер Python: пишем свой with и управляем ресурсами через ООП

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели7.1K

Работа с внешними ресурсами — файлами, базами данных или сетевыми соединениями — требует строгой дисциплины. Забыли закрыть соединение? Приложение в итоге столкнется с утечками памяти или исчерпанным пулом коннектов.

Чтобы не писать громоздкие и плохо читаемые конструкции try…finally, в Python используется оператор with. Однако многие разработчики применяют его исключительно как встроенный инструмент для функции open(), упуская огромный архитектурный потенциал этой конструкции.

Читать далее

Экономный ИИ. 12 способов снизить расходы (токенов/на токены)

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели12K

Наверное, всем уже очевидно, что ИИ крайне полезен, мир поменялся, нас всех заменят роботы и вообще ИИ уже нас во всём превзошёл.

Всё так или почти так, "но есть одно но" как поётся в одной известной песне. ИИ стоит денег, и весьма немалых при текущих ценах. А про локальные модели для большинства пользователей и компаний в РФ можно забыть. Ну и в целом кажется локальные модели - это не сценарий ИИ будущего.

Соответственно, как мы платим за интернет и за свет - регулярный платёж за ИИ — то, что нам светит в будущем, а большинству уже сейчас. На текущий момент времени расход токенов - пожалуй, самое главное что-тормозит повсеместное внедрение ИИ. Полностью без оплаты конечно не обойтись (нуу почти), но существенно сократить её точно можно. Далее все методы, которые я испробовал и использую за 3 года работы. По убыванию - от самых жестких и очевидных, до самых хитрых и "технологичных".

Читать далее

Забытый мультиколор (часть 3)

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7K

Полное руководство по аппаратному мультиколору для тех, кто не знает, что это такое и зачем он нужен.

Совместимость, алгоритмы, эффекты и градиенты

Читать далее