Работа и Преподавание

Костя kik0s Амеличев · August 13, 2023

🇷🇺 🇺🇸

Недопитый чай с лимоном

Украшает грязный стол

Ну да, я стою пару миллионов

Скоро буду стоить сто.

(c) LSP, «10 негритят»

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

За один всерос я получил 150 тысяч рублей. За другой, год спустя – 500,000. В Вышке мне полагалась московская стипендия размером 6.5 тысяч в месяц, и яндексовская, 20 тысяч в месяц. И это – с учетом того, что я отказался от президентского гранта сопоставимых размеров, который обязывал бы меня работать в России еще пару лет после выпуска. Правда, стипендии выдавались только на первый год, после чего я оставался с дефолтной вышкинской стипендией в 1800 рублей.

В общем, я пришел в универ, имея денег на пару лет вперед и «пассивный доход» от стипендий. Примерно тогда же перестал брать деньги у родителей – правда, не скидывался за продукты и не платил коммуналку.

Когда мы пришли первого сентября в Вышку в роли первокурсников, Дядя Женя встретил нас словами «пожалуйста, не идите сразу работать». Он нас предостерегал, что первые курсы очень жесткие, учиться будет сложно, а предложения о работе появятся в ближайшее время. Я тогда решил, что вопросы работы и стажировок отложу хотя бы до конца первого курса.

И сразу пошел преподавать. Ведь преподавание не считается работой, если не фуллтайм, правда же?

Дом-учеба-работа-дом


Из поколения в поколение

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

Это связано с тем, что чем более ты взрослый – тем, скорее всего, хуже разбираешься в школьных олимпиадах по программированию. Студенческие олимпиады не очень похожи на школьные по своему формату, а в универе и на работе программирование вообще другое – олимпиадник пишет 300 строк за 30 минут, а на работе и 100 строк за 8 часов может считаться слишком высокой, вредной производительностью. Это связано с тем, что олимпиадный код постоянно пишут, а промышленный постоянно читают. Вот и приоритеты разные.

После выпуска ты не только переучиваешься с «олимпиадного» на «нормальный» – ты еще и тупо устареваешь. Олимпиады по информатике прогрессируют невероятно быстро – продвинутые темы пятилетней давности сегодня считаются классическими. Задачи международной олимпиады из нулевых спокойно решаются нынешним призером всероса, которому до межнара, вообще-то, еще далеко.

Поэтому заметная доля преподов – студенты, которые пока что не забыли то, что ботали для всероса.

Я, соответственно, с первого курса пошел преподавать в Тинькофф Поколение, делать параллель A’ с нуля. Причем это буквально было подкладывание рельсов под запущенный курс – мы каждую неделю готовили новую лекцию и комплект задач. Нужно составлять экзамены, отвечать на вопросы школьников «Почему мой код не работает?», эмоционально поддерживать их перед важными олимпиадами – много что, в общем.

Неделя сурка

Вообще, я очень сильно удивился тому, сколько вещей нужно делать и обсуждать за кадром – по факту, непосредственно занятие занимает меньше времени и сил, чем подготовка материалов и техподдержка. Это отдельный челлендж – в самый разгар контрольных в универе идти проводить зачеты. И хотя бы пару раз в день кто-то из учеников просит посмотреть решение и помочь с задачей. Ух, сколько я плохого кода читал на регулярной основе, вы бы знали! Зато нагрузка была гибкой, поэтому она хорошо совмещалась с учебой.


Стажировка

Ко второму курсу я решил съехать от родителей — потому что у меня не было своей комнаты дома, а во время локдауна все сходили с ума. И я прикинул, что нормально было бы перед этим выйти на стажировку – чтобы и денег подзаработать, и резюме пополнить.

Изначально я хотел стажироваться летом, но стал жертвой ковида. Как настоящий ПМИшник, я был твердо уверен, что всегда можно пойти в Яндекс на летнюю стажку. Но Яндекс остановил найм с началом ковида, и меня развернули после примерно второго собеса. Ближе к лету найм частично разморозили. Я попробовался еще раз – меня опять развернули, потому что на освободившиеся 1.5 места нашли кого-то другого. Так что у меня не оказалось стажировки на лето.

