4 шага на пути в Google, не имея высшего образования

:

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

Как и все я собирался пойти в университет. Мой выбор пал на Калифорнийский университет в Лос-Анджелесе. К сожалению в школе у меня был небольшой средний балл (2.45 по четырехбалльной шкале) и я не мог поступить туда. Вместо этого я ходил на курсы по информатике в местном университете.

Шаг № 1: Жульничай, пока тебе это удается

Учась на курсах, я параллельно работал в небольшой компании в Гриффит, Индиана. Создавал сайты для местного малого бизнеса за $12/час. Работа, конечно, была не совсем той, которую я представлял для себя в будущем, но могло быть и хуже.
Я старался не высовываться, обещания давал с запасом, при этом выполняя их немного раньше. Работал в разных проектах. Компания хорошо заработала на мне.

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

В какой-то момент молодой стартап в Калифорнии под поддержкой CodeFire прислал уведомление, о том что они делают такую же игру! Space-шутер с видом сверху, наподобие SubSpace, только в 3D. В своем уведомлении они требовали убрать мою игру.
На это я мог ответить только одно: Конечно, если вы наймете меня на работу.
И они ответили предложением о работе! Я пошел к ним.
Компания сохранила права на оригинальную игру. Я оповестил о своем уходе за три недели и мы расстались на хороших условиях.

Шаг № 2: Подружитесь с профессионалами.

Это, вероятно, одна из самых важных вещей, которые вы можете сделать. Найти кого-то, кто является профессионалом в своем деле, сделать его вашим наставником. И никогда не прекращайте учиться. Во время работы в Double Helix, у меня был наставник Натан Хант, один из самых умных и самых скромных парней, которых я когда-либо встречал. И он был очень терпеливым, несмотря на мои элементарные вопросы. Наверно, я тысячу раз заходил к нему в кабинет за ответом на очередной глупый вопрос. Годы спустя, он присоединится к Google через месяц после меня.
Каждый из моих наставников изменил что-то во мне и в моем видении мира. И это только малая часть того что они мне дали.

Шаг № 3: Заполните пробелы в знаниях.

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

Со временем вам нужно выполнить следующее:
1. Стать профессионалом хотя бы в одном из этих языков: C, C + +, Objective-C, Java, PHP, Python или
Ruby. Свободно владеть хотя бы одним другим языком и познакомится с такими языками как Scala, Haskell или Lisp.
2. Изучайте структуры данных. Сделайте реализацию большинства из них. Также нужно понимать временную сложность алгоритмов(О — нотация оценки сложности алгоритмов).
3. Решайте задачки на программирование. Прочтите это и постарайтесь решить задачи отсюда.
4. Создайте свое портфолио. (например, написанные вами фреймворки, различные приложения, небольшие игры и т.п.)

Шаг № 4: Обретите уверенность.

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

Год спустя я снова отправил свое резюме. Только на этот раз я убрал в нем раздел «Образование» полностью. По иронии судьбы, рекрутер позвонил мне чтобы договориться о предварительном интервью по скайпу. Я попросил перенести интервью на две недели позже, и он согласился. Мне было нужно это время. Я использовал эти две недели для того, чтобы впихнуть в свою голову как можно больше алгоритмов и структур данных. Я программировал 12-14 часов в сутки и решил сотни задач за это время. Я был буквально одержим и не останавливался, пока мой страх перед интервью в Google не превратился в уверенность.

Я помню каждое из моих интервью в Google. Это было ошеломительно. С интервьюерами было довольно интересно говорить. Они видели мое волнение и были доброжелательны со мной.

Некоторые из задач, которые были даны мне:

  1. Дан набор из двумерных точек, нужно вычислить горизонт. Это было легко. Я воспользовался структурой данных, известной как двоичная куча. Вот одно из решений этой проблемы
  2. Спроектируйте Microsoft Paint.
    Это была самая веселая задачка. Я начал с составления интерфейсов и диаграммы классов. Я упомянул инструмент «заливка» и интервьюер попросил меня реализовать ее. К счастью, я знал, как это сделать с закрытыми глазами.
  3. Опишите ваше мнение о хорошем тоне в программировании.
    Это было открытое обсуждение. Я говорил о том, какие способы тестирования существуют и когда их нужно использовать (например: Юнит-тестирование, Интеграционное тестирование, Приемочное тестирование). Я говорил о едином стиле кода. И так далее. Это можно найти в книгах Code Complete и Effective Java

Я искренне наслаждался каждым раундом интервью. Если бы я не готовился, я уверен, все было бы совсем иначе. После интервью, у меня было очень хорошее чувство, я был доволен. Но, я слышал, что даже если рекрутеры дали добро, Ларри должен сам одобрить кандидата. Я боялся, что, как только он увидит мою необразованность, то на этом все и закончится.
Но этого не произошло, и однажды, когда я ел суши на обеде в Санта-Клер, мне позвонили и я с энтузиазмом принял предложение о работе. В тот день, я точно знал, что я никогда не вернусь в школу.

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

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