Недавно я готовился к своему первому собеседованию в качестве разработчика программного обеспечения. Из-за этого я изучил новый навык и пересмотрел некоторые старые. Я изучил основы Angular.js и работал над своей способностью решать проблемы алгоритмов на доске. Я также работаю над написанием кода модульного тестирования.

Этим летом мне представилась возможность выполнить некоторую контрактную работу, чтобы помочь мне построить мое портфолио, в то же время помогая компании, которой я восхищаюсь, продвинуться вперед в новом проекте. От друга, который направил меня внутрь, я узнал, что компания использует Angular.js во внешнем интерфейсе, поэтому, готовясь к моей первой встрече с ними, я потратил несколько недель на изучение Angular как можно больше за короткое время. js. Независимо от того, буду ли я работать с Angular.js или нет, это был для меня ценный опыт, поскольку теперь я лучше понимаю двустороннюю привязку данных и внедрение зависимостей. Кроме того, Angular предоставил мне еще один взгляд на то, как создавать приложения по модульному принципу. Увидеть другой подход и применение к написанию Javascript всегда будет ценной возможностью для обучения.

То, что я думал, будет простой деловой встречей, посвященной «знакомству», в основном сосредоточенной на конкретном проекте, над которым я буду работать, закончилось ощущением, очень похожим на собеседование при приеме на работу. И после разговора с «другом» кажется, что у этого есть потенциал, чтобы стать полноценной возможностью. К счастью, я потратил время на подготовку именно к этому сценарию. Я не против рисковать и пробовать новое, но всякий раз, когда я попадаю в новую ситуацию, я стараюсь быть готовым к как можно большему количеству различных проблем. Я был не только готов зафиксировать все детали контрактной работы, но и пошел на это собрание, готовый ответить на все вопросы, которые вы обычно задаете во время первого собеседования. Благодаря этому я чувствую, что первая встреча прошла очень хорошо. Я сел с директором по разработке программного обеспечения и смог компетентно ответить на все его вопросы, и в то же время у нас состоялась действительно хорошая беседа. Я ушел от этого чувства сил и возможности назначить второе, техническое собеседование.

Я часто слышал, как люди говорят, что они не понимают традиционный подход к собеседованию по программному обеспечению. Эта белая доска с проблемой рекурсивного алгоритма или демонстрация того, как лучше всего реализовать функцию хеш-таблицы в конкретном сценарии, не имеет ничего общего с повседневным процессом разработки в качестве разработчика программного обеспечения. Хотя я могу это понять, потому что на протяжении всего моего опыта разработки мне никогда не приходилось использовать рекурсивное решение или реализовывать свои собственные функции хеш-таблицы, я понимаю, почему процесс собеседования проводится именно таким образом. Большинство людей, получив достаточно времени, могут научиться создавать продукты с помощью React, Rails или Angular. Работодатель ищет того, кто сможет справиться с меняющимися проблемами. Работодатель хочет видеть сильные навыки критического мышления, адаптивность, способность быстро учиться и фундаментальное понимание программного мышления, а не кого-то, кто может запомнить все детали использования одной структуры. Требование от соискателя работы продемонстрировать, как он сломается и решит незнакомую проблему, находясь под определенным давлением, может показать больше об их общем потенциале, чем о том, насколько хорошо он может запомнить определенные детали о конкретном стеке или наборе инструментов.

Подготовка к техническому собеседованию - новый вызов для меня. Это возвращает меня к тому, что изначально привлекло меня к компьютерным наукам. Такая головоломка, как решение проблем при применении алгоритмов для решения задач, очень похожа на игру в одну из моих любимых игр - шахматы. Распознавание моделей и позиций, а также использование предыдущих знаний и опыта для преодоления трудностей. Я действительно наслаждался временным переходом от разработки работ для моего портфолио к практике решения задач на доске. Это похоже на силовую тренировку для разработчика программного обеспечения.

Часто самое простое решение - лучшее решение.

Еще одна вещь, над которой я работал, - это модульное тестирование. Трудно увидеть результаты алгоритма, если вы не отображаете результат своего кода через DOM. Управление структурами данных требует определенного уровня тестирования, поэтому я разработал процесс с использованием console.log () javascript. Это не такое усовершенствованное решение, как использование таких инструментов, как Jest, Jasmine, Rspec или Karma, но для приложения тестирования одной или двух функций Javascript, написанных внутри тега скрипта, это кажется самым простым решением, и часто самое простое решение является лучшим. решение. Я начинаю с создания функции, которая несколько раз вызывает исходную функцию с разными параметрами, а затем записывает результаты в консоль. Например, testComplexAlgorithum () будет функцией тестирования для complexAlgorithm (). Это может выглядеть примерно так:

то в консоли вы, надеюсь, увидите:

сложный алгоритм должен:
возвращать false при неправильном вводе: true
возвращать результаты при правильном вводе: true

Таким образом, я могу вызвать функцию, над которой я работаю, с различными входными данными и сравнить возвращаемый результат с ожидаемыми результатами, чтобы получить в качестве обратной связи либо истину, либо ложь. С тестовым кодом внутри того же файла, что и функциональный код, этот подход не будет работать в производственной среде, поскольку тестовый код будет запускаться каждый раз при загрузке файла, но в этом сценарии, только для практики, это очень удобный подход.

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