Aceasta este povestea modului în care am obținut un loc de muncă la Twitter ca inginer software cu normă întreagă. Voi împărtăși procesul prin care am trecut, cum m-am pregătit și de ce am decis în cele din urmă să mă alătur companiei.

Cum mi-am început călătoria

Click-clack-click-clack.

Sunetul degetelor mele zdrobind cu furie tastele de pe tastatură a reverberat peste noapte.

Am ridicat ochii de pe ecranul laptopului și am aruncat o privire spre un ceas de pe peretele unui apartament la subsol pe care îl închiriam cu 600 de dolari pe lună.

Era 2 dimineața.

Acum s-ar putea să credeți că scriu o piesă de software sau că am spart ceva important. De ce altfel aș fi trezit altfel?

Nu am fost.

Mă pregăteam pentru viitorul meu interviu de codificare tehnică folosind un site web numit Leetcode. Fury m-a preluat pentru că nu puteam inversa o listă legată, care a fost evaluată cu Easy pe platformă (încercați Aici).

Cum am ajuns acolo

Un e-mail de la un recrutor Twitter a sosit cu o săptămână mai devreme, întrebându-mă dacă aș dori să programez un ecran inițial de telefon cu unul dintre inginerii lor.

Eram emoționat, dar și nervos, pentru că am candidat la o poziție de inginerie software la Twitter acum câțiva ani, fără succes.

Recrutorul mi-a trimis o foaie de pregătire cuprinzătoare cu link-uri pentru a exersa și a-mi analiza abilitățile de codare și algoritmi.

Unul dintre elementele de pe lista de verificare m-a indicat leetcode.com (un site de provocare de codare) și așa am ajuns să codez pe acest site ore în șir pentru a mă pregăti pentru interviul meu de codificare tehnică.

Nu a fost ușor să ne pregătim pentru interviuri tehnice. Pentru cineva care a ieșit din facultate de ceva timp, este nevoie de o perioadă non-banală de timp pentru a analiza abilitățile și fundamentele necesare pentru a reuși într-un interviu de codificare tehnică.

Recrutorul a subliniat în mod explicit că interviul nostru tehnic s-ar concentra în mod special pe fundamentele tehnice, cum ar fi hărți, arbori binari, liste legate, arbori binari de căutare, grafice și așa mai departe.

Dacă aș începe pregătirea de la zero astăzi, aș încerca să caut o abordare mult mai structurată, astfel încât să îmi pot maximiza timpul de pregătire.

Acesta este motivul pentru care am început un curs de coaching personalizat, numit Acing Interviul tehnic.

Acest curs îi ajută pe oameni să se pregătească pentru interviurile lor cât mai eficient posibil, astfel încât să poată asista la aceste interviuri tehnice și să evite capcanele și capcanele pe care le-am avut de învățat în mod greu.

Mulți alți ingineri au găsit succes din abordările prezentate în curs.

Trecutul meu

Am avut 3 ani de experiență ca inginer full-stack la un startup, mai ales cu construirea de microservicii și dezvoltare API pe AWS stack.

Stiva a fost puternic concentrată pe PHP, NodeJS, AWS SQS ca o coadă de mesaje, Postgres pentru baza noastră de date și AWS S3 pentru stocarea pe termen lung.

Nu aveam nicio experiență profesională anterioară sau experiență de stagiu, iar jobul de la startup a fost prima mea poziție „reală” de inginerie software.

Am avut o educație formală în informatică – am absolvit un mic colegiu privat iezuit din statul Washington în 4 ani, cu o diplomă de licență în informatică.

Privind în urmă, cred că a fost o experiență valoroasă să mergi la facultate. Dacă ar fi să o fac din nou, aș opta în continuare pentru o educație formală peste un Bootcamp de codificare. Poti vizionează-mi videoclipul aici pentru o defalcare a unui grad de 4 ani în informatică versus un Bootcamp de codificare.

Am aplicat la peste 30 de companii diferite, am intervievat cu 15, am fost respins de 6, am primit oferte de la 6, am refuzat 5 și am acceptat 1. Dacă numărați, matematica nu se aliniază perfect, deoarece unele companii au fost fantomate după locul de desfășurare .

Puteți citi mai multe aici dacă sunteți interesat de modul în care am obținut oferte de la companii FAANG de nivel superior fără o diplomă Ivy League.

Cum m-am pregătit pentru interviuri

Mi-am petrecut majoritatea timpului pe Leetcode și cu o carte numită Elemente de programare a interviurilor (foarte recomandat).

