Dlaczego przez 8 miesięcy uczyłem się w pełnym wymiarze godzin, aby dostać się na rozmowę kwalifikacyjną w Google

by Googley as Heck

Moja wysłużona tablica, ozdobiona jednoźródłowym algorytmem najkrótszych ścieżek Dijkstry.

To prawda. Spędziłem tysiące godzin, czytając książki, pisząc kod i oglądając wykłady z informatyki, a wszystko po to, by przygotować się do rozmowy kwalifikacyjnej na inżyniera oprogramowania w Google.

Jeśli chcesz się przygotować do rozmowy kwalifikacyjnej w Google, oto mój plan nauki:

jwasham/google-interview-university
google-interview-university – Kompletny dzienny plan nauki, aby zostać inżynierem oprogramowania Google.github.com

Jak się tu dostałem

Zacząłem programować w gimnazjum, ale kiedy przyszedł czas na studia, wybrałem ekonomię. Moje rozumowanie było takie, że do czasu ukończenia studiów będzie zbyt wielu programistów szukających pracy. Chłopcze, myliłem się.

Później wstąpiłem do armii, aby zostać programistą, ale rekruter namówił mnie na stanowisko w wywiadzie wojskowym i spędziłem następne dwa lata studiując język koreański. Potem przez 2 lata służyłem w Korei Południowej.

Przed odejściem z armii próbowałem wrócić do programowania i byłem zaskoczony trudnością. Nauczyłem się BASIC-a w gimnazjum i programowałem go przez całą szkołę średnią. Ale zacząłem ponownie naukę programowania od C++ i skok był zbyt duży. Po prostu nie mogłem tego pojąć.

Przyjemność sprawiało mi jednak tworzenie stron internetowych, ale używałem oprogramowania z interfejsem podobnym do Worda, którego używałem do publikowania moich stron. Nie wiedziałem jak tworzyć strony internetowe od podstaw.

Po wojsku, zdecydowałem się zostać w Korei na rok i uczyć angielskiego. Wykorzystywałem moje noce i weekendy do nauki programowania stron internetowych, używając Perla, HTML, CSS (który był wtedy nowością), JavaScript i SQL.

Po roku intensywnej nauki wylądowałem w Seattle i od tamtej pory jestem tutaj.

Pracuję z balkonu w pięknym Bellevue, WA.

Jestem programistą stron internetowych od 15 lat. Założyłem 3 firmy, z których 2 nadal działają i generują przychody. Pracowałem w dużych i małych firmach, pomagałem startupom startować i rozwijać się, a także rekrutowałem i zarządzałem zespołami. Byłem menedżerem produktu, dyrektorem generalnym, projektantem i marketingowcem.

Miałem udaną karierę i wiele się nauczyłem po drodze. Ale jeszcze nie skończyłem.

Seeking a Career Change

Pamiętasz tę część, w której nie uzyskałem stopnia naukowego z informatyki? To zrobiło różnicę.

Kilka lat temu myślałem, że mogę zostać zatrudniony wszędzie. Myślałem, że jestem gorącym towarem: nieuchwytnym full-stack web developerem. Ale podczas poszukiwania pracy w 2013 roku zdałem sobie sprawę, że brakowało mi umiejętności. Spędziłem tak dużo czasu na pogoni za dolarami, prowadząc w wolnym czasie startupy, że pozwoliłem, aby moje umiejętności zanikły. Nie nadążałem za technologią.

Przez lata nauczyłem się tylko tyle, żeby sobie poradzić. Miałem szeroki zestaw umiejętności, ale nie byłem ekspertem w niczym.

Nie zrozum mnie źle, wciąż mogłem zostać zatrudniony, ale nie w technologiach lub obszarach, w których chciałem pracować. Mogłem zostać zatrudniony w obszarach, w których stos technologiczny był nieco przestarzały, tak jak ja. Tam są duże pieniądze, ale nie widziałem ekscytujących perspektyw.

Realizacja osiągnęła swój szczyt w zeszłym roku na targach kariery. Byłem zainteresowany być może pracą w jednej z lokalnych firm, które były laboratoriami startupów prowadzonymi przez firmy venture capital. Jednak fakt, że brakowało mi stopnia naukowego z informatyki, a także umiejętności i wiedzy, które towarzyszą takiemu stopniowi, oznaczał, że nie miałem szans.

