4 Steps

@capitalcampaignmagic.com

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

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

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

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

Отже,

***

Я мав міцний намір вступити до ВУЗу. Я обрав UCLA. Та нажаль мої оцінки у середній школі були надзвичайно низькі, то ж я не зміг поступити в університет. Натомість я почав відвідувати комп’ютерні курси при університеті Пердью Камулета. Моя мета була, в процесі навчання, перевестись на краще місце для навчання. Близько 2 семетри навчання і я отримав пропозицію, від якої не зміг відмовитись.

Крок 1. Імітуй допоки не зробиш це по справжньому.

Поки я ходив на курси, я працював на невелику контору у місті Гріфіт, штат Індіана. Там я створював вебсайти для локальних бізнесів за 12 доларів на годину. Ця робота не була саме тим, чого я прагнув, але могло б бути і гірше.

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

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

Два місяці розробки і я випустив демо онлайн. Молодий стартап в Каліфорнії, під назвою CodeFire, зауважив її оскільки вони розробляли подібну гру. Спейс-шутер, подібний до SubSpace, але в 3D. Я отримав від них листа, де вони просили мене припинити власну розробку. На що я їм відповів, “Звичайно я припиню, але лише якщо ви наймете мене працювати над вашою грою.” Таким чином я отримав пропозицію. Я зібрав речі і перейшов до них працювати.

Примітка: Моя початкова компанія отримала права на оригінальну гру. Я попередив їх за 3 тижні до звільнення і ми розійшлися по хорошому.

Крок 2. Допомагай Майстру.

Це мабуть одна з найважливіших порад. Знайдіть когось, хто є майстром у вашому ремеслі, станьте його учнем і ніколи не припиняйте навчатись. Коли я працював у Double Helix моїм майстром був Натан Хант. Один з найрозумніших чуваків, яких я коли-небудь зустрічав. Він був надзвичайно терплячим до усіх мої запитань, навіть до найбільш елементарних з них. Я заходив до нього в офіс тисячі разів, щоб поставити чергове запитання. Наприклад: “як я можу легко інтерполювати з однією матриці обертання в іншу?” чи “як я можу визначити перетин капсули та циліндра в русі?”.

Кілька років по тому він попав у Гугл один місяць після мене.

Кожен з моїх менторів змінив щось у моєму підході до проблем чи поглядів на життя.

Крок 3. Заповнюй прогалини.

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

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

Рекомендую опановувати наступне:

  1. Оволодійте досконально однією із мов C, C++, Objectve-C, Java, PHP, Python або Ruby. Також освойте добре хоча б ще одну з інших мов програмування та познайомтеся із Scala, Haskell чи Lisp.
  2. Вивчіть ваші структури даних. Імплементуйте їх усіх власноруч. Зрозумійте їхню нотацію великого О (математика).
  3. Вирішуйте проблеми програмування. Почитайте оце і спробуйте вирішити багато оцих.
  4. Створіть власне портфоліо із (не)закінчених проектів. Наприклад, програмістські фреймворки, мобільні чи веб аплікації, невеликі ігри і т.д.

Крок 4. Знайдіть у собі впевненість.

Шість років потому, як я залишив Індіану, я випустив близько шести ігор на різноманітних платформах. Мені ставало нудно і я шукав новий виклик для себе. Я подав документи в Гугл і думав, що якщо мене візьмуть, тоді я буду “справжнім інженером”. Я завжди парився цим питанням “справжнього інженера” оскільки я немав цього бажаного листка паперу про мій рівень з універу. Тоді я не отримав відповіді він Гугла і це мене не здивувало.

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

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

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

Деякі із задачок, які мені давали під час інтерв’ю:

  1. Маючи множину 2-вимірних точок порахувати горизонт. Це було легко. Я скористався популярним підходом із так званою структурою даних максимальним деревом. Існують кілька розв’язків, тут є хороший.
  2. Створити Microsoft Paint. Це мабуть була одна з найцікавіших задачок. Я почав з малювання інтерфейсів та діаграми класів. Я згадав про Paint Bucket елемент і інтерв’юер попросив імплементувати його. На щастя я знав як створити її із закритими очима дякуючи TopCoder сайту.
  3. Опиши свої програмістські якості та пріоритети. Це була цікава відкрита дискусія. Я розказував про типи тестів і коли вони є важливими (юніт, інтеграційні, акцептанс). Я розказував про консистентний стиль коду для подальшої його зручної підтримки. І так далі. Ми обговорювали найрізноманітніші речі, частину з яких ви можете знайти у таких книжках як Code Complete чи Effective Java.

Мені надзвичайно подобалося кожне коло інтерв’ю і вирішення проблем, які мені постійно підкидали. Якби я не провів тих 2 тижні у підготовці, думаю деякі речі виглядали б зовсім по іншому.

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

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

Непереможені воїни спочатку виграють і тоді йдуть на війну, в той час як переможені йдуть на війну, а потім шукають шляху до перемоги.

***

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

Отже, резюмуючи:

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

і успіх прийде до вас!

А що ви ще порадите додати до даного списку?