Карьера программиста. 6-е издание - Гэйл Лакман Макдауэлл - E-Book

Карьера программиста. 6-е издание E-Book

Гэйл Лакман Макдауэлл

0,0
12,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Очередное собеседование обернулось разочарованием… в очередной раз. Никто из десяти кандидатов не получил работу. Может быть, «экзаменаторы» были слишком строги? Увы, для поступления на работу в ведущую IT-компанию академического образования недостаточно. Учебники — это замечательно, но они не помогут вам пройти собеседование, для этого нужно готовиться на реальных вопросах. Нужно решать реальные задачи и изучать встречающиеся закономерности. Главное — разработка новых алгоритмов, а не запоминание существующих задач. «Карьера программиста» основана на опыте практического участия автора во множестве собеседований, проводимых лучшими компаниями. Это квинтэссенция сотен интервью со множеством кандидатов, результат ответов на тысячи вопросов, задаваемых кандидатами и интервьюерами в ведущих мировых корпорациях. Из тысяч возможных задач и вопросов в книгу были отобраны 189 наиболее интересных и значимых. Шестое издание этого мирового бестселлера поможет вам наилучшим образом подготовиться к собеседованию при приеме на работу программистом или руководителем в крупную IT-организацию или перспективный стартап. Основную часть книги составляют ответы на технические вопросы и задания, которые обычно получают соискатели на собеседовании в таких компаниях, как Google, Microsoft, Apple, Amazon и других. Рассмотрены типичные ошибки, а также эффективные методики поготовки к собеседованию. Используя материал этой книги, вы с легкостью подготовитесь к устройству на работу в Google, Microsoft или любую другую ведущую IT-компанию.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB

Seitenzahl: 1101

Veröffentlichungsjahr: 2023

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Гэйл Лакман Макдауэлл
Карьера программиста. 6-е издание

Художник В. Мостипан

Гэйл Лакман Макдауэлл

Карьера программиста. 6-е издание. — СПб.: Питер, 2021.

ISBN 978-5-4461-1839-7

© ООО Издательство "Питер", 2021

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Оглавление

Предисловие
Введение
Что-то пошло не так
Мой подход
Моя страсть
От издательства
I. Процесс собеседования
Почему?
Как выбираются вопросы
Все относительно
Часто задаваемые вопросы
II. За кулисами
Microsoft
Amazon
Google
Apple
Facebook
Palantir
III. Нестандартные случаи
Профессионал
Тестеры и SDET
Менеджеры программ и менеджеры продукта
Ведущие разработчики и менеджеры
Стартапы
Для интервьюеров
IV. Перед собеседованием
Получаем «правильный» опыт
Идеальное резюме
V. Подготовка к поведенческим вопросам
Поведенческие вопросы
Ответы на поведенческие вопросы
VI. «О» большое
Аналогия
Временная сложность
Пространственная сложность
Константы
Исключение второстепенных факторов
Составные алгоритмы: сложение и умножение
Амортизированное время
Сложность Log N
Сложность рекурсивных алгоритмов
VII. Технические вопросы
Как организовать подготовку
Что нужно знать
Процесс решения задачи
Метод оптимизации 1: поиск BUD
Метод оптимизации 2: интуитивный подход
Метод оптимизации 3: упрощение и обобщение
Метод оптимизации 4: базовый случай и расширение
Метод оптимизации 5: мозговой штурм структур данных
Неправильные ответы
Если вы уже знаете ответ
«Идеальный» язык для собеседований
Как выглядит хороший код
Не сдавайтесь!
VIII. После собеседования
Реакция на предложение и на отказ
Предложение работы
Переговоры
На работе
Часть IX. Вопросы собеседования
1. Массивы и строки
Хеш-таблицы
ArrayList и динамические массивы
StringBuilder
Вопросы собеседования
2. Связные списки
Создание связного списка
Удаление узла из односвязного списка
Метод бегунка
Рекурсия и связные списки
Вопросы собеседования
3. Стеки и очереди
Реализация стека
Реализация очереди
Вопросы собеседования
4. Деревья и графы
Разновидности деревьев
Бинарные деревья и бинарные деревья поиска
Обход бинарного дерева
Бинарные кучи (min-кучи и max-кучи)
Нагруженные (префиксные) деревья
Графы
Список смежности
Поиск в графе
Вопросы интервью
5. Операции с битами
Расчеты на бумаге
Биты: трюки и факты
Поразрядное дополнение и отрицательные числа
Арифметический и логический сдвиг
Основные операции: получение и установка бита
Вопросы собеседования
6. Головоломки
Простые числа
Вероятность
Начинайте говорить
Правила и шаблоны
Балансировка худшего случая
Алгоритмический подход
Вопросы собеседования
7. Объектно-ориентированное проектирование
Как подходить к решению заданий
Паттерны проектирования
Вопросы собеседования
8. Рекурсия и динамическое программирование
С чего начать
Решения рекурсивные и итеративные
Динамическое программирование и мемоизация
Вопросы собеседования
9. Масштабируемость и проектирование систем
Работа с вопросами
Проектирование: шаг за шагом
Масштабируемые алгоритмы: шаг за шагом
Ключевые концепции
Дополнительные факторы
Идеальных систем не бывает
Пример: найдите все документы, содержащие список слов
Вопросы собеседования
10. Сортировка и поиск
Распространенные алгоритмы сортировки
Алгоритмы поиска
Вопросы собеседования
11. Тестирование
Чего ожидает интервьюер
Тестирование реального объекта
Тестирование программного обеспечения
Тестирование функций
Поиск и устранение неисправностей
Вопросы собеседования
12. C и C++
Классы и наследование
Конструкторы и деструкторы
Виртуальные функции
Виртуальный деструктор
Значения по умолчанию
Перегрузка операторов
Указатели и ссылки
Шаблоны
Вопросы собеседования
13. Java
Подход к изучению
Перегрузка vs переопределение
Java Collection Framework
Вопросы собеседования
14. Базы данных
Синтаксис SQL и его варианты
Денормализованные и нормализованные базы данных
Команды SQL
Проектирование небольшой базы данных
Проектирование больших баз данных
Вопросы собеседования
15. Потоки и блокировки
Потоки в Java
Синхронизация и блокировки
Взаимные блокировки и их предотвращение
Вопросы собеседования
16. Задачи умеренной сложности
17. Сложные задачи
Часть X. Решения
1. Массивы и строки
2. Связные списки
3. Стеки и очереди
4. Деревья и графы
5. Операции с битами
6. Головоломки
7. Объектно-ориентированное проектирование
8. Рекурсия и динамическое программирование
9. Масштабируемость и проектирование систем
10. Сортировка и поиск
11. Тестирование
12. C и C++
13. Java
14. Базы данных
15. Потоки и блокировки
16. Задачи умеренной сложности
17. Сложные задачи
XI. Дополнительные материалы
Полезные формулы
Топологическая сортировка
Алгоритм Дейкстры
Разрешение коллизий в хеш-таблице
Поиск подстроки по алгоритму Рабина — Карпа
АВЛ-деревья
Красно-черные деревья
MapReduce
Дополнительные материалы
XII. Библиотека кода
HashMapList<T, E>
TreeNode (бинарное дерево поиска)
LinkedListNode (связный список)
Trie и TrieNode
Часть XIII. Подсказки
1. Структуры данных
2. Концепции и алгоритмы
3. Вопросы, основанные на знаниях
4. Дополнительные задачи