В середине лета я попробовал спросить, ищет ли кто-то в Т стажеров. Мне сказали, что есть позиция, на которую я идеально подхожу, и скинули вакансию со словами javascript и php в описании. «Подождите, произошла чудовищная ошибка» – пишу я, – «я же кроме своих си плюс плюсов ничего не знаю». Мне очень уверенно ответили, что команда уже посмотрела резюме и сказала, что меня надо звать на собес. Поэтому перед собесом я чуть-чуть почитал про JS и думал, как буду выкручиваться по поводу того, что ничего не знаю про фуллстек-разработку.

Оказалось, что в описании вакансии, скопированном с внутреннего портала, лежала какая-то лажа (haha, classic), и на самом деле отдел рекламных технологий искал себе стажера на C++, чтобы делать высоконагруженный бекенд. Со мной на собесе просто поразговаривали, дали какую-то простую задачку на знание языка, обсудили битовые операции и составили примерный чеклист, что я знаю и что не знаю. В целом, можно уверенно говорить, что я не знал ничего :)). В лучшем случае – про что-то слышал.

Меня приняли (во многом, думаю, из-за хороших отзывов от образовательных проектов). Как-то так начались мои два года разработчиком в Т.

Оцените лавинообразность истории — без преподства я бы не нашел стажировку, без всероса не нашел бы преподство, без кружков не взял бы всерос, а кружки для меня открыли вполне конкретные преподы лет в 15, с которыми меня свела воля случая.

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

Мне достался не самый простой проект для этих целей, потому что наши сервисы были в пользовании кучи разных отделов, каждый отдел ими пользовался по-своему, и все было достаточно запутано. Сервис А мог брать данные с сервиса Б, дергать скрипты на lua, другой сервис запускал скрипты не perl-e, все это вокруг какой-то кодогенерации на протобуфах, и даже просто запустить код было нетривиальной задачей, если до этого ты делал только g++ main.cpp -o main.

Я помню, что первую дурацкую задачу вида “прокинуть конфиг-параметр” я решал недели две, постоянно дергая своего ментора и ничего не понимая. Ну, что поделать, такая жизнь. После этого я в основном занимался какой-то текучкой. Иногда бывает так, что стажера зовут на конкретную трехмесячную задачу, но меня позвали скорее на трехмесячное разгребание минорных задач из бэклога. А после стажировки позвали в штат!

Для меня, как студента, парт тайм был крутой возможностью постепенно прокачиваться в разработке. В моей команде было два мощных синьора, у которых можно было учиться. И они же меня менторили – им можно было писать в случае затыков, описывать проблему – и, если сходу решение не придумывалось, идти совместно разбираться, чтобы я не оставался один на один с проблемой.

Большую часть времени я, как джун, делал всякие неприоритетные задачи, по которым можно было не подгонять и было позволительно набить шишек. Еще я много помогал с инфраструктурой, типа обновлений логгеров или прикручивания метрик, где требовалось заниматься бесконечной копипастой по всей кодовой базе. Более серьезные приколы тоже были, но за два года их набралось не так уж и много. Смешно было, когда я месяц занимался задачей, которая нужна была для починки какого-то бага у пользователей из Гренландии. И еще я прикольный R&D делал, который параллельно защитил в универе как курсовую.

Я бы сказал, что нормально так рос по скиллам и погружению в проект – и, условно, где-то через год вполне разбирался в наших сервисах, мог какие-то вещи поддерживать, спокойно разрабатывать новые фичи. Причем это забавно в том смысле, что ты не становишься техническим гуру. Ты скорее просто понимаешь, как все устроено – какие есть процессы, пайплайны, какая архитектура у сервиса и куда смотреть в разных случаях. Банально запоминаешь, что делать, если уронил прод. Ах, сколько раз я ронял прод, вы бы знали…

По деньгам и времени история была такая — я мог линейно масштабировать ЗП в зависимости от своей парт тайм загрузки. На втором курсе я работал 24 часа, на третьем курсе 30 часов, летом работал 40. Моя ставка, как у джуна, обновлялась раз в полгода. У меня всегда были хорошие отзывы, поэтому я постоянно рос по выплатам. ЗП поднимали нормально так, типа на десятки процентов. Увольнялся я сразу после последнего повышения, имея чуть ли не мидловую зарплату на джуновской позиции. И, в общем-то, имея уже достаточно опыта, чтобы заниматься разработкой дальше, апгрейдясь в мидла.


