5 ting, du skal vide i et programmeringsinterview

Denne artikel er beregnet til dem, der prøver at starte deres programmeringskarriere eller forbereder sig på at interviewe deres drømmejob. Som en person, der har været på begge sider af interviewtabellen, forstår jeg, hvordan det føles at være interviewperson.

Denne ikke-udtømmende liste med spørgsmål svømmede hele tiden gennem mit sind.

  • "Skal jeg tale gennem min kode?"
  • "Hvor ofte skal jeg kommunikere med intervieweren?"
  • ”Åh gud, jeg glemte at instantiere min variabel! Er jeg dømt ?! ”
  • "Hvad synes intervieweren om mit svar?"
  • "Er det OK, hvis jeg gør dette?"

... Og listen fortsætter ...

Det er en meget skræmmende oplevelse. Det er meget svært. Og det er ekstremt svært at operere inden for dette vakuum, når du bliver undersøgt for hver eneste ting, du siger, og hver ting du skriver.

Du interviewer til dit drømmejob, noget du har drømt om siden du var 12 år. Og det hele handler om at imponere nogen, du aldrig har mødt inden for 60 minutter.

Kampener ægte.

1. Tænk altid fremad

Ofte vil du høre en interviewer spørge dette: ”OK, det synes jeg ser godt ud. Hvordan kan du forbedre denne kode? ”

Dette er et dræbende spørgsmål . Og det er fordi det ikke bare er et fyldstof at passere tid. Intervieweren prøver at vurdere, hvordan du tænker på:

  • kode kvalitet
  • nogle bekymringer / flaskehalse, der ikke blev rejst i algoritmeplanlægningssessionen
  • hvordan du skalerer løsningen ved hånden.

Bare fordi du løste problemet, betyder det ikke, at du automatisk får et tilbud.

For eksempel, når du ser på dette stykke kode nedenfor, hvad gør det? Hvordan vil du forbedre det? Hvad kan få det til at gå i stykker?

Lad mig vide i kommentarerne nedenfor. Jeg vil meget gerne høre dine tanker.

Overraskelse ?: At kunne komme med en arbejdsløsning er, at b er minimum, der skal tages i betragtning for stillingen. T isse spørgsmål er grundlæggende kompetencemål tests. Hvad der adskiller de gode kandidater fra store er evnen til at tænke ud over, hvad der kræves.

Hvad dette betyder i en kodningssession

Tænk på edge cases, skaleringsproblemer, problemområder. Tænk altid et skridt foran. Hvis du bruger en rekursiv tilgang, hvad ville der ske, hvis du har et stort datasæt? Hvis du bruger en hashingalgoritme, hvordan håndterer du kollisioner? Hvor sandsynligt er det, og hvad er det værste tilfælde?

2. Der er mere end et svar

Der er altid mere end en måde at løse et programmeringsinterviewsproblem på. Altid . Der er normalt flere måder at tackle et problem på, hvoraf nogle måske ikke er optimale.

En af mine yndlings tech Youtubere lærte mig, at et kodende interview er en mental øvelse for at se, hvordan en kandidat tænker. Fra et interviewperspektiv ønsker jeg ikke at kontrollere, om du ved, hvad det rigtige svar er. Ja, det er vigtigt, at du kan skrive en fungerende løsning , men det er ikke det eneste.

Mere end det leder jeg efter, hvor smart denne person er, hvordan løsningen er afledt, og hvilke andre kreative løsninger denne person måske tænker på.

En programmeringsøvelse for at illustrere mit punkt:

Flet to sorterede sammenkædede lister. (Det er knyttet til Leetcode, hvis du vil prøve at løse det). Dybest set kan du tackle dette på flere måder:

  1. Sæt alle knudepunkter i en matrix, og sorter dem derefter. Opret derefter en markør og link hvert element i arrayet sammen.
  2. Flet dem ved hjælp af markørmanipulation. Sammenlign de to, hold øje med, hvilke er mindre, og returner derefter resultaterne i slutningen.

Hvilke andre måder kan du tænke på?

3. OOP er ikke død

Objektorienteret programmering er ikke død. Det er et kærlighedshat-forhold for nogle mennesker, men alligevel er det en værdifuld færdighed at have. Dette er en af ​​de grundlæggende færdigheder - en programmeringsteknik, som enhver programmør skal kende.

Mange kandidater hopper først ind i et programmeringsproblem uden at tænke nærmere på at forenkle koden. Jeg plejede at være i denne flok, og ganske vist gør jeg det stadig nogle gange.

Evnen til at omdanne komplekse problemer til enklere, håndterbare klumper ved objektorienteret programmering er dog en sjælden og dygtig færdighed.

Det er let at skrive kode, som computere kan forstå. Det er svært at skrive kode til mennesker.

4. Lav dit cv

Forestil dig, at du er på vej til promnat med den person, du har drømt om, og du dukker op ved deres dør i klipklapper og en ærmeløs t-shirt.

Dit cv er dit visitkort. Det er virksomhedens første indtryk af dig.

Hvis du starter med din jobsøgning, er den allerførste ting, du skal gøre, at forberede et godt cv. Det er den første ting, der ofte overses af jobsøgende og uden tvivl den laveste hængende frugt.

