Live coding в українських ІТ-компаніях. Коли й навіщо використовувати підхід
Live coding, або ж on-the-fly programming, just in time programming, conversational programming — підхід, коли один розробник пише код, а інші спостерігають за цим у режимі реального часу.
Ми запитали в ІТ-компаній, чи використовують вони live coding у роботі, коли саме й навіщо. Крім того, з’ясували, які переваги та недоліки підходу виділяють ІТ-спеціалісти. Цікаво, що live coding під час співбесіди економить час, а під час навчання, навпаки, вимагає багато часу. Також айтішники зазначають, що практика може виявитись стресовою для кандидатів під час співбесіди.
Отже, розберімось, які задачі допоможе розв’язати лайв-кодинг.
Денис Яковенко, CEO & Co-Founder у FasterThanLight
Мета live coding — зрозуміти логіку кандидата, подивитись, як він буде розв’язувати задачу, які методи та підходи використовуватиме. Не завжди людина знаходить повне рішення, але навіть у такому разі ми бачимо рівень знань, зазвичай цього достатньо, щоб вирішити, чи пропонувати офер.
Основна перевага і причина використання live coding — незначні часові витрати, потрібна всього година. Також це змога побачити фахівця за роботою (чи гуглить і що саме, чи використовує hot keys, чи ставить питання і які), прокоментувати та обговорити його рішення. Якщо говорити про тестове завдання, то на це йде більше часу: щоб його створити, кандидату — виконати, розробнику — перевірити. Крім того, невідомо, чи людина сама виконувала тестове, чи хтось їй допомагав.
Проте в live coding є і недоліки. Ця практика може бути стресовою для кандидата, у нього може бути не готовий сетап (не працює мікрофон, не має IDE, бо взяв ноутбук брата, з технічних причин не шериться екран), або ж він може бути втомленим саме в цей момент і кодити добре не вийде.
Владислав Клименко, Front-end Engineer в BetterMe
На собеседовании мы больше общаемся, чем кодим. Конечно, даем несколько технических задач для оценки мышления, но не уделяем этому слишком много внимания. Ведь часто они нерелевантны будущей рутине. Ключевой этап — тестовый день. Десяти техническим задачам мы предпочтем пару часов лайв-кодинга на живом проекте.
Как проходит тестовый день? Один из специалистов рассказывает о проекте и процессах в команде, берет задачу из спринта и работает над ней вместе с кандидатом. У нас нет закрепленных разработчиков, которые проводят тестовые дни на регулярной основе, обычно мы выбираем накануне одного человека, у которого в спринте есть подходящая задача (можно быстро погрузиться) и время.
Сразу видно, как человек чувствует себя в нашем темпе, как быстро включается в контекст. Мы понимаем, насколько комфортно нам работать с кандидатом и наоборот: он знакомится с командой, архитектурой проекта, особенностями будущей работы. Некоторые кандидаты сами настаивают на этом этапе. Так что такая практика хорошо себя зарекомендовала.
Также мы получаем положительный фидбэк, специалисты отмечают, что наши интервью не похожи на интервью с другими компаниями, так как есть возможность обсудить подходы, побрейнштормить и вести дискуссию.
Богдан Серенков, Engineering Manager в Provectus
Создавать формальный курс под специфические задачи проекта и для небольшого количества людей нецелесообразно. И тут на помощь приходит парное/групповое программирование (оно же live coding), когда более опытный с точки зрения проекта или общей технической экспертизы разработчик делится подходами и наработками. Вместе начинающий и опытный специалисты могут написать несколько строчек кода, обсудить альтернативные варианты и в целом понять образ мышления друг друга.
Регулярную практику live coding в Provectus ввели около трех лет назад. Мы обратили внимание на то, что передачу опыта иногда приходится искать в кухонных разговорах. Как тимлид, я понимал, что многим некомфортно искать нужные ответы именно так и они предпочтут «закопаться», чем спрашивать. Так появилась идея проработать эти технические моменты, а заодно раскрепостить сотрудников и по фану совместно порешать задачки. И мы ввели практику live coding.
Для этого мы в последнее время используем новый инструмент совместного программирования , который доступен прямо из PHPStorm. Процесс очень прост. Сотрудники, заинтересованные в решении определенного класса задач (скорее всего, это нечто узконаправленное, а не общетехническое из разряда «как написать свой первый юнит-тест»), присоединяются к live coding. Зачастую это прикладная задача или особенности прикладных подходов на проекте, разобрать которые лучше с человеком с опытом. При этом менторство происходит органично и параллельно с решением текущих задач. Что более важно, ребятам не скучно во время live coding. Ведь мы решаем реальные задачи, а не просто разбираем теорию.
Среди недостатков live coding — на него необходимо время. А это может привести к дефициту времени у менторов, так что важно все организовать таким образом, чтобы наставник минимально отвлекался от решения актуальных задач и не было bottleneck на проекте. Чтобы этого избежать, лайв-кодинг планируется немного заранее, как правило, сразу до/после обеда или начала/окончания рабочего дня. Иными словами, эта активность проходит в пределах рабочего дня, но вместе с каким-то другим перерывом, дабы не дергать ментора лишний раз.
Также парное программирование хоть и основано на практике, но не имеет смысла без параллельного системного обучения базовым техническим вещам. И это, конечно, ответственность обучающегося.
Но и результаты от live coding вполне очевидные. За
Артем Савенков, Front-end Team Lead в HYS Enterprise
Под каждый уровень специалиста мы готовим задачу (алгоритм). Размещаем на live coding сервисе (пробовали Codeinterview, CodePen, или же простое «расшарить экран») и отправляем кандидату. Даем
Перед тем как давать алгоритм специалисту, я либо сам его решаю, либо прошу своих коллег по команде. Они дают фидбэк по сложности и времени. В спокойной обстановке эти алгоритмы решаются сравнительно быстро, до 5 минут. Остальное время дается с учетом того, что кандидат может чувствовать себя не очень комфортно, что-то нужно будет обсудить, поискать и так далее. В целом 20 минут — это максимум, которого достаточно для того, чтобы понять, может человек решить задачу или нет.
В конце мы просим оценить time-complexity собственного решения, предложить варианты оптимизации. Рассказать, почему код не сработал или что нужно было бы дописать. Опытный интервьюер не только оценит итоговое решение, но и проанализирует, как кандидат шел к нему: внимание к деталям задачи, какие вопросы задавал, гуглил ли что-то. Ведь специалист — это не только про код, но и про способность эффективно выполнить задание, изыскав все недостающие части.
Если говорить о недостатках, то live coding — это определенный уровень стресса. Встречаются кандидаты, которые очень тревожатся. За этой тревогой или неуверенностью мы можем пропустить специалиста, который в спокойной обстановке или при достаточном количестве времени горы свернет. Но таких меньшинство. Задача интервьюера — в первые минуты почувствовать человека, наладить коммуникацию так, чтобы он чувствовал себя комфортно, не боялся задавать вопросы. Кому-то нужно что-то подсказать, с кем-то пошутить.
Главный плюс — эффективность. Это быстро, понятно и недорого (обеим сторонам).
Дмитрий Мустафин, Java Team Lead в HYS Enterprise
Я считаю, что основной минус в том, что это все же не живое общение. Да и присутствуют все недостатки удаленной связи: помехи, сбои и так далее.
Из плюсов — все преимущества удаленной связи. Например, то, что и кандидаты, и интервьюеры находятся в удобной и спокойной обстановке.
Олександр Кулик, iOS Team Lead в Uptech
Як правило, завдання — це два невеликі проєкти, що містять технічні завдання та юніт-тести для їх перевірки. Кожне завдання розраховано на 90 хвилин парного кодингу. З нашого боку залучено два розробники — по одному на кожне завдання. Вони активно беруть участь в обговоренні розв’язку задач і можуть самі пропонувати рішення, допомагаючи кандидату, якщо той зайшов у глухий кут.
Ми ніколи не даємо монотонних завдань на кшталт реалізації однотипних елементів інтерфейсу застосунку. Вони зазвичай не є цікавими для кандидатів, а тому людина швидко втрачає інтерес до їх вирішення. Натомість більш звичними темами завдань є: запити, пагінація, структура представлення даних. Такі питання тримають увагу всіх учасників лайв-кодингу, а також дають змогу оцінити мислення кандидата та його вміння орієнтуватися в незнайомій ситуації. Сам процес для нас головніший за результат завдання.
Важливо й те, що завдання не мають єдино правильного рішення, тому для більшості з них у нас немає заздалегідь підготовлених розв’язків для розробника-інтерв’юера. Це допомагає побудувати роботу з кандидатом як діалог на рівних.
Переваги:
- Економія часу: за пів години лайв-кодингу ми дізнаємося про кандидата те, що звичайно перевіряють багатьма етапами інтерв’ю та тестовими завданнями.
- Нетривіальні завдання, що демонструють логіку та адаптивність мислення кандидата.
- Особисте спілкування з людиною, де ми бачимо soft skills в дії. Як вона розв’язує проблеми, її ентузіазм і взаємодію з командою. У результаті нам вдається наймати спеціалістів, в компетенції яких ми впевнені.
Недолік назву всього один: це окремий етап рекрутингу, на який потрібно виділяти час розробників. Проте завдання, які ми вирішуємо у цьому форматі, не є суто алгоритмічними, їх не можна розв’язати вивченою формулою з підручника.
Така практика дає змогу сфокусуватися на перевірянні важливих практичних навичок кандидата — вмінні логічно мислити та обдумано ухвалювати проєктні рішення.
Влад Балабаш, Senior JS Developer/Team Lead в AB Soft
В реальном мире, помимо собеседований, я использую live coding на занятиях в IT-школе, где преподаю Front-еnd. В основном с его помощью я показываю ученикам, как решить ту или иную задачу.
Для меня live coding — это отличный показатель умения решать задания в реальном времени. Но есть и обратная сторона — он занимает много времени.
Максим Федоряка, Software Engineer (iOS) в Innovecs
В Innovecs регулярно проводять live coding-сесії — ведучими виступають експерти компанії, а онлайн-трансляція та запис доступні для всіх охочих на YouTube-каналі. Наприклад, нещодавно в InnoHub (власна локація Innovecs для онлайн- та офлайн-івентів) організували лайв-кодинг-сесію з шести етапів. Мета — навчити учасників створювати власну краудфандингову платформу з нуля і до запуску, використовуючи тільки С#. Раніше проводили сесії, присвячені особливостям SwiftUI та створенню мультиплеєрної гри на Unity без «костилів».
Обираючи тему для лайв-кодингу, в Innovecs передусім орієнтуються на професійні та особисті вподобання спікерів, адже вони точно знають, яка тема наразі найбільш актуальна для ринку та колег, що буде справді цікаво побачити наживо на кодинг-сесії.
В день проведения лайв-кодинга я заранее прихожу в InnoHub, чтобы проверить, все ли работает с технической точки зрения. Удобно, когда организация на высшем уровне и не занимает много времени. На мой Mac установили программу для передачи изображения беспроводным образом — чтобы все выглядело опрятно.
Что касается результатов, то лайв-кодинг-сессии полезны не только аудитории, они приносят пользу и мне, поскольку я глубже понимаю какие-то вещи. Это приятный бонус как для портфолио, так и для меня лично. Провести ивент для 50 человек — это круто. Сессии — это живое общение, где после выступления люди могут задать любые интересующие вопросы.
Для меня главные принципы хорошей сессии — крепкая структура и интересная подача. Мини-история, которую ты рассказываешь в течение часа, должна быть привязана к реальному миру. Скучные кодинг-видео есть в изобилии на YouTube, и чаще всего это монотонное комментирование. Здесь нужен сторителлинг, который вовлечет каждого зрителя.
Стив Джобс когда-то говорил, что многие идут от технологии и пытаются понять, как продать это клиенту. А нужно наоборот — понять, что нужно клиенту, а затем создавать или выбирать технологии. Я по этому принципу иду от проблемы, которую нужно решить, к технологии и ее решению. Я никогда не иду по сценарию «вот есть штука, с ней можно делать вот что». Выбираю проблему, а поверх нее накладываю решение технологией. Причем порой решения может и не быть.
Марія Кот, Recruitment Director в Luxoft Ukraine
Мета — переконатися, що людина знає не тільки теорію, і подивитись, як вона мислить, як на практиці розв’язує задачі та наскільки уважна до деталей.
Завдання зазвичай типові алгоритмічні, з HackerRank або схожих ресурсів, і не займають багато часу. Повне інтерв’ю, що охоплює теорію та практику, триває орієнтовно годину, максимум півтори.
Бувало й таке, що кандидати з кодинг-інтерв’ю не впоралися, хоча й показували до цього хороші результати. Технічні інтерв’юери та клієнти розуміють, що не всі люди можуть писати код у реальному часі, адже будь-яка співбесіда для більшості спеціалістів — це стресова процедура. Тому ми, як правило, даємо кандидату другий шанс.
Попри те, що під час live coding-сесій ми можемо одразу визначити рівень практичних навичок спеціаліста, цей підхід має свою специфіку, зокрема:
- Певний рівень стресу через обмеження в часі, тому, ймовірно, кандидат може не впоратись із завданням.
- Це вимагає ретельної підготовки кількох задач, які б враховували специфіку проєкту, технічні аспекти. При цьому кандидат не має писати багато коду.
- Задачі мають постійно змінюватись і додаватись нові. Найкраще, якщо це програма з помилкою, яку потрібно виправити, або простий функціонал, який треба змінити.


