Facebook logoO Facebooku već godinama nema potrebe išta dodatno pisati. Veb sajt koji je pokrenuo Mark Zuckerberg davne 2004. godine, vremenom prerastao u najveću socijalnu mrežu sa oko 800 miliona korisnika, i sada zapošljava silu od oko 700 programera. Zajedno sa Googlom važi za jedno od mesta najboljih za zapošljenje — a da ne pominjemo težinu koju takva stavka nosi u CVu…

Naravno, uvek su tu ljudi koji mrze ovakve kompanije/sajtove, stalno ih kritikuju, nalaze mane itd, ali sagledajmo čitavu situaciju iz ugla programera. Kakva god bila priroda usluge koju Facebook pruža, on to radi vrhunski. Običan korisnik možda neće obratiti pažnju na to, ali algoritmi koji su u osnovi Facebooka uopšte nisu zanemarljivi: od preporučivanja prijatelja kao jedan od jednostavnijih algoritama, preko odabira stavki za news feed, pa sve do prepoznavanja lica na fotografijama, što je krajnje komplikovan postupak.

Subjektivnost na stranu, Facebook je idealan za nekoga ko uživa u algoritamski izazovnim problemima, a radno mesto je samo poboljšano uslovima za rad i (sigurno povećom) platom. Tu se ne radi na razvoju obične socijalne mreže, već na čitavom sistemu koji barata ogromnom količinom podataka (nemojte samo da počinjete priču o Velikom bratu i 1984. godini). Većina zaposlenih verovatno ni ne posmatra Facebook kao celinu, nego kao simbiozu kompleksnih i inovativnih sistema.

Jasno je, kada se stvari sagledaju na ovaj način, zašto bi neko hteo da bude među tih 700 programera. Iako oni čine samo 0.00001% populacije na Zemlji, ne treba otpisati tu mogućnost kao (pre)malo verovatnu. Samo ove godine je šestoro programera iz Srbije otišlo da radi u Facebook, a to je ono što su mediji ispratili, pa je taj broj možda i veći (na primer, na letnjoj praksi je bila i jedna naša devojka koja je trenutno na MIT-u). Ne, Srbija nije crna rupa, već jak izvor kvalitetnih naučnika, pa samim tim i programera. Mogućnost postoji.

Dakle, upravo ste odlučili da se prijavite za praksu, ili čak posao. Šta dalje?

Kako sve to izgleda — prvi kontakt

Moram da priznam da meni prvobitna namera nije bila da konkurišem za praksu. Međutim, krajem avgusta mi je, krajnje neočekivano, stigao e-mail sledeće sadržine:

…I came across your name on the BubbleCup site, as well as your blog, and thought that you might be a great fit for opportunities on our engineering team…

(Jesam li već rekao da je ovo bilo prilično neočekivano?) Iako ovo nije bila voleli-bismo-da-nam-se-pridužiš već voleli-bismo-da-probaš-da-dobiješ-praksu ponuda, nisam mogao da je odbijem. Razmenio sam još nekoliko mailova sa gospođicom, i dobio još korisnih informacija i linkova:

Naravno, glavni resurs je stranica Careers na kojoj se mogu naći sve potrebne informacije vezane i za posao i za praksu, kao i link za prijavljivanje.

U mom slučaju, pozicija o kojoj se radilo bila je University Intern, Software Engineer.

Prvi audio kontakt

Već nakon nekoliko mailova došao je trenutak za prvi telefonski razgovor. Nije bio u pitanju intervju, već pružanje nešto više informacija vezanih za Facebook i praksu, kao i prilika da postavim sva pitanja koja imam. Deset minuta, sasvim dovoljno. Pošto nije bilo nikakvih nejasnoća i nedoumica, zakazan mi je prvi tehnički intervju.

Nakon ovog informativnog razgovora usledila je još jedna lista korisnih linkova:

Osim toga, dobio sam i neke savete koji se tiču samih intervjua:

Be prepared for technical questions involving coding or algorithms in your best language, design patterns, and more specific questions to your background. For coding questions, you will be asked to produce clean, efficient code in a reasonable amount of time. If the interviewer gives you hints to improve your code, take them and run with them. It is good to adjust and work through the problems with the interviewer to show your thought process and problem-solving ability. It will help to review core CS concepts (algorithms, data structures) as well as subjects pertaining to the scale of our environment.

Intervjui

Ukoliko ste čitali moj tekst o intervjuu za praksu u Microsoftu, uglavnom znate sve što se tiče i intervjua za Facebook.

