0:00
/0:15

Смотреть со звуком


12 августа 2026 · Дубай, ОАЭ
25.2048° северной широты · 55.2708° восточной долготы · часовой пояс UTC+4
15 208-й день жизни · 1 474-й день в Дубае


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

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

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

Я отдавал им Figma, они уходили в свои терминалы, и начиналась другая физика мира. Там существовали репозитории, контейнеры, окружения, эндпоинты, миграции, ключи и загадочный Git. А я оставался на своей стороне реки. Мне казалось, что так устроено мироздание: дизайнер проектирует, программист строит. Архитектор рисует карту, а кто-то другой потом действительно идёт через лес.

Прошло много лет. Я переехал в Дубай, сменил несколько жизней, профессий, квартир, команд, интерфейсов и представлений о самом себе. И однажды обнаружил, что сижу с ноутбуком где-то между показом виллы в Tilal Al Ghaf, созвоном по недвижимости, правками собственного сайта, детьми, собакой, переездом на Palm Jumeirah и очередной попыткой собрать CRM для своей брокерской деятельности — и совершенно спокойно говорю агенту: закоммить изменения и запушь.

Я посмотрел на эту фразу и вдруг понял, что произошло что-то гораздо более существенное, чем освоение очередного инструмента.

Я перешёл реку.

Александр Невский по другую сторону реки: там, где файлы становятся памятью, а код начинает расти ветвями

Сначала был файл

У файлов есть одна неприятная особенность: они существуют только сейчас. Старые дизайнеры хорошо знают эту археологию — final.fig, final-final.fig, final-v2.fig, final-v2-new.fig, final-v2-new-real.fig. Каждый новый файл должен был каким-то образом сохранить память о предыдущем. Иногда память находилась в названии, иногда в папке Archive, иногда в голове дизайнера, иногда исчезала совсем. Мы годами пытались управлять временем вручную.
Git предложил совершенно другой способ думать о прошлом. Не нужно делать очередную полную копию мира каждый раз, когда мир изменился. Можно сохранить само изменение: вот здесь было одно, потом я сделал другое, вот причина, вот момент, в котором система стала иной. И этот момент называется commit.

Мне понадобилось довольно много лет, чтобы почувствовать красоту этого слова — не техническую, а почти метафизическую. Commit — это обещание реальности. Ты говоришь: вот состояние мира, за которое я сейчас отвечаю. До этого изменения могли лежать вокруг тебя как строительный мусор: несколько файлов исправлены, один удалён, другой появился, где-то поменялась логика, а где-то агент зачем-то переписал половину проекта, хотя его об этом никто не просил. Всё ещё зыбко, от всего ещё можно отказаться.

Потом ты делаешь commit, и хаос получает имя.

fix property card layout, add owner matching, restore auth flow, update agent instructions, stop breaking production.

Последний особенно важен.

В этот момент происходит удивительная вещь: прошлое больше не исчезает. Оно становится дорогой.

Я долго думал, что память находится в голове

Наверное, поэтому меня сейчас так занимает тема памяти нейросетей. Мы привыкли считать память свойством человека. Я помню первый офис, Москву, комнаты, в которых мы спорили о продуктах, и того самого бэкендера, который рассказывал мне про черрипик, хотя почти наверняка тогда я не понял ни одного слова. Я помню 30 июля 2022 года — день, когда начался мой собственный отсчёт Дубая.

Сегодня идёт день 1 474. Можно было бы записать его иначе: Dubai / commit 1474.

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

Git устроен иначе. Он довольно бесстрастен. Он говорит: вот что было, вот что изменилось, вот кто изменил, вот когда, а вот зачем — если ты не поленился написать нормальное сообщение. В каком-то смысле git log — одна из самых честных автобиографий, которые я видел. Никакой последующей литературной обработки и никакого желания выглядеть умнее задним числом.

Tuesday, 02:14 — broke authentication

Tuesday, 02:47 — fixed authentication

Tuesday, 03:06 — fixed what I broke while fixing authentication

Примерно так и выглядит настоящая жизнь.

Потом появились агенты

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

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

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

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

Так в моей жизни появился .gitignore, и я совершенно неожиданно обнаружил, что это одна из самых философских вещей во всей разработке.

.gitignore — это список того, что мир должен забыть.

Не всё достойно истории. Есть временные файлы, секреты, мусор, промежуточные артефакты и вещи, которые существуют только на твоей машине и совершенно не обязаны отправляться дальше. Чтобы правильно сохранять память, сначала приходится решить, что помнить не нужно. Человечество, кажется, пришло к этой мысли значительно позже Git.

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

Мне нравится эта новая форма письменности. Когда-то отец писал рассказы, чтобы сохранить свой мир и передать его дальше. Теперь я иногда ночью пишу инструкции в Markdown, чтобы утром неизвестный экземпляр искусственного интеллекта понял, как устроен мой проект. Расстояние между этими двумя действиями кажется огромным, но иногда мне кажется, что его почти нет. Мы всё время занимаемся одним и тем же: пытаемся передать контекст тому, кто придёт после нас.

Александр Невский среди ветвей возможного: некоторые дороги останутся экспериментом, другие однажды станут основной историей

Ветки

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

Иногда это буквально твоя жизнь.

main — Москва.

dubai — 2022.

real-estate — 2026.

ai-orchestration — ответвилась, возможно, гораздо раньше, но долго росла где-то незаметно.

personal-brand — всё ещё находится в активной разработке.

А где-то поверх всего этого существует огромная ветка family, которая старше большинства остальных систем и обладает собственными, далеко не всегда документированными правилами деплоя. У меня трое детей, поэтому кое-что о distributed systems я всё-таки знаю.

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

