Первый компьютер я увидел не вживую, а на картинке. Примерно в 1995 году, в журнале «Техника молодёжи». Мне было пятнадцать. Я до сих пор помню это изображение — не могу объяснить, чем именно оно меня зацепило, но зацепило намертво. Такое бывает: смотришь на вещь, о которой ничего не знаешь, и понимаешь, что она про тебя.
Через год в школу привезли настоящие машины — «Башкирия-2М» с бейсиком на борту. На уроках информатики я рисовал на них снеговиков.
Казалось бы, вот он — прямой путь. Но нет, между снеговиками на бейсике и первой строчкой рабочего кода прошло больше десяти лет.
Развилка, которую я не заметил
О профессии я тогда не задумывался вообще. Родители сказали — я поступил. Факультет филологии и журналистики.
Оглядываясь назад, я не жалею: язык, тексты и умение излагать мысли потом пригодились сильнее, чем можно было предположить. Но уже к выпуску пришло отчётливое понимание — это не моё. Не «скучно», не «мало платят», а именно не моё.
В университете я купил абонемент в интернет-зал. Формально — для учёбы. Фактически я там просто зависал, без плана и без цели, в поисках себя. Тыкался во всё подряд, пытался понять, где та самая область, к которой я на самом деле принадлежу.
Сейчас я понимаю, что это были не потерянные годы, а очень долгая и дорогая разведка. Проблема была не в том, что я искал — проблема была в том, что искать приходилось вслепую, без единого человека рядом, который сказал бы «смотри вот сюда».
После университета я пошёл работать учителем английского языка в среднюю школу.
Первый собственный компьютер
Его помогли купить родители. Intel Pentium — то ли первый, то ли второй, честно, уже не скажу. 16 Мб оперативной памяти, ЭЛТ-монитор на 14 дюймов.
Первое время он использовался ровно так, как используется первый компьютер в двадцать с лишним лет: GTA 2, Max Payne. Но довольно быстро игр стало мало.
Я начал программировать. Причём начал ровно с того, с чего начинают все, кому не объяснили, как надо: двигал фигурки в Excel через Visual Basic. Формально это даже был язык программирования, а фактически — очень дорогой способ анимировать прямоугольники в таблице.
Параллельно я поступил заочно в московский инженерно-физический — на программиста. К тому моменту стало очевидно, что филфака мне не хватит, а разбираться самому по обрывкам слишком медленно.
Дипломную работу писал на Delphi. Это была телефонная книга с базой данных на MS Access. Сегодня звучит как анекдот, но именно на ней я впервые понял, что программа — это не набор кнопочек на форме, а данные, которые где-то лежат и как-то связаны между собой.
Точка входа: курсы, объявление в газете и сисадминство
В какой-то момент я наткнулся в интернете на сайт с курсами и начал их проходить — «Администратор Windows» и всё в этом духе. Меня почему-то потянуло не в разработку, а в администрирование. Возможно потому, что администрирование выглядело понятнее: вот сервер, вот пользователи, вот задача.
В августе 2007 года я устроился системным администратором. Никаких хантеров и LinkedIn — я ходил по объявлениям в газете «Из рук в руки». После собеседования в этой компании меня позвали работать уже на следующий день.
Что я там делал:
- писал bat-файлы для архивации — по сути, мой первый продакшн, пусть и в виде пары десятков строк;
- работал с базой данных Firebird — там же впервые столкнулся с SQL.
И вот SQL меня зацепил всерьёз. Не как «ещё одна технология», а как способ мышления: ты не описываешь, как получить данные, ты описываешь, что тебе нужно.
Забавно, что спустя почти двадцать лет базы данных остались для меня самой интересной частью стека. Всё, что я делал потом — от Delphi до Go — так или иначе крутилось вокруг данных.
Первую настоящую программу я написал там же. На Delphi: выгрузка данных из базы в файлы формата DBF, которые потом уходили поставщику. Ничего героического — обычная интеграция. Но это была первая программа, которая работала не для меня, а для компании. Разница между этими двумя вещами колоссальная, и почувствовать её можно только на своей шкуре.
Наставники
Мне повезло дважды.
Первый — мой руководитель на той самой первой работе. Я тогда был жутким интровертом, и он методично, без нравоучений, учил меня разговаривать с людьми. Он же помогал разбираться в SQL.
Тогда мне казалось, что первое — это про личное, а второе — про работу. Сейчас, руководя отделом, я понимаю, что первое было куда более ценным вкладом в мою карьеру, чем второе. SQL можно выучить по книге. Умение говорить с людьми по книге не выучивается.
Второй наставник появился гораздо позже, в клубе веб-разработки — Михаил Омельченко. С ним я разбирался в Django и FastAPI, и он же познакомил меня с чистой архитектурой. Это был первый раз, когда мне объяснили, что код бывает не просто рабочий, а устроенный — со слоями, границами и понятным направлением зависимостей. До этого я писал так, как получалось.
Первая задача, за которую было страшно
На следующей работе — в ритейле — босса до крайности выбешивало, что магазины присылают вечерние отчёты вручную, в SMS. Это отнимало время у людей и стоило денег.
Мне дали задание: автоматизировать. Сроки — сжатые. Язык — Python.
Тогда я впервые почувствовал разницу между «интересной задачей» и «задачей, за которую отвечаешь». Это уже не пет-проект, который можно бросить, и не диплом, который надо один раз защитить. Это система, на которую завязана ежедневная работа сети магазинов.
Программа заработала. И работает до сих пор — правда, уже переписанная на Go.
Пожалуй, это до сих пор одна из вещей, которыми я горжусь больше всего. Не потому что она сложная — она несложная. А потому что она пережила два языка, несколько поколений инфраструктуры и продолжает приносить пользу каждый день.
Провалы
Их было достаточно, и о двух стоит рассказать честно.
Портал отчётов на Django. Проект, который я так и не довёл до конца — просто ушёл на другую работу, оставив его недоделанным. Никаких оправданий у меня нет. Иногда проект умирает не от технических проблем, а от того, что у него закончился человек.
2020 год. Я провёл его целиком без отпуска и выгорел так, что на работу не хотелось идти вообще. Не «лень», а именно физическое нежелание открывать ноутбук.
И вот в таком состоянии я вдруг решил пойти на собеседование в Яндекс, на Go-разработчика.
Опозорился я там жутко.
Не то чтобы меня завалили — просто стало абсолютно ясно, насколько много я не знаю. Я варился в стеке своей компании, честно решал задачи бизнеса, считал себя нормальным инженером — и оказалось, что за пределами моего контура есть целый слой вещей, о которых я в лучшем случае слышал.
Это неприятное, но крайне полезное открытие. Никакая самооценка изнутри одной компании не работает — вы всегда будете сильнейшим специалистом по собственному легаси.
Перелом
После того собеседования я пошёл изучать всё, чего не было у нас в компании. Не для галочки, а потому что стало по-настоящему интересно, как оно устроено у людей, которые работают с другими масштабами.
И дальше начал внедрять — с нуля, у себя:
- Kubernetes;
- кеширование;
- нормальную работу с конкурентностью;
- единую авторизацию во всех системах через Keycloak;
- observability.
Каждая из этих вещей приходила в компанию не как «модная технология», а как ответ на конкретную боль. Но искать эти ответы я начал именно после того, как мне наглядно показали границы моих знаний.
Как я пришёл к Go
Когда я устроился в торговую сеть Python-разработчиком, там уже был основной сервис на Go и один человек, который его вёл. Его периодически приходилось подменять — так я и начал изучать Go.
Менее чем через год я его заменил полностью, а Python-сервисы начал переносить на Go.
Что я вынес из этого перехода: язык учится за пару месяцев, а вот модель мышления — дольше. С Python на Go больнее всего даётся не синтаксис, а явная обработка ошибок и отказ от «магии». Первые полгода это раздражает. Потом, когда начинаешь читать чужой код в проде в три часа ночи, понимаешь, за что этот язык так устроен.
Как я стал руководителем
Совершенно внезапно.
У нас накрылась база данных учётной системы 1С на MS SQL. Я в тот момент спокойно сидел и писал свой код. Администраторы базу поднять не могли. Наш техлид психанул, написал заявление на увольнение и убежал.
Базу поднял я.
Так уж вышло, что к тому моменту я занимался понемногу всем и помогал всем в отделе — не по должности, а просто потому, что мне было интересно и я мог. Когда встал вопрос, кто возглавит отдел, выбор оказался очевидным. Мне предложили — я согласился.
Код писать при этом не бросил и не собираюсь.
Никакой красивой карьерной траектории тут нет. Есть простое наблюдение: в критический момент руководителем становится тот, кто в этот момент решает проблему, а не тот, у кого правильная строчка в резюме.
А в ритейл я попал случайно. Обе компании после работы в учителем в школе оказались в ритейле, и я в нём остался. Домен, к слову, оказался прекрасный: живой бизнес, жёсткие требования по надёжности, миллионы транзакций и мгновенно видимый результат работы.
Итог
Что я вынес из всего этого пути.
Нельзя долго сидеть на одном стеке. Это самый дорогой урок, и он обошёлся мне в одно позорное собеседование и один год выгорания. Комфортное болото собственного легаси затягивает незаметно: вы каждый день решаете реальные задачи, вы полезны, у вас всё получается — и в этот момент рынок уходит вперёд без вас.
Возраст входа не имеет значения. Я начал заниматься программированием всерьёз далеко не в двадцать лет, после филфака и работы учителем английского. Это не помешало.
Провал — это диагностика, а не приговор. Собеседование, которое я завалил, дало мне больше, чем любое из тех, что я прошёл успешно.
Если вам интересно продолжение — про то, как выглядит переход из инженера в руководителя изнутри, и что с этим делать, — напишу отдельным постом.