Создаётся впечатление, что программные инженеры получают свои звания произвольным образом. С самого начала, как вы начинаете работать, вы мечтаете о звании сеньора. Многие, особенно не стремящиеся руководить или основать стартап, считают это вершиной успеха. Но как получают это звание? Если что-то нельзя измерить, отследить или объективно оценить, значит, мы это просто придумываем. Соглашусь, что это немного эфемерно, но всё же не произвольно. Я в этой отрасли 11 лет, поработал с инженерами всех уровней, и скажу вам вот что: ваш уровень специалиста — это разница между вашими знаниями и опытом.
Знания и опыт
Давайте определимся с терминами, соответствующими контексту. Ваши знания и опыт — две стороны одной монеты. Они составляют одно уравнение, которое может принимать положительное или отрицательное значение. «Знания» означают, что вы знаете, как нужно что-то делать, а «опыт» означает, что вы знаете, как НЕ нужно делать. Знания можно получать из разных источников, это информация, которую вы впитываете. А опыт нарабатывается только на ошибках, неправильных действиях и провалах. Некоторые способны лучше других учиться на чужих ошибках. Такое умение встречается среди инженеров не часто, но уж если оно у вас есть, то это просто имба.
В ваш первый официальный день работы в должности программного инженера у вас нулевой опыт и зашкаливающий объём знаний. Эти знания вы могли получить в ВУЗе или — как в моём случае — на YouTube. Вы джуниор, потому что по сравнению с опытом знаний у вас слишком много. Всё верно, звучит так, словно это проблема, потому что так оно и есть.
Джуниоры верят, что они правы. Они ошибаются, но просто пока об этом не знают. А не знают потому, что у них нет опыта. Когда у вас есть опыт (напомню, ошибки и провалы), то он стукнет вам в голову и напомнит, что вы можете ошибаться. Джуниоры, отягощённые знанием и полным отсутствием опыта, часто даже не допускают мысли, что они сбились с курса.
Я не ругаю своих джуниоров, сам был таким. Я хорошо помню, как стоял в маленькой переговорке, примерно на третьем году работы инженером, в руке маркер, яростно рисую на доске и спорю так, словно поставил на кон свою жизнь. Я был убеждён, причём безосновательно (как я теперь понимаю), что пользователи ДОЛЖНЫ иметь возможность выбирать себе псевдоним и что система развалится, если заставлять их использовать почту в качестве логина. Оглядываясь назад, это было так банально… Дейв, инженер-сеньор, позволил мне действовать, как я настаивал, и я понял, что ошибался. В нашем случае в системе учётных записей на основе псевдонимов было много подводных камней. Дейв их видел, он пытался меня предупредить, но я не послушал бы. И в ходе работы над проектом Дейв любезно указал мне на них.
Хотя я и сожалею о своём решении, я благодарен за это, потому что получил ценный опыт. Теперь я снова вижу подводные камни в системе учётных записей на основе псевдонимов. Я был неправ. Это опыт.
Если у вас критическое мышление, то вы можете сказать, что система учётных записей на основе псевдонимов не обязательно плоха. Я знаю. Я не утверждаю, что прав в своих ощущениях. Опыт ценен не тем, насколько он меняет ваше мнение, а тем, как он показывает вам, что вы можете ошибаться. Никто не становится сеньором потому, что у него всегда правильное мнение.
Не раз в своей карьере, приготовившись спорить, я вспоминал про ту доску, про Дейва и свою необоснованную веру в собственную правоту. Это заставляется меня сомневаться в том, во что я верю сейчас, и напоминает о возможности ошибки.
Больше опыта
Никто не хочет быть мидлом, потерявшись в бездне между джуниором и сеньором. Это плата за второе место — напоминать вам, что вам чего-то не хватает, чтобы стать сеньором. Когда вы наберёте достаточно опыта, чтобы поставить под сомнение свои знания, вы официально станете инженером-мидлом. Это по-настоящему важный шаг и этап.
Вы осознаете свой уровень, когда будете думать, что знаете ответ, но всё равно станете искать альтернативные решения. В спорах вы не будете цепляться за свои мнения, словно без них вам не жить.
Ещё больше опыта и знаний
Вы станете сеньором, когда ваш опыт обгонит знания. На этом этапе вы, скорее всего, распознаете ошибочные убеждения. Во время выполняемой вами работы вы извлекаете больше уроков из ошибок и провалов, чем из книг и блогов.
Здесь я делаю важное допущение. В индустрии технологий вам доступны для изучения почти неограниченные объёмы информации. Ваши знания и опыт ограничены по вертикали, они не применимы ко всей отрасли.
Я веб-разработчик полного цикла (fullstack), типа инженер. Я знаком с облаками, проектированием API, разработкой фронтенда на Javascript и другими дисциплинами, которые сегодня ожидают от веб-разработчика. По этим темам я накопил много знаний и опыта. Но если бы я захотел присоединиться к команде в SpaceX, пишущей на С программное обеспечение для микропроцессоров сервоприводов, управляющих отклонением ракетных рулей… то мой опыт не стоил бы ломаного гроша.
Я хочу сказать, что инженеры-сеньоры являются сеньорами лишь в какой-то конкретной теме. Помните об этом, если вы молоды и не знаете, стоит ли углубляться в какое-то одно направление или развиваться в нескольких. Можно быть, например, настоящим инженером полного цикла и глубоко освоить фронтенд- и бэкенд-разработку, но могу сказать, что это займёт большую часть времени до вашего тридцатилетия.
В последние годы я обнаружил, что есть ещё одно небольшое звание после сеньора. По моему опыту, это просто бессмысленно, что «сеньор» является потолком для отдельного контрибьютора или кого-либо ещё, кто пишет код. Я встречал инженеров, которые оперируют на совсем ином уровне, и считаю, что недавно сам к ним присоединился.
Я всегда активно работал с кодом, но в последние четыре года работал техническим руководителем (в разных должностях и званиях) инженеров-сеньоров. Оказалось, что невозможно быть абсолютно правым. Ты всегда ошибаешься, если не сейчас, то когда-нибудь в будущем. Дело в том, что меняется бизнес, потребности клиентов, рынок, команда инженеров и их опыт, и т. д. Это означает, что всё, что мы создаём как инженеры, однажды должно измениться. Это новый уровень осознания, для достижения которого нужно обрести немалый опыт. Выбор инфраструктуры в пользу AWS Lambda вместо GCP Cloud Run не будет верным, если AWS через десять лет обнакротится. Есть вещи, которые мы не контролируем и не можем спрогнозировать.
Как инженер финального уровня, вы понимаете, что можете контролировать и прогнозировать, и строите вокруг этого своё ПО. Всё остальное — это внешние факторы, от которых ваша система должна быть абстрагирована, чтобы можно было легко и быстро вносить в неё изменения. Как абстрагироваться от таких глубоко связанных и укоренившихся в приложении элементов, как базовая инфраструктура фреймворка? Это для другой статьи.
Относительность: в чём смысл?
Пара слов о правоте и неправоте. Иногда вы ошибаетесь… но иногда вы правы. Не все идеи, архитектуры, решения или реализации равноценны. Некоторые решения лучше других. Знание — это педаль газа, которая подталкивает вас в споре. На вашей стороне факты, примеры кода, статьи, лучшие практики и целая глава из книги Мартина Фаулера. Всё это подпитывает вашу уверенность и интуицию, убеждая в вашей правоте. Педаль в пол и горячий спор.
А опыт — это тормоз, спасательный круг, позволяющий замедлить и остановить спор. Воспоминания о прежних ошибках и здоровый страх, что ваше решение не сработает, вносят ясность и позволяют рассмотреть альтернативную точку зрения.
Если вы не можете разумно аргументировать за обе стороны, значит, вы не понимаете проблему достаточно хорошо, чтобы вообще по ней аргументировать.
Иногда вы правы, и в таких случаях стойте на своём. Команда, компания и проект зависят от правильных решений. Иногда вы ошибаетесь, и вы не сможете этого заметить, если у вас есть лишь знания, толкающие вас в спор.
Как именно оценить чьи-либо знания и опыт? Не знаю. Работаю над этим. Пока что знаю лишь, что дела обстоят так.