
FĂžles det ikke merkelig at nĂ„r du skal bytte arbeidsplass og mĂ„ forberede deg til intervju, tenker du fĂžrst "jeg mĂ„ forberede meg til intervjuet". Du mĂ„ lĂžse oppgaver pĂ„ HackerRank, lese Crack the Coding Interview, pugge hvordan en ArrayList fungerer og hvordan den skiller seg fra LinkedList. Ă
h ja, de kan sikkert spÞrre om sortering, og det vil Äpenbart vÊre uprofesjonelt Ä si at quick sort mest sannsynlig vil vÊre det beste valget.
Men vent litt, du programmerer jo Ă„tte timer om dagen, lĂžser interessante og komplekse oppgaver, og pĂ„ den nye arbeidsplassen kommer du til Ă„ gjĂžre pluss-minus det samme. Likevel mĂ„ du forberede deg pĂ„ intervjuet, ikke bare finpusse daglige ferdigheter, men lĂŠre det du ikke har hatt bruk for verken i din nĂ„vĂŠrende jobb eller sannsynligvis vil ha bruk for i den neste. Til dine innvendinger om at datavitenskap ligger i blodet vĂ„rt, og at vi vil kunne skrive bredde-fĂžrst-sĂžk med lukkede Ăžyne pĂ„ et putevar selv om vi er halvsovende, vil jeg svare at dersom jeg skulle ansette i et sirkus, og min hovedtricks var nettopp dette â sĂ„ ja, jeg ville vĂŠrt enig. Jeg mĂ„ teste denne ferdigheten.
Men hvorfor sjekke irrelevante ferdigheter for den nĂ„vĂŠrende jobben? Bare fordi det har blitt trendy? Fordi Google gjĂžr det? Eller fordi din fremtidige teamleder mĂ„tte lĂŠre seg alle sorteringsmetodene fĂžr han gikk til intervju og nĂ„ mener at âhver god programmĂžr bĂžr kunne implementere palindromdeteksjon i en streng uten Ă„ tenke".
SÄ, du er ikke Google (c). Hva Google kan tillate seg, kan ikke ordinÊre selskaper. Google, etter Ä ha analysert dataene fra sine ansatte, kom frem til at for hans spesifikke oppgaver, er ingeniÞrer med olympisk bakgrunn godt kvalifisert. Videre, nÄr de bygger utvelgelsesprosessen, kan de tillate seg Ä ta risikoen for at de kanskje ikke ansetter noen gode ingeniÞrer fordi de ikke kan lÞse matematiske oppgaver like lett. Men for dem er det ikke et problem, mange Þnsker Ä jobbe i Google, stillingen vil bli besatt.
La oss nÄ se ut av vinduet, og hvis det fortsatt stÄr ingeniÞrer utenfor kontoret ditt som Þnsker Ä jobbe for deg, og hvis utviklerne dine oftere sÞker pÄ stackoverflow etter hvilken ny Spring-annotasjon de mÄ bruke, i stedet for detaljene i rangeringalgoritmene, er det pÄ tide Ä vurdere om det er fornuftig Ä kopiere Google.
Hva gjÞr du hvis Google denne gangen sviktet og ikke ga et svar? Sjekk nÞyaktig det utvikleren skal gjÞre pÄ jobben. Hva verdsetter du hos utviklerne?
Lag kriterier for hvem du Ăžnsker Ă„ ansette, og utvikle tester som sjekker nettopp disse ferdighetene.
ThoughtWorks
Hva har ThoughtWorks med dette Ă„ gjĂžre? Her fant jeg et eksempel pĂ„ et forbilledlig intervju. Hvem er ThoughtWorks? Kort sagt, det er et hĂžyere konsulentfirma med kontorer over hele verden fra Kina og Singapore til de amerikanske kontinentene, som har drevet med rĂ„dgivning innen utvikling i omtrent 25 Ă„r, og har sin egen forskningsavdeling ledet av Martin Fowler. Hvis du sĂžker etter en liste med 10 bĂžker som er must-reads for programvareingeniĂžrer, vil kanskje 2â3 av dem vĂŠre skrevet av folk fra ThoughtWorks, som for eksempel Refactoring av Martin Fowler og Building Microservices: Designing Fine-Grained Systems av Sam Newman eller Building Evolutionary Architectures.
av Patrick Kua, Rebecca Parsons, Neal Ford.
Selskapets virksomhet er bygget pÄ Ä tilby kostbare tjenester, men kunden betaler for fenomenal kvalitet, som er et resultat av ekspertise, interne standarder og selvfÞlgelig menneskene. Derfor er det helt nÞdvendig Ä ansette de rette folkene.
Hvilke folk er de rette? SelvfĂžlgelig er det opp til hver enkelt. ThoughtWorks har definert at for deres forretningsmodell er de viktigste kriteriene for utviklere:
- Evnen til parprogrammering. Det er evnen, ikke erfaring eller ferdigheter. Ingen forventer at folk som praktiserer parprogrammering i fem Ă„r, skal dukke opp. Men Ă„ vĂŠre Ă„pen for andres meninger, kunne lytte â det er en nĂždvendig ferdighet.
- Kunne skrive tester, og ideelt sett praktisere TDD.
- ForstÄ SOLID og OOP og kunne anvende dem.
- Presentere sine meninger. Som konsulent mÄ man jobbe med utviklerne til kunden, med andre konsulenter, og det er ikke mye nytte i at en person kan gjÞre noe bra, men er helt ute av stand til Ä formidle dette til de andre medlemmene av teamet.
NÄ er det viktig Ä vurdere nettopp disse ferdighetene hos kandidaten. Jeg vil gjerne dele min erfaring fra intervjuet hos ThoughtWorks. Jeg kan si med én gang at jeg ble intervjuet i Singapore og klarte det, men rekrutteringsprosessen er standardisert og vil ikke variere mye fra land til land.
Fase 0. HR
Som det ofte skjer, var det et 20 minutters intervju med HR. Jeg vil ikke gÄ nÊrmere inn pÄ dette, men jeg mÄ si at jeg aldri fÞr har mÞtt en HR-representant som kunne snakke i 15 minutter om utviklingskulturen i selskapet, hvorfor de bruker TDD, og hvorfor parprogrammering er viktig. Vanligvis pleier HR-er Ä bli stille om dette temaet og sier at prosessen deres er vanlig: utviklere utvikler, testere tester, og ledere overvÄker.
Fase 1. Hvor god er du i OOP, TDD?
1,5 time fĂžr intervjuet fikk jeg tilsendt en oppgave om Ă„ lage en simulator for Mars Rover.
Oppgaven for Mars roverEt team av robotrovere skal settes ned av NASA pÄ et platÄ pÄ Mars. Dette platÄet, som er bemerkelsesverdig rektangulÊrt, mÄ navigeres av roverne slik at deres innebygde kameraer kan fÄ en fullstendig oversikt over det omkringliggende terrenget for Ä sende tilbake til jorden. En rovers posisjon og beliggenhet representeres av en kombinasjon av x- og y-koordinater og et bokstav som representerer en av de fire kardinalretningene. PlatÄet er delt inn i et rutenett for Ä forenkle navigering. Et eksempel pÄ posisjon kan vÊre 0, 0, N, som betyr at rover stÄr nederst til venstre og vender mot nord. For Ä kontrollere en rover sender NASA en enkel streng av bokstaver. Mulige bokstaver er 'L', 'R' og 'M'. 'L' og 'R' fÄr rover til Ä snu 90 grader til venstre eller hÞyre, henholdsvis, uten Ä bevege seg fra nÄvÊrende sted. 'M' betyr Ä bevege seg framover ett rutenettpunkt og opprettholde samme retning.
Anta at kvadratene direkte nord for (x, y) er (x, y+1).
INNGANG:
Den fÞrste linjen av inngangen er de Þvre hÞyre koordinatene til platÄet, de nedre venstre koordinatene antas Ä vÊre 0,0.
Resten av inngangen er informasjon om roverne som har blitt satt ut. Hver rover har to linjer med inngang. Den fÞrste linjen gir roverens posisjon, og den andre linjen er en serie instruksjoner som forteller rover hvordan den skal utforske platÄet. Posisjonen er sammensatt av to heltall og en bokstav delt med mellomrom, som tilsvarer x- og y-koordinatene og roverens orientering.
Hver rover vil bli ferdig sekvensielt, noe som betyr at den andre rover ikke vil begynne Ă„ bevege seg fĂžr den fĂžrste er ferdig.
UTGANG:
Utmatningen for hver rover skal vĂŠre dens endelige koordinater og retning.
NOTATER:
Implementer ganske enkelt kravene ovenfor og bevis at en stĂžvsuger fungerer ved Ă„ skrive enhetstester for den.
Ă
lage noen form for brukergrensesnitt ligger utenfor omfanget.
Ă
lĂžse problemet ved Ă„ fĂžlge en TDD (Test Driven Development) tilnĂŠrming vil bli foretrukket.
I den korte tiden vi har tilgjengelig, er vi mer opptatt av kvalitet enn fullstendighet.
*Jeg kan ikke dele oppgaven som ble sendt til meg, det er en gammel oppgave som ble gitt for flere Är siden. Men tro meg, prinsippene er fremdeles de samme.
Det er viktig Ä merke seg vurderingskriteriene. Hvor mange ganger har du stÞtt pÄ situasjoner der viktige ting for kandidaten ikke er viktige ved vurdering, og omvendt? Ikke alle tenker som deg, men mange kan akseptere dine verdier og fÞlge dem hvis de blir klart angitt. SÄ, ut fra vurderingskriteriene, blir det tydelig at de viktigste ferdighetene pÄ dette stadiet er
- TDD;
- Evne til Ă„ bruke OOP og skrive vedlikeholdbar kode;
- ferdigheter i parprogrammering
SÄ, jeg ble advart om at jeg skulle bruke de 1,5 timene pÄ Ä tenke pÄ hvordan jeg skal gjÞre oppgaven, og ikke pÄ Ä skrive kode. Koden skal vi skrive sammen.
Da vi snakket sammen, forklarte gutta kort hvem de var og hva de drev med, og foreslo Ă„ begynne utviklingen.
I lĂžpet av hele intervjuet fĂžlte jeg aldri at jeg var pĂ„ et intervju. Det fĂžltes som om du utviklet kode i et team. Hvis du satt fast et sted â de hjelper, gir rĂ„d, diskuterer, til og med krangler med hverandre om hva som er best Ă„ gjĂžre. Under intervjuet glemte jeg hvordan jeg skulle sjekke i JUnit 5 at en metode kaster en Exception â de foreslo Ă„ fortsette Ă„ skrive testen, mens en av dem googlet hvordan dette skulle gjĂžres.
Bokstavelig talt noen timer etter intervjuet fikk jeg konstruktiv tilbakemelding â hva de likte og hva de ikke likte. I mitt tilfelle fikk jeg ros for bruken av Sealed-klasser som et alternativ til null-objektet; for det faktum at jeg fĂžr jeg skrev koden skrev pseudokoden om hvordan jeg Ăžnsket Ă„ kontrollere rover, og dermed fikk jeg et utkast av klassene, i det minste de som er involvert i robotens API.
Trinn 2. Fortell oss
En uke fÞr intervjuet ble jeg bedt om Ä forberede en presentasjon om et tema som interesserte meg. Formatet er enkelt og kjent: 15 minutters presentasjon, 15 minutters spÞrsmÄl og svar.
Eg valde Clean Architecture by Uncle Bob. Og igjen ble jeg intervjuet av et par personer. Dette var min fĂžrste erfaring med Ă„ presentere pĂ„ engelsk, og jeg mĂ„ si at hvis jeg hadde vĂŠrt i en stressende situasjon, ville jeg ikke klart det. Men igjen, jeg hadde aldri fĂžlelsen av at jeg var pĂ„ et intervju. Alt var som vanlig â jeg forteller, de lytter nĂžye. Selv den tradisjonelle spĂžrsmĂ„ls- og svarsesjonen lignet ikke pĂ„ et intervju, det var tydelig at spĂžrsmĂ„lene ikke ble stilt for Ă„ «svekke» meg, men var spĂžrsmĂ„l som virkelig interesserte dem i presentasjonen min.
Et par timer etter intervjuet fikk jeg tilbakemelding â presentasjonen var veldig nyttig, og de fikk ekte glede av Ă„ lytte.
Trinn 3. Produksjonskvalitetskode
Etter Ä ha advart om at dette er det siste trinnet i de tekniske intervjuene, ble jeg bedt om Ä gjÞre koden klar for produksjon hjemme, fÞr jeg sendte koden til gjennomgang og satte opp et intervju der kravene til oppgaven ville endres og koden ville kreve modifikasjoner. For Ä komme til poenget, kan jeg si at kodereviewet skjer blindt; gjennomgangere vet verken hvilken stilling kandidaten sÞker pÄ, ser ikke CV-en hans, og vet ikke engang navnet hans.
Samtale, og igjen et par gutter pĂ„ den andre siden av skjermen. Alt som under det fĂžrste intervjuet: husk Ă„ snakke om TDD, forklare hva du gjĂžr og hvorfor. Hvis du ikke har praktisert TDD fĂžr, anbefaler jeg Ă„ begynne umiddelbart, ikke fordi det er nĂždvendig i selskapene, men fordi det betydelig forenkler livet ditt, reduserer stressnivĂ„et om du vil. Husk hvordan du mĂ„tte lete febrilsk etter feilen med debuggeren, som kun forekom i nettleseren, mens du ikke kunne reprodusere den med tester? NĂ„ kan du forestille deg Ă„ mĂ„tte fange en slik feil under intervjuet - du vil garantert fĂ„ et par grĂ„ hĂ„r. Hva fĂ„r vi med TDD? Har du endret koden og innser plutselig at testene nĂ„ er rĂžde, men du klarer ikke Ă„ forstĂ„ feilen med fĂžrste forsĂžk? Greit, vi sier til intervjueren âOopsâ, trykker Ctrl-Z og begynner Ă„ ta smĂ„ skritt fremover. Og ja, evnen til Ă„ utvikle med TDD mĂ„ du jobbe med, evnen til Ă„ nĂ„ mĂ„let slik at testene dine forblir permanent grĂžnne, og ikke rĂžde i halve dagen, fordi âdu har en stor refaktoreringâ. Dette er akkurat den samme ferdigheten som Ă„ skrive vedlikeholdbar kode, eller ytelseseffektiv kode.
SĂ„, hvor godt koden din kan endres, avhenger av hvilken design du opprinnelig la inn, hvor enkel den er og hvor gode testene dine er.
Etter intervjuet fikk jeg tilbakemelding etter noen timer. PĂ„ dette stadiet forstod jeg at jeg nesten hadde bestĂ„tt, og det var bare lite igjen fĂžr âmĂžtet med Fowlerâ.
Trinn 4. Finale. Nok tekniske spÞrsmÄl. Vi vil vite hvem du er!
Ărlig talt, sĂ„ har denne formuleringen av spĂžrsmĂ„let forvirret meg litt. Hvordan kan man forstĂ„ hva slags person jeg er etter en times samtale? Og enda mer, hvordan kan de forstĂ„ det nĂ„r jeg snakker pĂ„ et sprĂ„k som ikke er mitt morsmĂ„l, og, for Ă„ vĂŠre helt ĂŠrlig, ganske dĂ„rlig og klĂžnete? PĂ„ tidligere intervjuer har det vĂŠrt lettere for meg Ă„ fortelle enn Ă„ svare pĂ„ spĂžrsmĂ„l, og skylden ligger pĂ„ aksenten. Minst Ă©n av intervjuerne var asiat â og deres aksent kan, la oss si, vĂŠre noe spesiell for et europeisk Ăžre. Derfor bestemte jeg meg for Ă„ ta en proaktiv tilnĂŠrming â forberede en presentasjon om meg selv og i begynnelsen av intervjuet tilby Ă„ fortelle om meg selv med denne presentasjonen. Hvis de aksepterer â sĂ„ vil det i det minste vĂŠre fĂŠrre spĂžrsmĂ„l til meg, hvis de avslĂ„r â vel, tre timer av livet mitt brukt pĂ„ presentasjonen er ikke sĂ„ hĂžy pris. Men hva skal jeg skrive i presentasjonen? Biografi â Jeg ble fĂždt der og da, gikk pĂ„ skole, avsluttet universitetet â hvem bryr seg egentlig om det?
Hvis man googler litt om kulturen i Thoughtworks, kan man finne en artikkel av Martin Fowler [https://martinfowler.com/bliki/ThreePillars.html], der de 3 PILLARS blir beskrevet: BĂŠrekraftig forretningsdrift, programvarekvalitet og sosial rettferdighet.
La oss anta at programvarekvalitet allerede er sjekket. Det gjenstÄr Ä vise bÊrekraftig forretningsdrift og sosial rettferdighet.
Jeg bestemte meg for Ä fokusere mest pÄ det siste.
For Ă„ starte med, forklarte jeg hvorfor ThoughtWorks â jeg leste Martin Fowlers blogg allerede pĂ„ universitetet, derav min kjĂŠrlighet til Clean Code.
Prosjektene kan ogsÄ presenteres fra forskjellige vinkler. Jeg har utviklet programvare for helsevesenet som har gjort livet enklere for pasientene, og ifÞlge ryktene reddet det til og med ett liv. Jeg har ogsÄ utviklet programvare for banker, som ogsÄ er en form for forenkling av hverdagen for borgere. Spesielt hvis den banken brukes av omtrent 70% av landets befolkning. Det handler ikke om Sberbank og ikke en gang om Russland.
Ănsker du Ă„ vite mer om meg? Ok. Hobbyen min er fotografering, jeg har hatt et kamera i hĂ„nden i omtrent 10 Ă„r, og jeg har bilder som jeg ikke skammer meg over Ă„ vise. Jeg har ogsĂ„ en periode hjulpet et kattehjem: jeg tok bilder av kattene som trengte et permanent hjem. Med gode bilder er det mye lettere Ă„ finne et hjem for en katt. Jeg har sannsynligvis fotografert rundt hundre katter đ
Til slutt hadde jeg fylt 80% av presentasjonen med katter.
Umiddelbart etter presentasjonen fikk jeg en beskjed fra HR om at de fortsatt ikke vet resultatene fra intervjuet, men hele kontoret er allerede imponert over kattene.
Til slutt fikk jeg tilbakemelding â jeg tilfredsstilte alle som person.
Men HR nevnte i den avsluttende samtalen taktfullt at sosial rettferdighet er veldig bra og nĂždvendig, men ikke alle prosjekter er slik. Og spurte om det skremmer meg. Jeg overdrevet litt med sosial rettferdighet, det skjer đ
Resultat
Som resultat har jeg allerede jobbet noen mÄneder i Singapore hos Thoughtworks, jeg ser at mange selskaper her ogsÄ tar i bruk "beste praksiser for intervjuer" fra Google, ved Ä bruke notatark og Whiteboard for koding, selv om kunnskap utover Spring, Symfony, RubyOnRails (sett pris pÄ) ikke er nÞdvendig i jobben. IngeniÞrene tar en ukes ferie fÞr intervjuet for Ä "forberede seg".
Hos Thoughtworks, i tillegg til rimelige krav til kandidaten, settes slike prinsipper i sentrum:
Glede ved intervjuering. Dette gjelder for begge parter. Hvis du virkelig Þnsker Ä fÄ de beste talentene (og hvem Þnsker ikke det?), sÄ er intervjuet ikke en markedsplass hvor man velger slaver, men en vurdering hvor bÄde arbeidsgiver og kandidat vurderer hverandre. Og hvis kandidaten assosierer positive fÞlelser med selskapet, er det hÞyst sannsynlig at de velger akkurat dette selskapet.
Flere intervjuere for Ä redusere skjevhet. Hos Thoughtworks er parprogrammering standard praksis. Og hvis denne praksisen kan brukes i andre omrÄder, prÞver TW Ä gjÞre det. I hver fase gjennomfÞres intervjuet av to personer. PÄ denne mÄten vurderes hver person av minst 8 personer, og TW forsÞker Ä velge intervjuere med forskjellig bakgrunn, ulike retninger (ikke bare tekniske) og kjÞnn.
Som et resultat vil avgjÞrelsen om ansettelse bli tatt basert pÄ meninger fra minst 8 personer, og ingen har rett til Ä ha en avgjÞrende stemme.
Attributt-basert ansettelse I stedet for at trÊffe beslutninger baseret pÄ, om kandidaten 'kan lide' noget eller ej, er der udviklet en formular til hver rolle og hver fase, der inkluderer de evaluerede attributter. Ved evalueringen anbefales det stÊrkt at vurdere ikke erfaringen med en bestemt fÊrdighed, men evnen til at anvende den. SÄ hvis en kandidat ikke har haft mulighed for at anvende visse fÊrdigheder, som TDD, men alligevel forsÞger at anvende dem og lytter til rÄd om korrekt brug, har han alle chancer for at bestÄ interviewet.
Uddannelsesbeviser er ikke pÄkrÊvet TW krÊver ikke, at kandidaten har obligatoriske certifikater eller uddannelse inden for Computer Science. Kun fÊrdigheder vurderes.
Dette er den fÞrste interviewprocedure, jeg har gennemgÄet i udenlandske virksomheder, som jeg ikke behÞvede at forberede mig til. Efter hver fase fÞlte jeg mig ikke udmattet, men derimod glad for, at jeg kan bruge de bedste metoder, at folk pÄ den anden side af skÊrmen vÊrdsÊtter det og anvender dem hver dag.
Efter nogle mÄneder kan jeg sige, at forventningerne helt er opfyldt. Hvad adskiller ThoughtWorks fra en almindelig virksomhed? I en almindelig virksomhed kan du finde gode udviklere og venlige mennesker, men i TW er deres koncentration tÄrnhÞj.
Hvis du Þnsker at slutte dig til ThoughtWorks, kan du se Äbne stillinger
Jeg foreslÄr ogsÄ at tage et kig pÄ interessante stillinger:
Lead Software Engineer: , , ,
Senior Software Engineer: , , ,
Software Engineer: , ,
Senior Data Engineer:
Quality Analyst:
Infrastruktur: , ,
(Jeg vil Êrligt advare om, at linket er et referral-link. Hvis du kommer til TW, vil jeg fÄ en dejlig bonus). VÊlg det kontor, du holder af; du behÞver ikke kun at begrÊnse dig til Europa. I sidste ende vil TW hvert andet Är vÊre glade for at flytte dig til et andet land, da det er en del af ThoughtWorks' politik, hvorigennem kulturen spredes og udlignes.
TÞv ikke med at stille spÞrgsmÄl i kommentarerne eller bede mig om at anbefale dig.
Hvis emnet virkede interessant, vil jeg skrive om, hvordan det er at arbejde hos ThoughtWorks, og hvordan det er at bo i Singapore.
Kilde: habr.com