Работа во время учебы

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

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

Одним глазом пишешь код, другим смотришь лекцию – все как мы любим

Моя учеба однозначно просела из-за того, что я начал работать. Как минимум, я не мог уделять ей продуктивную часть своего времени, и садился за кучу вещей по ночам.

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

Я стал больше думать про свою карьеру как про некоторую «hot/crazy» диаграму, но только в терминологии интереса и денег. Задачи на работе – полезны бизнесу, но большую часть времени не очень интересны сами по себе. А универ – это такое место, где можно легально делать почти любые бесполезные вещи – главное, чтобы тебе было интересно и ты мог обосновать их минимальную абстрактную полезность.

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


Гигачад-преподство

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

Другие образовательные проекты тоже были. Иногда ко мне приходили знакомые с просьбой порепетировать к олимпиадам или ЕГЭ. Я обычно не отказывал. До начала карантина я пытался вести какой-то кружок в своей школе – но там вышло так себе. Пробовал запустить свой бесплатный мини-курс – но уперся в то, что во время учебы никак не получалось нормально отшлифовать материалы, потому что учеба с работой съедали все время.

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

Благодаря такой куче халтуры я неплохо монетизировал свое знание дерева отрезков и алгоритма Дейкстры. И лекции единичные регулярно звали проводить, и задачи на олимпиады делать, и со всякими контестами на отборы на курсы помогать. Даже тинькоффский аналог Advent of Code провели пару лет назад.

В эмиграции я почти перестал таким заниматься. За последние полгода только провел один курс по алгоритмам для студентов из регионов – и, с одной стороны, зафиксировал для себя, что я хороший препод, который может сделать масштабный курс с нуля; с другой стороны, выгорел, потому что соглашался вести этот курс задолго до его начала, и мои спрогнозированные затраты на учебу и работу на соответствующий семестр были в два раза ниже реальных.

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

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


Ищу работу из эмиграции

В первые две недели после начала войны я переехал в Грузию и надо было что-то делать. Оставлять свой доход в рублях было неразумно. Так что я начал искать новую работу и обсудил с тимлидом, что скоро свалю.

В этом плане я был в жутко неудачном положении – у меня было полтора года опыта, который плохо матчился с потребностями рынка. Вот я писал бекенды на C++, но бекенд пишут обычно на условном Go. А на C++ делают игры или что-то embedded, а я, наоборот, уже не писал такое. И еще я студент без высшего.

Я закинул посты про поиск работы в знакомых, ликденин, вастрик клуб и пошел откликаться на вакансии. У откликов конверсия невероятно низкая. Какие-то собесы вроде были, но проходило средне. Даже если я справлялся норм, то все равно разворачивали, потому что опыт не подходил под вакансию, или потому что его было мало. Посты дали хороший результат – я был тогда согласен на любой оффер, и получил через посты аж два – парсить данные из твиттера в один криптостартап и пилить инфраструктуру в крипто-HFT у моих знакомых. (Примечание: High Frequency Trading – это автоматическая торговля на бирже)

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

И я пошел к своим знакомым, которые делали чилловый HFT. Я проработал там месяца четыре. Занимался какой-то инфраструктурной разработкой на Rust-е, чтобы данные от криптобирж гонялись откуда надо куда надо. Обычно в HFT ты занимаешься какой-то не очень прикольной перегонкой данных, работаешь по 12 часов в день и получаешь кучу бабок. В нашем случае мы сильно зависели от ситуации на рынке и задач было не супер-много. А когда я пришел, крипторынок подутих, и мы стали зарабатывать мало. Так что в нашем HFT я работал не очень много, но и получал тоже мало.

Когда стало понятно, что я за мало денег делаю то, что еще и не очень прикольно, я заколлил повторно поиск работы. Меня звали куда-то практически одни HFT, потому что я олимпиадник, которые обычно там хорошо раскрываются. Я сходил на пару собесов – но везде натыкался на какие-то плохие процессы. В одном месте меня зовут, а уже на техническом собесе выясняется, что это не в штат, а на стажерскую программу, для которой я слишком сильный. В другом месте меня почему-то посчитали синьором, которым я не был, и чувак на собесе меня так разваливал, что я после звонка чуть не плакал. Причем, это же не мой косяк, что мне тупо не сказали ожидаемый уровень скилла (я бы сам не пошел собеситься в HFT на синьора, я не самоубийца), это его косяк, что он самоутверждается за мой счет, когда я не тяну задачи, которые и не планировал тянуть.

