Падающая башня из слоновой кости
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