ML Architect
  • Як розпізнати недосвідченого розробника

    Почитав статтю — є дивні моменти. Почитав коменти — взагалі в шоці) Склалося враження, що половина девів не знає / не хоче знати базових речей, а людей які їх ці речі питають вважають ворогами суспільства. А потім фб висить по пів дня :D

    З приводу хоббі — не запитую і сам не люблю відповідати на такі запитання.
    Тема питань по CV не розкрита.

    З особистого досвіду — декілька років хайрю на DS/ML Python та деякі суміжні технології для SaaS/PaaS (так що зважайте на проф деформацію у зв’язку з ds роботою :/ ), на рівні від джунів до лідів та використовую схожий принцип:

    1. Скрін питання для HR, 5-10 простих концептуальних запитань. Достатньо просто переглянути потім записи HR / прослухати шматок розмови (якщо кандидат дав згоду на запис). В США такі опитувальники є у багатьох компаніях по всьому спектру розміру компанії, включаючи FAANG.
    False Negative коштує дешевше ніж витрачати час на 5х+ кількість співбесід.

    2. Take home завдання на 1 вечір (після підписання NDA). Якийсь простий / найпростіший датасет з тих, з якими ми працюємо, з поставленною задачею та декількома requirements — 1. EDA, 2. проста модель та 3. її оцінка. Тут дивлюся не на те наскільки гарно зроблене завдання / крута модель, а радше на кількість відвертих фейлів. Зазначаю кандидату, що час виконнання (кількість витраченних днів) також має значення. Гарне проксі до зацікавленності, хоча не завжди вірне. Серед найчастіших фейлів — кандидати пропускали якийсь з пунктів requirements, наприклад оцінку (!). Також можна глянути на стиль коду та наскільки уважний кандидат. Зазвичай релевантний досвід відчувається в такому завданні. Треба зважати що виконання take home може бути не індивідуальне.

    Тех співбесіда. Зазвичай, це 1 година, але часто триває трошки довше (занадто багато стресу кандидату, як думаєте?).

    3. ​Перші 3-5 хв коротко розказую про компанію, кого ми шукаємо та чим я займаюся, щоб кандидат краще зрозумів контекст проєкту, про які скіли їй розповідати і приблизний бекграунд інтерв’юера.

    4. Далі близько 15 хв запитання по резюме. Хоч і коротка, але дуже важлива секція. Зазвичай оцінюю глибину та ширину, вибириаю 2-3 проєкта, та даю запитання про те чому приймалися конкретні рішення. Якщо в резюме вказано 2+ років на проєкті, але глибини або ширини немає, то це викликає підозри. Питання про чому приймалися якісь рішення може слугувати проксі до широти знань та софт скілів.

    5. 20-25 хв 5-7 категорій по декілька запитань кожна. Відносно прості питання по теор базі; прикладні аспекти ML; прості концептуальні питання по software engineering / Python з deep dive в теми знайомі кандидату (виходячи з CV). Більш досвідчених можу запитати якісь архітектурні або MLOps запитання.
    З приводу fundamentals — якщо людина не знає що таке власні вектори та власні значення, або не знає різницю між лінійними та афінними перетвореннями (можна без складних слів) — червоне світло для мене. Якщо людина і зможе розв’язати якусь більш-менш нетривіальну ML проблему — це буде радше всупереч, а не завдяки. (декілька разів наймали норм кодерів з не дуже теор базою на DS/ML позицію — і кожного разу звільняли, людина просто не розуміє де дебажити алгоритм і за 0.5-1 рік важко на норм рівень вийти, якщо ще хоч якісь таски робити окрім навчання) (я не кажу про SE ML позиції).
    Окрім деяких випадків, коли кандидат добре знається на якійсь темі, не витрачаю більше 2-3 хв на 1 запитання, цього зазвичай достатньо щоб приблизно зрозуміти знання у цьому піднапрямку. Але так, багато покрити за 20-25 хв не вдасться.

    6. 5-10 хв невеличке код завдання рівня easy leet code, без жодних складних алгоритмів. Глянути на швидкість, стиль написання коду, знання основних Python’s built-ins і базове логічне мислення.

    7. 5 хв питання від кандидата. Може заробити невеликий плюс або мінус («умовна» зацікавленість проектом, темою, що саме важливо кандидату) — тут все більш менш ясно, але і суб’єктивно також. Не раджу задавати зовсім шаблонні питання.

    Зауваження: якщо бачу що кандидат слабкий і не орієнтується у необхідній для позиції темі та я розумію, що не візьму його, то намагаюся зменшити людині стрес. Або запитую знайомі їй речі, або даю загальні відповіді на свої ж запитання (:D), або розповідаю як треба мислити в даній ситуації (на мій погляд) і розповідати щось, що може бути корисне.
    Зауваження 2: якщо кандидат слабкий і хам — можу закінчити раніше, але намагаюся це завжди зробити коректно.

    Після співбесіди формую профіль кандидата по 7-10 параметрам за 5 бальною шкалою (очевидно, суб’єктивною, яка годиться тільки для порівняння кандидатів між собою, але не в абсолютному вимірі). Далі обговорюю подальші дії / «софт» співбесіди з керівництвом компанії (а також з лідами проєкту).

    Зазначу також, що погані софт скіли — наприклад offensive поведінка чи хамство для мене це великий червоний флаг. Часто senior кандидати можуть мати в деяких піддоменах досвід більше, ніж інтерв’юер, але це не привід поводитися по хамськи. Можете розраховувати, що в роботі буде так само.

    На деякі сіньйор та особливо лід позиції, очевидно, ще треба більше покривати софт скіли. Особисто я, зазвичай, розбиваю тоді 1 тех співбесіду на 2 менші, але з покриттям софт скілів, але це зовсім інша історія.

    Зауваження: написано з досвіду проведення переважно online interviews та remote формату роботи (працював remote задовго до пандемії)
    Зауваження 2: всі гуглять. Якщо щось просто підзабув — норм, але якщо кандидат тупо зачитує щось з гугла, не розбираючись в цьому — червоний флаг (але не критичний, я б сказав). В роботі все буде також на відчепись, скоріше за все. Для мінімізації гугління краще проводити з відео і заздалегідь про це попереджати.

    Також всі ці тех співбесіди не вбережуть від халявщиків з норм тех скілами. Але це вже також інша історія.

    Мені також потрібно до психоаналітика чи куди там коментатори відправляють? :D

    Які ваші зауваження до такого підходу?