De asemenea, mi-am petrecut aproximativ 10% din timp navigând pe YouTube pentru interviuri de proiectare a sistemelor, cum ar fi Jack Gabbard și Gauran Sen.

O altă resursă / site web care mi-a plăcut a fost DailyCodingProblem.com, care trimite o întrebare de cod pe zi către e-mail. Acest lucru vă permite să primiți mereu întrebări noi.

Timp de pregătire în total

Timpul meu de pregătire a fost de aproximativ o lună de consecvent, neîntrerupt practică. Este esențial să ai un program consistent.

Obișnuiam să continui coduri: 3 ore de codare hard-core urmate de o săptămână de odihnă. Am constatat că acest lucru este ineficient și am plătit prețul mare al schimbării contextului de mai multe ori.

În total, am cheltuit aproximativ 3 ore pe zi în timpul săptămânii (din cauza muncii) și 4 până la 6 ore în weekend pentru un total de aproximativ ~ 20 de ore pe săptămână timp de o lună.

Cum am aplicat la locuri de muncă

Am aplicat la Twitter prin pagina lor de cariere. În retrospectivă, ar fi putut fi mai eficient să găsiți o sesizare sau un recrutor pe LinkedIn, deoarece cel mai probabil ar fi accelerat procesul de aplicare.

Un CV bine scris este esențial, mai ales atunci când aplicați printr-un centru de carieră online. Fără aceasta, nu cred că aș fi reușit să am ocazia să interviu cu aceste companii tehnologice de top.

Poti citiți mai multe aici despre modul în care mi-am creat CV-ul pentru a-i determina pe manageri care angajează să mă observe.

Câteva săptămâni mai târziu, un recrutor a ajuns în cele din urmă la mine și a vrut să programeze un ecran inițial de telefon.

Cronologia procesului meu de aplicare

  • 10 februarie 2017 – Recrutorul a contactat pentru a programa un TPS
  • 8 martie 2017 – TPS inițială
  • 13 aprilie 2017 – Al doilea TPS
  • 18 aprilie 2017 – la fața locului
  • 2 mai 2017 – Oferta prelungită
  • 23 mai 2017 – Twitter confirmat
  • 24 iulie 2017 – data oficială de începere

Primele 2 ecrane tehnice ale telefonului au implicat codificarea pe un document online partajat, cum ar fi Google Docs. Am vorbit despre diferite abordări și compromisuri și am petrecut peste 30 de minute în implementare.

După primele două runde, am fost avansat la următoarea rundă de interviuri la fața locului la Twitter Seattle.

Recrutorul mi-a trimis apoi un link către un depozit de codare online și mi-a cerut să fac o revizuire a codului. A trebuit să fac sugestii despre cum să îmbunătățesc codul și să-l discut cu intervievatorii la fața locului.

Am luat aproximativ o zi pentru a trece prin cod, l-am tipărit pe hârtie (aproximativ 5 pagini pe fontul de 10 puncte) și am notat domenii de îmbunătățire pe hârtie. Acest s-a dovedit a fi un exercițiu util așa cum aș descoperi mai târziu.

Interviul la fața locului

La fața locului au avut 3 runde în total, cu un prânz sandwich între (joc de cuvinte):

  • Lățime (75 minute)
  • Adâncime (75 minute)
  • Masa de pranz
  • Calificare superioară (90 de minute, Opțional)

Un lucru de subliniat este faptul că rundele Twitter de la fața locului au avut 2 intervievatori fiecare rundă.

La început s-a simțit intimidant, fiind privit de doi intervievatori care mă judecau după fiecare mișcare. Dar, în realitate, mi-a plăcut precum a simțit mult mai colaborativ și ne ridicam ideile reciproc.

Lățime (proiectare sistem)

Interviul Breadth (System Design) se concentrează pe o gamă largă de subiecte, astfel încât să poată înțelege cât de mult știți despre proiectarea unui sistem de la zero. Scopul este de a întinde candidatul la limitele lor și de a vedea cât de departe poate ajunge.

Au pus astfel de întrebări:

Ești capabil să construiești un sistem fiabil cu un timp de oprire rezonabil de la un capăt la altul, de la configurarea interfeței de utilizare până la comunicarea prin intermediul unui API HTTP, până la construirea unui serviciu de backend?

Mi-a plăcut conversația, pentru că mi-a plăcut întotdeauna să joc cu diferite tehnologii. Dacă îți place să construiești lucruri, ți-ar plăcea și această rundă. Intervievatorii au fost foarte drăguți și m-au îndrumat politicos în timpul interviului.