Предисловие

Дорогой читатель!

Я не HR-менеджер и не работодатель, а всего лишь разработчик программного обеспечения. Именно поэтому я знаю, что может произойти на собеседовании (например, вас попросят быстренько разработать блестящий алгоритм, а затем ­написать к нему безупречный код). Мне самой давали такие же задания, когда я проходила собеседование в Google, Microsoft, Apple, Amazon и в других компаниях.

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

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

В 6-м издании книги материал 5-го издания был дополнен более чем на 70%: ­дополнительные вопросы, обновленные решения, введения к главам, новые стратегии алгоритмов, подсказки ко всем задачам и другие материалы. Обязательно загляните на сайт CrackingTheCodingInterview.com, там вы можете пообщаться с другими соискателями и получить новую информацию.

Навыки, которые мы будем развивать, принесут огромную пользу. Хорошая подготовка позволит вам расширить ваши технические и коммуникативные способности, а это никогда не бывает лишним.

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

И помните: собеседование будет сложным! В свое время (в период моей работы в Google) я видела многих интервьюеров, одни из них задавали «легкие» вопросы, а другие — «сложные». И знаете что? Простые вопросы вовсе не означали, что кандидату будет проще получить работу. Главное — не безупречные ответы на вопросы (такое бывает очень редко!). Главное, чтобы ваш ответ был лучше, чем у других кандидатов. И не паникуйте, если вам достался сложный вопрос, — те, кто его задают, знают, что вопрос сложен и не ждут от вас идеального ответа.

Читайте, учитесь, а я желаю вам удачи!

Гэйл Лакман Макдауэлл,основатель CareerCup.com

Введение

Что-то пошло не так

Очередное собеседование обернулось разочарованием… в очередной раз. Никто из десяти кандидатов не получил работу. Может быть, мы были слишком строги?

Я была особенно огорчена: мы отказали одному из моих кандидатов. Мой бывший студент. Тот, кого я рекомендовала. У него был достаточно высокий средний балл в Вашингтонском университете — одной из лучших школ мира по компьютерным дисциплинам, — и он активно занимался проектами с открытым кодом. Он был энергичен, сообразителен, обладал творческим мышлением, упорно трудился и был компьютерным фанатом в хорошем смысле этого слова.

Но я была вынуждена согласиться с мнением других членов комиссии: он показал себя не лучшим образом. Даже если бы сыграла свою роль моя рекомендация, моему ученику все равно отказали бы на более поздних этапах отбора. Слишком много было «красных» карточек.

Несмотря на свой ум, кандидат с трудом справлялся с поставленными задачами. Более успешные кандидаты быстро разобрались с первым вопросом, который был построен на известной задаче, а у моего студента возникли проблемы с разработкой алгоритма. Когда он наконец-то осилил алгоритм, то не учел возможность оптимизации для других сценариев. Когда дело дошло до написания кода, он допустил множество ошибок. Это был не худший кандидат, но все видели, как ему далеко до победного результата.

Через пару недель он позвонил мне, а я не знала, что сказать. Нужно стать еще умнее? Дело было не в этом, я знала, что у него блестящий ум. Научиться лучше программировать? Нет, его навыки были не хуже, чем у других программистов, которых я знала.

Он тщательно готовился, как и большинство кандидатов. Он изучил классический учебник Кернигана и Ричи, он прочитал CLRS1. Он может описать в подробностях множество способов балансировки дерева и умеет делать на C такое, на что не осмелится ни один нормальный программист.

Мне пришлось сказать ему горькую правду — книжного академического образования недостаточно. Книги — это замечательно, но они не помогут вам пройти собеседование. Почему? Подскажу: интервьюеры не видели красно-черных деревьев со времен своего обучения в университете.

Чтобы успешно пройти собеседование, нужно готовиться на реальных вопросах, встречающихся на собеседованиях. Нужно решать реальные задачи и изучать встречающиеся закономерности. Главное — разработка новых алгоритмов, а не запоминание существующих задач.

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

Мой подход

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

Моя страсть

Преподавание — моя страсть. Мне нравится помогать людям совершенствоваться и узнавать новое.

Свой первый «официальный» преподавательский опыт я получила в колледже Пенсильванского университета на должности ассистента преподавателя, это был курс информатики. Как техническому специалисту Google, мне всегда нравилось обучать и курировать новые кадры. Я даже использовала свои 20 % времени для преподавания двух новых курсов информатики в Вашингтонском университете.

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

В моих книгах отражена моя страсть к преподаванию. Даже сейчас меня можно время от времени найти на CareerCup.com, где я помогаю пользователям, обратившимся за содействием.

Присоединяйтесь к нам!

Гэйл Лакман Макдауэлл

От издательства

Чтобы скачать дополнительные материалы к книге, воспользуйтесь QR-кодом или короткой ссылкой. Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

http://goo.gl/ssQdRk

1CLRS (Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest, CliffordStein) — Introduction to Algorithms (Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн.Алгоритмы. Построение и анализ) — популярнейшая книга по алгоритмам и структурам данных.

I. Процесс собеседования

В большинстве ведущих технических (и многих других) компаний основную часть процесса собеседования составляют вопросы по алгоритмам и программированию. Считайте, что это проверка навыков практического решения задач. Интервьюер старается оценить вашу способность решать алгоритмические задачи, которые еще не встречались вам ранее.

Очень часто все собеседование занимает только один вопрос. Сорок пять минут — не так уж много. Трудно решить за это время несколько разных задач.

В процессе решения постарайтесь рассуждать вслух и объяснить свой ход мыслей. Иногда интервьюер может вступить в разговор, чтобы помочь вам; не сопротивляйтесь. Это нормально; не думайте, что у вас что-то не получается. (Хотя конечно, если подсказки вам не нужны, тем лучше.)

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

Аналитические навыки: понадобилась ли вам помощь при решении задачи? Насколько эффективным было решение? Сколько времени понадобилось для того, чтобы прийти к решению? Если вам пришлось проектировать/разрабатывать архитектуру нового решения, насколько хорошо вы структурировали задачу и продумали последствия выбираемых вариантов?

Навыки программирования: удалось ли вам успешно преобразовать алгоритм в код приемлемого качества? Был ли этот код чистым и хорошо структурированным? Были ли учтены потенциальные ошибки? Насколько хорошим был стиль программирования?

Технические знания/основы компьютерных технологий: обладаете ли вы хорошими базовыми знаниями в области компьютеров и других сопутствующих технологий?

Опыт: принимали ли вы удачные технические решения в прошлом? Строили ли интересные, сложные проекты? Проявляли инициативу, энтузиазм и другие важные качества?

Соответствие корпоративной культуре/коммуникационные навыки: насколько хорошо ваша личность и ваши ценности соответствуют духу компании и команды? Удалось ли вам установить контакт с интервьюером?

Важность этих аспектов сильно зависит от вопроса, интервьюера, роли, команды и компании. В стандартных вопросах по алгоритмам она практически полностью приходится на первые три вопроса.

Почему?

Это один из самых частых вопросов, возникающих у кандидатов в начале процесса. Почему все происходит именно так? Ведь если задуматься:

1. Многие замечательные кандидаты показывают не лучшие результаты на подобных собеседованиях.

2. Ответ на вопрос может быть известен заранее.

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

4. Программирование «за доской» неестественно. В жизни код никогда не пишется фломастером на доске.

Все эти претензии не лишены смысла. Более того, я соглашусь с ними по всем пунктам — по крайней мере частично.

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

Ложно-отрицательные решения приемлемы

Как ни печально (особенно для кандидатов), это правда.

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

Куда большую угрозу создают ложные положительные решения: люди, которые хорошо показывают себя на собеседовании, а на самом деле плохо подходят для работы.

Навыки практического решения задач важны

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

Умные люди создают хорошие продукты, а это важно для компании. Конечно, это не единственный важный фактор, но и не последний.

Знание основных структур данных и алгоритмов полезно

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

Можно ли изучить материал при необходимости? Бесспорно. Однако очень трудно понять, что в данной ситуации может пригодиться бинарное дерево поиска, если вы не знаете о его существовании, а если вы знаете о его существовании, то, скорее всего, понимаете и основные механизмы его работы.

Другие интервьюеры объясняют внимание к структурам данных и алгоритмам тем, что это хороший «косвенный показатель». Хотя эти знания не так трудно приобрести самостоятельно, считается, что они присущи многим хорошим разработчикам. Это означает, что разработчик либо прошел специальный курс обучения (а в этом случае приобрел достаточно широкие технические знания), либо изучал эту тему самостоятельно. В любом случае это хороший признак.

Есть еще одна причина, по которой тема структур данных и алгоритмов поднимается на собеседованиях: трудно найти вопрос, связанный с решением задач, в котором бы не встречались структуры данных и алгоритмы. Эти базовые сведения встречаются в абсолютном большинстве практических задач. Когда информация известна большинству кандидатов, у интервьюеров входит в привычку задавать вопросы по этой теме.

Доска помогает сосредоточиться на главном

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

Доска хороша тем, что она в некоторых отношениях помогает выделить «общую картину» происходящего. Компилятора нет, поэтому добиваться того, чтобы код откомпилировался, не нужно. Не нужно писать определение класса и шаблонный код. Кандидат должен сосредоточиться на интересных, содержательных частях кода, то есть на сути вопроса.

Это не значит, что вы можете ограничиваться псевдокодом или правильность кода вообще не играет роли. Большинство интервьюеров не соглашается на псевдокод, и чем меньше ошибок, тем лучше.

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

Все эти рекомендации не универсальны

Все сказанное поможет вам понять ход мышления интервьюера.

Что я об этом думаю? В правильной ситуации и при правильном исполнении такой подход к собеседованию позволит адекватно оценить навыки решения задач, а те люди, которые хорошо проходят собеседование, обычно оказываются достаточно умными.

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

Кроме того, процесс уместен не для всех компаний. В некоторых компаниях на первое место ставится предшествующий опыт или навыки владения конкретными технологиями. Вопросы такого рода не уделяют особого внимания таким аспектам.

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

Процесс ни в коем случае не идеален, но есть ли вообще хоть что-нибудь идеальное? У всех процессов есть свои недостатки. Короче говоря, процесс собеседования таков, каков есть, и мы должны справиться с ним как можно лучше.

Как выбираются вопросы

Кандидаты часто спрашивают меня, какие вопросы задавались на последнем собеседовании в той или иной компании, наивно полагая, что вопросы не меняются.

В абсолютном большинстве компаний нет списков вопросов, которые должны задаваться на собеседованиях. Каждый интервьюер выбирает вопросы самостоятельно.

Из-за полной свободы выбора вопросов нет ничего, из-за чего вопрос можно было бы назвать «вопросом на последних собеседованиях в Google». Просто какой-то интервьюер, работающий в Google, задал этот вопрос на одном из последних собеседований.

Вопросы, задаваемые в Google в этом году, мало чем отличаются от вопросов, задававшихся три года назад. Собственно, вопросы, задаваемые в Google, мало чем отличаются от вопросов в аналогичных компаниях — Amazon, Facebook и т.д.

Конечно, между компаниями существуют серьезные различия. Некоторые компании уделяют особое внимание алгоритмам (часто с примесью системного проектирования), а другие предпочитают вопросы, основанные на знаниях. Однако в рамках каждой конкретной категории вопросов нет ничего, что бы позволяло связать вопрос с одной компанией, а не с другой. Вопрос по алгоритмам в Google ничем принципиально не отличается от вопроса по алгоритмам в Facebook.

Все относительно

Если оценочной шкалы не существует, как оцениваются кандидаты? Как интервьюер знает, чего ожидать от вас?

Хороший вопрос. И ответ на него выглядит вполне логично, как только вы его поймете: интервьюеры оценивают вас относительно других кандидатов с тем же вопросом у того же интервьюера.

Предположим, вы придумали классную новую задачу или головоломку. Вы задаете вопрос своему другу Алексу, и он приходит к ответу через 30 минут. Белле для ответа на тот же вопрос требуется 50 минут. Крису вообще не удается решить задачу. Декстеру хватает всего 15 минут, но вы даете ему несколько серьезных подсказок; без них он бы вряд ли далеко ушел. Элли решает задачу за 10 минут и притом предлагает альтернативное решение, которое вам даже не пришло в голову. Наконец, Фреду потребовалось 35 минут.

Вы делаете вывод: «Да, Элли справилась действительно хорошо. Вероятно, она очень хорошо разбирается в математике». (Хотя, возможно, ей просто повезло. а может быть, не повезло Крису. Можно задать еще несколько вопросов — просто чтобы убедиться, что успех не связан с везением.)

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

Это означает, что сложные вопросы не всегда плохи. Если вопрос сложен для вас, то он сложен и для всех. Вероятность успешного прохождения собеседования от этого не снижается.

Часто задаваемые вопросы

После собеседования мне ничего не сказали. Это отказ?

Нет. Задержка с ответом может объясняться разными причинами. Простейшее объяснение — один из интервьюеров еще не предоставил обратную связь. Лишь очень немногие компании не связываются с кандидатами, которым отказано в приеме на работу.

Если вы не получили ответа от компании в течение 3–5 дней после собеседования, (вежливо) обратитесь за информацией к специалисту по подбору кадров.

Могу ли я попытаться еще раз, если мне отказали?

