Разработка
10 нестандартных уроков, полученных за 10 лет работы инженером-программистом
Десять лет назад я переехал в Манчестер, чтобы начать свою карьеру инженера-программиста. Чтобы отметить это событие и поразмышлять о пройденном пути, я сел за чашку хорошего кофе и собрал свои мысли о том, какие, на мой взгляд, самые важные уроки я получил на этом пути.
В результате получился список из десяти уроков, которые помогли мне больше всего.
Независимо от того, начинаете ли вы работать или уже являетесь опытным инженером, я думаю, вы сможете найти эти уроки полезными для построения эффективной, значимой и устойчивой карьеры инженера-программиста.
Отказ от ответственности: некоторые из них могут не совпадать с типичными советами по карьере, которые вы встречаете. Возьмите то, что вызывает резонанс, а остальное оставьте.
Немного контекста для начала
В процессе размышлений я просмотрел свои рабочие записи за последние десять лет. Я составил список своих самых больших достижений и самых больших ошибок. Я также создал карьерную карту, чтобы представить себе различные должности, которые я занимал в 14 разных командах.
Последние десять лет я работаю консультантом в одной и той же компании, Thoughtworks. В моей работе неизменно одно — частая смена проектов, бизнес-областей, технологических стеков и команд.
С одной стороны, я думаю, что частая смена ролей и проектов, участие в нескольких командах и работа в разных сферах помогли мне быстрее понять суть разработки программного обеспечения. Это также позволило мне познакомиться с паттернами и антипаттернами в различных функциональных областях, таких как frontend, backend, инфраструктура и данные.
С другой стороны, переход между командами и ролями, такими как инженер по данным или инженер по инфраструктуре, требует сильного обучающего мышления, терпения и дисциплины. Вы должны уметь быстро осваивать новые инструменты, практики и концепции и адаптироваться к обязанностям и сферам влияния новой роли.
В целом, я думаю, что работа консультантом помогла мне развить способность легко осваивать новые языки программирования, практики и методы работы.
Достаточно контекста. Позвольте мне поделиться с вами самыми важными уроками, которые я извлек.
1. Выбирайте обучение, а не деньги
Не всякий опыт одинаков. Неважно, сколько лет у вас опыта. Важно, что и с кем вы делали все эти годы.
Вы можете рассматривать работу как сочетание нескольких вещей: деньги, обучение, люди, миссия… На что из этого вы сейчас ставите?
Я думаю, что когда вы только начинаете, в долгосрочной перспективе лучше получать обучение, чем деньги. Знания, полученные в первые годы, будут накапливаться, и это позволит вам получить более высокооплачиваемую и более значимую работу в долгосрочной перспективе. Конечно, так следует поступать только в том случае, если в данный момент вам не нужны деньги, чтобы расплатиться с долгами или содержать семью.
“Играйте в долгосрочные игры с долгосрочными людьми. Все доходы в жизни, будь то богатство, отношения или знания, происходят от накопления сложного процента», — Навал Равикант.
В начале вашего пути обучение и рост как инженера в рабочее время гораздо важнее денег. Подумайте о том, чтобы попасть в правильную учебную среду, как о приоритете на первых двух работах.
Лучшим карьерным решением, которое я принял, было покинуть зону комфорта, переехать за границу и начать свой профессиональный путь в отличной рабочей среде. Работа с группой международных, разнообразных и увлеченных людей, которым небезразлично их ремесло, ускорила мое обучение как ничто другое.
Благодаря удаленной работе вы теперь можете присоединиться к такой среде, не выходя из дома.
Находиться в отличной учебной среде в рабочее время — это только первый шаг. Не забывайте выделять время для учебы и практики каждый день. Ежедневный час учебы и практики вне работы в долгосрочной перспективе принесет быструю отдачу.
2. Инвестируйте в принципы и практики
Инвестируйте свое время в изучение принципов и практик современной программной инженерии с самого начала. Конкретные инструменты и технологии приходят и уходят, но принципы и практики остаются надолго.
Потратив время на понимание идей, лежащих в основе эффективного автоматизированного тестирования, или на то, когда использовать асинхронные или синхронные интеграции между сервисами, вы получите больше отдачи в долгосрочной перспективе, чем вложив столько же времени в изучение внутренностей нового фреймворка Vue/React/SpringBoot или заучивание синтаксиса языка.
Мне повезло работать с коллегами, которые подчеркивали важность понимания принципов и практик нашего ремесла. Освоение эффективных практик разработки программного обеспечения, таких как чистый код, рефакторинг, автоматизированное тестирование, CI/CD и разработка, управляемая тестами, даст вам преимущество и сделает ваш код приятным для работы.
3. Станьте инженером, с которым все хотят работать
“То, насколько другие люди хотят работать с вами, напрямую указывает на то, насколько успешной будет ваша карьера инженера. Станьте инженером, с которым все хотят работать”, — Джон Оллспоу, бывший технический директор Etsy.
Делать свой код таким, чтобы с ним было приятно работать, очень важно, но это только половина дела. Не становитесь инженером, с которым никто не хочет работать.
Эффективное сотрудничество — ключ к созданию отличного программного обеспечения. Научитесь хорошо сотрудничать с другими, помогать коллегам, которые застряли в решениях, активно слушать идеи других людей и быть таким человеком, с которым все хотят работать в одной команде.
4. Разнообразьте свою жизнь
“Вы не можете быть по-настоящему первоклассным в своей работе, если ваша работа — это все, чем вы являетесь”, — Анна Куиндлен.
Чтобы сделать долгую и интересную карьеру в сфере технологий, создайте свой образ жизни на основе привычек и ритуалов, которые разнообразят вашу жизнь и обеспечат вам правильный баланс между работой и личной жизнью.
Работа с девяти до пяти и ежедневное выделение дополнительного часа на изучение и практику своего ремесла не должны мешать вам заботиться о других сферах вашей жизни, таких как здоровье, финансы и отношения.
Чтобы сохранить баланс и не перегореть, вы можете установить некоторые основные правила и чередовать периоды, когда вы уделяете больше времени своей карьере, и периоды, когда вы не напрягаетесь и просто выполняете свои обязанности с девяти до пяти.
Вот некоторые из правил, которые я установила для себя, чтобы достичь баланса:
- Я защищаю свои выходные. В эти два дня я не занимаюсь делами, связанными с работой.
- Я удалил все, что связано с работой, со своего смартфона.
- Я стараюсь сократить время работы за компьютером после работы.
- Я выбрал хобби, которое позволяет мне быть на свежем воздухе, например путешествия, MTB и сноубординг.
“Не ставьте все свое счастье и цель на одну клетку. В разные периоды жизни можно опираться то на одну, то на другую опору, но лучше убедиться, что есть еще несколько, поддерживающих крышу, если первая рухнет”, — DHH, создатель Rails.
Конечно, будут периоды времени, когда мы будем нарушать эти правила и уделять больше времени проектам, связанным с работой или самообразованием. Это абсолютно нормально, если вы осознаете это и готовы пойти на такой компромисс ради того, что вы получаете взамен. Помните, что это баланс.
5. Относитесь к отзывам как к золоту
“Нам всем нужны люди, которые будут давать нам обратную связь. Так мы совершенствуемся”, — Билл Гейтс.
Постоянно просите и собирайте обратную связь. Обратная связь, в основном конструктивная, поможет вам выявить свои «слепые зоны» и быстрее узнать себя.
Обратная связь будет способствовать вашему росту больше, чем что-либо другое.
Мне повезло начать свою карьеру в компании с хорошо развитой культурой обратной связи. Обратная связь позволяла мне замечать тенденции, размышлять и записывать действия, которые я хотел бы предпринять, чтобы стать лучшим профессионалом.
Я отношусь к обратной связи как к золоту. Я систематизирую и консолидирую полученные отзывы в цифровых записях вместе с действиями, которые я хочу предпринять для их устранения. Ежемесячно я ставлю напоминание о необходимости пересмотреть эти действия, чтобы проверить, есть ли у меня прогресс.
Если вы не просите обратной связи, начните прямо сейчас! Вот хорошие советы, чтобы начать.
6. Сначала широкий уровень
“Чтобы стать успешным профессионалом в наши дни, я считаю, что сначала нужно идти вширь (освоить те 20 %, которые позволят вам выполнить 80 % задач), а углубляться только тогда, когда есть большая потребность, большие возможности или сильная заинтересованность в дальнейшем развитии своих навыков в той или иной области”, — Тьяго Гизи, директор по проектированию в Nubank.
Не останавливайтесь только на основных направлениях своей работы. Изучайте управление продуктами, идеи Agile и Lean, бизнес-сферу, проблемы которой вы пытаетесь решить, а также то, как работать с людьми и руководить командой. Будьте тем инженером, который задает вопросы о том, что он создает.
Мой лучший опыт обучения был получен, когда я вышел из зоны комфорта и заставил себя примерить другие роли. Чем лучше вы понимаете других в команде, тем лучше вы сможете сотрудничать с ними и вносить свой вклад в создание высокоэффективной команды.
Всегда есть возможность исследовать и пересечь границы вашей текущей роли. Вы можете добровольно участвовать в исследовательском тестировании новой функции, работать с операционной командой, чтобы внедрить наблюдаемость в ваш сервис, или на пару с менеджером по продукту понять, почему пользователям не нравится последняя функция, которую выпустили в вашей команде.
Это может быть немного нетрадиционным утверждением, но я считаю, что лучшие инженеры, с которыми я работал, были всесторонне развиты. Они понимали сквозной процесс разработки программного обеспечения, продукт и бизнес-проблему, которую пытались решить. Они не боялись высказывать свое мнение и предлагать улучшения в тех областях, за которые они не отвечали.
Будучи “обобщающим специалистом”, я могу быстрее добиться успеха, когда начинаю новый проект или вливаюсь в уже существующий. Быть широким специалистом и учиться быть всесторонне развитым — это супернавык.
7. Лидерство без титула
Вам не нужно быть техническим руководителем или руководителем инженерной службы, чтобы проявить свои лидерские качества и оказать влияние.
Не бойтесь взять на себя инициативу в обсуждении выбора нового инструмента. Не стесняйтесь оспорить дизайн, которым так гордится команда. Не избегайте указывать на проблемы, требующие решения. Не ждите, пока вас назовут лидером.
За годы работы я видел, как многие junior коллеги начинали руководить без титула. Через несколько лет большинство из них занимали руководящие должности и успешно определяли направление развития своих команд или даже управляли несколькими командами. Они не ждали, пока кто-то даст им «титул», а с самого начала проявляли свои лидерские качества.
8. Думайте о сферах влияния
Один очень высокопоставленный инженер однажды сказал мне, чтобы я всегда думал о том, что является моей текущей сферой влияния, а также о том, что должно стать моей следующей сферой влияния по мере продвижения по карьерной лестнице. Ментальная модель сфер влияния действительно закрепилась за мной, и я руководствовался ею, пытаясь увеличить свое влияние как инженера-программиста.
Если вы только начинаете, вашей первой областью влияния может быть модуль, над которым вы работаете, например, набор классов, которые нужно изменить, чтобы реализовать какую-то функцию. Когда вы начинаете чувствовать себя комфортно, область влияния увеличивается, и вы можете влиять на дизайн и решения, принимаемые для компонента в системе, например веб-приложения или микросервиса.
По мере накопления знаний и опыта вы начинаете влиять на дизайн всей системы в конкретной области, например, всех сервисов, за которые отвечает ваша команда. После этого вы начинаете понимать и влиять на систему систем, не только на сервисы, за которые отвечает ваша команда, но и на все остальное, что обеспечивает работу вашей компании.
Вы переходите от одной области к другой, осваивая предыдущую и приобретая знания и навыки, необходимые для того, чтобы начать влиять на следующую.
Эту идею можно применить и к вашему лидерскому пути. Вы начинаете с того, что руководите и организуете себя. Затем вы начинаете тренировать и наставлять других коллег, чтобы впоследствии перейти к руководству командой, несколькими командами или целой организацией.
Поймите, какова ваша текущая сфера влияния и что вам нужно, чтобы перейти к следующей.
9. Наточите инструменты
«Дайте мне шесть часов, чтобы срубить дерево, и первые четыре я потрачу на заточку топора», — Авраам Линкольн.
Оглядываясь назад, я благодарен за то, что с самого начала потратил время на освоение инструментов, которые нам приходится использовать изо дня в день. Я не имею в виду новейший JavaScript фреймворк или конкретную библиотеку функционального программирования для выбранного языка. Я говорю о тех инструментах, которые мы используем постоянно: IDE, система контроля версий, отладчик, терминал…
Потратьте время на запоминание сочетаний клавиш, выучите двадцать процентов команд, которые используются восемьдесят процентов времени, или узнайте, как настроить конфигурацию IDE, чтобы сделать ваши рабочие процессы более эффективными.
Окупаемость инвестиций в заточку топора высока. При этом не бойтесь менять и совершенствовать свой рабочий процесс. Пробуйте новые инструменты время от времени. Технологии развиваются быстро. Появляются новые инструменты, которые могут полностью изменить нашу работу. Например, разработка программного обеспечения с помощью AI с использованием таких инструментов, как Github Copilot, изменит наш подход к работе. Да, я должен был упомянуть искусственный интеллект!
10. Показывайте свою работу
“Станьте документалистом того, что вы делаете”, — Остин Клеон.
В самом начале своего пути выработайте привычку документировать, курировать и показывать свои работы.
Больше всего я жалею о том, что не начал фиксировать и делиться тем, чему научился, раньше. Отдавайте! Не становитесь инженером, который только потребляет информацию. Напишите комментарий или благодарность в учебнике, который помог вам, опубликуйте статью, над которой вы размышляли целый год, запишитесь на доклад, который вы так боитесь сделать…
Записывая свои идеи и наработки и делясь ими с людьми, вы быстрее получите обратную связь и сможете лучше понять тему. Более того, всегда найдется человек, которому ваши текущие проблемы и идеи будут полезны.
Если это вам по душе, вы можете подумать о создании собственной базы профессиональных знаний и начать делиться тем, что Тьяго Форте называет «промежуточными пакетами». Я начал создавать свою собственную базу знаний несколько лет назад и могу только пожалеть, что не начал раньше.
Размышления на прощание
За последние десять лет я многому научился, но именно эти десять уроков оказали наибольшее влияние на мой путь. Надеюсь, они пригодятся вам для построения сильной, устойчивой и полноценной карьеры инженера-программиста.
А как насчет вас? Что бы вы посоветовали начинающим инженерам-программистам, которые только начинают работать в технологической отрасли? Какие самые важные уроки вы усвоили? Пожалуйста, поделитесь ими с нами в разделе комментариев.