Pracowałem wtedy w pełnym wymiarze godzin nad moimi firmami i nadal jestem dzisiaj.

Na początku 2016 roku zdecydowałem, że nadszedł czas, aby dokonać zmiany kariery z programisty stron internetowych na inżyniera oprogramowania. Musiałbym ciężko studiować i ćwiczyć, aby skompresować stopień naukowy z informatyki w kilka miesięcy, ale kiedy już to zrobiłem, mogłem rozpocząć nową karierę.

Możesz nie widzieć rozwoju stron internetowych i inżynierii oprogramowania jako różnych pozycji. Oba obejmują programowanie i rzemiosło, ale inżynieria oprogramowania dodaje do tego wiedzę na temat struktur danych i algorytmów, języków kompilacji, rozważań na temat pamięci i zrozumienia wpływu kodowania i decyzji architektonicznych na maszyny, w których rezydują.

Duże firmy, które zatrudniają na stanowiskach inżynierii oprogramowania oczekują od kandydatów posiadania tej wiedzy.

Dotarłem do znajomego, który pracuje w Google i zadałem mu pytania na temat jego doświadczenia w firmie. Czytałem How Google Works i byłem dość dobrze zaznajomiony z Google już.

Przez inny kontakt, otrzymałem kopię notatek coachingowych Google, które są dostarczane do kandydatów na rozmowy kwalifikacyjne. Stało się to podstawą mojego planu nauki.

Google jest wspaniałym miejscem do pracy, ale zanim jeszcze o tym wiedziałem, Google było moim celem.

Dlaczego Google?

Google stawia bardzo wysoką poprzeczkę przy zatrudnianiu. Chcą zatrudniać tylko najlepszych. Jeśli więc ustawię swoje cele wysoko (zatrudnienie się w Google), będę nadal całkiem do wzięcia gdzie indziej, nawet jeśli nie zostanę wybrany.

Im więcej dowiaduję się o Google, tym bardziej chcę tam pracować.

W skrócie, Google to firma, która zatrudnia inteligentnych, kreatywnych ludzi i dobrze ich traktuje. Google nagradza zasługi, zachęca do wielkich pomysłów i daje pracownikom swobodę podejmowania dobrych decyzji dla użytkownika.

Proces zatrudniania jest skalibrowany tak, aby przyciągać inteligentnych, pełnych pasji ludzi. Firma Google przez lata doskonaliła proces rekrutacji i rozmowy kwalifikacyjnej. Pytania typu brain teaser już dawno odeszły do lamusa. Obecnie kandydaci są wybierani na podstawie umiejętności kodowania, wiedzy technicznej i Googleyness. W tym jednym słowie wiele się dzieje.

Podczas podróży w 2015 roku odwiedziłem siedzibę główną w Mountain View. To zasiało ziarno.

Zarządzanie jest inne. Menedżerowie nie zarządzają w skali mikro. Ufają inżynierom, że podejmą właściwe decyzje. Ufanie pracownikom zmienia rolę menedżerów w Google w stosunku do tego, co większość ludzi wyobraża sobie, gdy myśli o zarządzaniu. Ponadto menedżerowie nie mogą jednostronnie zatrudniać, zwalniać ani awansować. Wiele ważnych decyzji dotyczących zarządzania, które mogłyby być postrzegane jako polityka biurowa, jest podejmowanych przez komitet, aby wyeliminować to niebezpieczeństwo.

Operacje personalne (HR) w Google dowiedziały się, co działa z czasem, i wykorzystują dane oraz opinie pracowników do ulepszania systemów oceny, procesu zatrudniania, awansów, odszkodowań, świadczeń i innych. Przeczytaj „Zasady pracy!” Laszlo Bocka (SVP, People Operations), aby dowiedzieć się więcej.

Tak, korzyści są niesamowite. Byłam na wycieczce w biurze Google w Kirkland, WA, i przeszło to moje oczekiwania. A moje oczekiwania były już wysokie.

Google Interview University

Pamiętasz notatki coachingowe, które otrzymałem, mówiące mi, co mam studiować? Lista tematów wydawała się do opanowania, nawet jeśli nie znałem niczego z tej listy.

