Перед вами продолжение статьи, которая сделает процесс получения работы в сфере программного обеспечения веселее и интереснее. Рассматривать её следует, скорее, как чит-код к игре, в которой вы главный герой, готовящийся выступить против менеджеров по подбору персонала.
Уровень 2: Босс, ведущий разработчик
Ведущий разработчик:
- человек с обширными техническими знаниями;
- ассоциируется с tech-out;
- ищет, прежде всего, технически подкованного специалиста;
- строго проверяет ваши знания, способности к программированию и поиску нестандартных решений.
Так же, как актёры проходят прослушивание, прежде, чем получить роль, так и разработчики программного обеспечения проходят собеседование. Конечно, «прослушивание» разработчиков будет состоять из серии технических вопросов, определяющих, насколько кандидат компетентен.
Разве не могут они просто посмотреть на ваше резюме и предыдущие места работы, и сказать, подходите ли вы на эту должность? Оно вроде бы и так, но, к сожалению, здесь нельзя быть уверенным на 100%. Вы могли, например, солгать или преувеличить факты в резюме. Или резюме может быть неоднозначным или неполным.
Например, 3-х летний опыт одного кандидата с .NET может вылиться в несколько месяцев работы, растянутых на три года, а другой человек может интенсивно работать в этой же сфере изо дня в день все три года. И мы все прекрасно знаем, что опыт работы не всегда связан с получением полезных навыков. Иногда нижестоящий сотрудник оказывается умнее своего начальника, и вопросы на собеседовании разработаны специально, чтобы это выяснить.
Технические вопросы, с которыми вы, скорее всего, столкнётесь, обычно можно разделить на три части: вопросы, проверяющие знания в этой сфере в общем, вопросы о программировании и алгоритмах, и вопросы по системной архитектуре. По сути, многие интервьюеры задают одни и те же вопросы всем кандидатам независимо от опыта.
Вопросы, проверяющие общие технические знания, подразумевают ответы да/нет. Вы можете подготовиться, повторив терминологию и общие принципы работы того или иного языка программирования.
Многие популярные вопросы для интервью можно найти на веб-сайтах, таких как CareerCup и Glassdoor. При поиске сосредоточьтесь на том, где и как вы сможете употребить полученные ответы.
Если вы не можете сразу же вспомнить ответ, то ещё не всё потеряно. Можно в этом случае попытаться применить свои знания других языков программирования или вспомнить ответ иным способом.
Объясните интервьюеру, что вы не знаете ответ, но попытаетесь его вывести. В некоторых случаях можно показать более высокий уровень знания технологий, чем при прямом ответе на вопрос.
Вопросы о программировании и алгоритмах призваны проверять больше навыки, нежели чистые знания. Здесь проверяются ваши навыки программирования и решения задач. Эти вопросы должны заставить думать. Но на самом деле это хорошие новости; здесь вам не нужно просто знать ответ. Интервьюер хочет увидеть, как вы подойдёте к решению проблемы.
Некоторые из этих вопросов могут быть рассчитаны на ваши знания шаблонов и алгоритмов.
Чит-код: ваши ответы на каждый вопрос будут оцениваться в сравнении с ответами других кандидатов на те же вопросы. Не старайтесь быть совершенным!
Ответить на эти вопросы могут помочь следующие техники:
Задавайте вопросы
Интервьюер мог упустить какие-то детали, либо вы могли ослышаться. Повторите вопрос и выясните подробности, в которых вы не уверены, чтобы не думать в неправильном направлении.
Используйте пример
Если вы не можете сразу найти решение проблемы, используйте пример, который поможет сориентироваться. Убедитесь, что пример в этом случае подходящий.
Говорите вслух
Ваш интервьюер хочет знать, какой подход вы используете для решения проблемы. Говоря вслух, вы поможете ему/ей оценить ваши знания. Для вас это также будет полезно, ведь по выражению лица собеседника и его поведению можно (иногда) определить, в правильном ли вы движетесь направлении. Интервьюер может даже дать вам подсказку.
Псевдокод
Если это поможет, то напишите сначала символический код, прежде чем приступать к основному. Это может быть особенно полезно при создании сложных кодов или тех, которые содержат много деталей.
Пишите код от руки
Вам могут не предоставить компьютер для написания кода; скорее всего, вы получите ручку и бумагу, или же доску, на которой будете писать. Хотя интервьюер может и не обратить внимания, если вы пропустите где-то двоеточие, вам нужно попытаться сделать код безупречным. Псевдокод в таких случаях не эффективен (но может помочь в качестве вступления).
Проверяйте
Когда вы заканчиваете писать код, проверяете ли вы его лишь в системе управления исходным кодом? Конечно, нет. Так же и в интервью, вы не должны думать, что все готово, только потому, что вы всё написали. Код, написанный во время интервью, тоже нужно проверять. Нет, вам компьютер не дадут и в этом случае, но вы можете проверить код от руки, используя некоторые примеры.
Если найдёте ошибки, – как, скорее всего и будет, – не паникуйте! Делать ошибки вполне нормально. Ни один разумный интервьюер не ожидает от вас написания идеального кода сразу, особенно, если вам даже компьютера не дали. Просто обдумайте свои баги и исправьте их.
Ваши ответы на каждый вопрос будут оцениваться в сравнении с ответами на эти же вопросы других кандидатов. Чем сложнее вопрос, тем больше времени потребуется для нахождения ответа, и тем больше ошибок будет у каждого кандидата, и, в общем, каждый немного подпортит общее впечатление о своем интервью. Интервьюеры в таком случае будут более гибкими в оценивании. Вам не обязательно быть совершенным!
Вопросы по системной архитектуре обычно подразумевают разработку структуры какой-то системы. Это может быть система электронной почты или что-то вроде tinyurl.com.
В этих вопросах вам следует начать из понимания условий. Допустим, нужно построить систему электронной почты. Для чего мы будет её разрабатывать? Создаём ли мы крупную систему, вроде Gmail или Hotmail, которая будет обслуживать миллионы пользователей? Или наша система будет разработана для маленькой или средней компании? Какие протоколы она должна поддерживать? Эти вопросы следует обсудить с интервьюером в первую очередь.
Далее вам следует перечислить компоненты системы. Для электронной почты вам, скорее всего, понадобятся сервера для входящих и исходящих сообщений, какая-то база данных и, возможно, определённые сервера, чтобы управлять всей системой. Пользователей тоже можно включить в систему, особенно, если у неё есть веб-фронтенд, как у Gmail или Hotmail. Это лучше всего записать на доске или нарисовать какие-то рисунки.
Третьим шагом будет описание того, как эти компоненты будут работать вместе. Когда и как эти компоненты будут взаимодействовать? Сервера входящих и исходящих сообщений работают напрямую или считывают информацию только из базы данных?
Далее обдумайте, как сделать систему лучше: быстрее, надёжнее и так далее. Как вы будете справляться с большим количеством данных? Что случится, если сервер не выдержит?
В зависимости от вопроса вы можете рассказать в деталях, какие вы будете использовать технологии. Разумно будет раскрыть положительные и отрицательные черты той или иной технологии.
Уф! Ну и тренировочка, да? Теперь, когда вы получили необходимые сведения, как пройти менеджера по подбору кадров и ведущего разработчика, пора двигаться к третьему уровню и лицом к лицу встретиться со следующим боссом – менеджером по программному обеспечению.
P.S. Рекомендуем ещё одну статью по теме — Свободное управление временем: реальность или миф?
Автор перевода — Давиденко Вячеслав, основатель компании MBA Consult.
Автор: MBA Consult