Защо учих на пълен работен ден в продължение на 8 месеца за интервю в Google

Вярно е. Прекарах хиляди часове в четене на книги, писане на код и гледане на лекции по компютърни науки, за да се подготвя за интервюто на софтуерния инженер на Google.

Ако искате да се подготвите за интервю в Google, ето моят план за обучение:

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

google-интервю-университет - Пълен дневен план за обучение за софтуерен инженер на Google. github.com

Как попаднах тук

Започнах да програмирам в гимназията, но когато дойде време за колеж, следвах степен по икономика. Моята обосновка беше, че по времето, когато завърша, ще има твърде много програмисти, търсещи работа. Момче, сгреших.

По-късно се присъединих към армията, за да стана програмист, но вербуващият ме накара да заема военно разузнаване и прекарах следващите две години в изучаване на корейския език. След това служих 2 години в Южна Корея.

Преди да напусна армията, се опитах да се върна в програмирането и бях изненадан от трудността. Бях научил BASIC в средното училище и продължих да го програмирам през гимназията. Но рестартирах проучванията си по програмиране с 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 усъвършенства процеса на набиране и интервюта през годините. Въпросите за мозъчните закачки отдавна ги няма. В днешно време кандидатите се избират въз основа на способността за кодиране, техническите познания и Googleyness. В тази една дума се случва много.

Управлението е различно. Мениджърите не управляват микро. Те се доверяват на инженерите да вземат правилните решения. Доверието на служителите променя ролята на мениджърите в Google от това, което повечето хора си представят, когато мислят за управление. Освен това мениджърите не могат едностранно, да наемат, уволняват или повишават. Много от важните управленски решения, които биха могли да се възприемат като офис политика, се обработват от комисия за премахване на тази опасност.

Службите на Google за човешки ресурси (HR) са научили какво работи с течение на времето и те използват данни и обратна връзка със служителите, за да подобрят системите за оценка, процеса на наемане, промоции, компенсации, обезщетения и други. Прочетете Правилата за работа! от Ласло Бок (SVP, People Operations) за повече.

Да, ползите са невероятни. Отидох на обиколка в офиса на Google в Къркланд, Вашингтон, и това надмина очакванията ми. И очакванията ми вече бяха големи.

Google Interview University

Спомняте ли си бележките за треньор, които получих и ми казваха какво да уча? Списъкът с теми изглеждаше управляем, въпреки че не знаех нищо в списъка.

Превърнах темите в бележките в контур и започнах да попълвам темите с видеоклипове на YouTube от лекции от MIT и UC Berkeley. Видео на свързани списъци на едно място, видео на опашки на друго. Списъкът започна да расте.

Публикувах списъка в Github, защото акаунтът ми в Github беше доста празен. Тъй като целият код, който написах за моя бизнес и работа, беше частен, акаунтът ми в Github изглеждаше така, сякаш изобщо не съм кодирал. Трябваше да изградя портфолио. Първоначално нарекох проекта „Проект 9894“. Google стартира на 4 септември 1998 г. Оттук и името. По-късно го преименувах на „Google Interview University“.

С течение на времето добавих някои незадължителни теми, които открих по пътя.

Бях доста изумен, че съм стигнал толкова далеч в кариерата си, без дори да знам как един процесор обработва програма, как работи паметта или нещо от нея. Знаех „достатъчно“, за да постигна успех.

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

Една сутрин се събудих и установих, че е нараснал до 120 звезди. Някой известен е писал за него през нощта и това е довело до това, че той е попаднал в ежедневния тенденционен отчет на Github. Бях на трето място в Github за няколко дни.

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

Сега е на над 21 000 звезди.

Все още не мога да повярвам.

Какво ще стане, ако не си намеря работата?

Няма да е краят на света.

Вложих времето и отдадеността си в обучението си с цел да бъда нает като софтуерен инженер на Google, но дори и да не успея, пак ще бъда въоръжен с уменията и знанията, необходими за работа като софтуерен инженер във всяка компания .

Където и да стигна, влизам като начален софтуерен инженер. Не влизам с 15 години опит в софтуерното инженерство, защото просто го нямам. Що се отнася до тези неща, аз съм еквивалент на нов CS град.

