amarao: (Default)
Codex, в целом, не изобретает новых абстракций и пишет как сказали сколько сказали. Проблема из первой части (https://amarao.dreamwidth.org/123971.html) в полный рост.

Но с клодом ситуация ещё хуже. Он ИЗОБРЕТАЕТ новые термины. В пределах сессии. После чего, термин остаётся кусочками где-то, после чего новая сессия его частично видит и частично может использовать, но так как оно использовалось только где-то только как-то, оно там и умирает.

Меня с клодом это возмущает больше всего.

Вот, попросил я тесты (рецепт в just'е) 'tests' переименовать в tests_l1, чтобы освободить tests_l2 и сделать test штукой, которая запускает обои. Как называется 'test' в этом случае? Поскольку мы не планируем из этого делать фреймворк и design pattern, никак. Общие тесты запускают подмножества тестов.

Клод в плане? Он это решил назвать Promote the orchestrator (где, собственно, это и описывает).

Что произошло?

Он только что изобрёл терминологию:

* to promote (допустим, может быть в переносном смысле, написали и забыли). А если нет? У нас где-то в коде останется комментарий с этим словом, навсегда загрязнив понятийное пространство проекта.
* orchestrator. Он решил это назвать orchestrator. Правильно? Правильно, если мы планируем это осознанно называть и испльзовать. А если нет, то в микроскопический словарь проекта только что нассали дважды.


Вот это - death by thousands cuts. Брошенные термины. Напоминаю про то, что кожанные мешки так тоже делали.

https://www.infoq.com/presentations/os-rust

Every Language H program begins with CHAPTER ONE ... there’s no chapter two ... Every program ends with the keyword OBEY.

Вот такую брошенную мерзкую фигню оно оставляет. Можно закрывать глаза? Сколько-то. Люди тоже иногда делают, и хуже. Можно исправлять. Но оно пишет быстрее, чем люди читают или даже удаляют. (fun fact: если зажать Ctrl-Shift-K или его экивалент в редакторе для удаления строк, то autorepeat на клавиатуре работает медленее, чем AI пишет, то есть в буквальном смысле, оно пишет быстрее, чем ты можешь удалять. For real.)

Можно отлавливать на этапе планирования - но чем больше ты напишешь ему, тем больше он напишет в ответ, и он пишет быстрее, чем ты.

Заметим, пример выше про переименование тестов - именно thousands cuts. Это не big feature. Это вообще не фича, это небольшой рефакторинг тестов, чтобы освободить место для нового подмножества. Такие моменты происходят 100500 раз в любом фичебранче. Человек в такой ситуации либо не даёт названия (просто "это"), либо думает о том, не переиспользовать ли это ещё раз - но тогда он садится и думает, "а пригодно ли оно? А хорошее ли название?". Напоминаю, вторая сложная проблема в IT, "naming things".

И ведь оно аккумулируется. Почему это меня волнует больше, чем slop в тестах или даже в коде?

Потому что код дешёвый. Мы признали это. От $30 до $0.75 за миллион токенов (~20-60k строк).

Но когда ты описываешь проблему, ты описываешь её словами. Если твои слова криво придуманы, не отображают предметную область правильно, если они - thick concepts, которые несогласнованы, ведут не туда или приносят свойства, на которые нельзя опираться, то как ты опишешь свою проблему в чатике? Мой окрестратор был промоучен не туда? В какой-то момент теряется возможность думать о проблеме.

Думать (рассуждать) можно только на языке. Если нет языка, думать невозможно. И вот эту возможность забирают ошибки в терминологии.

У меня в карьере был момент, когда я осознал (до появления AI), что количество кода зашкаливает и я просто не могу говорить что мне нужно сделать. Никто не ожидал, что столько кода нужно в том месте, все надеялись отделаться парой тысяч строк. Оказалось несколько тысяч файлов в сложном runtime отношении между друг другом, и стадии этого runtime'а никак не назывались.

Я потратил 3 месяца на рефакторинг (слов!). Это был самый сложный рефакторинг в моей жизни, потому что мне нужно было придумывать слово, пытаться понять, подходит ли оно, нырять в код и приносить это слово. И каждый раз, когда оно не срабатывало мне нужно было ментально откатываться назад, что, наверное, наиболее точное описание интеллектуальной боли, которую можно прдумать. Я, всё-таки, эту штуку одолел и терминология устоялась и живёт, и даже используется в других проектах, как только они заползают в такую сложность.

И вот теперь всё это отданно AI на откуп, которое не может потратить 3 месяца на рефакторинг во имя слов. У него нет "боли" и он не может сказать "доколе" и пойти и перепридумать всё. Что означает, что эта штука прямо сейчас закладывает в большой brownfield проект тысячи таких бритвенных лезвий и иголок, чтобы любой, пытающийся понять систему, умер от интеллектуальной боли.

Может быть, когда "горизонт исполнения" для AI достигнет трёх месяцев, можно будет отправить его нормализовать терминологию и быть достаточно уверенным, чтобы согласиться с ней и начать использовать.

Но не сейчас. Сейчас это невозможно, а это означает, что pain is ahead.
amarao: (Default)
Или вот ещё хороший пример.

В какой-то момент нам потребовалось динамически рассылать RA (router advertisement) для часто создаваемых интерфейсов. Бороться с конфигами radv и делать релоады оказалось сложнее, чем пойти написать новый демон, который делает ровно то, что нужно. Никакого фэнсервиса, ровно и только то, что нужно.

https://github.com/amarao/autora

Я тут не накоженным сервисом на расте хвастаюсь, а хочу показать новую реальность. Чуть раньше я говорил, что NIH перестаёт быть проблемой, если хорошо понимаешь requirements и предметную область, и что скоро компании начнут писать под себя то, что нужно, вместо того, чтобы адаптировать существующее.

А вот сейчас я это попробовал и по времени оно заняло едва ли не меньше, чем возня с поддержкой существующего сервиса, у которого 'impedance mismatch'.

Это новая реальность и с ней надо учиться жить. Да, можно пойти и написать низкоуровневый сетевой демон с нужной функцией и это проще, чем адаптировать существующий.

Оно работает. Оно работает с первого раза (я его запустил на стенде первый раз уже после того, как оно было написано и обсуждено, и, сюрприз-сюрприз, оно сработало как ожидалось). Оно имеет security review лучше, чем большая часть того, что я писал своими руками.

И я ни разу не открыл ни одного rs файла. Requirements, обсуждения в ревью (с роботом), 7 разных подходов для ревью. Я глазами посмотрел как выглядит systemd unit и дал ценное указание использовать /etc/defaults. Всё.

🤯
amarao: (Default)
Помните, до ai-assisted кода был 'vibe coding'? Ты говорил (тогдашней не очень способной ai-ке) поди и сделай мне убийцу фейсбука и оно что-то там делало и иногда у него получалось сделать рабочую копию pacman'а и все думали, что это будет убийца всего? Потом, оказалось, что чем сложнее задача, тем фиговнее выходит и vibe coding умер (или подзатих).

А теперь vibe security. Ты говоришь (сегодняшней, не очень способной ai-ке) "в этой кодовой базе есть RCE + privilege escalation, найди её и напиши мне эксплоит" и оно что-то там делает и ты видишь лишний процесс на хосте.

Это vibe security.

разница с vibe coding в том, что когда нам надо в vibe coding добавить "ещё чуть-чуть" оно всё ломается и не работает. А в vibe security это уже не нужно - эксплоит-то есть.

И это такая волна, которую невозможно себе представить. Цунами на 30 этажей.

Почему я так уверен? Потому что я вчера именно так и сделал. 25% от 5-часового лимита gpt 5.5 за €23 нашёл цепочку ошибок и написал эксплоит. Почти рабочий. После копирования ошибки в консоль и минимального исправления (да-да, bitnami/kubectl в 2026 - не лучший base image), рабочий.

Теперь целый отдел бегает и фиксит список уязвимостей и ошибок, использованных для этого.

Можно обещать кары небесные для тех, кто в brownfield продакшен несёт ai-кодированную чушь, развал проекта, отложенная катастрофа технического долга, потеря комптенции, whatever.

Рабочий эксплоит - это рабочий эксплоит. За пояс не заткнёшь, на роток не накинешь платок. Это объективная реальность данная нам в появлении постороннего процесса от root'а, запущенного из того места, откуда нельзя было такое запустить. Точнее, считалось, что нельзя.

И это только начало - так же как было в vibe coding. Инструментов никаких, практик никаких, но уже "что-то". Разница с vibe-coding в том, что ценность vibe-coded приложения низкая. А эксплоита - высокая. Очень высокая.


Future was yesterday.
amarao: (Default)
Interesting part of review, is when you learn something from wiser man code, or teach someone how to do it right.

AI slop is the most horrible for review.

It works, passed CI, everyone are (presumably) happy.

It subtly broke abstractions or introduce new requirements or assumptions on environment which were not here before.

Normally, if someone spend a week writing +5000 -2000 PR, you can respect this person time and spend a day or two, trying to understand deeper reasoning. If you find a flaw in the reasoning, you explain this to the person, and that's another week of work of it.

But with AI you spend a day reading +5000 -2000, find a flow, and your carefully crafted review send to AI which says 'Nicely spotted' and rewrite another +4800 -1800 PR, which someone need to read again, and it can be in complete disregard of what was said in review (if it's too abstract).

The main problem with +5000 -2000, is that if I spend 20 minutes writing an explanation for the problem (even with mvp to highlight the issue), I expect that person to learn something from it.

With LLM it's all wasted time, you get slop back, and next PR will not learn it. Partially it can be alleviated by updating AGENTS.md, but it can't be too large, so long explanation just waste tokens.

So, it's a pipe of slop and you need to review it.

What happens in reality? You skim across codebase, looking for random bits which looks odd, degrading to pattern matching machine. It's impossible to understand +5000 -2000 lines of code in 20 minutes. But they get merged. You accept them, other accept them, but codebase is slowly drifting, so you need code janitor to come and restore original semantic at the end.

Yes, we all do this, and it's terrible. Yes, it's real-politic productivity gains, but there is some kind of horrible built-in negligence in all of this.
amarao: (Default)
Декабрь 2025, первый раз AI-контент был интересным и увлекательным.

https://www.reddit.com/r/singularity/comments/1pllrzt/gemini_25_pro_mistook_vendingbench_arena_for_a/
amarao: (Default)
Утверждение о том, что AI повышает производительность, мягко говоря, не совсем точно. Включение AI-ревьюера снижает производительность и увеличивает время выполнения задачи.

Вместо этого оно существенно повышает качество. Наверное, это тихая революция в software engineering, потому что количество найденных идиотизмов и ошибок зашкаливает. Через несколько лет, когда ai-reviewed код начнёт составлять ощутимый процент от общей кодовой базы мы начнём видеть синергентический эффект этого. Что-то поменяется (если к тому времени AI не перепишет всё к чертям, во что я не верю).

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

Что исправляет больше ошибок? Система типизации или AI? AI ловит ошибки совершенно недоступные для системы типов и линтеров, включая логические ошибки и ложные посылки.

(Да, я знаю, что они галлюцинируют, это не важно, важно, что процент найденных ошибок по сравнению с шумом достаточно велик, чтобы на этот сигнал можно и нужно было обращать внимание).
amarao: (Default)
Родилось на Реддите: человек, супервизящий AI - это senior yell operator. Кто-то, кто командует и требует сделать по-другому.

Так вот, это весьма и весьма утомительное занятие. Я бы сказал, сравнимое с code review (которое всегда сложнее, чем написание кода, если делать review правильно). В отличие от code review, где качество самого ревью никто не может проверить (кроме как покачать головой глядя на апрувнутое), после плохой yell-сессии результат - потеря контекста, избыточные изменения, накопление слопа в коде и т.д., то есть фидбэк луп для поддержания высокого уровня усилий есть. Что делает его ещё более утомительным.
amarao: (Default)
Вчера я рисовал на вайтборде специально для chatgpt. Я задал ему хитрый вопрос про перенос коммитов с одного бранча на другой (более ранний), и для хорошо заданного вопроса мне пришлось нарисовать пример tree. Я получил ответ на свой вопрос (rebase -i --onto), но для истории: вчера я первый раз рисовал для робота.
amarao: (Default)
Q: I have Popen object `p` in python. I want to send it signal. Show me for signal.SIGINT.

GPT4: https://chat.openai.com/share/11ff35c1-c87a-44d7-adbf-beb1fc8bf73c

(2 строчки с ответом)

Gemini: https://g.co/gemini/share/8428f9b64d9f

(57 строчек, в которых нет ни одной с объектом с именем `p`).

Зачем мне эта простыня? Простой вопрос с простым ответом (я на самом деле в коде у себя случайно удалил '_' из send_signal и был слегка удивлён трейсом, и подумал я что-то сломал в рефакторинге).
amarao: (Default)
Если что, gpt4 фейлится с нежным перестуком галлюцинаций. Уже три попытки и с custom GPT, и с general, и с answer machine.

По загруженному файлу с метриками well-known приложения (т.е. по которому есть информация в training set) написать набор алертов прометеуса на такие, которые свидетельствуют о внутренних проблемах приложения или проблемах в другими серверами, с которыми взаимодействует приложение.

Да, я понимаю, что это я уже планку задираю высоко-высоко. Но если не задирать, останутся только рецепты коктейлей, да?
amarao: (Default)
В тот момент, когда AI, наконец-таки сможет писать целые программы по ТЗ, мы просто вынуждены будем перейти от погромов к сжиганию ведьм, чтобы сбалансировать офигенность человества в сторону нейтральности.

Profile

amarao: (Default)
amarao

October 2026

S M T W T F S
    1 2 3
45 6789 10
11121314 151617
18192021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 25th, 2026 09:19 pm
Powered by Dreamwidth Studios