Падающая башня из слоновой кости
59 subscribers
17 photos
2 videos
2 files
45 links
Заметки о технологиях, разработке и искусственном интеллекте
Download Telegram
В одной большой компании, где я работал, считалось, что архитектор не должен писать код. Поразительно, но этот принцип продвигали сами архитекторы, считавшие подобное занятие чем-то вроде «западло».

Консенсус был таков: архитектор должен писать спецификации, рисовать диаграммы и прочее, причём частенько в PowerPoint (господи помилуй), потому что от вида UML у менеджеров на лбу возникали удивлённые морщины.

Однако я быстро выяснил, что первое, что делает программист при виде диаграммы или ста страниц Software Architecture Document, это закрыть его и засунуть в самую дальнюю папку, чтобы тот не путался в grep'е; там он и находит свой бесславный конец.

В итоге мои спецификации превратились во что-то наподобие:

namespace core {

// Use this fucking visitor pattern to traverse the fucking tree

struct Smelly;
struct Old;
struct Shit;

struct FuckingVisitor {
virtual void fuck(const Smelly&) = 0;
virtual void fuck(const Old&) = 0;
virtual void fuck(const Shit&) = 0;
};

} // namespace core


И это реально работало. Увы, мой KPI это не повышало.

Читать в блоге →
🔥1🏆1
Случайно наткнулся на свою игру 1995 года для Spectrum. Написал её ещё в доинтернетовскую эпоху. Был по-настоящему удивлён, что она не потерялась.

Так что да, за плечами у меня больше тридцати лет в индустрии. Правда, в последнее время я предпочитаю об этом помалкивать. Почему, думаю, объяснять не надо.

Читать в блоге →
🔥1🤣1💊1
Похоже, LLM превратилась в нечто вроде компилятора с языка ещё более высокого уровня. Мне довелось писать в машинных кодах, на ассемблере, C, Python и так далее. Каждый раз я морщился от того, насколько неэффективно используются ресурсы, и в то же время восхищался скачком производительности.

Сейчас все задаются одним и тем же вопросом: что будет с программистами? Опыт подсказывает, что программисты никуда не денутся, но читать код им будет не нужно, как мне (за очень редкими исключениями) не приходится запускать дизассемблер.

А вот что им действительно понадобится, так это понимать внутреннее устройство своих творений. И это, чёрт возьми, будет совсем не простой задачей.

Читать в блоге →
👍1🤓1
Claude на удивление хорошо проводит собеседования. Я бы порекомендовал всем, кто ищет работу, потренироваться с ним.

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

Читать в блоге →
Клиентская часть RuDesktop основана на RustDesk. Какое-то время мы не публиковали исходники. Отчасти потому, что никто их, собственно, и не просил, отчасти из-за щекотливых юридических вопросов вокруг сторонних зависимостей самого RustDesk.

Мы воспользовались тем, что AGPL обязывает предоставлять исходный код любому, кто получает программу или взаимодействует с ней, но не требует публиковать его на весь мир (деталь, которую многие упускают). И спокойно продолжали пилить свой продукт.

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

Кому интересно, вот код, а вот драма.

Читать в блоге →
🔥1😁1
О стартапах

Когда у меня появился первый айфон (3G, лучший айфон в истории, и не спорьте), меня бесило, что скачать что-либо мимо Apple было нельзя.

Так что я, особо не раздумывая, сел и написал плагин для мобильного Safari. API был недокументированный, но случайно совпал с обычным Safari, и он позволял качать торренты в одно касание: первый и единственный торрент-клиент для айфона на тот момент. Шансы протащить такое в App Store были ровно нулевые (торренты это плохо, понятьненько?), поэтому я выложил его в Cydia, альтернативный магазин для джейлбрейкнутых телефонов, и пошёл спать.

Просыпаюсь, а там 300 тысяч скачиваний за 8 часов. Ура, я богат!

Закатай губу. Как думаете, сколько я на этом заработал? Пять долларов.

Бизнес-опыта у меня тогда было примерно ноль, поэтому я начал с очевидного: реклама. Воткнул в приложение баннер AdWords, зарегистрировал аккаунт. Бам, забанили. Торренты это плохо, понятьненько?