Практически всегда можно сделать еще одну попытку, но нужно сделать паузу (обычно от полугода до года). Обычно плохие результаты не оказывают особого влияния на результаты повторного собеседования. Многие люди, получившие отказ от Google или Microsoft, позднее были приняты на работу в эти компании.

II. За кулисами

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

После того как вас выберут для собеседования, обычно устраивается предварительное собеседование (screening interview). Чаще всего его проводят по телефону. Кандидаты-студенты могут проходить его при личной встрече.

Пусть название вас не обманывает; на «предварительном» собеседовании часто задаются вопросы по программированию и алгоритмам, и требования могут быть такими же высокими, как при личном собеседовании. Если вы не уверены в том, будет ли собеседование направлено на техническую сторону, спросите координатора, какую должность занимает интервьюер (или какие темы будут рассматриваться в ходе собеседования). Как правило, технический специалист проводит техническое собеседование.

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

Как правило, кандидат проходит одно или два предварительных собеседования, прежде чем его приглашают в компанию.

В ходе собеседований в компании обычно проводятся от 3 до 6 личных собеседований, причем одно из них часто проходит за обедом. «Обеденное» собеседование обычно не имеет технической природы, а интервьюер может даже не предоставлять отчет. Как правило, на таких собеседованиях можно обсудить ваши интересы и побольше узнать о культуре данной компании. Другие собеседования в основном ориентированы на техническую сторону, и в них встречаются вопросы по программированию, алгоритмам, проектированию/архитектуре, а также поведенческие вопросы и вопросы на проверку практического опыта.

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

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

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

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

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

Microsoft

Microsoft нужны умные люди — фанаты, увлеченные технологиями. Скорее всего, здесь не потребуют от вас знания всех тонкостей C++ API, но ожидают, что вы в состоянии написать код.

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

Будьте вежливы со специалистом по подбору кадров. Он будет вашим помощником и может даже устроить повторное собеседование в том случае, если вы провалитесь на первом. Он может отстаивать ваши интересы и замолвить слово в вашу пользу — или наоборот!

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

В зависимости от конкретной ситуации интервьюеры могут поделиться информацией о том, какое впечатление вы на них произвели (или, наоборот, не сказать).

Когда интервью будет закончено, с вами может побеседовать специалист из отдела кадров, но только если вы успешно прошли собеседование. Знайте, если вы увидели менеджера по кадрам — это хороший знак!

Решение вам сообщат в течение дня или, максимум, недели. Если неделя прошла, а вы не получили никаких известий, напомните о себе по электронной почте.

Не забывайте, что отсутствие ответа может означать лишь то, что ваш специалист по подбору кадров очень занятой человек, а не то, что вам отказали.

Подготовиться!Почему вы хотите работать именно в Microsoft?

В ответе на этот вопрос Microsoft хочет услышать, что вы увлечены их технологиями. Лучший ответ выглядит примерно так: «Я всегда использовал программное обеспечение Microsoft и действительно впечатлен тем, как Microsoft удается создавать превосходные программные продукты. Например, я использовал Visual Studio для программирования игр, а API просто превосходны». Покажите свою страсть к технологии!

Особенности С вами побеседует менеджер по кадрам только в том случае, если вы прошли собеседование. Расценивайте разговор с менеджером как хороший знак.

Кроме того, Microsoft предоставляет командам больше самостоятельности, а набор продуктов весьма разнообразен. Конкретные ситуации могут сильно различаться, потому что разные команды руководствуются разными критериями.

Amazon

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

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

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

В собеседованиях участвует главный интервьюер (bar raiser). Он проходит специальную подготовку и может общаться с кандидатами вне пределов их группы, чтобы сбалансировать группу в целом. Если вопросы одного из интервьюеров оказываются более сложными, чем у остальных, скорее всего, это главный интервьюер. Он имеет огромный опыт в проведении собеседований и право вето в решении о найме. Впрочем, даже если собеседование с главным интервьюером оказывается более сложным, это не значит, что вы показываете более низкие результаты. Ваша результативность оценивается с учетом сложности, а не только по проценту правильных ответов.

Как только интервьюеры выставили оценки, они встречаются для обсуждения. На встрече принимается решение о найме.

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

Подготовиться! Amazon — веб-ориентированная компания. Убедитесь, что вы готовы к вопросам о масштабировании систем. Специальная подготовка в области объектно-ориентированных систем для ответа на эти вопросы не нужна. За информацией обращайтесь к главе 9 «Масштабируемость и проектирование систем».

Кроме того, в Amazon любят задавать вопросы по объектно-ориентированному программированию. Прочитайте главу 7 «Объектно-ориентированное проектирование».

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

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

Google

О собеседованиях в Google ходит много страшных слухов, но это только слухи. Насамом деле собеседование в Google не так уж сильно отличается от собеседования в Microsoft или Amazon.

Прежде всего инженер Google побеседует с вами по телефону, так что ожидайте непростых технических вопросов. Эти вопросы могут включать в себя написание кода, иногда через совместную работу с документом. Обычно предварительные собеседования по телефону и в офисе компании проводятся по одним стандартам и включают похожие вопросы.

На личном собеседовании с вами будут общаться от четырех до шести интервьюеров, в том числе и неформальный интервьюер (lunch interviewer). Решение интервьюера является тайной, никто не знает, что думает его коллега. Вы можете быть уверены, что интервьюер дает независимую оценку. Неформальный интервьюер свое мнение не сообщает, поэтому в общении с ним можно задать честный вопрос.

У интервьюеров нет согласованной «структуры» или «системы» вопросов. Каждый интервьюер может проводить собеседование так, как считает нужным.

Затем результаты собеседования передаются в комитет по подбору персонала, инженеры и менеджеры которого принимают решения о приеме на работу. Обычно оцениваются четыре критерия (аналитические способности, навыки программирования, опыт и коммуникативные способности), по каждому из них выставляются оценки от 1.0 до 4.0. Интервьюеры обычно не участвуют в работе комитета по подбору персонала (а исключения могут объясняться чистой случайностью).

Решающую роль играют ваши оценки. Комитет хочет видеть ваши преимущества по отношению к другим кандидатам. Другими словами, оценки 3.6, 3.1, 3.1, 2.6 предпочтительнее, чем все 3.1.

Не обязательно становиться лучшим на каждом собеседовании, а предварительное собеседование по телефону обычно не является решающим фактором.

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

Подготовиться! Google — веб-ориентированная компания. Убедитесь, что вы готовы к вопросам о масштабировании систем. Специальная подготовка в области объектно-ориентированных систем для ответа на эти вопросы не нужна. За информацией обращайтесь к главе 9 «Масштабируемость и проектирование систем».

Google уделяет особое внимание аналитическим (алгоритмическим) навыкам независимо от уровня опыта. Вы должны очень хорошо подготовиться к таким вопросам, даже если считаете, что ваш опыт вас выручит.

Особенности Ваши интервьюеры не принимают решение о найме, их оценки передаются в комитет по подбору персонала. Комитет дает рекомендации, которые могут быть отвергнуты руководством Google (впрочем, это происходит очень редко).

Apple

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