Zamieniłem tematy z notatek w konspekt i zacząłem wypełniać tematy filmami z YouTube z wykładów z MIT i UC Berkeley. Film o listach połączonych w jednym miejscu, film o kolejkach w innym. Lista zaczęła rosnąć.

Opublikowałem listę na Githubie, ponieważ moje konto Github było całkiem puste. Ponieważ cały kod, który napisałem dla moich firm i pracy był prywatny, moje konto Github sprawiało, że wyglądało to tak, jakbym w ogóle nie kodował. Potrzebowałem zbudować portfolio. Początkowo nazwałem ten projekt „Projekt 9894”. Google wystartowało 4 września 1998 roku. Stąd nazwa. Później przemianowałem go na „Google Interview University”.

Z czasem dodałem kilka opcjonalnych tematów, które odkryłem po drodze.

Moja letnia lista lektur. Trochę za dużo.

Byłem dość zdumiony, że zaszedłem tak daleko w mojej karierze, nie wiedząc nawet, jak procesor przetwarza program, jak działa pamięć, ani nic z tych rzeczy. Wiedziałem „tylko tyle”, żeby odnieść sukces.

Mój mały projekt na Githubie zaczął zdobywać kilka gwiazdek, a ja opublikowałem wpis na blogu z okazji 20 gwiazdek.

Jednego ranka obudziłem się i odkryłem, że urósł do 120 gwiazdek. Ktoś sławny tweetował o tym w nocy, a to doprowadziło do tego, że znalazło się to w dziennym raporcie trendów na Githubie. Byłem #1 trendem na Githubie przez kilka dni.

Wiele życzliwych osób dotarło do mnie, aby mi podziękować i zachęcić. Okazuje się, że są tysiące ludzi, którzy chcą nie tylko pracować w Google, ale chcą pracować jako inżynierowie oprogramowania, a ta lista była właśnie listą rzeczy do zrobienia, której potrzebowali.

Teraz ma ponad 21 000 gwiazdek.

Wciąż nie mogę w to uwierzyć.

Co jeśli nie dostanę pracy?

To nie będzie koniec świata.

Włożyłem czas i poświęcenie w moje studia w celu zatrudnienia się jako inżynier oprogramowania Google, ale nawet jeśli mi się nie uda, nadal będę uzbrojony w umiejętności i wiedzę wymaganą do pracy jako inżynier oprogramowania w każdej firmie.

Gdziekolwiek skończę, wchodzę jako inżynier oprogramowania na poziomie podstawowym. Nie wchodzę z 15-letnim doświadczeniem w inżynierii oprogramowania, ponieważ po prostu go nie mam. Jeśli chodzi o te rzeczy, jestem odpowiednikiem świeżego absolwenta CS.

Ale mam też entuzjazm nowego absolwenta. To jest dla mnie nowy świat. Dopiero zaczynam. Nie boję się popełniać błędów. Wiem, że tak będzie. Chcę też nauczyć się wszystkiego, co mogę i być doskonałym dodatkiem do każdego zespołu.

Don’t Study As Much As I Did

Tak, zajęło mi to 8 miesięcy. Ale mogłem skrócić ten proces. Jak każdy startup z wielkim celem, popełniasz błędy i robisz rzeczy, które marnują czas. Jest wiele rzeczy, które chciałbym cofnąć i zrobić inaczej.

Studiowałem tematy, których nie potrzebowałem, niektóre, ponieważ myślałem, że będę ich potrzebował do wywiadu, a niektóre, ponieważ chciałem mieć wiedzę pod ręką, gdy zacząłem pracować. Nie chciałem być ciężarem dla zespołu, do którego zostałem przydzielony. Okazało się, że po prostu przesadziłem z przygotowaniami.

Spędziłem 3 tygodnie na czytaniu 1000-stronicowej książki o C++. Nie zapamiętałem 1000 stron, ale wiem już co nieco o C++. Jak się okazuje, do rozmowy kwalifikacyjnej będę używał Pythona, a nie C++. Założyłem, że potrzebuję C++, C lub Javy, ale myliłem się. Dobrze jest pytać, a nie zakładać.

Przeczytałem o wiele więcej książek niż potrzebowałem. Są tylko 3 lub 4 książki, które powinienem był przeczytać.

Mam katalog kodu z dziesiątkami algorytmów, które przeglądam, z których większość nie spodziewałbym się w wywiadzie. Nie musisz tego robić.

