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