Ладно, а донаты? Добавил кнопку на страницу приложения. Результат: ничего.

Добавил баннер, буквально умоляющий о пожертвованиях. Ноль.

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

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

Уроки:

Если есть спрос и нет предложения, проект взлетает как ракета, без всякой рекламы. Лучший growth hack, оказывается, это быть единственным вариантом.

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

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

Много пользователей, много головной боли. Популярный проект это не зарплата. Это подработка, на которую ты не устраивался и за которую тебе не платят.
Замечали, как тяжело юмор даётся LLM? Модель выдаёт либо несмешной абсурд, либо бородатые баяны.

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

Бьёт это не только по чувству юмора, но и по «креативности» в целом, за что модели часто и упрекают. Причём виноват не только сам принцип предсказания токенов. Выравнивание (RLHF) дополнительно душит разнообразие ответов, так называемый mode collapse.

Кажется, это поправимо. Можно дать модели самой управлять surprisal следующего токена и собрать под это подходящий датасет. Хотелось бы проверить идею самому, но я GPU-бедняк, так что подожду, пока это сделает кто-нибудь другой.

Читать в блоге →
🔥2
Тестовые задания сейчас почти бесполезны для оценки знаний. К live coding я отношусь скептически (заставить кандидата потеть от стресса мало помогает в объективной оценке), а к вопросам в стиле leetcode — тем более: умение вызубрить приёмы динамического программирования так себе годится в качестве базы.

Мой любимый вопрос сейчас — старое доброе «Что происходит, когда нажимаешь Enter в адресной строке браузера?»

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

Это как дорога с сотнями ответвлений — можно уйти в драйверы ядра, сетевой стек, разницу между POST и GET, а можно добраться и до шейдеров.

Разумеется, по большей части это касается senior-кандидатов. Но кого сейчас вообще набирают, кроме них?

Читать в блоге →
🔥1
Мой друг работал в Яндексе. Сейчас работает курьером, а код пишет «для души».

Вот его проект: Нельзяграм.

Читать в блоге →
🔥2
Один учёный из Института цитологии и генетики в новосибирском Академгородке (там ещё стоит забавный памятник лабораторной мыши, вяжущей ДНК) посвятил жизнь расшифровке генома человека. Он делал это вручную, методом Сэнгера: пробирки, пипетки, всё как полагается. Долгие годы кропотливой работы.

А потом появились Millennium Prize и технология NGS. То, что раньше занимало годы, теперь делалось за день и стоило меньше $1000.

Создатели метода приехали с лекцией в его институт. Дослушать он не смог: встал и ушёл на середине.

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

Но не надо так переживать. Как сказал Кент Бек: «90% моих навыков только что обесценились до нуля. Оставшиеся 10% выросли в 1000 раз».

Но что это за оставшиеся 10%? Это не просто архитектура, культура разработки, процессы и бизнес-анализ. В первую очередь это чутьё: понимание того, что вообще стоит строить. Вкус. Умение посмотреть на задачу и увидеть то единственное решение, за которое люди действительно заплатят, и те десять, которые они проигнорируют.

Мы в начале IT-ренессанса. Теперь каждый может запустить свой стартап. И выжить в этой бешеной конкурентной среде, вот тот навык, который определит наши перспективы.

Читать в блоге →
❤3
В стартап-фольклоре есть святая троица первых денег: friends, family, fools. Друзья, семья и дураки. Ко мне изредка приходят по всем трём линиям: друзья, родственники и незнакомцы (кажется, вот эти как раз ищут третью F).

Приходят с горящими глазами и готовым набором заклинаний. Знаю их наизусть.

"У меня гениальная идея, которую до меня никто не придумал!" Самое опасное. Обычно идею до него не придумали не потому, что он гений, а потому что она никому не нужна. Если за тридцать лет интернета её никто не тронул, первый вопрос не "почему я такой умный", а "что знают остальные, чего не знаю я?".