Параллельно я нормально собесился в какие-то продуктовые компании, но они морозились, потому что я без диплома был – вот когда получите, тогда и приходите!

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

Но как бы прикольно не было, к концу третьего года карьеры мне в целом разонравилось работать.


Жалуюсь на капитализм

I’m good at working smarter

But I’m even better at not working at all.

(c) Ian McConnell, «Lazy»

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

Всегда, конечно, есть вариант работать на себя – но это еще больше проблем с тем, чтобы разделять жизнь и работу.

А работа в найме не работает по законам спроса и предложения. У людей нет варианта не работать, потому что тогда им будет нечего есть, поэтому бизнес может диктовать свои условия. Типа 40-часовой рабочей недели по умолчанию, хотя всем было бы лучше, если бы все эффективно отрабатывали 20-30 часов и расходились по своим делам.

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

Поэтому обычно, если ты просто качественно делаешь свою работу, ты уже x2 работник. А если делаешь с энтузиазмом, то и все x10. К сожалению, бизнес тебе при этом не начинает платить x10 – он считает годы опыта, ждет следующего квартала для обновления договора, и так далее. И вообще, бизнес не хочет создавать большой разрыв между x10-челами и работниками с отрицательной продуктивностью, чтобы они не увеличивать напряжение среди сотрудников. Всем удобно, когда есть роли, которые диктует рынок, и единственное, на что ты влияешь качеством своей работы – насколько быстро ты апгрейднешь свою роль. Еще обязательно существует такая роль, после которой особо некуда расти.

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

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


Проклятое айти

Айти оказалось очень забавной сферой по ряду причин.

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

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

В-третьих, большую часть программирования можно свести к поиску информации в интернете и копипасте. Этого практически всегда достаточно для задач на микро-уровне. А до макро-уровня никому нет дела, потому что у бизнеса приоритетом является срочность, а не качество.

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

Сломано вообще все:

  • Сломан найм, который смотрит на тебя в неверных категориях. Моим любимым вопросом является вопрос рекрутеров о версии C++, на которой работает кандидат. Причем, если ты говоришь не самую новую версию, то всегда какое-то снисхождение в ответ слышно, типа ладно, ничего страшного. Как будто половина новых фичей не лежала в boost-е годами.
  • Сломан лейблинг на синьоров, мидлов и джунов – который грейдится не по функциям в команде и ответственности, а по абстрактной крутости. Это же очевидно, что можно справляться с синьорскими задачами в месте с низкой инженерной культурой и не тянуть мидловые задачи в сильных командах.
  • Сломаны системы поощрений, которые не успевают за ростом сотрудника и увольняться экономически эффективнее, чем работать.

У меня, например, есть достаточно знакомых, которые берут две фуллтайм работы, чтобы на каждой работать по два часа в день и зарабатывать свои six digits (Примечание: Так принято называть зарплаты от 100,000$/год). И это, как бы, good for them, но меня бесит каждый день оправдывать самому себе этот выбор – что я сейчас делаю что-то, что мне интересно, за разумные деньги, а не пять скучных халяв за дорого.


Про будущее

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

Про это сложно думать, пока ты в универе, потому что универ является основным фокусом, а работа чем-то рядом. Но, вообще-то, я страшно боюсь момента, когда учеба закончится, и останется только работа. Это будет значить, что мне нужна будет работа, которая не любая работа, а хорошая работа, устраивающая меня по гораздо большему набору критериев.

Мне сейчас 21 год и я зарабатываю чуть ли не больше своего папы с PhD, работающего в одной из немногих компаний-производителей сверхпроводников. За ближайшие несколько лет, скорее всего, я еще сильнее поднимусь по карьерному эскалатору. И все равно не смогу заработать таких денег, чтобы позволить себе жилье. Может, на первый взнос по ипотеке накоплю, но кто же мне ее сейчас выдаст?

И что, какая перспектива дальше? Стараться минимально работать за максимальный чек на неинтересных задачах? Пойти делать свой стартап? Уйти в академию? Прокачать блог/ютуб/тикток?

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

