The Tech Interview Behind the Scenes: Мартин Антонов

The Tech Interview Behind the Scenes е поредица на HRlabs.
Нека погледнем зад кулисите на техническия интервю процес от гледната точка на интервюиращите.
Целта ни е да предоставим на кандидатите ценни съвети и препоръки директно от професионалистите, които провеждат интервюта за различни технически роли.
„Писане на код ,,на живо” не трябва да е част от едно интервю.“ е мнението на Мартин Антонов, Software Architect - Frontend в Leanplum (a Clevertap Company).
Разкажи повече за твоя кариерен път.
По образование съм математик, завършил съм в Англия с фокус върху абстрактна алгебра, алгоритми, теория на графите и криптография.
Преди около десетина години учих в академията Телерик. След това направих стартъп за HTML5 пъзел игри, който се казва Fractal Games. В последствие се преместих в София и съм работил за различни компании, предимно като Tech/Team Lead на gaming и enterprise екипи.
Професионалните ми интереси се въртят около алгоритми, архитектури, качествен код и, разбира се, frontend технологии. Някак си, все се случва, че в моите екипи работим с legacy код, който се налага да бъде пренаписан или преправен :)
В ролята си на кандидат, имал ли си странни интервюта? А такива, които са те впечатлили?
През годините съм имал няколко интервюта, които бих класифицирал като ,,странни”. Може би последното, за което се сещам беше малко преди да започна работа на текущата си позиция.
Докато съм в Пампорово със семейството да покарам сноуборд, ми звъни една много мила дама от рекрутърска агенция за позиция Архитект. Разказвам ѝ за моя опит, за това че съм ориентиран към frontend технологиите и какво си търся като позиция и заплащане.
На самото интервю забелязвам, че интервюиращият е backend инженер и го повдигам на въпрос във връзка с позицията. Мисля, че точните му думи бяха ,,Аз не разбирам от frontend. Не ми е интересно.”. Получи се неловка ситуация, защото се оказа, че позицията е за Backend Architect. Все пак решихме да проведем интервюто. Беше доста сериозно техническо интервю - алгоритми, структури от данни, графи, хешмапове, SOLID, архитектури… Мисля, че се запънах единствено на бази данни и AWS, поради лимитирания ми backend опит. Разбираемо, не получих оферта.
Позитивно погледнато, съм имал няколко много приятни и интересни интервюта за позиции математик/програмист в сферата на комбинаторната оптимизация.
Все пак за мен най-доброто интервю и процес намерих в Leanplum.
Процесът започва с HR мениджъра на софийския офис. Следва интервю с hiring manager-a за позицията - запознаваме се, разказвам за своя опит и съответно получавам информация за точната позиция, изисквания, екип и каква би била моята роля в него. Техническата част се провежда на два етапа - задача за вкъщи и последващо интервю на място в офиса, където обсъждаме решението и се задават допълнителни и доста интересни въпроси към него. За финал преминах през т.нар. cultural fit (културна съвместимост) интервю. Направи ми много добро впечатление, че компанията провежда такова и на него се гледа изключително сериозно - наравно с останалите. Това е и първата компания, в която съм кандидатствал, която изискваше и референции от предишни работодатели.
След толкова сериозен интервю процес, бях изключително щастлив да получа и да приема офертата на Leanplum - работата е интересна и колегите са супер готини, интелигентни и са невероятно добри специалисти.
Какви умения и качества търсиш най-вече в един кандидат? Как кандидатът може да изпъкне в рамките на интервюто?
Бих разделил качествата на един кандидат в две категории.
Първата е свързана със социални умения - как разрешава конфликти, как комуникира, дали не е прекалено самоуверен, пасва ли на културата и атмосферата в компанията.
Откъм технически умения, много зависи от конкретната позиция.
За по-младши програмисти търся в кандидатите умението да разрешават проблеми, които не са срещали преди (алгоритмични задачи, качествен код, обектно-ориентирано програмиране) както и адаптивност към нови технологии и желание за развитие.
За по-старши програмисти изискванията са по-високи. В допълнение на предишните, обръщам повече внимание на стила на писане, релевантен опит с конкретни технологии, дискусии за принципи на ООП, SOLID, дизайн патърни, архитектури.
Много често въпросите, които задавам, са сходни за различните нива.
Един кандидат би изпъкнал, ако се справя с въпросите бързо и отговаря много точно, независимо колко дълбока стане дискусията и колко трудни ,,под-въпроси” задавам. За мен, такива кандидати проявяват силен интерес към програмирането, не само като ,,просто работа”, а и като хоби, което им доставя удоволствие.
Какви въпроси обикновено задаваш в техническите интервюта? Има ли конкретни задачи или проблеми, които често използваш за оценка на кандидатите?
Да се създаде добро техническо интервю не е лесна задача и като цяло е доста субективен процес. За мен е изключително важно кандидатът да е правилно предразположен така че да даде най-доброто от себе си.
Моето мнение е, че писане на код ,,на живо” не трябва да е част от едно интервю. В реална обстановка, програмистите много рядко пишат код докато ,,някой” ги гледа и оценява. Това е много стресиращо и нетипично. Поради тази причина, разделям интервюто си на няколко части.
Първата е встъпителна техническа дискусия, която цели да предразположи/отпусне кандидата. Често задавам въпроси като:
- Кой е най-сложният проблем, който си решавал като програмист?
- Какво в работата ти носи усмивка в края на деня?
- Какво ти е мнението за React vs Vue vs Angular? Коя технология предпочиташ и защо?
Втората част е по-задълбочена техническа дискусия - архитектурен дизайн на преизползвам компонент (например Dropdown Menu), дефиниция/дискусия за Redux патърна като най-използван в нашата сфера и различни по-малки въпроси около CSS, дизайн патърни, ООП и други.
Най-важната и финална част от моето интервю са задачите свързани с код. Подготвил съм специални такива, които да тестват компетенцията на кандидата в различни направления - алгоритми, ООП, качествен код и async/promises. Споделям екрана си и работим по задачите заедно, за да предотвратя стреса от писане на код на живо. Гледам да помагам на кандидата, ако се затрудни и като цяло обръщам много внимание на качествения код.
Колко важно е кандидатът да има добри комуникационни умения? Как те оказват влияние върху цялостното интервю?
От една страна, не е трудно кандидатът да покаже добри комуникационни умения, т.е. летвата не е висока. От друга страна, при липсата на такива, кандидатът не продължава напред, независимо колко добър програмист е и колко стойност би дал на компанията с работата си.
Смятам, че когато става въпрос за лидерски позиции (Team Lead, Engineering Manager и по-високи), добрите комуникационни умения стават много по-ключови и на това се набляга повече в интервютата.
Каква роля играе културната съвместимост при вземането на решение за наемане? Как оценяваш дали кандидатът ще се впише добре в екипа?
За съжаление, моето впечатление е, че много малко компании имат cultural fit интервюта и взимат предвид съвместимостта на един кандидат със съответната компания. Без да давам конкретни примери, работил съм в компании с хора, на които им липсват базов бизнес етикет, култура и възпитание на работното място. С такива хора се работи изключително трудно, атмосферата става много тягостна и токсична, особено ако са на ръководни позиции. В такива случаи те стават и причина за напускане на добри кадри или на цели екипи.
На мен лично ми правят много сериозно впечатление расистки/сексистки/хейтърски или други подобни коментари, независимо колко тънко доловими са те по време на интервюто.
В Leanplum културната съвместимост се проверява на всички етапи и от всички интервюиращи, което според мен силно е допринесло за прекрасната култура и атмосфера в компанията.
Какви са най-честите грешки, които кандидатите допускат по време на интервю? На какво би посъветвал кандидатите да наблегнат при подготовката за интервю?
Провеждал съм много интервюта, за различни компании през последните 10 години и по мое наблюдение, 95%+ процента от кандидатите допускат елементарни грешки, които правят много лошо впечатление като тук изключвам техническите умения.
Моят съвет преди интервюто е кандидатите да прочетат повече информация за конкретната компания и продукт. Много съм щастлив, когато на въпроса ,,Знаеш ли нещо за Leanplum?” или “Какво те накара да кандидатстваш при нас?”, кандидатът показва, че се е подготвил и разказва набързо за продукта и какво го е грабнало в обявата.
Според мен също е задължително кандидатите да проверят всички технологии и изисквания, споменати в обявата, за която кандидатстват. Отделянето на 10-15 минути за всяка такава тема чрез видео в youtube или някоя статия увеличава познанията на кандидата и това винаги се усеща по време на интервюто. Тук не става въпрос да се научи в детайли конкретната технология, а просто базови познания.
В допълнение има въпроси-”капанчета”, за които е добре кандидатът винаги да има предварително готов отговор. Това са например:
- ,,Защо напусна последната си позиция?”;
- ,,Имал ли си конфликт с колеги? Как си ги разрешил?”;
- “Кои са твоите топ 5 негативни качества?” и други.
Аз лично не харесвам тези въпроси и не ги задавам, но когато са ми ги задавали на мен, винаги имам готов отговор и това прави добро впечатление на HR-ите.
Следвайки базовия бизнес етикет, редно е кандидатите да са навреме за интервюто (аз винаги съм поне 5 минути по-рано) и да са облечени подобаващо (без джапанки, къси панталони, шапка, слънчеви очила). При непредвидени обстоятелства е редно кандидатът да предупреди за закъснение поне 15 минути преди интервюто, да се извини за закъснението, или за евентуалното отлагане.
По време на интервюто, кандидатът трябва да е позитивен, да не е прекалено самоуверен и да е готов да се съсредоточи за техническата част - имал съм кандидати, на които ,,просто не им се занимава”.
Срещал съм и други подобни грешки, но спазвайки тези прости правила, един кандидат би бил в топ 5% от всички интервюирани. Дори с неперфектно техническо интервю, шансовете за оферта се увеличават значително.
Какви съвети би дал на кандидати, които искат да подобрят техническите си умения? Има ли ресурси, които би препоръчвал?
Моят основен съвет e кандидатите да имат безупречни познания по основите на програмиране - алгоритми, ООП, принципи, качествен код, дизайн патърни и базови архитектури. След това да се специализират в дадена сфера на програмиране, която поражда в тях силен интерес, например frontend, backend, web/app development, AI, embedded, gaming… За всичко, което не им е специалност, е добре да имат поне базови познания и компетенции.
Аз най-често използвам youtube, medium или случаен сайт от google за бързо попълване на пропуски. За цялостни курсове проверявам youtube, защото е безплатен, и ако не намеря подходящ ресурс, гледам Coursera, Udemy, MIT OpenCourseWare.
Сподели повече за най-добрите (или най-лошите) интервюта, които си провеждал?
Провеждал съм немалък брой успешни интервюта. Кандидатите просто минават през въпросите ми с лекота. В този случай, най-често ги препоръчвам за по-висока позиция от тази, за която са кандидатствали (ако има фирмен капацитет за това) или като минимум предупреждавам другите интервюиращи с лично съобщение за много силен кандидат.
Ето и една забавна история за най-странното интервю, което съм провеждал.
Позицията е за младши програмист в моят стартъп Fractal Games.
Кандидатът се беше постарал със CV-то си. Имаше опит около една година и беше завършил академията Телерик - на хартия, прекрасен кандидат за позицията. Дойде на време, но с джапанки, шорти и тениска. Разговорът и техническата част минаха задоволително, с изключение на няколко отговора от типа на ,,Това е много лесно - с Google мога да го проверя много бързо” (идеята е да се отговори на интервюто - с Google всеки може :) ). Все пак решихме да му дадем задача. Кандидатът доста странно попита в кой ден ще му изпратим задачата. Причината за това била, че той живее на палатка от една година в ,,търсене на себе си” и имал интернет само вторниците, когато слизал до близката бензиностанция да си зареди батериите. Това определено ни стъписа и не очаквахме такъв отговор. В крайна сметка решихме да не даваме задачата на кандидата.
Имам и примери за обективно ,,лоши” интервюта - кандидат е написал в CV-то си изрично ,,Алгоритми и теория на графите” и при въпрос свързан с това отговорът беше ,,Аз имах такъв курс в университета, взех го с тройка и не разбрах много много за какво става въпрос”.
Също съм имал кандидати, които са преписали решението на задачата от интернет. Може би най-яркият ми спомен е за един кандидат, който се беше появил с 10-минутно закъснение, с шапка и тениска, сериозно зачервени очи - може би интоксикиран или със сериозен махмурлук. С всеки зададен въпрос имах чувството, че му причинявам психическо разстройство, а техническата част мина с невероятна досада - все едно го бях накарал да изоре цяла нива.
Как оценяваш кандидата по време на интервюто – базирано само на теоретичните му познания или за теб е определящ подходът му към решаване на казуса/ задачата? Какви други фактори вземаш предвид при вземане на решение?
Не държа на суха теория, но винаги я проверявам като приложение в даден проблем. Например, никога не питам ,,Каква е дефиницията и по един пример за всеки от принципите SOLID?”.
По-скоро тествам дали кандидатът ще забележи липсата или грешката в кода свързана с тези принципи. Ако може да цитира съответния счупен принцип и да даде дефинциия, това би бил перфектен отговор.
Определено гледам да наблягам на начина на мислене и подхода към интересни и нестандартни задачи.