Разбор задачи про пакеты
Feb 9, 2011 · CommentsИнтервью
В комментариях к задаче про пакеты было задано много вопросов. Отвечу здесь.
Во-первых, задача действительно простая, иначе никак не уложиться в формат собеседования. На написание кода и сопутствующее общение есть всего около получаса. Плюс писать код на доске сложнее, чем в любимом редакторе. Тем не менее, в задаче любовно набросано граблей, на которые по возможности кандидат должен суметь не наступить. Условие задачи не полное (естественно!), не смотря на кажущееся обилие деталей. Кандидат всегда может прояснить у собеседующего недостающие детали и получить +1 к карме. Либо он может её решить, предположив разумные умолчания. В этом случае собеседующий всегда может добавить недостающее условие к задаче и попросить поправить код соответственно.
Во-вторых, по написание кода на доске. Уважаемый ребе belnetmon недоумевает, зачем мучить людей, заставляя их писать код на доске. Вообще говоря, цель интервью не в том, чтобы написать код решающий, поставленную задачу, а в том, чтобы убедится, что кандидат умеет думать, анализировать, писать рабочий код, доходчиво объяснять свою мысль и т.д. Практика показывает, что написание кода на доске очень хорошо раскрывает эти способности (либо показывает их отсутствие). В то время как красиво говорить и разумно рассуждать вслух получается почти у всех. Возможно, просто потому, что думать, писать код на доске (неудобно же!) и пускать пыль в глаза одновременно сложнее, чем просто пускать пыль в глаза.
Так вот, наблюдая как кандидат пишет код на доске, собеседующий видит, как тот подходит к решению проблемы, как мысленно отлаживает код, как перепроверят свои предположения. Даже мелочи вроде того, как получается ushort из двух байтов характеризуют его прошлый опыт. :-) Если кандидат «в теме», то он может подыграть – вслух поясняя свои действия. «Вот здесь я делаю так-то, потому что …»
Так же есть такой интересный момент исправления ошибок в коде на доске. Некоторые всегда перепроверяют написанный код, перед тем как сказать «готово». Некоторые делают это только если их попросить перепроверить код. Некоторые не понимают, что фраза «я вижу тут несколько ошибок» означает, что нужно найти более одной ошибки либо пройти по коду и доказать собеседующему, что он верен.
Короче решение «прошел/не прошел» принимается не в зависимости от «решил/не решил задачу», а по совокупности впечатлений от процесса её решения. Можно решить задачу и не пройти, а можно и решить её частично и пройти. Вот, кстати пример того, как может выглядеть на доске код (это кусок решения другой задачи) успешного кандидата:
Как видите, ни о какой каллиграфии речь не идет.
В-третьих, почему так мало кандидатов справляется с задачей? Наверное потому, что плохих кандидатов всегда больше, чем хороших. Хорошие уже работают и на интервью ходят редко. Еще видимо дает о себе знать нервное напряжение. Интервью все-таки.
Кстати эта задача, давалась кандидатам на позицию контрактора. Для тех, кто претендует на Senior SDE (FTE) требования выше и задачи другие.