Чому я навчався очно протягом 8 місяців для інтерв’ю в Google

Це правда. Я витратив тисячі годин на читання книг, написання коду та перегляд лекцій з інформатики - все, щоб підготуватися до співбесіди інженера-програміста Google.

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

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

google-interview-university - повний щоденний план навчання на інженера-програміста 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

Пам'ятаєте тренерські нотатки, які я отримував, підказуючи мені, що вивчати? Список тем здавався керованим, хоча я нічого не знав у списку.

Я перетворив теми в замітках на окремі схеми і почав заповнювати теми відео на YouTube лекцій з MIT та UC Berkeley. Відео в пов'язаних списках в одному місці, відео про черги в іншому. Список почав зростати.

Я опублікував список на Github, оскільки мій обліковий запис Github був досить порожнім. Оскільки весь код, який я писав для свого бізнесу та роботи, був приватним, у моєму обліковому записі Github здавалося, що я взагалі не кодував. Мені потрібно було скласти портфоліо. Спочатку я назвав проект “Проект 9894”. Google був запущений 4 вересня 1998 року. Звідси і назва. Пізніше я перейменував його на “Університет інтерв’ю Google”.

З часом я додав кілька необов’язкових тем, які виявив по дорозі.

Я був дуже вражений тим, що пройшов так далеко за свою кар’єру, навіть не знаючи, як процесор обробляє програму, як працює пам’ять чи що-небудь з цього. Я знав “просто так”, щоб досягти успіху.

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

Одного ранку я прокинувся, виявивши, що він виріс до 120 зірок. Хтось відомий писав про це протягом ночі, і це призвело до того, що він потрапив у щоденний тренд-звіт Github. Я був №1 у тренді на Github протягом декількох днів.

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

Зараз воно перевищує 21 000 зірок.

Я досі не можу повірити.

Що робити, якщо я не отримаю роботу?

Це буде не кінець світу.

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

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

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

Не вивчайте стільки, скільки я вчився

Так, я взяв 8 місяців. Але я міг би скоротити процес. Як і будь-який стартап з великою метою, ви помиляєтесь і робите те, що марно витрачає час. Багато речей, яким я бажаю повернутися назад і зробити інакше.

Я вивчав теми, які мені не потрібні, деякі тому, що я думав, що вони мені знадобляться для співбесіди, а деякі тому, що я хотів мати знання під рукою, коли я починав працювати. Я не хотів бути тягарем для команди, до якої я призначений. Виявляється, я просто надмірно підготовлений.

Я витратив 3 тижні, читаючи 1000-сторінкову книгу на C ++. Я не пам’ятаю вартості 1000 сторінок, але зараз я добре знаю про С ++. Як виявляється, для інтерв'ю я використовую Python, а не C ++. Я припускав, що мені потрібен C ++, C або Java, але я помилявся. Добре просити, а не припускати.

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

У мене є каталог кодів із десятків алгоритмів, які я переглядаю, більшість з яких я не очікував би в інтерв’ю. Не потрібно цього робити.

Я дивився багато годин відео на YouTube, але міг дивитись набагато менше і розповсюджував теми з часом.

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

Розподілене повторення - запорука запам’ятовування. Як тільки ви дізнаєтеся щось, перегляньте це ще раз пізніше, і знову навіть пізніше. При кожному повторенні ви посилюєте своє навчання. Витрачаючи години та години одночасно на пріоритетні черги, ви не зробите експертом. Ви стаєте експертом, переглядаючи та перевіряючи з часом. Якщо ви зробите це, ви дійдете до того, що не зможете забути деталі.

Щоб допомогти переглянути, я зробив 1792 картки (цифрові картки). Це занадто багато. Я переглядаю їх на своєму телефоні чи планшеті, коли отримую вільну хвилину (наприклад, під час різдвяних покупок). Флеш-картки та інтервал повторення йдуть рука об руку. Отримавши відповідь на флешкарті правильно, я не позначаю її як відому. Я тримаю його в колоді, і коли я вже багато разів бачив і відповідав на нього правильно, тоді я позначаю це як відоме.

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

Але я не хотів просто готуватися до співбесіди, я хотів підготуватися до кар’єри в Google, вирішуючи масштабні проблеми. Це означає знання алгоритмів, які дозволять заощадити обчислювальні ресурси часу, простору та вводу-виводу.

Можливо, мені ніколи не доведеться знати алгоритм максимального потоку (Форд-Фулькерсон), але приємно знати, що я маю цей інструмент, якщо виникає ситуація (без запам'ятовування реалізації), і можу розпізнати його застосування до проблемного простору.

Висновок

На початку я хотів би пропустити все це навчання і просто поспішати і найматися, щоб я міг витрачати свій час на вивчення мов та інструментів для команди, до якої я приєднуюсь. Але по дорозі я зрозумів, наскільки важливі ці знання, і хоча більшість із них можуть бути не застосовні щодня, я радий, що доклав зусиль. Я по-новому оцінив історію обчислювальної техніки, великих фахівців у цій галузі, структури даних та алгоритми (і те, як вони доповнюють одна одну), і те, як комп’ютерні системи працюють на низькому рівні.

Незабаром я подаю свою заявку. До цієї точки пройшов довгий шлях - майже цілий рік. Це почалося ще в січні, але я не зміг взяти участь у денній формі навчання до квітня.

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

Попереду я бачу світле майбутнє.

Дякую, що знайшли час прочитати мою історію.

Стаття також доступна арабською, в’єтнамською та корейською мовами.

Оновлення: 10 січня 2017 р

Мене не взяли на роботу. Читайте далі . Дякуємо усім за вашу дивовижну, переважну підтримку.

Оновлення: 6 березня 2017 р

Історія має щасливий кінець! Мене найняли в Amazon для роботи інженером-розробником програмного забезпечення в Amazon Web Services!

Де мене знайти

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

Університет інтерв’ю Google на Github:

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

google-interview-university - повний щоденний план навчання на інженера-програміста Google. github.com