Як найняти і оцінити програміста

Як керівнику веб-студії, мені часто доводиться наймати програмістів.

Як найняти і оцінити програміста

Як не-програмісту, буває складно оцінити професійні якості кандидата, а треба. При цьому, треба найняти такого фахівця, який виконає поставлене завдання і не доведе до нервового зриву менеджера. Нижче, власний досвід, що можна робити, щоб найняти відповідального програміста, який виконає свою роботу в строк і за ТЗ.

Основна ідея найму - немає поганих або хороших кандидатів, є відповідні на цю вакансію і не підходять. Щоб правильно вибрати саме того, хто вам потрібен, почнемо з цілей.

В першу чергу потрібно сформувати список вимог до програміста: кого ми шукаємо і для яких цілей. Список вимог зазвичай складається з 2 частин: особистісні характеристики (вміння працювати в команді, відповідальність і т.д.) і професійні навички (мови програмування, досвід, освіту і т.д.).

1. Творчі завдання.
2. Формальні завдання.

При цьому під «творчої» розуміється завдання, для якої немає готового рішення (раніше ніхто не робив, або поєднання типових задач, але як робити, теж незрозуміло). Так було при розробці сервісу по конструюванню чоловічих костюмів для американського замовника. Користувач вибирав протягом 22 кроків елементи чоловічого костюма - тканина, розміри, і в кінці міг замовити пошиття обраного костюма. Як таке робити в Гуглі на написано. Для виконання такого завдання шукаємо програміста з типом особистості «можливості».

«Формальна» завдання має на увазі виконання однотипних дій за заздалегідь визначеним шаблоном. Наприклад - верстка. Або розробка сайту по вкрай докладного технічним завданням, в якому прописаний алгоритм дій на кожній сторінці. Якщо потрібно поставити звичайну фотогалерею на сайт, це завдання до програміста з типом «процедури».

Для виконання творчих і формальних завдань знадобляться програмісти з різними особистісними характеристиками.

Як визначити особистісні характеристики програміста?

Для оцінки особистісних якостей я використовую методику Світлани Торез, описаної в книзі «Мотивація на 100%».
Якщо коротко, то використовується шкала оцінки мета-програм «процедури-можливості» і «процес-результат».

Як найняти і оцінити програміста

Це властивість особистості називається метаповеденіе і не змінюється протягом усього життя. Кожна людина в більшій мірі схильний або до використання процедур, або до пошуку можливостей.

Програміст з метаповеденіем «процедури» працює по строго певним алгоритмом. Він любить і охоче використовує інструкції, керівництва. Видані такому програмісти стандарти програмування або верстки будуть дотримуватися без додаткового контролю. Недолік такого типу - нездатність орієнтуватися в нестандартних ситуаціях. Люди процедур не переносять зміну технічного завдання в середині проекту. Від них часто можна почути «Потрібно звернутися до замовника ВСЕ, що потрібно, я потім переробляти не буду!».

Програмісти з метаповеденіем «можливості» не сприймають рамок, їх надихає невідоме, їм цікаво знаходити таке рішення задачі, яке до них ще нікому не вдавалося зробити. Людина можливостей здатний знайти рішення задачі в умовах обмежених ресурсів, інформації. Їм постійно потрібні нові складні завдання, повторення одного і того ж ввергає їх у зневіру. Від менеджерів, які працюють з таким типом програмістів, часто можна почути: «Він уже другий тиждень не може таку фігню доробити, там роботи на 20 хвилин усе!»
Програміст такого типу не любить дотримуватися регламенти та слідувати загальним правилам, він швидше за знайде спосіб зробити те ж саме по своєму. Плюсом таких людей є здатність швидко і легко перемикатися з завдання на завдання. Зміна входить умов проекту сприймається як нова можливість.

Приклад. Програміст «процедури» зробить форму зворотного зв'язку, як намальовано в дизайні. Програміст «можливості» зробить модуль, який дозволить створювати будь-які форми зворотного зв'язку, незалежно від того, який дизайн буде наступного разу. Програміст «можливості» може робити геніальні речі, але ви не досягнете від нього документування проекту. Програміст «процедури» видає стабільну якість, але нештатна завдання йому не під силу.

Як визначити тип «процедури / можливості» у кандидата?
Це досить просто виявити в розмові з кандидатом. Запросіть описати, яким чином він робив свій останній проект. Людина процедур зазвичай описує порядок дій: перше, друге, третє. Людина можливостей швидше пригадає незвичайне рішення, яке він знайшов у ході роботи над проектом.
Можна ще запитати що подобається і що не подобається в своїй роботі. У відповіді явно буде або згадка зрозумілих процедур або приклади нестандартного вирішення завдань.

Природно, не треба забувати, що той чи інший тип рідко зустрічаються в чистому вигляді. Швидше це поєднання обох типів, можна грубо прикинути співвідношення 30% процедур / 70% можливостей і навпаки. Буває ще 50/50 - цих програмістів часто називають any-кейщікі.

Для додаткової перевірки, можна дати здобувачеві тестове завдання. Додаткову інформацію про претендента дадуть питання, які задасть програміст, отримуючи завдання. Чим більше формальних питань задасть кандидат, тим яскравіше виражена метаповеденіе «процедури».

Отже, підіб'ємо підсумки. Якщо потрібно виконувати завдання, що повторюються однакової складності і зі стабільною якістю, слід шукати програміста з типом «процедури». Якщо завдання із серії «йди туди, не знаю куди, принеси те, не знаю що», з цим впорається програміст з типом «можливості».

Так само при наймі програміста слід враховувати майбутнє зростання компанії. Людині можливостей необхідні нові завдання, інакше він піде. Якщо компанія постійно розвивається і потрібно підвищувати професійний рівень, для програміста «процедур» це може джерелом занепокоєння і приводом покинути компанію.

Швидкість роботи цих двох типів так само відрізняється. Програміст-можливостей може працювати як дуже швидко, так і повільно, якщо мотивації недостатньо. Він же може працювати цілодобово безперервно.

Для програміста процедур, цілодобова робота в принципі неможлива. Умови роботи і винагорода повинні бути чітко визначені і рідко змінюватися. У нагороду ви отримаєте стабільну швидкість роботи і передбачуваний результат. Програмісти процедур завжди здають роботу в призначені терміни.

Ще одна порада: при формуванні команди розробників для роботи над великим проектом ефективно збирати і програмістів «можливості» і програмістів з типом «процедури». Тип «можливості» придумає спосіб як це зробити, а тип «процедури» швидко доробить дріб'язок і редагування.

Успішних вам проектів!