Обновить
64K+

Ненормальное программирование *

Извращения с кодом

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

Компилятор как первый ревьюер: петля верификации Go‑кода, который написал агент

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

Год назад мой типичный пулл-реквест писался руками часа три и ревьюился минут двадцать. Сейчас четыреста строк агент выдаёт за минуту, а ревью того же дифа занимает час: приходится вычитывать уверенно написанный чужой код, в котором ошибка выглядит ровно так же убедительно, как правильное решение. Узкое место переехало с набора кода на его проверку, и усилием воли оно не расширяется.

В августе у Google вышел текст о том, почему Go хорошо подходит для разработки с агентами. С тезисами спорить трудно: единый форматтер, быстрая компиляция, строгий компилятор, большая стандартная библиотека, обещание совместимости. Беда в том, что из этих тезисов не следует ни одной строчки конфига. Хорошие свойства языка сами по себе не мешают агенту сдать диф, который собирается, проходит тесты и при этом делает совсем другое.

Дальше о том, как довести идею до инженерного состояния. Почему форма сообщения об ошибке влияет на исход правки сильнее, чем формулировка промпта. Какие поломки Go пропускает молча и чем их ловить. Как за полчаса написать свой анализатор, превращающий договорённость команды в ошибку сборки. И чем закончились попытки закрыть тот же вопрос документом AGENTS.md. Всё обкатано на монорепозитории примерно на сто восемьдесят тысяч строк, где за последний квартал около половины дифов написал агент.

Читать далее

Новости

Мой тестовый харнесс нашёл баг в моей же реализации Raft. Рассказываю, как именно

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

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

Я писал реализацию Raft на TypeScript и построил вокруг неё музей багов: семь экспонатов, каждый выключает ровно одно правило алгоритма и требует, чтобы харнесс поймал это — с сидом и с именем нарушенного свойства.

Один экспонат появился не по плану. Харнесс нашёл баг в самой реализации: все пять свойств безопасности держались, логи совпадали, никто не падал — и на двадцать пятом сиде две реплики разъехались навсегда. Разбираю, почему так вышло, как устроен харнесс и чего этот метод не доказывает.

Читать разбор

Как выжать максимум из Генотека: вайбкодим кастомный ДНК-анализатор

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

Дисклеймер: не читайте эту статью, если вы фанат традиционных ценностей и от заголовка уже хотите написать в комментах, что мне стоит изучить базу и отучиться в меде. Читайте эту статью только если вы прогрессивный, веселый и любите необычные проекты ♥ Статья носит исключительно научпоп-инженерно-юмористический характер. Не используйте самодельные скрипты для постановки диагнозов (хотя сходить на ПЦР-тест или к врачу после них никто не запрещает)!

Скажите, вы же тоже ожидали большего от интерпретаций коммерческих ДНК-тестов типа Genotek, 23andMe, Atlas? Ну вот и я не была в восторге от того, что я на 4.2% скандинавка, мне вреден арахис, и скорее всего я люблю кинзу.

В этой статье я расскажу, как я на диком азарте построила свой пайплайн анализа генома. Мы пройдем от пересборки координат и импутации 40 миллионов маркеров на суперкомпьютере TOPMed до укрощения памяти Node.js, чтобы скрипт не умер от 43 ГБ данных, а я покажу, как все устроено под капотом. Осторожно, много блоков кода и дисклеймеров!

Читать далее

Правильный код мы отклоняем — и так задумано

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

Мой валидатор забраковал ответ, сославшись на несуществующую статью, — а ведь именно он поставлен ловить галлюцинации. После этого я собрал конвейер из восьми открытых пакетов: он ни разу не пропустил битый код и забраковал треть рабочего. Объясняю, почему это не провал, а правильная настройка — и как повторить её за три вечера.

Читать далее

Программируемые калькуляторы. Часть 4.2. «Лаборатория счетных машин доктора Вана. 300-я серия»

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

Продолжение о необычных калькуляторах: расширяя успех LOCI-2, компания Wang Labs разработала унифицированную модульную платформу, благодаря которой удалось выпустить целую плеяду программируемых калькуляторов для самых разных задач под названием «300-я серия».

О количестве моделей, их особенностях, что было после и при чём тут «Электроника Д3-28», — в этом очерке цикла.

Читать далее

Я хотел просто спросить нейросети, где искать квартиру. В итоге собрал исследовательский пайплайн с 1197 тестами

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

Вокруг GEO‑продвижения слишком много разговоров о том, как попасть в ответы нейросетей, какие сайты любят ИИ и что нужно сделать для того, чтобы бренд чаще рекомендовали в выдаче. Но чем больше я погружался в тему, тем сильнее меня смущало то, что большую часть таких выводов делают по нескольким ручным запросам. Спросили нейросеть 5–10 раз, увидели несколько знакомых брендов и уже делают выводы о видимости компании.

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

Читать далее

Вы ещё пишете код слева направо? Тогда мы идём к вам

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

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

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

Статья как раз об этом: как освоение второго измерения помогает чисто и наглядно записывать цепочки операторов, чистить мусор и даже строить 3-битный сумматор, который выглядит как единый двумерный блок.

Читать далее

Плоть слаба: как я писал свой Wine для браузера

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

Каждый год на новогодних каникулах у меня просыпается ностальгия, хочется перепройти что‑то из детства, типа «Harry Potter and the Philosopher’s Stone» от KnowWonder. И если с консольными играми всё просто (эмуляторы типа DuckStation или PCSX2 работают идеально), то с PC‑играми 32-битной эры всё сложно, особенно на Mac. Часто пока ты добьешься запуска игры, уже пропадает всякое желание ее проходить.

В этот раз я решил проблему радикально: написал свою «Windows». В браузере. На TypeScript.

Усаживайтесь поудобнее, я расскажу вам, как я полгода дебажил чужие игры двадцатилетней давности и почему на это подсел.

Читать далее

Status Line для Claude Code CLI. Показывает кэш, git, контекст и лимиты в одном месте

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

Сделал Status Line для тех, кто пользуется Claude Code CLI

Если вы работаете с клодом в терминале, то в одном месте он показывает:

• Модель и Effort;
• Текущую рабочую папку и ветку;
• Незакоммиченные изменения в GIT в этой папке;
• Есть ли что в очереди на push и pull;
• Расхождение основных md файлов;
• Текущий размер контекстного окна;
• Кэш: hit rate & TTL;
• Ну и лимиты, конечно же.

Очень удобно это все видеть в одном месте. Рассказываю про него в статье.

Узнать про Status Line 🥵

wake up: демо в 16 байтах

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

В детстве я учился программированию на старом IBM PC с монохромным зелёным монитором, поэтому давно хотел создать программу для этой системы. За последние пятнадцать лет я написал более чем сотню небольших интро. В последнее время я был не так активен, но потрясающее интро «Rainbow Surf» автора Plex размером всего 16 байт мотивировало меня снова вернуться к старым наброскам и взяться за работу.

Создание этой программы сопровождалось привычными экспериментами. Я развлекался с клеточными автоматами в графике и звуке, а также исследовал трюки sizecoding. В частности: а) полиморфные ассемблерные команды (наподобие add [bx+si],al, имеющую машинный код 0x0000) б) переход в середины команд для экономии байт и многократного использования опкодов. Из сотен мелких экспериментов мне приглянулся один, интересный одним только своим названием.

Когда я дополнял всё это и избавился от лишнего, мне трудно было понять, что же происходит. Я чесал в затылке, глядя на простую формулу, оставшуюся после удаления код‑гольфингом кучи байт. Я и сам не ожидал, что объяснение этих считанных байт окажется настолько глубоким.

В моём интро «M8trix» 2014 года по экрану уже бегали псевдослучайные буквы (в 8 байтах, а потом и в 7), но мне всегда было интересно, как добавить к ним красивый звук. Но хронологически в разработке «wakeup» я сначала занимался звуком. Хорошим подзаголовком к статье мог бы быть «16 байт, превращающие звук треугольника Серпинского в дождь символов из „Матрицы“».

Примечание: на каждом такте времени новая строка треугольника Серпинского а) воспроизводится через динамик б) отрисовывается на экране с шагом 56. Можно ощутить движение, но не увидеть его, потому что оно имеет «ширину» 8192 пикселей, но одна строка символов состоит всего из 80 байт. Если бы экран был гораздо больше, то можно было бы увидеть треугольник. Или если не пропускать пиксели и рисовать и все одновременно, он тоже был бы виден.

Читать далее

Как я пишу RTS про Марс на Rust вместе с ИИ-агентами: архитектура, ошибки и 400+ тестов

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

Можно ли одному человеку собрать не демо, а работающую классическую RTS, если почти весь код пишут несколько ИИ-агентов? Я проверяю это на неудобной задаче: Марс 1:1, Rust + wgpu, камера от орбиты до ног робота, отдельная детерминированная симуляция, единая шина команд для человека, сети и ИИ. Разбираю, что уже работает к середине проекта, как устроены научные карты и BUS, почему 15 мс «в API» оказались ожиданием GPU, как тест на одном ПК скрыл сетевой лаг и какие красивые решения пришлось выбросить после измерений.

Читать разбор

Использую нейронку как компилятор

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

Довайте соберем полный конвеер компиляции от исходного кода до готового бинарника из AI-моделей (нет, не соберем)

соберем

В лабиринтах «Коммодора»

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

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

