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

Самое первое задание, которое я получил, было от местного хора, у которого был крошечный бюджет на новый веб-сайт. Я работал изо всех сил, чтобы сделать для них наилучший веб-сайт, на который я был способен, учитывая мои ограниченные навыки в то время. Это снизило мою почасовую ставку до уровня, меньшего, чем я мог бы заработать, работая в магазине рыбы и чипсов, но я чувствовал неоспоримое чувство выполненного долга, зарабатывая деньги на кодировании веб-сайтов. С тех скромных начинаний мне посчастливилось работать в агентство цифрового маркетинга, ИТ-команда университета, стартап криптовалюты на ранней стадии, бегемот из списка Fortune 500 в качестве независимого подрядчика, а затем в Uber. Теперь я вернулся к фрилансу и инди-хакингу.

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

Терпение является ключевым.

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

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

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

Используйте существующие решения.

Ключом к построению успешной карьеры программиста является развитие способности быстро учиться и проводить исследования. Работа с Google — это навык, который вы можете развить, и за эти годы я определенно научился этому. Много раз я тратил слишком много времени на написание пользовательского кода для решения проблемы, а потом обнаруживал, что где-то есть какая-то библиотека или фрагмент кода, который уже делает именно то, что вам нужно.

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

Успешная карьера требует здорового тела и разума.

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

Умение продавать окупается.

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

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

освоить основы; держитесь подальше от причуд.

Общеизвестно, что в карьере программиста важно опережать новые технологии, чтобы не устаревать (за некоторыми исключениями). Даже в моем случае есть технологии, которые были отраслевым стандартом и которые я широко использовал, но которые уже устарели. Я смотрю на тебя, jQuery.

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

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

У Roadmap.sh есть отличные ресурсы — особенно для тех, кто ближе к началу своей карьеры, — чтобы решить, что изучать дальше и в каком порядке.

Привыкайте не знать, что происходит внизу.

Вычисления построены на идее абстракции. Это означает, что для того, чтобы писать функциональный код, вам не нужно разбираться в деталях протокола TCP/IP, в том, как работает компьютерный процессор, как библиотека, которую вы используете для организации очередей, делает свое волшебство или даже как V8 переводит код JavaScript в машинный код.

Независимо от того, на каком уровне абстракции вы программируете, всегда будет уровень ниже. Это может сбивать с толку, особенно если вам нравится чувствовать себя под контролем. Тем не менее, вы должны отпустить это и признать, что вы никогда не будете знать абсолютно все, даже на своем собственном компьютере, и это нормально.

Программирование — это не тупиковая работа.

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

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

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

Управление ожиданиями — часть вашей работы.

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

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

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

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

Клиентам наплевать на ваш код.

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

Нет единого пути к успеху.

За свою карьеру я встречал много разных успешных программистов, и способы, которыми они достигли успеха, сильно различались. Некоторые универсалы; некоторые специалисты. Некоторые учились в университете; некоторые этого не сделали. Некоторые работают 4 дня в неделю; другие работают только удаленно. Некоторые работают в крупных корпорациях; другие выполняют только подрядные работы. У одних есть проекты с открытым исходным кодом на GitHub, у других — нет.

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

Не зацикливайтесь на названиях; сосредоточиться на балансе на вашем банковском счете.

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

Обратите особое внимание на свое рабочее место.

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

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

Еще одно интересное замечание заключается в том, что коллеги из одной и той же организации показали относительно схожие результаты, и самая большая разница в производительности возникла у коллег из разных организаций. Из 92 конкурирующих организаций лучшая организация (та, которая показала лучшие средние результаты среди своих представителей) работала в 11,1 раза быстрее, чем худшая организация.

Итак, наконец, какой фактор действительно коррелирует с результатами участников? Это рабочее место. Верхний квартиль, те, кто выполнил упражнение наиболее эффективно, работали в более тихом, просторном, более личном пространстве и лучше защищенном от помех.

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

Синдром самозванца реален.

Синдром самозванца относится к чувству неадекватности, которое сохраняется, несмотря на очевидный успех. Согласно недавнему опросу Blind, 58% технических работников чувствуют себя самозванцами. Для меня синдром самозванца проявляется как страх быть разоблаченным из-за того, что на самом деле я не знаю так много, как другие думают, что я знаю. Это действительно заметно на собеседованиях, так как я искренне удивляюсь каждый раз, когда интервьюеры или клиенты действительно думают обо мне как о хорошем кандидате.

Сказав это, по мере того, как я продолжаю развиваться как профессионал, я понимаю, что действительно есть много того, чего я не знаю о своем ремесле и, возможно, у меня никогда не будет времени научиться. Однако все, что можно сделать в этом случае, — это принять тот факт, что никто и никогда не знает всего. Кроме того, в периоды неадекватности мне нравится напоминать себе о том, чего мне удалось достичь, чтобы привнести рациональные мысли в гоночный разум.

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

Стремитесь никогда не делать одну и ту же работу дважды.

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

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

Технический долг не свободен.

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

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

Заключительное примечание.

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

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

Первоначально опубликовано на https://www.karolisram.com 30 сентября 2020 г.