Як я влаштувався на роботу інженера-програміста в Twitter

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

Як я розпочав свою подорож

Клац-клак-клак-клак .

Звук моїх пальців, що люто розбивали клавіші на клавіатурі, лунав ніч.

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

Було 2 години ночі.

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

Я не був.

Я готувався до майбутнього співбесіди з технічного кодування, використовуючи веб-сайт під назвою Leetcode. Ф'юрі взяв мене на себе, бо я не зміг змінити пов'язаний список, який на платформі оцінили як "Легкий" (спробуйте тут).

Як я туди потрапив

Тиждень раніше прийшов лист від рекрутера в Twitter із запитанням, чи не хочу я запланувати початковий екран телефону з одним із їхніх інженерів.

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

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

Один із пунктів у контрольному списку вказав мені leetcode.com (веб-сайт із завданням кодування), і ось так я закінчив кодування на цьому веб-сайті годинами, щоб підготуватися до мого технічного співбесіди з кодування.

Готуватися до технічних співбесід було непросто. Комусь, хто деякий час не навчався в коледжі, потрібно нетривіальна кількість часу, щоб визначити навички та основи, необхідні для успіху на співбесіді з технічним кодуванням.

Рекрутер чітко наголосив, що наше технічне інтерв'ю буде зосереджено конкретно на технічних засадах, таких як карти, двійкові дерева, пов'язані списки, двійкові дерева пошуку, графіки тощо .

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

Ось чому я розпочав персональний тренерський курс під назвою Acing The Technical Interview.

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

Багато інших інженерів знайшли успіх завдяки підходам, викладеним у курсі.

Моє походження

Я мав 3-річний досвід роботи інженером з повною стековою роботою в стартапі, переважно зі створення мікросервісів та розробки API на стеку AWS.

Стек був сильно зосереджений на PHP, NodeJS, AWS SQS як черзі повідомлень, Postgres для нашої бази даних та AWS S3 для тривалого зберігання.

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

Я мав офіційну освіту з інформатики - за 4 роки закінчив невеликий приватний єзуїтський коледж у штаті Вашингтон, отримавши ступінь бакалавра з інформатики.

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

Я подав заявку в понад 30 різних компаній, взяв інтерв’ю у 15, мене відхилили 6, отримали пропозиції від 6, відхилили 5 та прийняли 1. Якщо ви рахуєте, математика не ідеально поєднується, тому що деякі компанії ходили на місце .

Детальніше ви можете прочитати тут, якщо вас цікавить, як я отримував пропозиції від компаній FAANG вищого рівня без ступеня Ліги Плюща.

Як я готувався до співбесід

Я провів більшу частину свого часу на Leetcode та книзі «Елементи програмування інтерв’ю» (настійно рекомендується).

Я також витратив близько 10% свого часу, переглядаючи YouTube для інтерв'ю з проектуванням систем, таких як Джек Габбард і Гауран Сен.

Ще одним ресурсом / веб-сайтом, який мені сподобався, був DailyCodingProblem.com, який щодня надсилає питання кодування на вашу електронну пошту. Це дозволяє постійно отримувати нові запитання.

Загальний час підготовки

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

Раніше я продовжував кодувати стрибки: 3 години жорсткого кодування, а потім тиждень відпочинку. Я виявив, що це малоефективно, і я заплатив велику ціну перемикання контексту кілька разів.

Загалом я витрачав близько 3 годин на день у будні (через роботу), а на вихідних - 4-6 годин, загалом близько ~ 20 годин на тиждень протягом місяця .

Як я претендував на роботу

Я подав заявку на Twitter через сторінку їхньої кар’єри. З огляду на минуле, можливо, було б ефективніше знайти реферала чи рекрутера на LinkedIn, оскільки це, швидше за все, пришвидшило б процес подання заявки.

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

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

Кілька тижнів потому рекрутер нарешті звернувся до мене і захотів запланувати початковий екран телефону.