Интервью обычно начинается с телефонного звонка специалиста по подбору кадров — он должен оценить ваши базовые навыки. Затем происходит серия технических собеседований с членами команды.

После приглашения в кампус вас обычно встречает специалист, который вкратце расскажет вам о процедуре собеседования. Затем вас ждут 6–8 собеседований с участниками команды и ключевыми людьми, с которыми она будет сотрудничать.

Вам предстоят собеседования 1-на-1 и 2-на-1. Будьте готовы выступать за доской и убедитесь, что умеете четко формулировать свои мысли. Обед с возможным будущим начальником может показаться неформальным мероприятием, но и он является продолжением собеседования. Каждый интервьюер занимается собственной областью и обычно не обсуждает ваши результаты с другими.

К концу дня интервьюеры сравнивают свои заметки. Если все считают вас приемлемым кандидатом, вас направляют на собеседование с директором и вице-президентом организации, в которую вы собираетесь поступать. Данное решение принимается достаточно неформально, но если вы доберетесь до этого этапа — это очень хороший признак. С другой стороны, если решение будет отрицательным, вас просто проведут на выход, и вы ничего не узнаете.

Если вы добрались до собеседования с директором и вице-президентом, все интервьюеры соберутся в конференц-зале, чтобы выразить свое официальное одобрение или неодобрение. Вице-президент на встрече обычно не присутствует, но может наложить вето, если вы произвели неблагоприятное впечатление. Обычно специалист по подбору кадров связывается с вами через несколько дней, но ничто не мешает вам обратиться за информацией.

Подготовиться! Если вы знаете, какая команда будет проводить собеседование, убедитесь, что знакомы с продуктом этой команды. Что вам в нем нравится? Что вы хотели бы улучшить? Продемонстрируйте свою заинтересованность.

Особенности Интервью часто проводятся в режиме 2-на-1; не беспокойтесь, он принципиально не отличается от режима 1-на-1.

Не забывайте, что сотрудники Apple должны быть энтузиастами своей продукции, поэтому продемонстрируйте свой интерес.

Facebook

Отобранные кандидаты обычно проходят одно или два предварительных собеседования по телефону. Такие собеседования обычно носят технический характер и включают программирование (обычно в совместном редакторе документов).

После предварительного собеседования(-ий) вам будет предложено выполнить домашнее задание, объединяющее программирование с алгоритмическими задачами. Уделите особое внимание стилю программирования. Если вы никогда не работали в среде с рецензированием кода, будет полезно обратиться к коллеге, который сможет провести рецензирование.

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

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

• Поведенческая («джедай»): в ходе собеседования оценивается ваша способность достичь успеха в среде Facebook. Насколько хорошо вы уживетесь с корпоративной культурой и ее ценностями? Что вас интересует? Как вы будете справляться с проблемами? Также приготовьтесь поговорить о своем интересе к Facebook — здесь нужны энтузиасты. Также на собеседовании могут задаваться вопросы по программированию.

• Программирование и алгоритмы («ниндзя»): стандартные вопросы по программированию и алгоритмам вроде тех, которые представлены в книге. Вопросы намеренно сделаны сложными. Вы можете использовать любой язык программирования на свое усмотрение.

• Проектирование/архитектура («пират»): кандидатам на должности, связанные с разработкой внутренних подсистем, могут задаваться вопросы по системному проектированию. Кандидатам на разработку интерфейсной части будут задаваться вопросы, связанные с этой дисциплиной. Открыто обсуждайте разные решения с присущими им достоинствами и недостатками.

Обычно следует ожидать двух собеседований типа «ниндзя» и одного типа «джедай». Опытные кандидаты также обычно проходят «пиратское» собеседование.

Интервьюеры пишут отзывы до того, как обсуждать ваши достижения с другими. Это гарантирует, что успех (или, наоборот, неудача) на одном из собеседований никак не повлияет на результаты следующего.

Как только все составят свои отзывы, заинтересованная в вас команда и менеджер по подбору персонала собираются для принятия окончательного решения. Затем рекомендации передаются в комитет по подбору персонала.

В Facebook ищут настоящих «камикадзе», способных докапываться до истины и разрабатывать масштабируемые решения на любом языке программирования. Знание PHP не играет ключевой роли, поскольку Facebook также требуются программисты на C++, Python, Erlang и других языках программирования.

Подготовиться! Самой молодой из «элитных» IT-компаний нужны разработчики с предпринимательской жилкой. Покажите, что вы инициативны и можете быстро работать.

От вас ждут, что вы можете построить элегантное и масштабируемое решение на любом языке по вашему выбору. Знание PHP особой роли не играет, особенно если учесть, что во внутренней работе Facebook широко применяются C++, Python, Erlang и другие языки.

Особенности В Facebook собеседование организуется в целом для всей компании, а не для какой-то конкретной команды. Если вас взяли на работу, вам предстоит пройти 6-недельный «курс молодого бойца», цель которого — помочь разобраться в огромной кодовой базе. Вы получите задания от старших разработчиков, изучите новые методы и, в конечном счете, получите большую свободу выбора проекта (чем при назначении проекта по результатам собеседования).

Palantir

В отличие от некоторых компаний, проводящих «общие» собеседования (когда ­собеседование ведется для компании в целом, а не для конкретной команды), ­Palantir использует собеседования в интересах конкретных команд. Иногда ваша заявка может быть перенаправлена в другую команду, для которой вы лучше подходите.

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

Возможно, вам также будет отправлено задание HackerRank, которое оценит вашу способность к написанию оптимальных алгоритмов и правильного кода. Такие проверки с большей вероятностью достанутся менее опытным кандидатам, например студентам.

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

Скорее всего, вам покажут продукты Palantir. Задайте уместные вопросы и продемонстрируйте свой интерес к компании.

После собеседования интервьюеры встречаются для обсуждения результатов с менеджером по подбору персонала.

Подготовиться! Palantir ценит одаренных технических специалистов. Многие кандидаты сообщают, что вопросы Palantir были труднее, чем в Google и других ведущих компаниях. Это не означает, что вам будет сложнее получить работу (хотя и это не исключено); просто интервьюер предпочитает более сложные вопросы. Если вы собираетесь проходить собеседование в Palantir, постарайтесь досконально изучить основные структуры данных и алгоритмы. Затем сосредоточьтесь на подготовке самых сложных вопросов по теме алгоритмов.

Также стоит освежить в памяти системное проектирование, если вы проходите собеседование на роль специалиста по архитектуре, — это важная часть процесса.

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

Также вы можете попрактиковаться в решении задач по программированию на сайте HackerRank.com.

III. Нестандартные случаи

Есть много причин, по которым люди берутся за подобные книги. Возможно, вам хватает опыта работы, но вы никогда не проходили подобные собеседования, а может, вы занимались тестированием или управлением проектами. Или вам хочется узнать из книги, как лучше организовать собеседование. В этом разделе каждый из этих «нестандартных случаев» найдет что-то полезное для себя.

Профессионал