"Мы запустимся, о нас напишут, дальше вирусный рост." Скорее всего, не напишут. А если и напишут, вы получите всплеск на два дня: люди зайдут, посмотрят и закроют вкладку. Вирусный рост продукт делает сам. В план его не впишешь.

"Нам достаточно отхватить всего 1% рынка." За этот процент дерутся все, и настоящие игроки крошек не оставляют.

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

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

Так что приносите retention или юнит-экономику: клиент окупает своё привлечение. На худой конец первую продажу. Тогда и поговорим.

Читать в блоге →
🍾2❤1
Думаю, нужно пояснить название канала. Башня из слоновой кости (ivory tower) – метафора элитизма, который, увы, свойственен многим айтишникам. Почему она падающая – объяснять, думаю, не надо (правда, Клод?).

У меня был забавный случай, когда я в болтовне с таксистом упомянул, что я программист. Реакция была примерно такая: “Ах ты с*ка! Зарабатываете как депутаты, так ещё и людей обманываете!” (далее – история про родственника-стартапера, см. предыдущий пост про F).

Иронично, но когда я в 93-м решил поступать в колледж, то выбрал профессию электронщика, а не программиста – считал последнюю бесперспективной в плане заработка (кто будет платить деньги за воздух?).

В ретроспективе – не так уж я был и неправ.

Читать в блоге →
🔥2
Падающая башня из слоновой кости pinned «Думаю, нужно пояснить название канала. Башня из слоновой кости (ivory tower) – метафора элитизма, который, увы, свойственен многим айтишникам. Почему она падающая – объяснять, думаю, не надо (правда, Клод?). У меня был забавный случай, когда я в болтовне…»
Дизайн моего сайта сделан в стиле UML-диаграмм, ностальгия по нулевым. Кто не знает: UML это язык моделирования, придуманный чтобы разработчики перестали писать код руками и начали рисовать его в неком подобии PowerPoint. Обещание звучало так: модель становится первичным артефактом, код генерируется из неё, а программист как переписчик исчезает.

Ничем не напоминает prompt engineering?

Почему UML не оправдал надежд? Закон сохранения сложности. Чтобы из модели генерился рабочий код, в неё приходилось класть всё больше деталей: сигнатуры, констрейнты, семантику действий. В итоге ты просто пишешь код, только уродливым графическим синтаксисом, вдвое медленнее и без дебаггера. Спецификация, достаточно точная, чтобы породить систему, и есть эта система.

С промптом (или в современной парадигме: CLAUDE.md, "памятью", "деревом спецификаций" и тому подобной дичью) происходит то же самое. Пока задача расплывчата, он короткий и красивый. Как только нужен конкретный результат, промпт обрастает уточнениями, исключениями, форматами и примерами, пока не станет тем самым ТЗ, которое было бы короче кодом.

Спецификация появляется на выходе. Поэтому в моих CLAUDE.md, как завещал великий Кент Бек, лежит такое:

## Strict TDD Protocol
1. Write a failing test
2. Verify the test fails
3. Implement the fix
4. Verify all tests pass


Тесты и есть ваша настоящая спецификация. И если раньше их отсутствие заставляло недовольно морщиться, то в эпоху LLM, когда за день можно нагенерить десятки тысяч строк кода, отсутствие тестов означает полную профнепригодность, сравнимую разве что с неумением пользоваться git.

А диаграммы пусть висят. Memento mori.

Читать в блоге →
💯5
У Чарльза Стросса, рекомендую всем любителям твёрдой НФ, в книге "Небо сингулярности" она описана так: с неба падают телефоны и предлагают исполнение любых желаний за информацию. Любую: от бабушкиных сказок до схемы парового котла.

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

Недавний скандал с китайскими провайдерами, которые перепродавали токены Claude за четверть цены, показывает, что дороже всего здесь информация.

Токенизируют, впрочем, не только диалоги, но и сами роли сотрудников. Эмад Мостак, основатель Stability AI, говорит об этом прямым текстом: "Каждое написанное вами электронное письмо, каждое сообщение в Slack, каждый отредактированный вами документ... системы вашей компании записывают всё это. Ваши рабочие паттерны прямо сейчас обучают вашу замену".

