В C# есть такие штуки — структуры. Это как классы, но хранятся на стеке, и работают не по ссылке, а по значению. В среднестатистической разработке их почти не используют. У структур много преимуществ, и я искренне топил за то, что их можно применять для улучшения кода. Типа, смотрите, мы можем использовать особенности структур, чтобы писать более безопасный и отказоустойчивый код.
Такую чушь может сказать человек, который не знает, что у структур есть пустой конструктор по умолчанию, который нельзя ни убрать, ни переопределить. Знаете почему я этого не знал? Да, потому что я никогда их не использовал. Ведь хорошего разрабовского опыта у меня мизер. Я давно уже не хочу читать книжки про сишарп. Зачем, если мне и так платят?
До первой работы, и пока не получил синьорский оффер, я учился как не в себя. Читал книги, декомпилил родные классы в дотнете, допытывал экспертов: «Как работает вот эта штука? А почему? А ты бы как сделал? А что быстрее?». День, когда я не узнавал новое признавался провальным. А в каждой задаче я видел возможность поучиться. Радовался замечаниям на ревью, и мог позвонить другу посреди ночи, чтобы обсудить с ним решение.
Я делал все это, потому что чувствовал — я недостаточно хорош, я ничего не понимаю. Мне тогда казалось, что я и на свою-то джуновскую роль тяну с большой натяжкой, все вокруг были умными и компетентными, и я очень, очень сильно хотел стать таким же. Я думал, что если изучить все нормально, стать старшим разрабом — то ты будешь таким чуваком, который вечером придумал проект, ночью его сделал, а утром отправил на рынок. Поймите правильно, о чем вообще может стать 22-х летний пацан? Он мечтает стать крутым дядькой.
Примерно тогда мой хороший друг, ни дня не проработавший прогером, взял да и устроился старшим разработчиком в сбербанк. Он много учился, делал свои проекты, и потому смог пройти собес. На его тогдашнюю зарплату он мог бы нанять десять таких как я, чтобы они делали его работу, и меня это прилично задело.
Мой друг, ровесник, человек без опыта — взял, да и официально стал тем, кем хотел стать я. Без дурацких промежуточных шагов с годами набора опыта и обучения. После этого мне уже не хотелось учиться.
Вместо десятка книг, статей и вопросов умным людям я стал сливать все свое время на лотерею собеседований. Она работает элементарно — разработчик должен знать настолько много всего, что эти знания даже теоретически не проверить полностью. Поэтому проверяют выборочно. Это как экзамен по билетам, где ты выучил только один, но можешь за день сходить на десять таких экзаменов — и хотя бы на одном он тебе попадется.
Так у меня и сработало. Попался удачный вопрос, я подхватил разговор — и вот старина Фил уже старший разработчик с кучей денег. Это работает очень странно. Я знал, что сорвал шальной куш, и одновременно был горд, что наконец стал синьором.
Разработка в целом так устроена, что когда ты недостаточно компетентен — да ничего не произойдет. Ты будешь незамечать кучу проблем, но от них никто не умрет. Ты прошел собес, и на новой работе никто не пытается доказать, что тебя взяли зря. Наоборот — если ты начинаешь не справляться, они пытаются убедить и тебя и себя, что никакой ошибки тут нет. Даже когда ты будешь демонстрировать вопиющую некомпетентность в каких то вопросах они просто скажут: «Ну окей, у Фила пробел с архитектурой бд, у нас у всех есть пробелы». И как бы, никто не заметит, что таких пробелов у тебя в 10 раз больше, чем у других.
Легко спутать нормального инженера с человеком, который недостаточно компетентен, ведь все программисты переживают, что недостаточно хороши. Ну послушайте, если мы наймем первокурсника на должность техдира, и он начнет ныть, что недостаточно хорош, мы же не скажем, что это синдром самозванца? Он действительно недостаточно хорош. У него нет необходимых знаний. И необходимого кругозора. Его нужно уволить, или понизить.
Но нет — разраб говорит, что он плохой, а люди вокруг думают, что ну не может же человек сам себя нормально понять и оценить, не бывает такого. И делают вывод, что он ошибся — то есть на самом деле хорош, плюс самокричтичен, а значит он еще лучше. И даже если произойдет чудо, и на одной из работ заметят подвох — ещё не факт что уволят, а если и уволят, то найдешь новую, и будешь потом сидеть, и рассказывать всем, что они мудаки, которые не понимают, насколько ты крут.
Моя карьера так и пошла. Я сидел на удаленке, делал вид, что работаю, а сам проходил собес за собесом и каждые несколько месяцев получал оффер пожирнее.
Я побывал старшим разработчиком, ведущим разработчиком, консультирующим экспертом, тимлидом. Работал с русскими, американцами, индусами и вьетнамцами. Строил гигантские системы, и маленькие стартапы. Учил людей писать код, пытался изобретать свои инструменты. Выработал свою философию и подход. Начал писать книгу про разработку.
Но я забывал сделать вот что — учиться программировать.
Когда у тебя высокий грейд, ты можешь делегировать все что угодно. Окей, не разбираешься в бд — пусть делает тот кто разбирается. Надо оптимизировать перформанс? Я не эксперт, пусть Лёха сделает. Я дам ему потом свое ревью. В какой-то момент я понял, что делегирую почти все задачи, которые заранее не знаю, как решить.
Печальная реальность в том, что большинство разрабовских задач более менее сможет сделать любой из нас — и почти всегда ни у кого нет ни времени ни желания разбираться, насколько качественно ты это сделал. Разработчики — люди без ответственности. С нас никто не спрашивает за баги, которые мы наплодили год назад, а раньше их как правило и не обнаруживают.
В индустрии принято, что большие шишки на досуге изобретают крутые инструменты. Чтобы изобрести что-то действительно нужное на сишарпе, нужен настоящий инженер, который хорошенько хлебнул говна, нашел какую-то сложную боль за свои десять лет опыта, и придумал как её вылечить. Поэтому я изобрел инструмент для фронтендеров. Я неплохо знаю тайпскрипт, но чистым фронтом никогда не работал, а потому, даже имея в голове полный концепт и готовность его быстро закодить, уперся в то, что я в целом понятия не имею, как правильно создать и оформить фронтенд-либу. Как настроить конфиги, как спроектировать внешнее апи, как и какие тесты подключить, какую файловую структуру использовать на проекте — да нихрена я не знал. Поэтому я позвонил своему другу фронту, и уговорил его сделать все за меня. Когда он сделал, мой интерес к проекту уже остыл. Я занимался поиском новой работы.
По хорошему, мне бы сгореть от стыда, и уйти с головой в обучение — но уже не получится. Я взрослый мужик, у меня есть дела и поважнее, чем корпеть над учебниками. И жизнь не требует этого. Если ты просто хочешь хорошенько отдыхать, и рубить бабло — нужно делать все точно как я.
Но я-то блин стал разрабом, чтобы делать интересные и важные вещи. Чтобы что-то построить, принести в мир. Решить настоящую и важную проблему, гордиться качеством своей работы. И я потерял все шансы на это. А взамен получил какие-то непонятные понты, возможность ничего не делать, и недоделанную американскую мечту. А сверху — огромную, просто астрономическую кучу цинизма.
Хрена с два я хоть в чем-то стану разбираться, учиться, или вообще что-то делать, пока меня не загонят в угол. И хрена с два меня в этот угол загонят. Я чувствую себя куском говна на работе, но пути назад у меня нет — и я это принял. Берут, платят, не гонят — ну и хрен с ним. Я достаточно преисполнился, и научился жить, принимая, что я кусок говна.
Но если бы я мог отмотать время назад, я бы все сделал по другому. Стать действительно хорошим старшим специалистом можно не играя в 23-х летнего синьора. Надо устраиваться на позицию по рангу, причем желательно во всякие яндексы, где твой трехлетний джуновский опыт действительно сделает тебя мидлом, а трехлетний мидловый — начинающим синьором. Да, лет пять-шесть ты будешь получать меньше, чем я. Но. Даже низкая джуновская зп в айти — это хорошие деньги. У тебя все равно будет синдром самозванца, но в отличие от меня, самозванцем ты не будешь. А самое главное — я то уперся в свой потолок, и никогда уже не стану разработчиком, который определяет индустрию. А вот ты сможешь. Ты охренеть как сможешь.
На правах рекламы
Мощные виртуальные серверы с процессорами AMD EPYC для разработчиков. Частота ядра CPU до 3.4 GHz. Максимальная конфигурация позволит оторваться на полную — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe.
Автор: Philipp Ranzhin