live code что это
Я пришел на собеседование с лайвкодингом — и меня с позором размазали
Если взять все собеседования, которые когда либо проходили у людей, и расставить их в порядке от лучшего к худшему — то на самой последней строчке окажется мое. Это было давно. Я уже умел разрабатывать, но совершенно не разбирался в собесах — и, слепой от желания получить оффер, пропустил все тревожные звоночки.
На первом же созвоне прошло сложное техническое интервью — что нормально — но только в самом конце его объявили «первым этапом, скринингом». Второй этап вел эйчар, третий — настоящие посланники ада. Два человека наперебой заваливали техническими вопросами про дотнет, не давали ни подумать, ни ответить и переходили к следующему.
Я справился странно. Именно странно. На несколько вопросов, которые дотнетчик не может не знать я ответил неправильно, на несколько таких, которые знает далеко не каждый, я ответил хорошо. Вот так бывает, я не сказал, что такое финалайзер, потому что начинал учиться с плюсов, и запомнил его как деструктор. Зато рассказал про поколения в сборщике мусора.
Я был ослеплен «успехом» и согласился на финальный этап — лайвкодинг. И вот там мне и пришлось переосмыслить значение слова «жопа».
Я был полон энтузиазма, потому что это не первый лайвкодинг в моей жизни, в моем родном городе меня уже просили писать код на бумажке, и все было нормально. Я полистал свои книжки по сишарпу, поубирал всякую хрень с рабочего стола, заварил себе гигантскую кружку кофе, и пошёл на созвон.
Скайп, тёмный экран, голоса — один за другим мне представляются интервьюеры. Ни одного из них не было на предыдущих этапах. Четыре штуки. Объясняют правила игры, говорят, что могу думать сколько угодно, что никто не давит, код пиши там где привык, так, как привык. Можешь гуглить все что хочешь. Но есть одно ключевое условие: задачу нужно решать в манере TDD.
— Ты уже работал с этим? Как это первый раз слышишь, что у нас такое требование? У нас все работают только по такой методологии. Ты тоже будешь. Вот тебе «простейшая университетская задачка», приступай.
Задача и правда была простой. Надо было написать парсер выражений, начать с простейших «1+2», а закончить настолько глубоко, насколько возможно за отведенные два часа.
Механизмы в моей башке заскрипели: так, просто сложение сделать невероятно легко, вычитание тоже, умножение потребует порядка действий — только оно стоящее. Если я не сделаю им умножение, они меня пошлют. Твою мать, читал же месяц назад про паттерн интерпретатор, они точно ждут именно его. Блин, я не помню как его делать! Сколько я уже думаю? Несколько минут? Они посчитают, что я идиот. Блин-блин-блин, если я сейчас же не начну хоть что-то писать, мне конец.
— Какие-то проблемы, Филипп?
Ну всё. Они все уже решили. Хотя нет, может они просто участливые? Да пиши же ты уже код.
Дрожащими ватными руками я нажимаю «Add file». Боже ж ты мой, как его назвать? Какой-нибудь экспрешн парсер! Стоп. В дотнете же есть родные штуки для распаршивания выражений. Они точно ждут не велосипедиста, а умного разраба, который пойдет и применит готовое решение. Открываю гугл, начинаю вбивать.
— Филипп, что вы делаете?
— Я вспомнил, что в дотнете были готовые решения под такие задачи, хочу ознакомиться с ними.
— Нет, Филипп, нас не интересует готовое решение. Пожалуйста, озвучивайте нам свои мысли, чтобы не тратить наше и ваше время.
Ооох, братан, если бы ты слышал мои мысли сейчас, интервью бы давно закончилось. Но бог с тобой. Создаю файлик, начинаю описывать интерфейс парсера.
— Филипп, что вы делаете?
— Я прикидываю структуру решения, пишу код, чтобы все в голове встало по местам, и я понял с какой стороны заходить.
— Филипп, я просто напоминаю вам, что у нас в компании применяется методология TDD, и мы в первую очередь хотели бы увидеть, насколько вы хороши именно в этом.
А я хочу увидеть, как тебе хлещут дохлой мороженной рыбиной по морде. Создаю файлик с тестом. Я не знаю, зачем. Уже очевидно, что никуда я не прошел. Туплю в нагенеренный студией код теста, одну минуту, две, три. Слышу возмущенное покашливание из скайпа. Господи, ну почему они не могли прислать на это интервью людей с предыдущего? Чтобы хотя бы один человек с той стороны экрана знал, что я блин не самый тупой человек на земле, и действительно кое-что знаю. Для этих, я определенно стал конченным дном.
Такими размышлениями была забита моя голова, когда руки вдруг начали писать какой-то код. На той стороне скайпа одобрительно захмыкали. Я написал тест, который тестирует несуществующий класс, нащелкал решарперовых хоткеев, класс сгенерился, дописал в нем, собственно код сложения. Выдохнул, почувствовал моральный подъем.
Запускаю тест — ничего не происходит. Вообще ничего, список прогнанных тестов пустой. Запускаю ещё раз, то же самое. Господь всемогущий, меня прокляли. Тесты не запускаются! Они не падают, они просто не запускаются!
Пытаюсь запустить не решарпером, а студией. Не работает. Пишу новый тест, он тоже не запускается. Это невозможно, но это происходит со мной, на кодинг интервью, студия, решарпер или дотнет сломались, и у меня не запускаются тесты.
— Филипп, вы забыли добавить модификатор public к тесту.
—…
—…
— processing…
Я понял. Выругался. Замьютил микрофон, выругался покрепче. Вернул микрофон. Добавил public, тест прошел. Я начал писать тест на вычитание. И вдруг как гром среди ясного неба:
— Филипп, наше интервью подошло к концу, огромное вам спасибо за потраченное время, мы сообщим вам о решении!
А я уже знал как все сделать. Я решил задачу в голове, но они этого не увидели — они увидели, как я кучу времени писал сложение. Куда вообще все это время делось?! Видимо я слишком долго тупил в моник, размышляя о том, что они обо мне думают.
Со мной, конечно, никто не связался. Это они очень правильно сделали. Ведь если бы они меня приняли, я бы разыскал этих людей в офисе, взял за яйца, и заставил писать код.
С тех пор я ни разу не соглашался на такие штуки. Я построил себе хорошую карьеру, сейчас сам управляю людьми, нанимаю их. И у меня нет проблем с самооценкой. Но если меня снова загнать на такое интервью, мне кажется, все вернется.
Понятно, что это моя проблема. Может дело в слабой психике, может слишком сильный синдром самозванца, может какие-то особенности характера, я не знаю. Но точно знаю, я такой не один. Нас много, и мы не становимся от этого дерьмовыми разработчиками.
Рынок огромный, мы найдем себе работу, но осадочек останется. Этот собес был лет пять назад, но он меня кошмарит до сих пор. Недавно я говорил со своим хорошим другом, который живет в США, и он рассказал мне, что у них мода на лайвкодинг проникла в каждый даже самый маленький стартап.
Американцы американцами, бог с ним. Вот чего я действительно боюсь, что у нас, как блин всегда, все всё скопируют, и на гигантском рынке не останется ни одного места, куда можно попасть без лайвкодинга. И я очень сомневаюсь, что все резко научатся проводить их так, чтобы не было адского давления.
Вы вот не любите нытье, а я не люблю, когда что-то работает плохо. Если люди, которые проводят лайвкодинг интервью в РФ, начнут давать кандидатам опцию с тестовым заданием, никто от этого не проиграет.
На правах рекламы
Мощные виртуальные серверы с процессорами AMD EPYC для разработчиков. Частота ядра CPU до 3.4 GHz. Максимальная конфигурация позволит оторваться на полную — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe.
Live coding на собеседованиях: разбираем плюсы и минусы
Иногда от желаемого оффера отделяет только… live coding. В одних компаниях кандидатов могут попросить написать немудреный кусок кода в реальном времени ещё до технического собеседования. В других позовут на live coding этап уже после всех туров интервью, чтобы 100% быть уверенным в выбранном кандидате. В любом случае, быть готовым к такому формату общения с нанимателем – значит повысить свои шансы на оффер.
Как часто «живое программирование» используется при поиске разработчиков, как устроено «собеседование в прямом эфире» и реально ли к нему успешно подготовиться? Задали вопросы Group Manager Виктории Балакшиной и Department Manager Дмитрию Кремезу.
Дмитрий Кремез
Department Manager iTechArt
Department Manager iTechArt c 2020 года. Применяет live coding на собеседованиях с 2017 года. Называет такой формат собеседований «более лояльным к кандидату»
Виктория Балакшина
Group Manager iTechArt
Group Manager iTechArt с 2017 года. Практикует live coding собеседования с 2018 года. Считает live coding одним из «наиболее органичных вариантов собеседования»
Как часто и для какого уровня соискателей в вашей команде предлагается пройти live coding?
ДМИТРИЙ КРЕМЕЗ: Я стараюсь применять live coding в виде одной несложной задачки для всех уровней от Junior до Senior/Lead. Практическое решение задачи показывает, как человек мыслит, как принимает задание, какие уточняющие вопросы задает, какие предлагает идеи.
ВИКТОРИЯ БАЛАКШИНА: На мой взгляд, это лучше всего работает для разработчиков уровня Middle и выше, хотя Junior разработчиков тоже просим решить практическое задание. При этом есть определенная разница в заданиях для начинающих разработчиков и для тех, у кого уже есть опыт. В первом случае оцениваются знания синтаксиса языка, ООП, умение писать структурированный код. Во втором случае предлагаются уже более комплексные задания для оценки компетенций в тех технологиях, с которыми кандидат ранее работал.
Сколько длится такое собеседование? Как много специалистов при этом присутствует и в каком формате соискатель получает обратную связь?
ДМИТРИЙ КРЕМЕЗ: Длится live coding часть в среднем 15-30 минут. Обычно это несложная задачка, которую можно решить за 5-10 минут, но мы даем запас времени, если кандидат пойдет не по правильному пути, плюс время на общение и обсуждение. Присутствуют все те же люди, что были на интервью до этого: технический специалист, руководитель, рекрутер. Звонок проходит в Skype, в качестве площадки для live coding я использую https://codeinterview.io/, там же кандидат и получает обратную связь.
ВИКТОРИЯ БАЛАКШИНА: Длительность live coding этапа зависит от задачи и соискателя, минимально 20 минут, максимально доходило до 50.
Такая длительность обусловлена тем, что во время решения задачи мы задаем достаточно много вопросов по теоретической части: одно дело писать код, а другое – понимать, как именно отрабатывают механизмы технологии под капотом. При этом, если у человека что-то не получается, мы всё равно помогаем решать задачу. Важно продвинуть кандидата дальше в решении, чтобы подвести ход собеседования к определенному скоупу вопросов.
Обычно на собеседовании помимо рекрутера присутствует технический специалист и будущий руководитель. В основном вопросы задаёт технический специалист, но я тоже часто включаюсь с уточняющими вопросами. Более того, по некоторым технологическим направлениям могу проводить собеседования и сама 🙂
После собеседования стараемся всегда давать развернутую обратную связь. Иногда предоставляем её и в формате рекомендаций со ссылками на полезные ресурсы.
В каких случаях live coding – единственный верный способ проверки компетенций, а для каких специальностей такой формат не подходит?
ДМИТРИЙ КРЕМЕЗ: Любая проверка знаний должна быть комплексной, невозможно оценить кандидата только одним способом. Мы не придумываем тут что-то сверхъестественное, используем те же методики и способы, что используются на западе нашими клиентами и другими компаниями.
ВИКТОРИЯ БАЛАКШИНА: Live coding – не единственный возможный вариант проверки технического уровня. Но по мне, это просто более органичный вариант собеседования, потому что другой вариант – просто сухой разговор о технических вещах на уровне определений или про узкие/воображаемые кейсы.
Некоторая часть разработчиков считает тестовые задания и live coding архаизмом. Как часто приходится бороться с возражениями от кандидатов на счёт этапа с live coding?
ДМИТРИЙ КРЕМЕЗ: Ни разу не сталкивался с полным непринятием. Порой были некоторые отрицания и нежелание напрягаться и решать задачу, обычно из-за того, что кандидат не хотел вникать. После тактичного рассказа, для чего нам это нужно и что мы этим проверяем, кандидаты соглашаются с аргументами и приступают к решению, и это были единичные случаи.
Был обратный случай: за время интервью не смогли полностью определиться и изучить кандидата. Решили дать задание на дом, где-то 4 часа кодинга. Кандидат отказался, сказав, что не берет и не решает задания такого объема. Для нас это был индикатор, что человек не сильно стремиться в нашу компанию. С другой стороны, я понимаю человека, 4 часа работы – это довольно много личного времени. Поэтому я считаю проверку через live coding более лояльной к кандидату + повторюсь, мы понимаем, что live coding – это стресс, поэтому даем не сложное задание и стараемся всячески помочь и направить кандидата по верному пути решения.
ВИКТОРИЯ БАЛАКШИНА: Тестовые задания и правда могут быть избыточными, так как зачастую требуют от 4х до 8ми часов времени. С учетом того, что кандидаты на момент поиска работы зачастую трудоустроены, то эти 4-8 часов будут распределены или на вечернее время, или на выходные. По этой причине стараюсь их избегать. А вот live coding как часть интервью не требует от кандидатов дополнительных временных затрат.
Отказы от live coding получаем редко. Как правило, такое случается, если кандидат попросту не имеет технической возможности писать код в момент собеседования (проходит интервью с телефона/планшета).
Кстати, по моему опыту, люди чаще отказываются от собеседования на английском, чем от кодирования 🙂
Как кандидату подготовиться к такого рода собеседованию? На что обратить особое внимание?
ДМИТРИЙ КРЕМЕЗ: Сегодня есть много ресурсов где можно готовиться к live coding интервью, из популярных: http://leetcode.com/, https://www.hackerrank.com/, https://www.codewars.com/. Не думаю, что стоит уделять этим ресурсам много времени.
Обратить внимание нужно на другое: не стесняться задавать вопросы, делать ошибки, общаться и стараться найти решение. Интервьюеры сами заинтересованы помочь кандидату решить задачу, поэтому не стоит относиться к live coding как к тесту, проверке. Это скорее возможность поработать над задачей вместе с людьми, с которыми вам в будущем предстоит работать. Воспринимайте это как pair programming.
ВИКТОРИЯ БАЛАКШИНА: Прежде всего, подготовить техническую возможность кодить. С учетом наличия таких ресурсов, как codeshare, будет достаточно иметь монитор и клавиатуру.
В остальном подготовка к собеседованию с этапом live coding не должна отличаться от подготовки к обычному собеседованию. Причина в том, что в качестве задач подбираем такие проблемы, с которыми разработчики сталкиваются ежедневно, и избегаем алгоритмические, олимпиадные задачи.
Моя главная рекомендация – в процессе решения задачи рассуждать вслух и задавать уточняющие вопросы. Если человек выслушал условие задачи молча, молча начал писать код и так же молча закончил – в 99% случаев задача будет решена неверно.
И, конечно, важно не нервничать и не ожидать (по крайней мере, в нашей компании) каких-то подвохов. По крайней мере мы со своей стороны стараемся создать спокойную и партнерскую атмосферу во время решения задач.
Смотри наши IT-вакансии в Минске и других городах, выбирай и откликайся!
Как писать код и сразу видеть результат
Обзор инструментов крутых программистов.
Когда только начинаешь программировать и делать сайты, важно понимать, что вообще происходит. Вот изменил ты параметр объекта — а правильно или нет? Заработало это или нет? Красиво вышло или ужасно?
Чтобы разработчик сразу видел результат труда, боги создали для него IDE — integrated development environment, по-русски — среду разработки. Это программа, в которой программист пишет код, ловит ошибки и наблюдает результат.
Чисто технически работать можно и без IDE: писать код в блокноте и просматривать его в специальных программах или браузере. Но это бывает медленно и требует дополнительных телодвижений. Лучше научиться пользоваться IDE и писать в сто раз быстрее.
Выбор среды разработки (IDE) — дело вкуса и привычки. Какие-то из них — универсальные, другие заточены под конкретные языки программирования. IDE часто похожи по своим возможностям и позволяют увеличивать функциональность за счёт внешних дополнений.
Visual Studio Code
Программу можно скачать с официального сайта. Несмотря на то, что VS Code делает Микрософт, это бесплатный продукт с открытым исходным кодом, доступный на всех платформах. Благодаря этому и своим возможностям VS Code стал одной из самых популярных сред для разработки в мире.
VS Code распознаёт почти все существующие языки программирования, самостоятельно или с помощью плагинов, и форматирует их соответствующим образом. Кроме этого, у него глубокая поддержка HTML, CSS, JavaScript и PHP — он проследит за парными тегами, закрытыми скобками и ошибками в командах.
Вот самые интересные возможности VS Code.
Умное автодополнение. Программа анализирует, какую команду вы хотите ввести, и предлагает закончить фразу за вас, с подсказками и объяснением. Удобно, если вы забыли порядок следования переменных или как точно звучит нужная команда:
Выполнение скриптов по шагам. Иногда нужно иметь возможность выполнить скрипт не сразу, а по шагам, например, чтобы понять, не зациклилась ли наша программа. Для этого используйте встроенный дебаггер — это программа, которая следит за кодом, ищет в нём ошибки и позволяет выполнять его поэтапно.
Множественное выделение и поиск. Чтобы поменять много одинаковых значений переменных или найти все одинаковые слова или команды, VS Code использует свой алгоритм обработки. Благодаря этому редактировать код становится проще, а замена функций или переменных происходит быстрее.
Мультикурсор помогает вводить одинаковые значения сразу на нескольких строках
Найденные одинаковые слова и команды можно тут же заменить на другие
Навигация по коду и описания функций. Когда пишешь большую программу, легко забыть то, что делал в начале — как работает функция или какого типа переменная используется в этом месте. Чтобы этого избежать, VS Code может показывать саму функцию, описание переменной или какие параметры передаются при вызове команды. Ещё это пригодится, если код достался вам по наследству от прошлого разработчика и нужно быстро понять, какие куски кода за что отвечают и как работают:
Сразу после установки VS Code не умеет показывать результаты работы кода, когда мы делаем веб-страницы. Это можно исправить с помощью расширения Live HTML Previewer. Для этого заходим в раздел «Extensions», щёлкая на последнем значке на панели слева или нажимая Ctrl+Shift+X, и начинаем писать «Live HTML Previewer» в строке поиска.
После установки и запуска расширения можно будет сразу видеть, как ваш HTML-код и CSS влияют на внешний вид и поведение страницы. Это особенно удобно, когда строишь сайт с нуля и хочешь сразу понимать, что происходит.
WebStorm
Среда разработки для JavaScript от компании jetBrains стоит денег, но есть пробный период в 30 дней. Вполне хватит, чтобы попробовать и понять, нужна эта программа или нет.
Автоподстановка. Некоторые IDE с автоподстановкой тормозят и не предлагают сразу все варианты переменных или команд — но не WebStorm. Здесь всё работает с первой буквы и понимает, когда надо предложить переменную, а когда команду или служебное слово:
Встроенная система задач. Полезно, когда в работе много проектов и нужно по каждому помнить, что ты хотел в нём сделать. Здесь это реализовано сразу и доступно для любого файла:
Проверка ошибок. WebStorm умеет сам проверять код на ошибки и пояснять каждую из них. Не всегда это работает идеально, но когда работает — экономит кучу времени:
Чтобы сразу видеть, что получается на странице, нам понадобится плагин LiveEdit. По умолчанию он выключен, но его можно включить или поставить отдельно в любое время. После активации нужно будет в настройках плагина поставить галочку «Update application in Chrome on changes in» — она как раз отвечает за обновление информации в браузере Chrome. Теперь можно писать код и сразу видеть результат:
Sublime Text 3
Бесплатный редактор, который назойливо предлагает занести денег разработчикам. Про Sublime Text у нас есть отдельная и более подробная статья — почитайте, там тоже интересно.
Sublime Text — потрясающе мощный текстовый редактор. Его сила — в скорости работы, он одинаково быстро обработает простую веб-страничку или программу на сто тысяч строк кода. Подсветка синтаксиса всех возможных языков программирования, автоподстановка, умное закрытие тегов — всё это доступно сразу после установки.
Пример разметки HTML-кода в Sublime Text
Вот что ещё умеет программа сразу после установки:
Вторая суперспособность, которая превращает Sublime Text из простого текстового редактора в универсальное решение, — плагины. По принципу действия они такие же, как и в других программах из обзора, но они совершенно не влияют на скорость работы. Когда начинаешь плотно работать с Sublime Text, может показаться, что у него есть плагины для всего. Нужно редактировать одновременно один и тот же код, но в разных панелях — пожалуйста, написать быстро HTML-код — само собой, проверить код на ошибки и недочёты — без проблем.
Emmet сокращает время на написание кода, подставляя вместо стандартных команд целые куски готового кода
JavaScript & NodeJS Snippets упрощает написание кода на JavaScript и работает по тому же принципу, что и Emmet
SublimeCodeIntel помогает быстро разобраться в коде со множеством функций. Если щёлкнуть на название любой функции, плагин сразу покажет вам её описание.
Так как эта статья — для начинающих программистов, которым важно сразу видеть изменения в коде, то посмотрим, как это делает Sublime Text.
Сразу после установки он этого делать не умеет, но нам поможет плагин LiveReload. Он показывает все изменения в браузере, как только мы сохраняем рабочий файл с кодом. Это не так изящно, как в VS Code, но в случае с Sublime Text простительно. Дело в том, что привыкнув однажды писать в нём код, сложно пересесть на что-то другое, что работает с той же скоростью. Установка LiveReload состоит из двух компонентов — плагин для Sublime Text и расширение для браузера.
После установки давайте посмотрим, что у нас получилось. Создадим файл tested.html в Sublime Text, разметим его внутри стандартным шаблоном как HTML-документ, а рядом откроем окно браузера.
В реальном времени мы не увидим на странице те изменения, которые вносим в код, как это было в VS Code. Но если нажать Ctrl+S, чтобы сохранить все данные, то браузер моментально показывает то, что мы сделали.
Если вы серьёзно настроены программировать, присмотритесь к Visual Studio Code. Почти со всем он справляется сам или с плагинами, не нужно подключать дополнительно браузеры или сторонний софт.
Любите, чтобы после установки были доступны почти все нужные функции? Попробуйте WebStorm — платную, но мощную среду разработки.
Если вам важна скорость работы в любых ситуациях, то Sublime Text — лучший выбор. Он очень быстрый, и для него есть плагины почти на все случаи жизни.