Карьера

Как распознавать хороших программистов?

Это перевод заметки Саймона Саута, оставленной в ответ на вопрос How do you know when someone is a good programmer? на quora.com

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

HR-менеджер в поисках "хорошего программиста" скорее всего будет интересоваться насколько он:

  • Способен программировать: Понимает ли технологию. Может ли писать рабочий код. Может ли решать проблемы.
  • Проявляет склонность к бизнесу: Разбирается ли он в индустрии компании. Умеет ли расставлять приоритеты и принимать решения, которые сочетаются с бизнес (не техническими) целями.
  • Способен адаптироваться к коллективу: Уживается ли он с другими членами команды. Сочетаются ли его ценности с ценностями организации.
  • Способен работать на кого-то: Следует ли он указаниям, без жалоб. Согласится ли он с зарплатой, которую ему предлагают платить.

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

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

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

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

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

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

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

2. Они хорошо пишут. И тут я подразумеваю умение излагать материал. На английском (или вашем родном языке), я не говорю про код. Есть как минимум две причины, почему это важно.

Первая: большая часть работы в программировании — писать для других людей: нормативные документы, комментарии в коде, документацию API, отчёты о багах, сообщения о коммите и так далее. Большая часть расходов на программный проект нарастает во время стадии обслуживания, после релиза, а один из лучших способов сократить эти расходы (до сих пор!), писать эффективную документацию перед разработкой и в течение её.

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

3. Они вкладываются в open-source проекты. Это ярко-выраженный показатель статуса среди самих программистов. Кроме того, участие в публичных проектах проявляет сразу несколько желательных черт.

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

Во-вторых, open-source проекты часто (хотя и не всегда) – технически сложные компоненты инфраструктуры, которая, технологически выражаясь, функционирует на относительно низком уровне. Поэтому работа над ними отражает реальный масштаб способностей. Переделывать веб-страницу, чтобы она быстрее загружалась, означает знать что-то о том, как работает Web; изменять Mozilla Firefox так, чтобы он загружал веб-страницы быстрее, требует значительного уровня знаний о производительности Web.

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

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

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

Именно поэтому я всегда с подозрением отношусь к "senior" разработчикам, которые всю работу делают, скажем, в С# или Java, и на их компьютере установлена только Microsoft Windows. Есть функции по-умолчанию, варианты, которые вы выбираете, если ничего не делаете. Тот, кто страстно относится к программированию, у кого есть мнение о том, что делает систему лучше и замотивирован прорабатывать сложную задачу, почти стопроцентно попробует "альтернативные" операционные системы вроде Linux, NetBSD или Haiku, или языки программирования вроде Eiffel, Haskell или Clojure, и на их сайте или в резюме будет этому доказательство.

Заметьте важное следствие: вы можете запороть свою работу как HR менеджер, используя слишком чёткие критерии для поиска работника. Программисты с достаточной степенью любопытства, попробовавшие работать на Smalltalk, оказываются хорошими работниками, несмотря на то, знание какого языка программирования требуется от кандидата. Если ваш поисковый фильтр — "PHP, Apache, Oracle и Windows 10", сможете ли вы найти таких людей?

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

Как уже говорилось ранее, блог кандидата или его участие в open-source проектах могут дать хорошее представление об активности в этом вопросе.


Перевод: Наталия Басс


От редактора: Мы на Хекслете часто публикуем переводы статей. Важно помнить:

  1. Мнение автора статьи может отличаться от мнения администрации и сотрудников Хекслета.
  2. Цель перевода – показать мнение. Поэтому одна статья может визуально противоречить другой: это просто разные мнения. Мы оставляем на вашу ответственность возможность анализировать и делать выводы для себя.
Natalia Bass 22 августа 2017
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →