Hvordan jeg landede et softwareingeniørjob på Twitter

Dette er historien om, hvordan jeg fik et job hos Twitter som fuldtids softwareingeniør. Jeg deler den proces, jeg har gennemgået, hvordan jeg forberedte mig, og hvorfor jeg endelig besluttede at blive medlem af virksomheden.

Hvordan jeg startede min rejse

Klik-klik-klik-klik .

Lyden af ​​mine fingre smadede rasende tasterne på tastaturet efterklang gennem natten.

Jeg kiggede op fra min bærbare skærm og kiggede mod et ur på væggen i en kælderlejlighed, som jeg lejede for $ 600 om måneden.

Det var 2 om morgenen.

Nu tror du måske, at jeg skrev et stykke software eller hackede væk på noget vigtigt. Hvorfor ville jeg ellers være vågen ellers?

Det var jeg ikke.

Jeg forberedte mig på mit kommende tekniske kodningssamtale ved hjælp af et websted, der hedder Leetcode. Fury overtog mig, fordi jeg ikke kunne vende en linket liste, der blev bedømt let på platformen (prøv det her).

Hvordan jeg kom derhen

En e-mail fra en Twitter-rekrutterer var ankommet en uge tidligere og spurgte, om jeg gerne ville planlægge en indledende telefonskærm med en af ​​deres ingeniører.

Jeg var begejstret, men også nervøs, fordi jeg havde ansøgt om en software engineering stilling på Twitter for et par år siden uden succes.

Rekruttereren havde sendt mig et omfattende forberedelsesark med links til at øve og pusse på mine kodnings- og algoritmefærdigheder.

En af punkterne på tjeklisten pegede på leetcode.com (et kodningsudfordringswebsted), og det var sådan, at jeg endte med at kode væk på dette websted i timevis for at forberede mig på mit tekniske kodningssamtale.

Det var ikke let at forberede tekniske interviews. For en person, der har været ude af college i et stykke tid, tager det ikke-triviel tid at udnytte de færdigheder og grundlæggende forudsætninger, der kræves for at få succes i et teknisk kodningssamtale.

Rekruttereren understregede eksplicit, at vores tekniske interview specifikt ville fokusere på tekniske grundlæggende, som kort, binære træer, sammenkædede lister, binære søgetræer, grafer osv .

Hvis jeg begyndte at forberede mig fra bunden i dag, ville jeg prøve at finde en meget mere struktureret tilgang, så jeg kunne maksimere min forberedelsestid.

Dette er grunden til, at jeg startede et personaliseret coachingkursus kaldet Acing The Technical Interview.

Dette kursus hjælper folk med at forberede sig på deres interviews så effektivt som muligt, så de kan få fat i de tekniske interviews og undgå de faldgruber og fælder, jeg måtte lære på den hårde måde.

Mange andre ingeniører har fundet succes med de fremgangsmåder, der er beskrevet i kurset.

Min baggrund

Jeg havde 3 års erfaring som full-stack ingeniør ved opstart, hovedsagelig med opbygning af mikrotjenester og API-udvikling på AWS-stak.

Stakken var stærkt fokuseret på PHP, NodeJS, AWS SQS som en meddelelseskø, Postgres til vores database og AWS S3 til langtidsopbevaring.

Jeg havde ikke nogen tidligere erhvervserfaring eller praktikoplevelse, og jobbet ved opstart var min første "rigtige" softwareingeniørstilling.

Jeg havde en formel uddannelse inden for datalogi - jeg dimitterede fra en lille, privat jesuitskole i Washington State i 4 år med en bachelorgrad i datalogi.

Når jeg ser tilbage, synes jeg det var en værdifuld oplevelse at gå på college. Hvis jeg skulle gøre det igen, ville jeg stadig vælge en formel uddannelse frem for en kodende Bootcamp. Du kan se min video her for en oversigt over en 4-årig grad i datalogi vs en kodende Bootcamp.

Jeg søgte over 30 forskellige virksomheder, blev interviewet med 15, blev afvist af 6, modtog tilbud fra 6, afviste 5 og accepterede 1. Hvis du tæller, stemmer matematikken ikke perfekt op, fordi nogle virksomheder spøgte efter stedet .

Du kan læse mere her, hvis du er interesseret i, hvordan jeg landede tilbud fra FAANG-virksomheder i topklasse uden en Ivy League-grad.