Иногда приходится слышать мнение, что вопросы по алгоритмам, приведенные в книге, предназначены только для недавних выпускников. Это не совсем так. Возможно, кандидатам, имеющим профессиональный опыт, вопросы по алгоритмам задаются реже — но ненамного.

Если компания задает вопросы по алгоритмам неопытным кандидатам, обычно эти же вопросы предлагаются и кандидатам с опытом работы. Такие компании считают (правильно или ошибочно), что навыки, продемонстрированные в ответах на такие вопросы, важны для любого разработчика.

Некоторые интервьюеры немного «снижают планку» для опытных кандидатов. В конце концов, прошло много лет с тех пор, как кандидат слушал лекции по алгоритмам. Материал мог подзабыться.

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

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

Также ожидается, что опыт кандидата позволит ему дать более глубокий и впечатляющий ответ на вопросы типа «Расскажите о самой серьезной ошибке, с которой вы столкнулись в работе». У вас больше опыта, и вы должны продемонстрировать это в своем ответе.

Тестеры и SDET

Специалисты SDET (Software Design Engineer in Test, программист-тестер) тоже пишут код — но не для реализации функциональности, а для ее тестирования. Соответственно, они должны быть не только прекрасными программистами, но и прекрасными тестерами. Требования возрастают вдвое!

Если вы претендуете на должность тест-программиста:

• Подготовьтесь к базовым задачам тестирования. Как вы будете тестировать лампочку? Ручку? Кассовый аппарат? Microsoft Word? Глава, посвященная тестированию, поможет подготовиться к вопросам такого рода.

• Подготовьтесь к заданиям, связанным с программированием. Главная причина для отказов на должности SDET — недостаточная квалификация программиста. Хотя требования к SDET ниже, чем для рядового разработчика, вы должны разбираться в алгоритмах. Убедитесь, что вы можете справиться с заданиями по алгоритмизации и программированию, которые даются обычным разработчикам.

• Отработайте навыки тестирования вопросов по программированию. В качестве примера возьмем очень популярное задание: «Напишите код, который делает X», а затем: «Хорошо, а теперь протестируйте его». Даже если в вопросе об этом явно не сказано, спросите себя: «Как бы я протестировал этот код?» Помните: любое задание может превратиться в задачу по тестированию.

Для тестеров программного обеспечения очень важны коммуникативные навыки, поскольку им приходится работать с людьми. Не игнорируйте часть V «Подготовка к поведенческим вопросам».

Совет

В завершение этого раздела хочу дать вам небольшой совет, который положительно отразится на вашей карьере. Если вы, как и многие другие кандидаты, расцениваете должность тестера как хорошую «ступеньку» для вхождения в компанию, не обольщайтесь. Для многих кандидатов переход с этой должности на должность разработчика оказался трудным испытанием. Если вы все-таки решились на этот шаг, убедитесь в том, что вы сохранили все свои навыки в области программирования и алгоритмов, и постарайтесь осуществить переход в течение одного-двух лет. Чем больше пройдет времени, тем меньше вероятность того, что вас будут серьезно воспринимать на собеседовании на должность разработчика.

Поддерживайте свои навыки программирования на должном уровне.

Менеджеры программ и менеджеры продукта

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

Когда интервьюеры ищут кандидата на должность PM, они ищут человека, способного продемонстрировать следующие навыки:

• Обработка неоднозначностей. Это не самая главная часть собеседования, но вы должны знать, что интервьюеры приветствуют подобные навыки. Им важно понять, что вы будете делать, когда столкнетесь с неоднозначной ситуацией. Постарайтесь продемонстрировать, что вы не остановитесь. Интервьюер  хочет видеть, что вы активно беретесь за решение: ищете информацию, выделяете наиболее приоритетные составляющие и организованно подходите к решению задачи. Обычно такие навыки не проверяются напрямую (хотя и такое возможно), но они могут стать одним из аспектов, на которые обратит внимание интервьюер.

• Ориентированность на потребителя (подход). Интервьюеры хотят видеть, что вы ориентируетесь на целевую аудиторию. Вы твердо уверены, что все потенциальные потребители будут использовать программный продукт точно так же, как и вы? Или вы способны взглянуть на продукт с точки зрения клиента и попытаетесь понять, как он будет пользоваться программой? Вопросы типа «Разработайте будильник для слепого» позволяют изучить этот аспект. Столкнувшись с подобным вопросом, непременно уточните, кто является вашей целевой аудиторией и как он будет использовать продукт. Необходимые навыки описаны в главе 11 «Тестирование».

• Ориентированность на потребителя (технические навыки). Некоторые команды, работающие со сложными продуктами, должны быть уверены в том, что их PM хорошо понимают сам продукт. Трудно приобрести такое понимание во время работы. Возможно, глубокие технические знания в области мобильных телефонов не обязательны для работы в группах Android или Windows Phone (хотя они и могут пригодиться), но понимание задач безопасности является необходимым условием для работы над Windows Security. Чтобы пройти собеседование на должность, требующую определенных технических навыков, необходимо по крайней мере заявить о наличии у вас таких навыков.

• Многоуровневые коммуникации. PM должен уметь общаться с сотрудниками компании всех уровней подготовки и любого статуса. Ваш интервьюер захочет убедиться, что вы обладаете подобной способностью. Это легко проверяется, например, с помощью простого задания «Объясните, что такое TCP/IP, своей бабушке». Ваши коммуникативные способности также могут оцениваться по рассказу о вашей предыдущей работе.

• Страсть к новым технологиям. Счастливые сотрудники — это продуктивные сотрудники, поэтому компания должна убедиться, что вы будете получать удовольствие от работы. В ваших ответах должно отразиться ваше отношение к новым технологиям — а в идеале и к конкретной команде или компании. Например, вас могут напрямую спросить: «Чем вам привлекает Microsoft?» Интервьюеры ожидают увидеть энтузиазм в вашем рассказе о предшествующем опыте и задачах команды. Они хотят видеть, что вы получаете удовольствие от решения сложных задач.

• Работа в команде/лидерство. Это может стать решающим моментом собеседования — ведь это и есть ваша работа. Все интервьюеры пытаются оценить то, как хорошо вы работаете с другими людьми. Чаще всего для этого используются вопросы типа «Расскажите мне о ситуации, когда ваш член команды не выполнял свою часть обязанностей». Интервьюер смотрит, способны ли вы справляться с конфликтами, берете ли на себя инициативу, понимаете ли вы коллектив и нравится ли людям работать с вами. Вам следует уделить должное внимание поведенческим вопросам.

Все перечисленные навыки важны для PM и являются ключевыми для собеседования. Внимание, уделяемое каждой области в собеседовании, примерно соответствует ее важности в реальной работе.

Ведущие разработчики и менеджеры

Отличные навыки программирования являются необходимым условием для ведущих разработчиков и очень часто требуются и от «управленцев». Если ваша работа будет связана с программированием, убедитесь, что ваши познания в алгоритмизации и программировании находятся на достаточно высоком уровне. В частности, Google предъявляет к менеджерам высокие требования в том, что касается программирования.