Текст написал Костя Амеличев, иллюстрации нарисовала Люся Свинаренко

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

This is a ChatGPT translation that was not properly verified by any human being.

Half-drunk lemon tea

Adorns the dirty table

Yeah, sure, I’m worth a couple million

Soon I’ll be worth a hundred.

(c) LSP, “Ten Little Indians”

I remember very clearly the time when I didn’t have any money. Then I became a promising competitive programmer—and it turned out that smart high-schoolers get showered with grants and scholarships. It’s a relatively cheap (because there aren’t that many olympiad winners) yet great-looking act of altruism for the nightly news. So yeah, thanks grandpa for an inefficient incentive system.

One All-Russian olympiad brought me 150,000 rubles. Another, a year later, paid out 500,000. At HSE I was entitled to the Moscow scholarship of 6.5 thousand a month, plus a Yandex scholarship of 20 thousand a month. And that’s even after I turned down a presidential grant of a comparable size, because it would’ve obligated me to work in Russia for a couple of years after graduation. The scholarships only ran for the first year, though, and then I was back to the default 1,800-ruble HSE stipend.

So I showed up at the university with a couple of years’ worth of savings and the illusion of “passive income” from scholarships. Around the same time I stopped taking money from my parents—although I still wasn’t chipping in for groceries or utilities.

When we arrived at HSE on September 1st as freshmen, Uncle Zhenya greeted us with “please don’t go get a job right away.” He warned us that the first years are brutal, that classes would be hard, and job offers would start coming in soon enough. I decided I’d put internships and part-time jobs off until at least the end of first year.

And then I immediately went to teach. Teaching doesn’t count as work if it isn’t full time, right?

Home–uni–work–home


Passing it on

There was exactly one reason I was successful in olympiads: great clubs where everything was hard and useful and fun. The clubs ran in different venues but with mostly the same group of instructors. And they were recruiting new instructors right out of graduation.

That’s because the older you get, the worse you usually are at school-level programming olympiads. University competitions are very different in format, and the programming you do at uni or at work is different altogether—a competitive programmer writes 300 lines in 30 minutes, while at work writing 100 lines in eight hours can already be considered “too fast” and harmful. Competitive code is constantly written from scratch; production code is constantly read. Priorities diverge.

Once you graduate you don’t just retrain from “competitive” to “normal”—you also simply fall behind. Informatics olympiads evolve insanely fast: advanced topics from five years ago are “classics” today. Problems from the IOI in the 2000s are now solved with ease by current All-Russian medalists who are still years away from the international stage.

That’s why a noticeable share of instructors are students who still remember what they crammed for the All-Russian.

So in my first year I went to teach at Tinkoff Generation, building the parallel A’ track from scratch. It really was like laying down rails in front of a moving train—we prepared a new lecture and a new set of problems every week. You have to draft exams, answer students’ “Why doesn’t my code work?” questions, keep them emotionally afloat before key contests—there’s a lot going on.

Groundhog Week

I was honestly shocked by how many things happen offstage. The actual class takes less time and energy than preparing materials and doing tech support. It’s its own challenge to go run exams in the middle of peak midterm season at uni. And at least a couple of times a day some student pings you asking to review their solution and help with a problem. I’ve read so much atrocious code on a regular basis, you wouldn’t believe it. The only reason it all worked is that the workload was flexible, so it paired nicely with studying.


Internship

By second year I decided to move out from my parents—because I didn’t have my own room at home, and lockdown was driving everyone insane. I figured it’d be smart to get an internship first: earn some money, pad the résumé.

I originally wanted to intern in the summer, but became a COVID casualty. Like a proper applied math & informatics student, I was convinced you could always go to Yandex for a summer internship. Yandex froze hiring at the start of COVID, though, and I got rejected after about the second interview. Closer to summer they partially thawed hiring. I tried again and got rejected again because someone else grabbed the one and a half slots that opened up. So there went my summer internship.

Mid-summer I asked around whether anyone at Tinkoff was looking for interns. They told me there was an opening I was perfect for and sent over a listing full of “JavaScript” and “PHP.” “Hold on, there’s been a terrible mistake,” I write back, “I only know my beloved C++.” They confidently replied that the team had already reviewed my résumé and wanted me for an interview. So before the interview I skimmed some JS basics and tried to figure out how I’d talk my way out of knowing nothing about full-stack development.

