sunnuntaina, huhtikuuta 02, 2006

Työhaastattelu Pohjois-Amerikan malliin

Siitä, kun viimeksi olin varsinaisssa työhaastattelussa on jo seitsemän vuotta aikaa, ellei nyt Carnegie-Mellonin puhelinhaastatteluita lasketa mukaan. Niinpä olen mielenkiiinnolla seurannut Navjotin työnhakua entry-level tasoisiin ohjelmistoinsinöörin tehtäviin. Yrityksistä pienempi, Vancouverissa toimiva nyrkkipaja kysyi yksityiskohtaisia kysymyksiä esimerkiksi C++-nyansseista ("luettele kaikki tavat joilla const-määrettä voidaan käyttää", "kuvaa kuinka virtuaalitaulut toimivat") ja vaati kirjoittamaan toteutuksen valitulle lajittelualgoritmille. Ennen toisen kierroksen haastatteluita kandidaateille annettiin valitun järjestelmän kuvaus ja heitä pyydettiin rakentamaan yksityiskohtainen suunnittelu UML-kuvauskieltä käyttäen. Kolmatta kierrosta odotellessa.

Yrityksistä suurempi ja kiinnostavampi, suuri ja mahtava Microsoft puolestaan järjesti ensimmäisen haastattelukierroksen puhelimitse Seattlesta käsin. Puhelun yhteydessä käytettiin ilmeisesti jotain netmeeting-ohjelmistoa, jonka kautta kandidaatin tuli lähettää rakentamansa ohjelmanpätkät. Ilmeisesti kysymykset liikkuivat hieman yllä mainitulla tarkkuustasolla ja haastattelun tarkoitus oli ennemminkin karsia pois selvästi toivottomat tapaukset kättelyssä. Tämä varmaankin sopii Navjotille joka on nykyisessä työssään keskittynyt Visual Studion C#-kielen laajentamiseen Microsoftin tutkimuskeskuksen rahoittamana.

Nyt eksoottinen Intian-setä palasi takaisin Microsoftin 2. haastattelukierrokselta Montrealista. Mikäs siinä kun pulju maksoi kaikille työhaastatteluun kutsutuille ehdokkaille lennot, hyvän hotellin, ruoat ja päivärahaa. Päivän sessio koostui viidestä 45-minuuttisesta haastattelusta, joihin jokaiseen kuului "hyvä tyyppi"-jutustelun ja yleisen ohjelmistotuotantoon kuuluvan jutustelun lisäksi erilaisia kohtuullisen kiireellisellä aikataululla suoritettuja tehtäviä. Yleisestä mielenkiinnosta ohessa ne kysymykset jotka muistan kuulleeni eilen pöytäjalkapalloa pelatessani (en ota kantaa tehtävien vaativuuteen tai vaativuuden puutteeseen):
  1. Kuvaa algoritmi joka ilmoittaa, yhtyvätkö kaksi linkitettyä listaa vai eivät.

  2. Oletetaan lista jonka sisältämät alkiot voidaan jakaa kahteen kategoriaan. Kuvaa algoritmi joka lajittelee listan näiden kategorioiden mukaisesti.

  3. Oletetaan lista joka sisältää positiivisia kokonaislukuja nousevassa järjestyksessä. Palauta kaikki listan sisältämät alkuluvut.

  4. Kuvaa algoritmi joka ratkaisee Sudoku-tehtävän.

Kuvattuja ratkaisuja käytiin tämän jälkeen läpi ja niille etsittiin elegantimpia tai paremmalla suoritusajalla varustettuja ratkaisuja. Nopeasti mietittynä kohdan 1 kysymys on kompa joka voidaan muuntaa yksinkertaisella lisäyksellä vakioaikaiseksi, ja kohta 2 olisi lineaarinen, mutta sen sijaan kohdan 3 suoritusaikaluokasta en nopeasti miettimällä saanut varmuutta. Argh, astuin alkulukuun, paras pötkiä pakoon!

Tuntuisi siltä, että viimeistä Sudoku-tehtävää ja aiemmin mainittua suunnittelutehtävää lukuunottamatta haastattelut ovat pikkunäppärillä tehtävillä kuorrutettua teknistä aivojumppaa -- ja muita hakijoita vastaan kilpailemista aikapaineen kanssa. Etenkin ohjelmointikielten nyansseista puhuttaessa juuri valmistuneet undergradit ovat varmaankin hieman kuin ylioppilaita, siis tietävät kaikesta kaiken. No, eihän noiden perusasioiden kaivamiseen kovin montaa tuntia mene, jos niikseen tulee.

Mutta minä olenkin suurten linjojen mies.

Kuvan iljettävä pesukarhu bongattu ikkunan alta sunnuntai-iltapäivällä.