Дополнительно вас будут оценивать по следующим критериям:

• Работа в команде/лидерство. Претендент на любую руководящую должность обязан быть лидером и уметь работать с людьми. На интервью вас будут оценивать явно и неявно. При открытой оценке вам задают вопрос: «Что вы будете делать, если не согласны с менеджером?» Неявная оценка проводится по результатам вашего общения с интервьюерами. Если интервьюер увидит, что вы высокомерны или, наоборот, слишком пассивны, он решит, что менеджер из вас не получится.

• Расстановка приоритетов. Менеджеры часто сталкиваются с непростыми проблемами — например, им приходится следить за тем, чтобы команда укладывалась в жесткие сроки. Ваши интервьюеры хотят видеть, что вы способны правильно расставить приоритеты и отбросить все второстепенное. Кроме того, вы должны уметь задавать правильные вопросы, чтобы понять, что действительно критично и на что можно реально рассчитывать.

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

• Доведение дела до конца. Менеджер должен быть человеком, который всегда добивается своей цели. Вам необходимо выдержать баланс между подготовкой к проекту и его реализацией. Менеджер должен знать, как структурировать проект и как мотивировать людей для достижения целей команды.

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

Стартапы

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

Процесс подачи заявления

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

Виза и разрешение на работу

К сожалению, небольшие стартапы в США не способны предоставить рабочую визу для своих сотрудников. Поверьте, они недовольны подобной ситуацией, но ничем не могут помочь. Если вам нужна рабочая виза, лучше всего обратиться к профессиональному вербовщику, который работает со многими стартапами (и лучше представляет, какие стартапы готовы заниматься визами), или поискать более крупную компанию.

Резюме

Стартапы обычно привлекают людей, которые не только являются техническими специалистами, но и обладают предпринимательскими наклонностями. В идеале в вашем резюме должна быть отражена ваша инициативность. Какие проекты вы запускали?

Еще один важный аспект — возможность сходу взяться за работу. В стартапах ищут людей, уже знакомых с языком программирования, который используется в данной компании.

Процесс собеседования

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

• Личная совместимость. Личная совместимость обычно оценивается по вашему общению с интервьюером. Дружеская, содержательная беседа — это залог получения вакансии.

• Набор навыков. Поскольку стартапам нужны люди, которые сразу могут приступить к работе, они будут оценивать ваши навыки программирования на конкретном языке. Если вы знакомы с языком, на котором работает стартап, повторите его основы.

• Предыдущий опыт. В стартапах задают много вопросов о предыдущем опыте. Уделите особое внимание части V «Подготовка к поведенческим во­просам».

В дополнение к перечисленным критериям на собеседовании часто задаются ­вопросы по программированию и алгоритмизации, которые вы найдете в этой книге.

Для интервьюеров

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

Не задавайте те вопросы, которые приведены в книге

Во-первых, эти вопросы были выбраны потому, что они хорошо подходят для подготовки к собеседованиям. Такие вопросы не всегда хорошо подходят для самих собеседований. Например, в книге представлены вопросы-«головоломки», потому что некоторые интервьюеры задают такие вопросы. Кандидатам стоит потренироваться в их решении на случай, если они будут проходить собеседование в такой компании, хотя лично я считаю, что такие вопросы плохо годятся для собеседований.

Во-вторых, ваши кандидаты тоже читают книги. Не стоит задавать вопросы, которые могут быть известны кандидату.

Задавайте похожие вопросы, но не копируйте их от и до. Ваша цель — проверить умение решать задачи, а не память кандидата.

Предлагайте задачи средней и высокой сложности

Цель этих вопросов — оценка навыков решения задач. Если вы задаете слишком простые вопросы, эффективность собеседования снижается, а кандидат отвлекается на второстепенные аспекты.

Ищите вопросы с несколькими скрытыми затруднениями

Некоторые вопросы сильно зависят от моментов озарения. Если счастливая догадка не посетит кандидата, он плохо справится с заданием, а если посетит — он обойдет многих других кандидатов. Даже если озарение может считаться индикатором навыков, это всего лишь один из возможных индикаторов. В идеале следует искать задачи с несколькими препятствиями, догадками или оптимизациями. Множественные показатели лучше одиночных.

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

Не требуйте феноменальной эрудиции

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

От кандидатов следует ожидать разве что знания относительно простых структур данных и алгоритмов. Разумно предположить, что недавний выпускник понимает основы синтаксиса «O» большого и деревьев, но мало кто вспомнит алгоритм Дейкстры или тонкости работы деревьев АВЛ.

Если вопрос собеседования требует экзотических познаний, спросите себя: действительно ли этот навык настолько важен? Он настолько важен, что я предпочту сократить количество подходящих кандидатов или же уделять меньше внимания навыкам практического решения задач?

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

Избегайте «пугающих» вопросов

Некоторые вопросы страшат кандидатов, потому что на первый взгляд они требуют специальных познаний (даже если в действительности это не так). К этой категории часто относятся вопросы, в которых задействованы:

• математика и теория вероятностей;

• низкоуровневые функции (выделение памяти и т.д.);

• проектирование или масштабируемость систем;

• фирменные системы (Google Maps и т.д.).

Например, на собеседованиях я иногда предлагаю найти все положительные целочисленные решения уравнения a3+ b33+ d3, меньшие 1000. Многие кандидаты думают, что им придется заниматься хитроумным разложением на множители или какими-то нетривиальными вычислениями. На самом деле это не так. Кандидат должен понимать концепцию возведения в степень, суммы и равенства — и это все.

Задавая этот вопрос, я явно сообщаю: «Может показаться, что это мате­матическая задача. Не беспокойтесь, это вопрос на алгоритмы». Если кандидат ­берется за ­разложение, я останавливаю его и напоминаю, что эта задача не на математику.

В других вопросах может быть задействована теория вероятностей. Часто речь идет о тривиальных вещах, наверняка известных кандидату (скажем, случайный выбор одного из пяти вариантов или выбор случайного числа от 1 до 5). Но сам факт того, что в задаче задействованы вероятности, пугает кандидатов.

Будьте внимательны с вопросами, которые могут показаться устрашающими. Помните, что кандидат и так нервничает. Добавление «пугающего» вопроса может окончательно нарушить его душевное равновесие, в результате чего он выступит хуже своего реального уровня.

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

Обеспечьте позитивный настрой

Некоторые интервьюеры уделяют столько внимания подбору «правильных» вопросов, что забывают думать о своем собственном поведении.

Многие кандидаты нервничают на собеседованиях и прислушиваются к каждому слову интервьюера. Они улавливают все, что может показаться позитивным или негативным, и считают, что простое пожелание «Удачи!» несет какой-то смысл, даже если вы говорите это всем независимо от показанных результатов.

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

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

• «Верно, именно так».

• «Точно подмечено».

• «Превосходно».

• «Очень хорошо, интересная мысль».

Как бы плохо ни шли дела у кандидата, хоть что-то он делает правильно. Найдите возможность добавить позитива в собеседование.