Turned out the job description copied from the internal portal was garbage (haha, classic), and the AdTech department was actually hiring a C++ intern to build high-load backend services. The interview was just a chat: they gave me a simple language question, we discussed bit operations, they made a checklist of what I knew and didn’t know. Honestly I knew nothing :)). At best I’d heard of some of it.

They hired me (I suspect largely thanks to solid references from education projects). That’s how my two years as a developer at Tinkoff started.

Notice the avalanche: without teaching I wouldn’t have found the internship, without the All-Russian I wouldn’t have gotten into teaching, without the clubs I wouldn’t have made the All-Russian, and those clubs happened because a specific group of instructors took me under their wing when I was fifteen.

Junior and intern roles all look the same—you understand nothing, the tasks can be insanely simple, yet you still spend most of your time trying to decipher what’s happening around you and feeling incredibly dumb.

I didn’t get the easiest project either. Our services were used by tons of different departments, each in their own way, and everything was fairly tangled. Service A could pull data from Service B, kick off Lua scripts, another service ran scripts in Perl, it all revolved around some protocol-buffer code generation, and even just running the code was nontrivial if the most complex thing you’d done before was g++ main.cpp -o main.

I remember spending two weeks on my first dumb task—“thread this config parameter through”—constantly bothering my mentor and understanding nothing. That’s life. After that I mostly churned through miscellaneous chores. Sometimes interns get brought in for a specific three-month project, but I was there for a three-month backlog clean-up. Then they offered me a full-time position after the internship!

Working while studying

Working during uni had a huge upside: it highlighted why you need the stuff you’re learning. You start seeing how everything is wired, you get a high-level picture of the industry. Work and school complement each other nicely—the hands-on practice you get at work helps when you need to build something practical for class, while theory from uni sticks better when you can tie it to work experience.

The downside is that work eats a ton of time and makes planning ridiculously hard. There are meetings that clash with lectures. Work takes up daylight hours when other errands crop up. A job is a serious commitment—you don’t just squeeze it into the schedule, it starts driving the schedule.

One eye on code, the other on a lecture—classic us

My studies definitely suffered once I started working. At the very least I couldn’t give them my productive hours and was tackling half the coursework at night.

At the same time I was arguably more motivated to study. Well, “more motivated” in the sense that I started realizing a programming career is way more boring than studying. Coding at work is fine when you have other challenges alongside it, but without external challenges it’s hard to keep yourself focused on interesting things. And where else do you get challenges if not at uni?

I began looking at my career as a kind of “hot/crazy” chart, except with “interest” and “money.” Work tasks benefit the business, but most of the time they’re not that interesting on their own. Uni is the place where you can legally do almost any useless thing—as long as you’re intrigued and can justify a sliver of abstract usefulness.

Since I’m driven more by interest than by money, my primary identity was “student programmer,” and “working programmer” came second. Still, I liked how the combo let me take the best of both trajectories.


Giga-chad teaching

While working I kept running the club. I lasted three years. At some point, after Lucy and I moved in together, it became brutally hard to balance personal life with spending the entire workweek on work and school and then disappearing for a full day every weekend to teach. Even though the main curriculum stabilized after the first year, the churn still took too much energy.

There were other education gigs, too. Friends would ask me to coach them for olympiads or the Unified State Exam; I rarely said no. Before the pandemic I tried to run a club at my old school—didn’t really work out. I tried launching my own free mini-course, but couldn’t polish the materials while studying because school plus work ate all my time.

It amused me how all teaching gigs—short of a full-time job at an educational institution—are this side hustle you stack on top of something else. Some folks straight-up teach similar courses at multiple universities simultaneously. And once you’re doing something somewhere, others start inviting you to similar gigs elsewhere. It snowballs, and at some point you either stop taking everything or become a guru of side hustles.

Thanks to that avalanche of side gigs I monetized my knowledge of segment trees and Dijkstra’s algorithm pretty well. I’d get invited to give one-off lectures, write olympiad problems, help with contest qualifiers for courses. We even ran a Tinkoff version of Advent of Code a couple of years back.