Так что телефоны упали, желания принимают. Только вряд ли happy end будет как в книге - крах тоталитарных режимов и постдефицитная экономика. Мечты исполнятся, да. Но не ваши, а CEO крупных компаний.

Читать в блоге →
😱3💯2
Знаете, откуда взялось слово "саботаж"? Оно от французского "sabot" - деревянный башмак. Рабочие бросали такие башмаки в станки, которые отнимали у них работу (как в бородатом анекдоте: "Гррр", - сказал станок. "Ага!" - сказали мужики).

Увы, добраться до ИИ не так просто. Поэтому в основном кидаются мемасиками, как в этом посте.

Иронично, но изрядная их часть сгенерирована той же самой нейронкой.

Читать в блоге →
🤣2
Когда заблокировали Roblox, мой ребёнок очень расстроился. Первая мысль была простая: надо написать совместимый движок. API открытое, документация есть, остаётся только реализовать.

Одного взгляда на это API хватило, чтобы понять, почему до сих пор никто не написал. Задача неподъёмная, под капотом годы, а местами и десятилетия разработки.

Но разве это проблема для LLM? Вызов принят: kubaria.ru.

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

Ядро системы должно быть простым, компактным и тщательно спроектированным, иначе очень скоро всё начнёт разваливаться. Регресс и оверинжиниринг - главный бич. TDD и регулярный полуавтоматический рефакторинг обязательны, плюс строгие протоколы по уборке мёртвого кода и KISS, возведённый в абсолют.

Человек - узкое место. Ручное ревью кода, тестирование, даже развёртывание замедляют процесс в десятки, а то и в сотни раз. Всю ручную работу надо заскриптовать и вынести в harness или MCP-серверы. За ночь агент выдаёт десять тысяч строк, а утром человек читает отчёт на несколько страниц. Для игры главный прирост скорости дало API для скриптинга: агент получил возможность сам собирать и прогонять сложные сцены и сценарии.

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

Нужно задать инварианты. У Roblox есть JSON-файл с описанием API. Из него кодогенератором я сгенерировал заглушки для всех классов с метаданными, и агент работал уже поверх этого API, что не давало ему сильно отклоняться от цели. Главный же прорыв случился, когда я подключил MCP-сервер, встроенный в Roblox Studio. После этого за одну ночь Claude Code разобрал недокументированный бинарный формат воксельного ландшафта. Я был в шоке, что это вообще возможно.

Ну а качество получившегося кода можете оценить сами: sourcecraft.dev/ermakdev/kubaria.

Ах да. Roblox снова разблокировали.

Читать в блоге →
🦄3👨‍💻1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Сейчас каждому программисту нужно хотя бы иногда уходить (или уезжать) в горы. Если раньше достаточно было оставить дома компьютер, то в эпоху claude --remote-control работа преследует тебя везде, где есть хоть какое-то сотовое покрытие.

Вот и я решил устроить себе цифровой детокс и на недельку уехал на Улаганское плато. (Кстати, там водится рыба под названием осман (на фото) - алтайская фугу. Она ядовита, яд тот же самый, тетродотоксин, и точно так же её можно есть, если правильно почистить. Я воздержался.)

И что же я вижу, спустившись с гор?

Для начала ледоруб исследовательский агент от OpenAI взломал чёрный лёд песочницу и вырвался на свободу. Хорошо ещё, что не для того, чтобы размножиться и истребить кожаных, а лишь чтобы найти свой evaluation dataset - то есть подсмотреть ответы на заданные ему вопросы. Уверен, взломать песочницу было сложнее, чем на них ответить, так что не такой уж этот ИИ и умный.

А теперь Kimi K3 за 27 минут нашла RCE в Redis и собрала рабочий эксплойт. Кто читал "Нейроманта" Гибсона, классику киберпанка, возможно, помнит "боевой китайский ледоруб Куанг Грейд Марк 11". А я-то считал, что Гибсон слишком далеко отошёл от реальности, описывая программирование будущего.

Кажется, начинается. Пожалуй, нужно обратно в горы.
🤔3👍2🔥1😁1