Но и аз имам ентусиазма от нов град. Това е нов свят за мен. Тепърва започвам. Не се страхувам да греша. Знам, че ще го направя. Също така искам да науча всичко, което мога, и да бъда отлично допълнение към всеки отбор.

Не учи толкова, колкото аз

Да, взех 8 месеца. Но можех да съкратя процеса. Като всеки стартъп с голяма цел, вие допускате грешки и правите неща, които губят време. Има много неща, които бих искал да се върна и да направя по различен начин.

Учих теми, които не ми трябваха, някои, защото мислех, че ще ми трябват за интервюто, а други, защото исках да имам на разположение знанията, когато започнах да работя. Не исках да бъда в тежест на отбора, към който съм назначен. Оказва се, че просто съм се подготвил прекалено.

Прекарах 3 седмици, четейки книга от 1000 страници на C ++. Не си спомням 1000 страници на стойност, но сега знам доста за C ++. Оказа се, че за интервюто използвам Python, а не C ++. Бях предположил, че имам нужда от C ++, C или Java, но сгреших. Добре е да питате, а не да предполагате.

Прочетох много повече книги, отколкото трябваше. Има само 3 или 4 книги, които трябваше да прочета.

Имам кодов каталог с десетки алгоритми, които преглеждам, повечето от които не бих очаквал в интервю. Не е нужно да правите това.

Гледах много часове видеоклипове в YouTube, но можех да гледам много по-малко и да разпространявам теми с течение на времето.

Трябваше да спра да чета книги и да гледам видеоклипове по-рано и да започна с проблеми с кодирането по-рано. Щях да мога да отделя повече време за прилагане на научените теми.

Повторението на разстояние е ключът към запаметяването. След като научите нещо, прегледайте го отново по-късно и отново дори по-късно. При всяко повторение засилвате обучението си. Прекарването на часове и часове наведнъж на приоритетни опашки няма да ви направи експерт. Ставате експерт, като преразглеждате и преглеждате с течение на времето. Ако го направите, ще стигнете до точката, в която няма как да забравите подробности.

За да помогна при прегледа, направих 1792 флаш карти (цифрови флаш карти). Това е твърде много. Преглеждам ги на телефона или таблета си, когато получа свободен момент (например по време на коледно пазаруване). Флаш картите и интервалите на повторение вървят ръка за ръка. След като получа отговор на флаш карта, не го маркирам като известен. Задържам го в тестето и след като го видях и отговорих много пъти много пъти, тогава го отбелязвам като известен.

Чувството ми за страх („Ами ако ми зададат въпрос за червено-черните дървета?“) Ме накара да изучавам много повече теми, отколкото трябваше.

Но не исках просто да се подготвя за интервюто, исках да се подготвя за кариера в Google, решавайки мащабни проблеми. Това означава да знаете алгоритми, които ще спестят изчислителни ресурси от време, пространство и I / O.

Може никога да не ми се наложи да знам алгоритъм за максимален поток (Ford-Fulkerson), но е хубаво да знам, че разполагам с този инструмент, ако възникне ситуацията (без да запомня изпълнението), и мога да разпозная приложението му към проблемно пространство.

Заключение

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

Скоро ще пусна молбата си. Дотук беше дълго пътуване - почти цяла година. Започна още през януари, но не успях да се ангажирам с редовно обучение до април.

Приблизително съм подготвен, колкото мога. Не мога да продължа да уча и да отлагам заявлението завинаги. В един момент трябва да направя скок.

Виждам светло бъдеще напред.

Благодаря, че отделихте време да прочетете моята история.

Статията е достъпна и на арабски, виетнамски и корейски.

Актуализация: 10 януари 2017 г.

Не се наех. Прочетете . Благодаря на всички за вашата невероятна, непреодолима подкрепа.

Актуализация: 6 март 2017 г.

Историята има щастлив край! Нает съм от Amazon, за да работя като инженер по разработка на софтуер в Amazon Web Services!

Къде да ме намерите

Блогирам в Startup Next Door.

Google Interview University на Github:

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

google-интервю-университет - Пълен дневен план за обучение за софтуерен инженер на Google. github.com