Подобные брошюры издревле прилагались к домашним компьютерам, оснащённым встроенным интерпретатором Бейсика. В начале 1980-х годов в одной из них, входившей в комплект компьютера Commodore, была опубликована небольшая программка, рисующая на экране случайный лабиринт, составленный из диагональных чёрточек-слешей.

Пройдут десятилетия, и эта простая строчка кода превратится в настоящее культурное явление. Что это за строка, как работает, чем интересна, почему не забыта? Нет времени объяснять, срочно лезем в лабиринт разбираться!

Читать далее

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

Clean Architecture для AI-агентов: как проектировать инженерный harness

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

Работа с coding-агентом часто начинается с простой схемы: разработчик формулирует задачу, передаёт репозиторий и просит подготовить изменение. Агент читает код, редактирует несколько файлов, запускает тесты и возвращает результат.

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

Генерация кода становится всё доступнее. Основная сложность смещается к организации среды, в которой агент систематически готовит корректные изменения.

Читать полный гайд

Написал плагин и довёл до релиза в каталоге Obsidian, без единой написанной строчки кода

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

Знаю, такие заголовки сейчас повсюду и мне казалось, что вайб‑кодинг это инструмент для реальных программистов. Когда я был программистом (уже прошло более 10 лет, как я не писал код) нашим вайб‑кодингом был stackoverflow. Заходишь на него ищешь там нужный тебе кусок кода или просишь помощи у сообщества и вставляешь себе. У меня на github даже была библиотека разных кусков, например как сделать запись в бд, как открыть файл, различные циклы и так далее

И когда впервые услышал о вайб‑кодинге решил, что это некая «автоматизированная библиотека» из которой ИИ‑модель берет код и вставляет его. Но когда я начал погружаться в эту тему, и пока я погружался уже появились полноценные агенты, понял, что он не просто подставляет код а сам пишет, решает проблемы и чинит ошибки.

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

Читать далее

Программисты на Руси программируют на Си. RUSI: Концепт билингвального компилятора

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

Это статья про разновидность языка Си с русским и оригинальным английским синтаксисом, работающими одновременно. «Если» и «if» работают как синонимы. Это не интерпретатор. Это компилятор, который способен собрать себя сам. Это даже не транспилятор русского в английский - оба набора слов работают равноценно. Код можно посмотреть https://кодыч.рф/administrator/rusi.

Вот это поворт

Устав и летопись кодинг-агентов

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

Кодинг-агенты — отличный инструмент, пока проект помещается в контекстное окно. Но чем дальше в лес, тем толще партизаны: с ростом кодовой базы начинается деградация контекста, потеря архитектурных решений, “саботаж” инструкций и другие неприятности.

В статье я предлагаю простой файловый подход, помогающий сохранить знания о проекте вне контекстного окна, сделать поведение агента более предсказуемым, а разработку контролируемой. Разберём, как организовать постоянную память и управляющий слой проекта, какие принципы действительно работают и где проходят границы такого подхода.

Читать далее

Сравнение Codex, Claude Code и Kimi. Кто лучше на практических задачах

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

Показатели каждой новой версии LLM моделей стабильно превышают предыдущие, но при этом они не отвечают на вопрос: какой cli агент лучше использовать при разработке. Я решил попробовать сравнить три агента Codex, Claude Code и Kimi на одной реальной задаче в одинаковых стартовых условиях, чтобы посмотреть чем реально отличаются результаты их работы. И результат меня удивил.

Читать далее

Нельзя просто так стать системным инженером. Код значимых проектов всегда писали только хакеры

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

«Плывут две юные рыбки, а навстречу им рыбка постарше, кивает и говорит: «Привет, ребятки, ну, как вода?» Рыбешки плывут дальше, а потом одна спрашивает у другой: «Что ещё за «вода»?» Идея этой истории проста: именно самые очевидные и важные стороны окружающей реальности зачастую сложнее всего увидеть. Я прошу вас вспомнить о рыбках и воде и на немного осадить свой скепсис в оценке значимости абсолютно очевидного. Многое из того, в чем мы непроизвольно уверенны, совершенно неверно. Из-за слепой уверенности и недальновидности узник даже не подозревает, что заперт». Дэвид Фостер Уоллес
Ниже историческое исследование (оно же – расследование): Почему мало хороших книг по системному программированию? Примеры покажут, что глубокие знания о компьютерах распространялись вопреки, а не благодаря обстоятельствам.

Читать далее

ИИ‑агенту недостаточно правил: как мы передаём ему инженерный опыт

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

Промпты, документация и skills сами по себе не передают ИИ‑агенту инженерный опыт. Рассказываю, как мы выстроили работу через декомпозицию, эталонные реализации, few‑shot и постепенное доверие к тестам — без вайбкодинга и автономной генерации тысяч строк кода.

Разобраться в процессе
1
23 ...