Am încheiat cu o întrebare de codare la sfârșit. Sincer, nu-mi amintesc ce a fost, dar nu a fost nimic ieșit din comun.

Adâncime (reluare)

Interviul Depth s-a concentrat mult mai mult pe proiectele și expertiza mea din trecut. Acest lucru a fost, cu sinceritate, mult mai intens și mai provocator, deoarece intervievatorul a adâncit în fiecare aspect al proiectelor pe care le-am construit și mi-a contestat deciziile de proiectare.

Ce a fost un proiect pe care l-ați construit recent? De ce l-ai construit? Ce s-au luat în considerare alternativele? A funcționat până la urmă?

Venind dintr-un fundal de pornire, am fost responsabil pentru construirea multor lucruri de la zero, cum ar fi configurarea clusterelor AWS și configurarea SQS pentru sarcini de procesare.

Chiar dacă eram familiarizat intim cu multe proiecte, această rundă m-a împins la limite. A trebuit să mă retrag din experiența mea și să spun povestea din perspectiva mea – de ce am proiectat anumite lucruri în anumite moduri și am existat abordări mai bune / mai rele la care ne-am gândit. Nu există întrebări de codificare pentru această rundă.

Top-Grading / Cultural

Runda culturală a fost un interviu de 90 de minute cu managerul de angajare și conducerea superioară.

Am aflat mai târziu că, dacă participi la această rundă, înseamnă că te-ai descurcat suficient de bine din punct de vedere tehnic și caută o potrivire culturală în ambele sensuri – indiferent dacă te încadrezi în cultura lor și ar avea oportunitățile potrivite pentru tine.

Nu există întrebări de codificare și pentru această rundă.

Retrospectiva procesului de interviu

Interviuri la Twitter concentrați-vă puternic pe elementele fundamentale ale informaticii. Deci, asigurați-vă că vă cunoașteți structurile de date de sus în jos și de la stânga la dreapta. De asemenea, este o idee bună să revizuiți toți algoritmii de bază pe care i-ați fi învățat în clasa dvs. CS101.

Iată câteva alte sfaturi:

Cunoașteți algoritmii dvs. în profunzime

A intelege cum funcționează compromisurile complexității timpului și complexității spațiului.

Cunoașteți foarte bine o limbă

Cunoașteți și înțeleg foarte bine o limbă a ajutat enorm. Pentru aceasta recomand ceva de genul Python sau Java sau C ++, deoarece acestea sunt limbaje foarte frecvent utilizate.

Personal îmi place să folosesc Python, deoarece este foarte ușor de citit, foarte ușor de explicat și are o grămadă de structuri de date încorporate.

Faceți o recenzie a CV-ului

Asigurați-vă că pentru a analiza proiectele enumerate în CV-ul meu. Aceasta a insemnat

  • înțelegerea întregului design al software-ului Am fost responsabil de capăt la cap,
  • înțelegerea compromisurilor care au fost făcute în sistem și
  • având motive pentru care sistemele au fost construite în acest fel și care au fost alternativele.

Fii disciplinat în pregătirea ta

Descoperiți în avans zonele în care vă lipsesc și stabiliți un program de exersare. Este important să obțineți o practică constantă, neîntreruptă.

Am început cu piciorul greșit și mi-am dorit să știu asta mai devreme, astfel încât să nu pierd timpul cu lucrurile greșite.

Gândește-te la sistemele cu care interacționezi zi de zi

Descoperiți compromisurile, alternativele, avantajele și dezavantajele și cum puteți construi un sistem mai bun. Această abilitate vă va duce foarte departe în ingineria software.

Resurse pe care le recomand

  • Acing Interviul tehnic: Coachingul meu personalizat pentru a vă ajuta să asistați la interviul tehnic la companii de top tehnologie.
  • Leetcode.com: Practicați aici problemele de codare.
  • Verifica asta pagina resurse pentru mai multe echipamente, instrumente și cărți, vă recomand cu tărie.

Puteți citi mai multe articole despre tehnologie blogul meu personal, unde îmi împărtășesc călătoria de a deveni inginer software profesionist.

Dacă v-a plăcut acest lucru, vă rugăm să luați în considerare partajarea cu cineva care ar beneficia de el și urmați-mă Youtube, LinkedInk și Stare de nervozitate.

De asemenea, lansez un curs nou care intră în ceea ce caută intervievatorii, cum vă puteți pregăti și cum să vă maximizați șansa de a obține interviuri și de a obține locul de muncă dorit.