Недавно я был вовлечен в процесс собеседования, который сочетал в себе личное собеседование на доске и домашний проект. Я много думал о том, что делает процесс собеседования с инженером-программистом хорошим как с точки зрения работодателя, так и с точки зрения сотрудников. Мне понравился этот процесс для ролей Javascript внешнего интерфейса, я пишу его как источник вдохновения для компаний по найму и как практику собеседований для кандидатов. Я также обсуждаю свой собственный процесс разработки, исходный код и демонстрацию.

Игра Конвея в процессе собеседования

Игра жизни Конвея - это знаменитая игра с нулевым игроком, в которой игрок настраивает и запускает клеточный автомат в соответствии с простым, но тщательно разработанным набором правил.

Личное собеседование на доске

Представьте правила игры. При желании нарисуйте пример сетки 3x3 и пройдите пару этапов игры. Следует уделить достаточно времени, чтобы интервьюируемый четко понимал правила.

Попросите респондента реализовать на доске функцию, которая берет игровую доску и возвращает результат того, что доска была продвинута на 1 шаг. Здесь вы можете использовать любой язык или псевдокод, который хотите. Вполне реально ожидать, что кандидат в программную инженерию предложит работающую функцию. Вы также можете сосредоточиться на разработке структур данных, алгоритмов, исходных предположений, проблем масштабируемости и т. Д.

Проект на вынос

Попросите кандидата реализовать игру как одностраничное веб-приложение. Есть много вариантов конкретных требований - например, вы можете попросить кандидата использовать определенную структуру. Некоторые идеи для требований:

  • Играть - запускать игру автоматически.
  • Пауза - остановка игры при запуске.
  • Пошаговый - переход на один шаг вперед
  • Изменить размер - изменение размеров доски.
  • Скорость тика - измените длительность тика, чтобы ускорить или замедлить запущенную игру.
  • Начальное состояние платы - возможность настроить начальное состояние платы.

Примечание о частных проектах: в идеале кандидаты будут получать вознаграждение за свою работу. Объем этих усилий по разработке может быть ограничен тем, что я считаю разумным временным обязательством - скажем, ~ 10 часами - для того, чтобы это были разумные расходы для компании или, возможно, приемлемое навязывание кандидату, это не выполняется в качестве оплачиваемого обязательства .

Моя реализация игры жизни Конвея

Инструменты, библиотеки и языки

Проектные решения

  • Я использовал декартову систему координат с началом координат вверху слева. По мере того, как я вошел в это, я начал желать центрированного начала, чтобы доска могла расти более сбалансированным образом, без того, чтобы верхняя и левая границы с большей вероятностью были достигнуты раньше двух других.
  • Я использую функцию шага грубой силы, чтобы продвинуть доску. Я хотел бы изучить алгоритмы получше, такие как List Life или Hashlife.

Исходный код на Github

Демо

Почему это хорошая задача для собеседования?

Жизненная игра Конвея имеет две характеристики, важные для сценариев интервью:

  • Уровни сложности - вы можете начать с этой задачи просто, написав «пошаговую» функцию методом перебора за несколько минут. Но по мере того, как вы рассматриваете проблему, сценарий становится все более и более сложным - например, что происходит по краям доски? Как вы можете масштабировать алгоритм для работы на досках с миллионами ячеек? И есть также уровни сложности в отношении пользовательского интерфейса, а также вы переходите от базовой функциональности к добавлению таких функций, как возможность добавлять новые живые ячейки на лету во время работы игры.
  • Диапазон навыков - веб-разработчики полного стека работают в различных технических областях: управление состоянием интерфейса, компоненты / модульность пользовательского интерфейса, HTML, CSS, дизайн пользовательского интерфейса / пользовательского интерфейса, алгоритмы, структуры данных, Дизайн API и т. Д. Эта проблема возникает у кандидата, желающего продемонстрировать относительные сильные стороны в каждой из этих областей.
  • Забавно - и, конечно же, это серьезная фундаментальная проблема, десятилетиями занимавшая энтузиастов математики.

Переписка с marksoper.me.