Hvordan jeg forberedte mig på interviews

Jeg tilbragte størstedelen af ​​min tid på Leetcode og med en bog kaldet Elements of Programming Interviews (stærkt anbefalet).

Jeg brugte også omkring 10% af min tid på at søge på YouTube for interviews med systemdesign, som Jack Gabbard og Gauran Sen.

En anden ressource / webside, jeg kunne lide, var DailyCodingProblem.com, som sender et kodningsspørgsmål om dagen til din e-mail. Dette giver dig mulighed for at få nye nye spørgsmål hele tiden.

Forberedelsestid i alt

Min forberedelsestid var omkring en måned med konsekvent, uafbrudt praksis. Det er vigtigt at have en ensartet tidsplan.

Jeg plejede at gå på kodningssprutter: 3 timers hard-core-kodning efterfulgt af en uges hvile. Jeg fandt, at det var ineffektivt, og jeg betalte den tunge pris for kontekstskift flere gange.

I alt brugte jeg ca. 3 timer om dagen på hverdage (på grund af arbejde) og 4 til 6 timer i weekenden i alt ca. 20 timer om ugen i en måned .

Hvordan jeg søgte på job

Jeg ansøgte om Twitter via deres jobkarriereside. Efterfølgende kunne det have været mere effektivt at finde en henvisning eller rekrutterer på LinkedIn, fordi det sandsynligvis ville have fremskyndt ansøgningsprocessen.

Et velskrevet CV er kritisk, især når du ansøger gennem et online karrierecenter. Uden dette tror jeg ikke, at jeg ville have været i stand til at få mulighed for at interviewe med disse top-tech-virksomheder.

Du kan læse mere her om, hvordan jeg lavede mit CV for at få ansættelsesledere til at lægge mærke til mig.

Et par uger senere nåede en rekrutter endelig ud til mig og ville planlægge en indledende telefonskærm.

Tidslinje for min ansøgningsproces

  • 10. februar 2017 - Rekruttereren nåede ud til at planlægge en TPS
  • 8. marts 2017 - Indledende TPS
  • 13. april 2017 - Anden TPS
  • 18. april 2017 - Onsite
  • 2. maj 2017 - tilbud udvidet
  • 23. maj 2017 - Twitter bekræftet
  • 24. juli 2017 - officiel startdato

De første 2 tekniske telefonskærme involverede kodning på et delt online-dokument, som Google Docs. Vi talte om forskellige tilgange og kompromiser og brugte 30+ minutter på implementeringen.

Efter de første to runder blev jeg flyttet frem til næste runde af onsite-interviews på Twitter Seattle.

Rekruttereren sendte mig derefter et link til et online kodningsregister og bad mig om at foretage en kodevurdering. Jeg havde brug for at komme med forslag til, hvordan jeg kunne forbedre kodningen, og diskutere det med interviewerne på stedet.

Jeg tog cirka en dag på at gå igennem koden, udskrev den på papir (ca. 5 sider på 10pt skrifttype) og bemærkede forbedringsområder på papiret. Dette viste sig at være en nyttig øvelse, som jeg senere ville opdage.

Onsite-interviewet

Stedet havde i alt 3 runder med en frokost, der var klemt ind imellem (ordspil beregnet):

  • Bredde (75 min)
  • Dybde (75 min)
  • Frokost
  • Topklassificering (90 minutter, valgfri )

En ting at kalde på er, at Twitters onsite-runder havde 2 interviewere hver runde.

Det føltes skræmmende i starten og blev stirret ned af to interviewere, der dømte mig efter min bevægelse. Men i virkeligheden kunne jeg godt lide det, som det føltesmeget mere samarbejdsvilligt, og vi sprang ideer ud af hinanden.

Bredde (systemdesign)

Interviewet med bredde (systemdesign) fokuserer på en lang række emner, så de kan forstå, hvor meget du ved om at designe et system fra bunden . Målet er at strække kandidaten til deres grænser og se, hvor langt de kan gå.

De stillede spørgsmål som denne:

Er du i stand til at opbygge et pålideligt system med en rimelig nedetid end-til-ende, fra opsætning af brugergrænsefladen til kommunikation via en HTTP API til en bygning af en backend-tjeneste?

Jeg nød samtalen, fordi jeg altid har ønsket at rode rundt med forskellige teknologier. Hvis du kan lide at bygge ting, vil du også gerne have denne runde. Interviewerne var virkelig rart og vejledte mig høfligt under interviewet.