After emigrating I pretty much stopped. In the past six months I only ran one algorithms course for students from the regions—and on one hand it proved I’m a solid instructor who can build a big course from scratch; on the other hand I burned out because I committed to it long before it started, and the workload I had forecast for that semester was half of what it turned out to be.

The main problem for me is that teaching produces little visible impact. Some students drop out after the third lecture. Others find something that interests them more. Some are so driven and diligent they didn’t need you in the first place. And everyone forgets the material in a few years because they don’t need it in life.

The global pointlessness of teaching is offset by how obviously it helps your students—if not on a cosmic scale, then at least in hitting their short-term goals. The feedback is very transparent: people either complain or they thank you. Plus I genuinely enjoy explaining things and hanging out with students. Looks like I’ll be leading seminars at HSE this fall.


Job hunting from abroad

In the first two weeks after the war began I moved to Georgia and had to do something. Keeping my income in rubles made no sense, so I started job hunting and told my team lead I’d be leaving soon.

It was a terrible position to be in: I had a year and a half of experience that didn’t map neatly onto what the market wanted. I wrote C++ backends, but backends are usually written in, say, Go. C++ is for games or embedded, which I hadn’t been doing. And I was still a student without a degree.

I posted about my job search to friends, LinkedIn, Vastrik Club, and started applying to openings. Conversion on cold applications is absurdly low. I did get some interviews, but they went so-so. Even when I handled them well, I’d still get rejected because my experience didn’t match or because it was too short. The posts worked out better: I was ready to take any offer and ended up getting two through the posts—one to parse Twitter data at a crypto startup, another to build infrastructure at a crypto HFT shop run by friends. (Note: High Frequency Trading is automated trading on exchanges.)

I remember being inches from an offer at EPAM. They grilled me on C++ for two hours, graded me as a mid-level engineer, and then at the very end scheduled an extra interview where nobody even showed up. I sat there in their branded Zoom with a fifteen-minute timer counting down until I was allowed to leave the non-interview. Afterwards I told them I wasn’t interested anymore—if a company treats hiring as some enormous privilege, that’s a red flag.

So I went to my friends who were running a chill HFT shop. I spent about four months there. I was doing infrastructure development in Rust to shuttle data from crypto exchanges wherever it needed to go. In typical HFT you spend twelve hours a day on fairly unexciting data plumbing and get paid a ton. In our case we were heavily dependent on market conditions and didn’t have that many tasks. And when I joined, the crypto market had cooled off, so we weren’t earning much. I wasn’t working much either—and I wasn’t getting paid much.

Once it became clear I was doing unfun work for little money, I relaunched the job search. Almost everyone calling was another HFT because “competitive programmers thrive there.” I went through a couple more interviews and ran into bad processes everywhere. One company invited me, and only on the technical interview did it turn out to be not a full-time position but an internship I was overqualified for. Another assumed I was a senior—which I wasn’t—and the interviewer demolished me so hard I almost cried afterwards. It wasn’t my fault nobody told me what level they expected (I wouldn’t sign up for a senior HFT interview on purpose; I’m not suicidal). It was his fault for puffing himself up at my expense when I couldn’t solve problems I was never aiming to solve.

In parallel I was interviewing at some product companies, but they ghosted me because I didn’t have a diploma—“come back when you graduate.”

In the end a startup found me through friends, and that’s where I still work. I actually like the startup format: one of the key metrics is development speed, so you get to ship a bunch of different things. The technical problems are different too—how do you solve a product problem “well enough” under tight deadlines?

Still, by the end of year three of my career I was pretty tired of working altogether.


Complaining about capitalism

I’m good at working smarter

But I’m even better at not working at all.

(c) Ian McConnell, “Lazy”

The thing about work is that it eats an obscene amount of time. When you sink that much time into work, the market rate for an hour of your time stops mattering—you’d rather keep that hour to yourself.

Sure, you can work for yourself, but that makes it even harder to separate life from work.

And salaried employment doesn’t run on supply and demand. People can’t opt out of working—they have to eat—so businesses get to dictate the terms. Forty-hour weeks by default, even though everyone would be better off if we all worked effectively for 20–30 hours and went home.

Workers, in turn, scam employers as hard as they can by doing nothing. The vast majority of people in the labor market have negative productivity—they produce no value, they do their job poorly, and someone has to clean up after them. They take three-hour lunches, ignore messages during work hours, blow deadlines. Often the cost of the chair they’re warming is higher than the value they create.