Svaki od intervjua traje oko 45 minuta i, u slučaju prijavljivanja za programersku poziciju, obavlja ga neko od inženjera zaposlenih u Facebooku. Akcenat je na algoritamskim problemima koji se rešavaju tokom 30-35 minuta, dok je ostatak vremena posvećen razgovoru o vama, vašim prethodnim iskustvima, željama, nadanjima, Facebooku i tako dalje. U mom slučaju, na svakom od intervjua sam imao da rešim po dva zadatka, što je ostavilo dovoljno vremena za ležeran razgovor o ovim sitnicama.

S obzirom da su pozivi stizali sa zapadne obale Amerike, imao sam tu nesreću da ih obavljam kasno uveče, nešto pred ponoć. Očigledno, u pitanju je telefonski intervju, ali se zadaci rešavaju preko Interneta, tako da je neophodan pristup računaru. Platforma koju su odabrali za kucanje kôda jeste CollabEdit — sajt na kome više ljudi može istovremeno da kuca i menja određeni kôd. U ovom slučaju, te osobe ste vi i dotični gospodin (ili gospođica) sa druge strane žice. Može se kucati u jeziku po izboru: moj je bio dobri stari C++. Sami zadaci, o kojima sam već pisao, uopšte nisu toliko teški koliko bi se očekivalo, čak su veoma slični onima na gore pomenutom intervju za MDCS.

CollabEdit screenshot
Web servis koji se koristi za kodiranje tokom intervjua

Prvi intervju sam imao sredinom septembra, i nije bio nimalo ohrabrujuć. Najveći problem je bio što je veza bila loša, pa nisam lepo razumeo sagovornika, koji je inače malo nerazgovetno pričao. Sve vreme je bio otvoren CollabEdit pa smo se po potrebi dokucavali kada je zaista bilo nemoguće čuti se. Kao što sam rekao, zadaci su bili lakši nego što sam očekivao, ali je trema odradila svoje, pa sam jedan uradio tek nakon brisanja prve verzije kôda, dok za drugi nisam našao optimalno rešenje. Suvišno je reći da nisam bio zadovoljan i da nisam znao šta da očekujem.

Nekoliko dana kasnije mi je ipak stigao e-mail da je “tim zadovoljan i da žele da se obavi još jedan intervju”. Što da ne! Iste te nedelje sam imao drugi intervju, koji je bio daleko prijatniji. Oba zadatka sam uspešno rešio, nakon čega sam se sit ispričao sa Nejtanom, koji me je intervjuisao, i saznao nešto više o samom radnom okruženju i očekivanjima u Facebooku. Za razliku od prvog, nakon ovog intervjua sam bio veoma zadovoljan, ali me je to ostavilo i zbunjenim — prvi je bio klimav, a drugi je bio odličan, šta će se desiti sada kada sam imao dva intervjua?

Opet, odgovor sam dobio nekoliko danas kasnije. Ono “dva, ponekad i tri intervjua” je u mom slučaju preraslo u “ipak tri intervjua”. Nisam znao da li je to dobro, ili je treći intervju zapravo poslednji pokušaj da izvuku neki kvalitet iz mene. Nije da sam imao izbora, pa sam dočekao i taj poziv, početkom oktobra. Ovaj put su me sačekali nešto komplikovaniji zadaci koji su se dosta oslanjali na matematiku i verovatnoću, sa dosta različitih rešenja (što sam posle video), ali veoma zanimljivi. Možda su mi rešenja bila pomalo nezgrapna na određenim mestima, ali su radila. Kao i tokom prethodnog intervjua, veza je bila odlična, i opet sam se lepo ispričao i zadovoljan završio razgovor.

I to je bilo to, četiri intervjua bi bilo previše…

Epilog

Posle prva dva tehnička intervjua sledeći mail mi je stigao u roku od dva-tri dana. Posle trećeg intervjua — ništa. Strpljivo sam čekao četiri nedelje, nakon čega sam odlučio da ja njima uputim poruku. Odgovor mi je, srećom, veoma brzo stigao, i devojka sa kojom sam imao korespondenciju mi je zakazala telefonski razgovor za sledeći dan da bi mi prenela sve nove informacije koje ima.

Nešto iza ponoći mi je zazvonio telefon, i jedna od prvih njenih rečenica bila je “I have great news!”.

“Tri meseca u Kaliforniji” uopšte ne zvuči loše.