Ещё раз.
Недавно я закончил творческий отпуск — пришло время искать работу.
Если вам нужен лидер технического направления, который может и мешки ворочать, и руками махать, — пишите, с радостью пообщаюсь. Если вы организуете стартап, тоже пишите.
Фронт работ и уровень влияния на результат для меня важнее названия роли. Если у вас есть задача или проблема без понятного решения (в команде, процессах, коде) — рассказывайте. Я разберусь в сути дела, вместе с вами сформулируем видение конечного результата и наметим путь его достижения. Если нужно, обучим / вырастим / наймём команду. А как роль назвать, разберёмся в процессе.
Много деталей моего увлекательного 20-летнего пути в разработке (и 13-летнего в геймдеве) можно найти в этом блоге. Например, вот серия постов о моих взглядах на менеджмент и годовые отчёты.
Важное обо мне, помимо указанного в CV:
Что ищу:
Если вы занимаетесь чем-то из нижеперечисленного, нам будет легче договориться:
Не рассматриваю:
Если я вам интересен, напишите пару слов о продукте, команде и задаче, которую хотите решить с моей помощью:
a.eletsky@gmail.com
Разработчики Monsters & Memories открыли часть метрик игры, включая количество подписчиков. Это редкость в индустрии и заслуживает всяческого уважения. К сожалению, на официальной странице статистики доступны только актуальные метрики, без истории. Чтобы исправить это, я начал делать почасовые снимки метрик. Одно за другим и за 4 дня я навайбкодил целый дашборд.
Дашборд: tiendil.github.io/monsters-and-memories-stats
Репозиторий: github.com/Tiendil/monsters-and-memories-stats
Что на нём можно найти:
Поскольку игра недавно вышла в ранний доступ, истории пока мало, но я надеюсь, что со временем дашборд станет ценным ресурсом для игроков и разработчиков игр.
P.S. Разрабам M&M огромный респект — кто из нас не мечтает сделать своё MMO с эльфками и монетизацией? — реальные цифры будут к месту для «заземления».
Идиоматически проводим творческий отпуск.
В 2023 году Юля сделала таблицу из 1000 лаб (!), выбрала из них одну, переехала в Германию и начала делать PhD в ней. Мы год полетали друг к другу между Польшей и Германией, поняли, что это жуть как неудобно и дорого, поэтому я уволился из Palta и в начале 2024 года переехал прицепом жены в Германию.
«Отличный повод уйти в очередной творческий отпуск», — подумал я, после чего так и сделал. Два с половиной года спустя пришло время искать работу подводить итоги.
В этом посте вы найдёте полный отчёт о проделанном отдыхе: что было запланировано, как изменились планы, что удалось сделать, а что нет.
Краткие итоги: блог обновлён, 68 постов написано, 20 книг прочитано, 4 новых open source проекта реализовано, больше 400 звёзд на GitHub заработано, feeds.fun стал удобным в использовании и готов к монетизации, собственный подход к менеджменту сформулирован, странные, но интересные курсы разработки интеллектуальной собственности пройдены, с ИИ разобрался, coding agents кодят, глаз у жены дёргается.
Ссылки для лучшего понимания поста:
Перед внесением изменений, например в код, агенты часто должны ответить на прикладные вопросы:
Иными словами, агент должен обнаружить все зависимости между файлами и добавить их в контекст, чтобы корректно выполнить задачу.
Получение ответов на подобные вопросы требует от агента подумать, сформировать план действий, выполнить его и проанализировать результаты. Всё это съедает токены, контекст и время, без гарантии полноты и корректности результата.
Например, агент должен решить каким способом искать каждый конкретный тип зависимостей. Иногда, как в случае с цепочками импортов, агент должен прочитать и распарсить исходник, чтобы понять какие модули он импортирует, а затем сгенерировать пути к этим модулям и прочитать их — трудоёмко и неэффективно.
Результат такого «агентного поиска» не гарантирован, агент может забыть погрепать по имени функции и потерять важную зависимость, или пропустить нишевую спеку, потому что решил, что именно в данном случае она не нужна.
Более того, для поиска агент задействует кучу инструментов, каждый из которых самим своим использованием увеличивает потребление токенов и отъедает контекст. Для одной и той же задачи агент может раз от раза выбирать разные инструменты или вызывать их с разными параметрами, что убивает предсказуемость и воспроизводимость результата.
Общепринятые способы улучшить ситуацию, это интеграция LSP или чего-то подобного в качестве инструмента агента или разворачивание одной из миллиона RAG-систем. Это помогает делу, но не снимает все проблемы. Например, не гарантирует полноту, минимальность и детерминированность результата.
В то же время, с древних времён у нас есть огромный пул утилит и библиотек для поиска файлов и анализа исходного кода, которые умеют делать это быстро и эффективно, без всяких там LLM. Каждая из них в своей конкретной области работает намного лучше вероятностной модели.
Было бы здорово, подумал я, иметь одну абстракцию над всеми этими инструментами, которая предоставляет агенту универсальный интерфейс для извлечения любых зависимостей между файлами (какие настроите) и не требует от него думать что и каким образом искать.
Чтобы её можно было использовать, например, вот так:
> depmesh dependencies -r governed_by -r tested_by ./depmesh/cli/application.py
## governed_by
Specifications that apply to the artifact.
- @/specs/architecture/entities.md
- @/specs/architecture/errors.md
- @/specs/architecture/modules_layout.md
- @/specs/architecture/naming.md
- @/specs/architecture/static_analysis.md
- @/specs/architecture/tests.md
- @/specs/behavior/cli.md
- @/specs/behavior/file_paths.md
## tested_by
Tests that verify the artifact.
- @/depmesh/cli/tests/test_application.py
Так и появился DepMesh.
Как работает Donna.
В феврале я выпустил Donna(оригинальный пост) — CLI-утилиту для запуска агентных сценариев как стейт-машин и их описания в Markdown-файлах.
Поскольку я разрабатывал её одновременно разбираясь как работать с агентами, у меня получился переусложнённый, универсальный монстр. Donna имела много полезных функций, но совместно они слишком сильно ограничивали окружение разработчика и требовали слишком много времени на изучение.
Поэтому, набравшись опыта, я решил следовать философии Unix и отрефакторить монолит в набор меньших инструментов, каждый с отдельной чёткой зоной ответственности. Новая Donna — это первый из них (второй — это depmesh — я расскажу о нём в отдельном посте).
Новая Donna решает проблемы управления потоком исполнения агентов при длительной работе. Логика следующая:
Donna исполняет сценарии как детерминированные конечные автоматы, поэтому агент может сосредоточиться на рассуждении, генерации кода и другой агентной работе.