И то, что вчера было экспериментом, становится частью основной истории. Разве не так мы принимаем большинство серьёзных решений? Сначала новая жизнь существует отдельно. Ты осторожно примеряешь её: новая страна, новая профессия, новая роль, новый способ работать. А потом наступает день, когда обратную дорогу формально никто не закрывал, но ты уже понимаешь: это больше не экспериментальная ветка. Это main.

Александр Невский наблюдает merge: множество возможных дорог сходятся в одну историю, которую мы в конце концов называем настоящим

А где-то там всё ещё лежит cherry-pick

Спустя много лет я наконец понял и того самого бэкендера из Яндекса. Он не посвящал меня в запретную магию. Cherry-pick означает примерно следующее: тебе не обязательно брать всю чужую историю, иногда достаточно забрать из неё одно нужное изменение.

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

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

Cherry-pick.

Нужный commit — в свою ветку.

И дальше пошёл.

Но commit ещё ничего не меняет снаружи

Это тоже оказалось для меня важным открытием. Можно сколько угодно коммитить у себя. Проект будет прекрасен, история аккуратна, изменения зафиксированы, но пока ты не сделал push, всё это существует только на твоей машине, в твоей локальной версии мира.

И вот здесь совершенно техническое слово вдруг становится почти болезненно человеческим. Потому что состояние до push я знаю очень хорошо. Долго что-то делать, готовить, переделывать, продумывать, совершенствовать. Строить сайт. Писать статью. Придумывать позиционирование. Собирать новый продукт. Снимать видео. Перерисовывать карточку. Ещё немного улучшить. Ещё раз проверить. Ещё пока никому не показывать.

У большинства людей существует огромный локальный репозиторий несделанных push.

У дизайнеров он, подозреваю, особенно большой. Мы хорошо умеем делать красиво в закрытой Figma. Нам гораздо сложнее отправить результат наружу и признать, что теперь он больше не принадлежит только нам.

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

Александр Невский отпускает изменение в мир: commit сохраняет намерение, но только push превращает его в событие

Есть только текущая.

HEAD.

Очень хорошее название, кстати. Точка, в которой сейчас находится твоя голова. Всё до неё уже стало историей. Всё после неё пока не существует.

Иногда бывает конфликт

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

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

Кажется, это довольно хороший ответ на многие разговоры об искусственном интеллекте. Чем больше процессов смогут выполнять машины, тем отчётливее будут видны места, где требуется не производство очередного варианта, а выбор версии мира. Для меня оркестрация AI именно об этом. Не заставить одного агента работать быстрее, а понять, что из всего сделанного должно войти в main.

Git изменил моё отношение к ошибкам

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

Можно посмотреть diff, увидеть, что именно изменилось, восстановить прошлое, начать новую ветку или откатить неудачное решение. Это даёт удивительную свободу. Не безошибочность — её Git не обещает. Он даёт кое-что гораздо более полезное: обратимость.

Продуктовый дизайн много лет учил меня прототипировать интерфейсы. Git неожиданно научил меня прототипировать реальность.

Иногда вечером я открываю терминал на MacBook, а за окном лежит Дубай. Этот город сам по себе похож на проект, который кто-то слишком долго разрабатывал в экспериментальной ветке, а потом однажды совершенно безумно решился замерджить в main.

Я живу теперь на Palm Jumeirah — объекте, который особенно хорошо объясняет эту мысль. Сначала существовала идея, потом линия на плане, затем инженерная модель, после чего люди буквально начали насыпать песок в море. Мне трудно представить более наглядный git push человеческого намерения в физическую реальность.

То, что было информацией, стало географией.

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

Брокер, дизайнер, автор, оркестратор AI. Раньше мне хотелось найти одно слово, которое всё это объяснит. Теперь мне кажется, что это вообще не обязательно. Git тоже не пытается объяснить проект одним файлом. Он хранит историю изменений.

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

Мы не существительное. Мы log.

git status

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

Иногда мне кажется, человеку тоже не помешала бы команда git status. Без мотивационных книг, стратегических сессий и попыток немедленно спроектировать следующие десять лет. Просто остановиться и посмотреть: где я сейчас, что во мне изменилось, что уже готово быть зафиксированным, что всё ещё болтается незавершённым, что давно пора удалить, что следует добавить в .gitignore, а что наконец нужно отправить наружу.

12 августа 2026 года. 15 208-й день жизни. 1 474-й день Дубая.

Когда-то я сидел в Яндексе и слушал слово «черрипикнуть» как название неизвестного обряда. Теперь рядом со мной могут одновременно работать несколько искусственных агентов, а я ругаюсь, если один из них полез менять файлы, которых его задача вообще не касалась. Мир удивительно быстро меняет словарь человека.

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

Мы всегда делали commits. Просто не называли их так.

Первый день в новой стране — commit. Рождение ребёнка — commit. Уход из компании — commit. Новая профессия — commit. Переезд — commit. Момент, когда решаешь перестать быть только дизайнером, — commit. Момент, когда понимаешь, что искусственный интеллект — это уже не приложение, которым ты пользуешься, а новая среда, внутри которой можно строить, — ещё один commit.

Но в жизни недостаточно коммитить.

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

Поэтому вторая часть заклинания для меня сегодня даже важнее первой.

Пушь

Отправляй изменения туда, где существует остальной мир. Пусть появится remote. Пусть начнётся чужой review. Пусть кто-нибудь не согласится. Пусть возникнет конфликт. Пусть окажется, что что-то придётся исправить и сделать следующий commit.

Это и есть движение.

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

Коммить и пушь

Запомни то, что изменил, и не оставляй это только у себя.