Графік мого процесу подання заявки

  • 10 лютого 2017 р. - Рекрутер зв’язався із запланованим TPS
  • 8 березня 2017 р. - початковий TPS
  • 13 квітня 2017 р. - Другий TPS
  • 18 квітня 2017 р. - на місці
  • 2 травня 2017 р. - Пропозиція продовжена
  • 23 травня 2017 р. - Twitter підтверджено
  • 24 липня 2017 р. - офіційна дата початку

Перші 2 технічні екрани телефону включали кодування спільного Інтернет-документа, такого як Google Docs. Ми поговорили про різні підходи та компроміси та витратили 30+ хвилин на впровадження.

Після перших двох турів мене перенесли на наступний раунд інтерв’ю на місцях у Twitter Сіетлі.

Потім рекрутер надіслав мені посилання на Інтернет-сховище кодування та попросив мене переглянути код. Мені потрібно було зробити пропозиції щодо вдосконалення кодування та обговорити це з інтерв’юерами на місці.

Я зайняв близько доби, щоб переглянути код, роздрукував його на папері (близько 5 сторінок довжиною 10 пунктів шрифтом) і зазначив на папері області вдосконалення. Це виявилося корисною вправою, як я дізнаюся пізніше.

Інтерв’ю на місці

На місці було проведено 3 раунди, а обід між ними був затиснутий (передбачається каламбур):

  • Ширина (75 хв.)
  • Глибина (75 хв)
  • Обід
  • Найвища оцінка (90 хв., Необов’язково )

Одне, на що слід звернути увагу, - це те, що у турінгових турах Twitter було по 2 інтерв’юери в кожному раунді.

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

Ширина (дизайн системи)

Інтерв’ю «Ширина» (системний дизайн) зосереджується на широкому спектрі тем, щоб вони могли зрозуміти, наскільки багато ви знаєте про проектування системи з нуля . Мета - розтягнути кандидата до меж і подивитися, як далеко вони можуть зайти.

Вони задавали такі питання:

Чи можете ви створити надійну систему з розумним простоєм від набору інтерфейсу до спілкування через HTTP API до створення серверної служби?

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

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

Глибина (відновлення)

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

Який проект ви побудували нещодавно? Чому ти його побудував? Які альтернативи розглядались? Зрештою це вдалося?

Починаючи з початкового фону, я відповідав за створення багатьох речей з нуля, наприклад, налаштування кластерів AWS та налаштування SQS для обробки завдань.

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

Найвища оцінка / Культура

Культурний тур - це 90-хвилинне інтерв’ю з менеджером з найму та вищим керівництвом.

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

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

Ретроспектива процесу співбесіди

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

Ось кілька інших порад:

Поглиблено знайте свої алгоритми

Зрозумійте, як працюють компроміси між часовою та космічною складністю .

Знати одну мову дуже добре

Знати та розуміти одну мову дуже добре допомогло. Для цього я рекомендую щось на зразок Python, Java або C ++, оскільки це дуже часто використовувані мови.

Мені особисто подобається користуватися Python, оскільки його дуже легко читати, дуже легко пояснити, і в нього вбудовано купу структур даних.

Зробіть огляд резюме

Переконайтеся, що для того, щоб підготувати проекти, перелічені в моєму резюме. Це означало

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

Будьте дисциплінованими у своїй підготовці

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

Я почав не з тієї ноги і хотів, щоб я знав це раніше, щоб не витрачати час на неправильні речі.

Подумайте про системи, з якими ви взаємодієте щодня

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

Ресурси, які я рекомендую

  • Проведення технічного інтерв’ю: Моє персональне навчання, яке допоможе вам пройти технічне співбесіду у провідних технологічних компаніях.
  • Leetcode.com: Попрацюйте тут із проблемами кодування.
  • Перегляньте цю сторінку ресурсів, щоб дізнатись більше про обладнання, інструменти та книги, які я настійно рекомендую.

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

Якщо вам це сподобалось, будь ласка, подумайте про те, щоб поділитися цим з кимось, хто виграє від цього, і підпишіться на мене на Youtube, LinkedInk та Twitter.

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