Уделяйте больше внимания поведенческим вопросам

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

Однако не стоит торопиться. Может оказаться, что кандидат не говорит о себе, потому что его учили не хвалиться своими достижениями, а концентрироваться на достижениях команды. Это относится в первую очередь к кандидатам на руководящие должности и женщинам.

Не стоит полагать, что кандидат в некоторой ситуации ничего не сделал, только потому, что вы не поняли, что же именно было сделано. Привлеките внимание кандидата к ситуации (деликатно!). Напрямую спросите, сможет ли он описать свою роль.

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

Участвовать в собеседовании в роли кандидата тоже нужно уметь (в конце концов, именно поэтому была написана книга). Однако это не тот навык, который вам хотелось бы проверять.

Если кандидату нужно время — дайте ему время

Многие кандидаты спрашивают меня: что делать, если интервьюер требует отвечать, когда кандидату нужно время для размышлений?

Если кандидату нужно время, предоставьте ему время для размышлений. Научитесь различать «Я в тупике и понятия не имею, что делать» и «Я размышляю в тишине». Возможно, содействие со стороны интервьюера поможет многим кандидатам, но не обязательно всем. Некоторым нужно подумать. Дайте им это время для размышлений и учтите в своих оценках, что эти кандидаты получили от вас меньше информации, чем другие.

Выбор категории

На очень высоком уровне вопросы можно разделить на четыре категории:

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

Расширенные вопросы: более сложные вопросы, часто также связанные с решением задач или проектированием. Это серьезные вопросы, над которыми кандидат должен как следует подумать. Используйте их в том случае, если навыки алгоритмизации и решения задач особенно важны.

Специализированные вопросы: проверка знаний в узкоспециализированных областях (например, язык Java или машинное обучение). Обычно используются для тех областей, которые хороший инженер не сможет быстро освоить во время работы. Вопросы должны быть уместными для настоящего специалиста. К сожалению, мне приходилось видеть, как кандидату после 10-недельных курсов программирования задавались сложные вопросы по Java. О чем это говорит? Если кандидат знает ответы, то он узнал их недавно, а следовательно, эти знания приобретаются легко, а если они приобретаются легко, то нет смысла искать кандидата с познаниями в этой области.

Дополнительные знания: эти вопросы не относятся к уровню специализированных. Собственно, для вакансии эти знания даже могут быть не нужны, но разумно ожидать, что специалист такого уровня владеет этой информацией. Например, для вас может быть несущественно, владеет кандидат CSS или HTML, но если кандидат серьезно работал с этими технологиями, но не может объяснить, для каких целей хорошо (или плохо) подходят таблицы, это выглядит странно. Получается, что кандидат не усваивает информацию, которая играет важную роль в его работе.

Проблемы начинаются тогда, когда интервьюеры смешивают эти категории:

• Они задают вопросы для специалистов людям, которые специалистами не являются.

• Они открывают вакансии для специалистов тогда, когда эти специалисты им не нужны.

• Им нужны специалисты, но на собеседованиях оцениваются только базовые навыки.

• Они задают базовые вопросы, считая их расширенными. По этой причине они уделяют большое внимание различиям между «приемлемым» и «отличным» результатом, хотя эти различия могут быть совершенно незначительными.

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

2 В крупных компаниях над одним и тем же продуктом, помимо рядовых программистов и тестировщиков, работают менеджеры. Менеджер управления программой (Program Manager) отвечает за архитектуру решения, а вот менеджер управления продуктом (Product Manager) занимается маркетингом и представляет интересы заказчика. Получается, что первый — программист, а второй — маркетолог. — Примеч. пер.

IV. Перед собеседованием

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

Получаем «правильный» опыт

Без хорошего резюме нет собеседования, а без предыдущего опыта не будет хорошего резюме. Следовательно, начать следует с приобретения опыта. Чем дальше будут простираться ваши планы на будущее, тем лучше.

Для студентов это может означать следующее:

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

• Устройтесь на стажировку. Сделайте все, чтобы попасть на стажировку на ранней стадии обучения. Это откроет путь к еще более полезной стажировке перед получением диплома. Во многих ведущих технических компаниях преду­смотрены программы стажировки, предназначенные специально для новичков и студентов-второкурсников. Если вы не можете принять участие в подобной программе, найдите стартап и попробуйте свои силы.

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

С другой стороны, профессионал может уже обладать опытом, который позволит ему попасть в компанию его мечты. Например, у разработчика в Google может быть достаточно опыта для перехода в Facebook. Впрочем, если вы пытаетесь перейти из менее известной компании в один из «флагманов» или переключиться с тестирования на разработку, вам пригодятся следующие советы:

• Сделайте так, чтобы ваши рабочие обязанности максимально приблизились к задачам программирования. Не показывайте своему руководству, что вы думаете об уходе, но уделите больше внимания программированию. По возможности выбирайте «содержательные» проекты и используйте актуальные технологии — это станет дополнительным плюсом для вашего резюме (в идеале такие проекты сформируют его основу).

• Используйте все свободное время — ночи и выходные дни. Если у вас появилось несколько минут или часов, займитесь разработкой любого приложения — мобильного, настольного или веб-приложения. Такие проекты помогут вам освоить новые технологии и повысят вашу ценность для современных компаний. Обязательно упомяните эти проекты в резюме: люди, разрабатывающие программы «ради собственного удовольствия», производят хорошее впечатление на интервьюеров.

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

Кроме того, нужно заранее думать о развитии вашей карьеры — какой дорогой она должна пойти? Если вы собираетесь сделать карьеру в области руководства, даже если в настоящий момент вы ищете вакансию разработчика, постарайтесь набрать опыт руководящей работы.

Идеальное резюме

Аналитики, просматривающие резюме, обращают внимание на те же самые детали, что и интервьюеры. Они хотят понять, насколько вы умны и умеете ли программировать.

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

Правильный размер

Резюме должно укладываться в одну страницу, если ваш опыт работы не превышает десяти лет, или две страницы, если вы более опытны. Впрочем, у многих опытных кандидатов размер резюме в 1,5–2 страницы может оказаться оправданным.

Дважды подумайте, прежде чем писать длинное резюме. Короткие резюме часто производят большее впечатление.

• Рекрутеры тратят на одно резюме в среднем около 10 секунд. Если вы сократите размер и укажете в резюме только самые заметные детали, их наверняка заметят. Обилие информации только отвлекает рекрутера от того, на что следовало бы обратить его внимание.

• Некоторые люди просто отказываются читать длинные резюме. Вы же не хотите, чтобы ваше резюме было отклонено?

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

Трудовой стаж

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

Указывайте только значимые позиции

Для каждой занимаемой вами должности необходимо добавить описание достижений: «При осуществлении X я добился Y, что привело к Z». Пара примеров:

• «Благодаря моей реализации распределенного кэширования время прорисовки сократилось на 75 %, что привело к сокращению времени входа в систему на 10 %».

• «Благодаря реализации нового алгоритма сравнения на базе windiff