Vi sluttede med et kodningsspørgsmål i slutningen. Jeg kan ærligt talt ikke huske, hvad det var, men det var ikke noget ud over det sædvanlige.

Dybde (CV)

Dybdeinterviewet fokuserede meget mere på mine tidligere projekter og ekspertise. Dette var ærligt talt meget mere intens og udfordrende, fordi intervieweren dykkede dybt ned i hvert eneste aspekt af de projekter, jeg byggede, og udfordrede mine designbeslutninger.

Hvad var et projekt, du byggede for nylig? Hvorfor byggede du det? Hvad blev alternativer overvejet? Fungerede det i sidste ende?

Fra en startbaggrund var jeg ansvarlig for at opbygge mange ting fra bunden, som at oprette AWS-klynger og oprette SQS til behandlingsopgaver.

Selvom jeg var meget fortrolig med mange projekter, skubbede denne runde mig til grænserne. Jeg var nødt til at træde tilbage gennem min erfaring og fortælle historien fra mit perspektiv - hvorfor designede vi bestemte ting på bestemte måder, og var der bedre / dårligere tilgange, vi tænkte på. Ingen kodningsspørgsmål til denne runde.

Topklassificering / kulturel

Kulturrunden var et 90-minutters interview med ansættelseslederen og seniorledelsen.

Jeg fandt ud af senere, at hvis du kommer ind i denne runde, betyder det, at du har gjort det godt nok teknisk, og de leder efter en kulturel tilpasning begge veje - uanset om du passer ind i deres kultur, og ville de have de rigtige muligheder for dig.

Ingen kodningsspørgsmål til denne runde også.

Interviewproces med tilbagevirkende kraft

Interview på Twitter fokuserer stærkt på det grundlæggende inden for datalogi . Så sørg for at du kender dine datastrukturer fra top til bund og fra venstre mod højre. Det er også en god ide at gennemgå alle de grundlæggende algoritmer, som du ville have lært i din CS101-klasse.

Her er nogle andre tip:

Kend dine algoritmer i dybden

Forstå hvordan tidskompleksitet og rumkompleksitet afvejninger fungerer .

Kend et sprog rigtig godt

Kendskab til og forstå et sprog virkelig godt hjulpet enormt. Til dette anbefaler jeg noget som Python eller Java eller C ++, da disse er meget almindeligt anvendte sprog.

Jeg nyder personligt at bruge Python, fordi det er meget let at læse, meget let at forklare, og det har en masse datastrukturer indbygget.

Lav en cv-gennemgang

Sørg for at gøre noget ved de projekter, der er anført på mit cv. Dette betød

  • forståelse af hele designet af den software, jeg var ansvarlig for end-to-end,
  • forståelse af de kompromiser, der blev foretaget i systemet, og
  • have grunde til, hvorfor systemerne blev bygget på den måde, og hvad var alternativerne.

Vær disciplineret i din forberedelse

Find ud af de områder, du mangler på forhånd, og opret en tidsplan for øvelse. Det er vigtigt at få konsekvent, uafbrudt praksis.

Jeg startede med den forkerte fod og ønskede, at jeg havde vidst det tidligere, så jeg ikke havde spildt tid på de forkerte ting.

Tænk på de systemer, du interagerer med dag-til-dag

Find ud af kompromiser, alternativer, fordele og ulemper, og hvordan du kan opbygge et bedre system. Denne færdighed fører dig meget langt inden for software engineering.

Ressourcer, jeg anbefaler

  • Acing The Technical Interview: Min personlige coaching, der hjælper dig med at få fat i det tekniske interview i topteknologiske virksomheder.
  • Leetcode.com: Øv dig på kodningsproblemer her.
  • Tjek denne ressource side for mere udstyr, værktøjer og bøger, jeg kan varmt anbefale.

Du kan læse flere af mine artikler om teknologi på min personlige blog, hvor jeg deler min rejse med at blive en professionel softwareingeniør.

Hvis du nød dette, skal du overveje at dele dette med en person, der vil have gavn af det, og følg mig på Youtube, LinkedInk og Twitter.

Jeg lancerer også et nyt kursus, der går ind i, hvad interviewere leder efter, hvordan du kan forberede dig, og hvordan du maksimerer din chance for at lande interviews og få det job, du ønsker.