Stos algorytmów, wydrukowany do przeglądu.

Obejrzałem wiele godzin filmów na YouTube, ale mogłem obejrzeć znacznie mniej i rozłożyć tematy w czasie.

Powinienem był przestać czytać książki i oglądać filmy wcześniej i zacząć na problemach z kodowaniem wcześniej. Byłbym w stanie poświęcić więcej czasu na zastosowanie tematów, których się nauczyłem.

Przestrzenne powtarzanie jest kluczem do zapamiętywania. Kiedy już się czegoś nauczysz, przejrzyj to jeszcze raz później i jeszcze później. Przy każdym powtórzeniu, wzmacniasz swoją naukę. Spędzanie wielu godzin nad kolejkami priorytetowymi nie uczyni z ciebie eksperta. Staniesz się ekspertem poprzez powtarzanie i przeglądanie w czasie. Jeśli to zrobisz, dojdziesz do punktu, w którym nie będziesz mógł zapomnieć szczegółów.

Aby pomóc w przeglądzie, zrobiłem 1 792 flashcards (cyfrowe flashcards). To jest o wiele za dużo. Przeglądam je na moim telefonie lub tablecie, kiedy tylko mam wolną chwilę (np. podczas świątecznych zakupów). Flashcards i rozłożone w czasie powtarzanie idą w parze. Kiedy już uda mi się poprawnie odpowiedzieć na flashcard, nie zaznaczam jej jako znanej. Zachowuję ją w talii, a gdy zobaczę ją i odpowiem na nią poprawnie wiele razy, wtedy zaznaczam ją jako znaną.

Moje poczucie strachu („A co, jeśli zadadzą mi pytanie o czerwono-czarne drzewa?”) doprowadziło mnie do studiowania znacznie większej liczby tematów, niż potrzebowałem.

Ale nie chciałem po prostu przygotować się do rozmowy kwalifikacyjnej, chciałem przygotować się do kariery w Google, rozwiązując problemy na dużą skalę. Oznacza to znajomość algorytmów, które pozwolą zaoszczędzić zasoby obliczeniowe czasu, przestrzeni i I/O.

Może nigdy nie będę musiał znać algorytmu maksymalnego przepływu (Ford-Fulkerson), ale miło jest wiedzieć, że mam to narzędzie dostępne, jeśli pojawi się sytuacja (bez zapamiętywania implementacji), i mogę rozpoznać jego zastosowanie w przestrzeni problemowej.

Wniosek

Wcześniej, chciałem pominąć całą tę naukę i po prostu pospieszyć się i zostać zatrudnionym, żebym mógł zamiast tego spędzić czas na nauce języków i narzędzi dla zespołu, do którego dołączam. Ale po drodze zdałem sobie sprawę, jak ważna jest ta wiedza, i nawet jeśli większość z niej może nie mieć zastosowania na co dzień, cieszę się, że włożyłem w to wysiłek. Mam nowe uznanie dla historii informatyki, wielkich w tej dziedzinie, struktur danych i algorytmów (i tego jak się uzupełniają), oraz tego jak systemy komputerowe działają na niskim poziomie.

Wkrótce złożę swoją aplikację. To była długa podróż do tego punktu – prawie cały rok. Zaczęło się w styczniu, ale nie byłem w stanie poświęcić się studiom w pełnym wymiarze godzin aż do kwietnia.

Jestem tak przygotowany, jak tylko mogę być. Nie mogę dalej studiować i odkładać aplikacji na zawsze. W pewnym momencie muszę wykonać skok.

Widzę przed sobą świetlaną przyszłość.

Dziękuję za poświęcenie czasu na przeczytanie mojej historii.

Artykuł dostępny również w języku arabskim, wietnamskim i koreańskim.

Update: January 10, 2017

Nie zostałem zatrudniony. Czytaj dalej. Dzięki wszystkim za niesamowite, przytłaczające wsparcie.

Update: March 6, 2017

Historia ma szczęśliwe zakończenie! Zostałem zatrudniony przez Amazon, aby pracować jako Software Development Engineer w Amazon Web Services!

Gdzie mnie znaleźć

Bloguję na Startup Next Door.

Google Interview University na Githubie:

jwasham/google-interview-university
google-interview-university – Kompletny dzienny plan nauki, aby zostać inżynierem oprogramowania Google.github.com

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.