Почему я проучился 8 месяцев на дневном отделении перед собеседованием в Google

Это правда. Я потратил тысячи часов на чтение книг, написание кода и просмотр лекций по информатике, чтобы подготовиться к собеседованию с инженером-программистом Google.

Если вы хотите подготовиться к собеседованию в Google, вот мой учебный план:

jwasham / google-интервью-университет

google-interval-university - Полный ежедневный план учебы, чтобы стать инженером-программистом Google. github.com

Как я сюда попал

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

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

Перед тем, как уйти из армии, я попытался вернуться к программированию и был удивлен трудностями. Я выучил БЕЙСИК в средней школе и продолжал программировать его в средней школе. Но я возобновил изучение программирования с C ++, и скачок оказался слишком большим. Я просто не мог этого понять.

Однако мне нравилось создавать веб-сайты, но я использовал программное обеспечение с интерфейсом в стиле Word, которое я использовал для публикации своих веб-сайтов. Я не знал, как делать сайты с нуля.

После армии я решил остаться в Корее на год и преподавать английский язык. Я проводил ночи и выходные, чтобы изучать веб-программирование, используя Perl, HTML, CSS (который был новым в то время), JavaScript и SQL.

После года интенсивной учебы я нашел работу в районе Сиэтла и с тех пор живу здесь.

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

У меня была успешная карьера, и я многому научился. Но я еще не закончил.

В поисках смены карьеры

Помните ту часть, где я не получил степень по информатике? Это имело значение.

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

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

Не поймите меня неправильно, меня все равно могли бы нанять, но не в тех технологиях или областях, в которых я хотел бы работать. Меня могли нанять в областях, где стек технологий был несколько устаревшим, как я. Там большие деньги, но я не видел перспектив.

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

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

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

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

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

Я обратился к знакомому, который работает в Google, и спросил его о его опыте работы в компании. Я читал « Как работает Google» и уже был хорошо знаком с Google.

Через другой контакт я получил копию инструкций Google, которые предоставляются кандидатам на собеседование. Это стало основой моего учебного плана.

Google - отличное место для работы, но до того, как я узнал об этом, моей целью был Google.

Почему Google?

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

Чем больше я узнаю о Google, тем больше мне хочется там работать.

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

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

Управление другое. Менеджеры не управляют на микроуровне. Они доверяют инженерам принимать правильные решения. Доверие к сотрудникам меняет роль менеджеров в Google по сравнению с тем, что большинство людей представляют себе, когда думают об управлении. Кроме того, менеджеры не могут в одностороннем порядке нанимать, увольнять или продвигать по службе. Многие важные управленческие решения, которые могут быть восприняты как офисная политика, принимаются комитетом для устранения этой опасности.

Отдел кадров (HR) Google узнал, что работает с течением времени, и использует данные и отзывы сотрудников для улучшения систем оценки, процесса найма, продвижения по службе, компенсаций, льгот и многого другого. Прочтите правила работы! Ласло Бок (старший вице-президент по работе с персоналом) для получения дополнительной информации.

Да, преимущества потрясающие. Я посетил офис Google в Киркленде, штат Вашингтон, и он превзошел мои ожидания. И мои ожидания были уже высокими.

Google Interview University

Помните полученные мной коучинговые записки, в которых говорилось, что мне изучать? Список тем казался управляемым, хотя я ничего в нем не знал.

Я превратил темы в заметках в схему и начал заполнять темы видео на YouTube с лекциями из Массачусетского технологического института и Калифорнийского университета в Беркли. Видео о связанных списках в одном месте, видео об очередях в другом. Список начал расти.

Я опубликовал список на Github, потому что моя учетная запись Github была пуста. Поскольку весь код, который я написал для своего бизнеса и работы, был частным, моя учетная запись Github создавала впечатление, будто я вообще не кодил. Мне нужно было создать портфолио. Изначально я назвал проект «Проект 9894». Google был запущен 4 сентября 1998 года. Отсюда и название. Позже я переименовал его в «Google Interview University».

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

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

Мой маленький проект на Github начал получать несколько звезд, и я опубликовал сообщение в блоге, посвященное 20 звездам.

Однажды утром я проснулся и обнаружил, что он вырос до 120 звезд. Кто-то из известных людей написал об этом в Твиттере ночью, и это привело к тому, что он оказался в ежедневном отчете Github о тенденциях. В течение нескольких дней я был №1 в тренде на Github.

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

Сейчас у него более 21000 звезд.

Я до сих пор не могу в это поверить.

Что делать, если я не получу работу?

Это не будет концом света.

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

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

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

Не учись так много, как я

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

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

Я потратил 3 недели на чтение 1000-страничной книги по C ++. Я не помню, чтобы стоило 1000 страниц, но теперь я хорошо знаю C ++. Как оказалось, для собеседования я использую Python, а не C ++. Я предполагал, что мне нужен C ++, C или Java, но ошибался. Спрашивать, а не предполагать - это хорошо.

Я прочитал намного больше книг, чем мне нужно. Я должен был прочитать всего 3 или 4 книги.

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

Я смотрел много часов видео на YouTube, но мог бы смотреть гораздо меньше и со временем разложить темы.

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

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

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

Мое чувство страха («Что, если они зададут мне вопрос о красно-черных деревьях?») Заставило меня изучить гораздо больше тем, чем мне нужно.

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

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

Вывод

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

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

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

Я вижу впереди светлое будущее.

Спасибо, что нашли время прочитать мою историю.

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

Обновление: 10 января 2017 г.

Меня не наняли. Читайте дальше . Спасибо всем за вашу потрясающую поддержку.

Обновление: 6 марта 2017 г.

У истории счастливый конец! Amazon наняла меня, чтобы я работал инженером по разработке программного обеспечения в Amazon Web Services!

Где меня найти

Я веду блог в Startup Next Door.

Google Interview University на Github:

jwasham / google-интервью-университет

google-interval-university - Полный ежедневный план учебы, чтобы стать инженером-программистом Google. github.com