Широкие и узкие наборы навыков: Демистификация навыков разработки программного обеспечения

Опубликовано: 2022-03-11

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

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

Навыки инженера-программиста: графическое представление набора навыков

Широта и глубина, конечно, относительны. Например, вы можете быть экспертом в веб-разработке, или просто в клиентской веб-разработке, или только в JavaScript. Все это в каком-то смысле «глубокие и узкие» навыки, но последнее намного уже первого.

Кроме того, возможны как «глубокие и широкие», так и «мелкие и узкие» наборы навыков: первый означает, что все хотят вас нанять, а второй означает, что вы еще не научились чему-либо значимому. Поскольку они не очень распространены, их также не стоит подробно обсуждать.

Типы навыков и наборов навыков инженера-программиста

Глубокий и узкий

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

Возьмем SQL: допустим, вы знаете все о теории реляционных баз данных; плюсы и минусы MySQL, PostgreSQL, Oracle и SQLite; как оптимизировать запросы; когда и как денормализовать базу данных и т. д. Клиенты, которые ищут этот конкретный навык, захотят нанять вас как можно скорее, и на это есть веские причины. Вы возьметесь за дело и принесете пользу, как мало кто другой.

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

Широкий и мелкий

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

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

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

Когда проект изменится, вы станете активом для своей команды, а не помехой.

Наборы навыков в реальном мире

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

Графическое изображение гор, холмов и равнин

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

Эта стратегия, вероятно, будет служить им лучше всего в течение многих лет.

Почему программистам необходимо разнообразить свои навыки

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

Однако…

Чрезмерная специализация опасна. Складывать яйца в одну корзину может быть хорошо, если вы можете предсказывать будущее лучше, чем кто-либо другой, но эта способность редка и не связана с техническими навыками. Рассмотрим спрос на навыки программирования для Windows в нашем тысячелетии. Или спросите себя: могли ли многие из нас угадать соответствующие траектории Android, Flash, Nokia или Blackberry десять лет назад?

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

Предполагая, что вы убеждены и хотите разнообразить свои навыки, как бы вы это сделали?

Как разнообразить и улучшить технические навыки

Вы можете обменять деньги на навыки:

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

Вы также можете обменять время на навыки:

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

Вы должны искать возможности для обучения, но вы не можете делать это постоянно. Для моего проекта интервью Toptal я использовал Node.js и Backbone, с которыми у меня не было большого опыта. Было весело, но необходимый темп обучения не мог поддерживаться месяцами.

В идеале вы должны чередовать длительные периоды стабильности (с стабильным выпуском и доходом) и короткие интервалы, когда вы бросаете себе вызов, чтобы узнать что-то новое. Как часто вы делаете последнее, зависит от нескольких факторов, таких как ваш текущий набор навыков, рыночный спрос и ваши личные цели.

Почему широта охвата хороша для работодателей

Что касается работодателей, в некоторых сценариях всегда потребуются глубокие навыки:

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

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

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

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

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

Нахождение правильного баланса

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

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