So if you simply do your job well, you’re already a 2x employee. Do it with enthusiasm and you’re 10x. Unfortunately the company doesn’t pay you ten times more: they count years of experience, wait for the next quarter to adjust your contract, and so on. Businesses also don’t want a giant gap between the 10x folks and the negatively productive ones—it would just ratchet up tension. Everyone’s comfortable when roles are dictated by the market, and the only thing your performance affects is how quickly you level up. And of course there’s always a role beyond which there’s nowhere to grow.

I think we should call the career “ladder” a career escalator. You can train hard and run up faster, but you can also stand still and it’ll still take you to the right floor, purely on years of experience. The hardest part is not picking an escalator that dumps you somewhere you don’t want to be.

So as a proud worker I dislike this setup: it’s not advantageous to work efficiently because you can work inefficiently for the same money. Growth is slow and—even though it depends on how invested you were—it will still hit the same ceiling in the medium term. You’re selling the company more time than you want to, and nobody is willing to buy less.


Cursed IT

IT turned out to be a very peculiar field for a bunch of reasons.

First, it’s completely opaque to outsiders. The industry is still forming, most people know nothing about software or computers, so it’s easy to tell your boss you’re not playing Dota while working from home—you’re researching incident causes and improving performance.

Second, demand for talent outstripped supply, which meant even in the former USSR companies started paying real money instead of the standard 30k a month. For people from poorer regions that alone is a reason to retrain en masse.

Third, most programming boils down to Googling and copy-pasting. That’s almost always enough for micro-level tasks. And nobody cares about the macro level because business priorities are urgency, not quality.

So we’ve ended up in a world where IT folks are a separate social class everyone wants to join via some express bootcamp. We switch jobs every six months because that’s the fastest way to raise your salary. We churn out tons of atrocious code and, thanks to our self-promotion skills, get labeled “senior” while not even knowing where UDP is used.

Everything is broken:

  • Hiring evaluates you in the wrong categories. My favorite recruiter question is “Which C++ standard do you use?” If you don’t name the latest one, you can hear the condescension—“Alright, no biggie”—as if half the new features hadn’t been sitting in Boost for years.
  • The senior/middle/junior labels are broken—they’re based not on team function or responsibility but on some abstract notion of “coolness.” Obviously you can nail senior-level tasks in a place with low engineering culture and fail mid-level tasks in a strong team.
  • Reward systems are broken—they can’t keep up with employee growth, so quitting is more economically efficient than staying.

Plenty of people I know take on two full-time jobs, work two hours a day at each, and make their six digits. (Note: people usually call salaries of $100,000/year or more “six digits.”) Good for them, but it annoys me every day that I have to justify my own choice—to do something interesting for reasonable money instead of five boring cushy gigs for big bucks.


About the future

When you spend every day at work, work becomes your main activity, your life’s project. In that paradigm it’s incredibly dumb to grind away at something pointless just for the money. You’d want work to have some meaning and to fit you. Working purely for money is also dumb—it’s like spending half your life preparing to rest from the other half. A snake eating its tail.

It’s hard to think about this while you’re in uni because uni is the main focus and work is something on the side. But I’m honestly terrified of the moment studies end and only work remains. That’ll mean I need not just any job but a good job, one that satisfies a much longer checklist.

I’m 21 and I’m making almost more than my dad with a PhD who works at one of the few companies manufacturing superconductors. In the next few years I’ll probably climb further up the career escalator. And I still won’t make enough to afford housing. Maybe I’ll save up for a down payment, but who’s going to give me a mortgage right now?

So what’s the outlook? Work as little as possible for the biggest check doing uninteresting tasks? Start my own startup? Go academic? Boost the blog/YouTube/TikTok?

Ever since I programmed something for the first time at 11, I was sure I loved coding and just needed to keep growing in it. Now, ten years later, with decent achievements, a résumé, an education, projects—I keep asking myself: who do I actually want to be when I grow up?

Text by Kostya Amelichev, illustrations by Lusya Svinarenko

This longread is part of the “After Classes” series, where I talk about my student life. In the next chapter I’ll cover courts, paddy wagons, protests, the war, and emigration. Follow the releases in the Telegram channel два семь три два пять