Jeg ser mange kandidater, der tilbragte uger, om ikke måneder, på at forberede sig på kodningssamtaler. Men den tid, de brugte på at lave deres cv, blegner i sammenligning.

5. Kommuniker tidligt og kommuniker ofte

Da jeg først begyndte at interviewe, fejlede jeg ved siden af overkommunikation . Dette betød, at jeg prøvede at tale gennem hver eneste linje kode, jeg skrev, selvom det var en simpel for-loop.

Jeg er ikke den type, der er i stand til at tale og tænke på samme tid. Nogle mennesker er begavede på den måde, at de er i stand til at tænke højt, men det kan jeg ikke.

Kommuniker så ofte som du har brug for . Jeg forsøgte at kommunikere tidligt og ofte. Når der var et problem, rejste jeg det med intervieweren og lod dem vide. Det hjalp mig med at afgøre, om jeg var på vej i den rigtige retning, og kursrigt, hvis jeg ikke var.

Et programmeringsinterview leder efter både hårde og bløde færdigheder. Manglende det ene eller det andet betyder et bestemt nej. For yderligere information skrev jeg en mere detaljeret artikel om, hvordan man forbedrer en softwareteknikers bløde færdigheder her.

Lad være med at presse dig selv til at tale gennem hver eneste linje kode. Hvis du bruger nogle esoteriske funktioner i et programmeringssprog, kan du forklare det, når du er færdig med at skrive det hele.

Hvad dette betyder i en kodningssession

Hvis du allerede har etableret en eller anden måde at løse problemet på, kan du bare høfligt lade intervieweren vide, at du dykker dybt ned i at skrive koden. Føler ikke, at du har brug for at forklare hver eneste linje med kode.

6. [Ekstra] Brug abstraktion

Her er endnu et ekstra tip, jeg hentede, der hjalp enormt, da jeg interviewede: brug abstraktion til komplekse metoder.

Brug af abstraktion til at skjule de komplicerede implementeringsoplysninger betyder ikke, at du skubber de beskidte detaljer under tæppet. Det betyder, at du forstår mindre er mere. Husk, du skriver kode, som mennesker kan forstå. Hvis du viser god dømmekraft her, vil du helt sikkert give dig ekstra brownie-point hos intervieweren.

Hvad dette betyder i en kodningssession

Lad os sammenligne og kontrastere disse to kodestykker:

Efter min mening synes jeg, at højre side ser meget renere ud og meget lettere at forstå. Jeg kan derefter tage mig tid til at implementere getNeighborseller isEmpty, afhængigt af hvad der anmodes om af mig.

Det vigtige her er, at abstraktion nu har hjulpet med at holde min kode ren, let at læse og let at forstå. Hvem kan ikke lide at have deres kage og spise den også?

Hvorfor vil jeg dele min oplevelse?

Jeg har på en eller anden måde mirakuløst formået at overvinde forhindringerne og finde vej til mit drømmejob. Dette er på ingen måde min måde at skryte på. Det er slet ikke min hensigt.

Jeg vil virkelig hjælpe andre som mig, der kæmper for at få deres drømmejob. Jeg har været igennem det. Jeg forstår trængslen, sveden og tårerne ved at forberede mig på et programmeringsinterview. Jeg tror, ​​at verden ikke er et nulsumsspil - jo flere mennesker, der gør det bedre i livet, jo bedre bliver vores samfund, og jo mere velstående vil vi alle være som et resultat af det. Det er en win-win-situation.

Forhåbentlig er disse tip i stand til at hjælpe en anden jobsøgende derude! Held og lykke! ?

Hvis du kunne lide denne artikel, her er et par flere anbefalede artikler, jeg skrev:

  • Hvordan jeg landede tilbud fra Microsoft, Amazon og Twitter uden en Ivy-league grad
  • Sådan skriver du et godt CV til softwareingeniører
  • Hvordan jeg automatiserede min jobsøgning ved at oprette en webcrawler
  • Sådan systemdesign

Ressourcer og værktøjer, jeg anbefaler

  • Elementer af programmeringsinterviews: Fantastisk til sværere kodningsproblemer
  • Cracking The Coding Interview: Fantastisk til at dække grundlæggende CS
  • OneNote: Jeg bruger dette til at gemme alle kodestykker
  • Evernote: Til alt andet
  • CodeRunner: Jeg elsker denne Mac-app! Jeg brugte dette flere gange til at køre ad-hoc Python-scripts / -funktioner, og det fungerer bare utroligt godt. ?
  • Jobscan: En ven driver dette firma. Jeg har hørt mange seje ting om det, og du bør prøve dem til deres CV-screeningsværktøj.
  • Refdash: Køres af en flok ex-Googlers. Kvaliteten af ​​mock interviews her er?. Interviewerne er tidligere Googlere. Jeg kan varmt anbefale at prøve dem.
  • CodePath: En nonprofit organisation, der hjælper folk med at forberede sig på en karriere inden for tech. Nathan og Tim er gode mennesker, og jeg har lært meget af dem. Samfundet er meget nyttigt, og alle er villige til at give en hånd.
  • Finpunktsmarkører: Bring disse til dit interview. Jeg kan varmt anbefale dem!

Zhia Chong er softwareingeniør hos Twitter. Han arbejder i Ads Measurement-teamet i Seattle og måler annonces påvirkning og ROI for annoncører.

Du kan finde ham på Twitter og LinkedIn.