Facebook’ta Yazılım Mühendisliği Stajına Nasıl Kabul Aldım?

Tarık Korkmaz
kesisenyollardernegi
10 min readMar 30, 2019

Merhaba Kesişen Yollar takipçileri!

Bu yazımda kısaca kendimi tanıttıktan sonra yakın zamanda tecrübe ettiğim Facebook staj mülakatı hazırlık sürecimden bahsedeceğim. Yazılım mühendisliği mülakatlarına hazırlanmayı düşünen/hazırlanan ve bu mülakatlarda başarılı olmak isteyenlere kendi tecrübemden yola çıkarak tavsiyeler vermeye çalışacağım. Fakat öncelikle belirtmek istiyorum ki, mülakatlarda başarılı olan arkadaşlarımda da gördüğüm kadarıyla hazırlanmanın birçok farklı yolu var. Benim hazırlanma sürecim bunlardan sadece bir tanesi ve maalesef bu adımları izlerseniz istediğiniz mülakatları kesin geçersiniz gibi bir garanti veremiyorum :) Bununla birlikte, hazırlık sürecinizde ve mülakatlarda bazı noktalara dikkat ederek mülakatları geçme ihtimalinizi çok fazla arttırabileceğinizi düşünüyorum.

Ben kimim?
2018 yılında Koç Üniversitesi’nde bilgisayar mühendisliği ve endüstri mühendisliği bölümlerinden mezun olduktan sonra Münih Teknik Üniversitesi’nde bilgisayar bilimleri yüksek lisans programına başladım. Kesişen Yollar’da Kariyer Sohbetleri programında gönüllüyüm ve bir dönem Kariyer Sohbetleri koordinatörlüğü de yaptım. Yazımın devamında kısaca bahsedeceğim Kesişen Yollar DevPaths programı katılımcısıyım. Facebook ile yaptığım mülakatlar sonucunda Software Engineering Internship ve Solutions Engineering Internship programlarına kabul edildim. 2019 Eylül ayından itibaren Facebook Londra ofisinde Software Engineering Internship programına katılacağım.

Motivasyon neden önemli?
Yazılım mühendisliği mülakatlarına hazırlık sürecinde dikkat edilmesi gereken en belirleyici faktörlerden bir tanesi bence istikrar. Hazırlık süreci yorucu ve mental olarak yıpratıcı olabiliyor. Adayların ilk mülakatlarının başarısız geçmesi çok normal bir durum. Fakat bence tüm süreç sonunda istenilen sonucu elde etmekteki anahtar ne olursa olsun, olumsuz cevap aldığınız mülakatlardan sonra dahil, motivasyonunuzu korumak ve çalışmaya devam etmek. Motivasyonu besleyen en güçlü kaynaklardan biri de hedefin ve amacın belirli olması. Hedefinizi sağlam temeller üzerine kurmak için “Neden hayatta izlenebilecek birçok yol varken hedeflediğiniz şirkette yazılım mühendisi olmak istiyorsunuz?”, “Bu hedefe ulaşmak hayatınıza neler katacak?” gibi temel soruları gözden geçirmenizi ve cevaplarınızı içselleştirmenizi, motivasyonunuzu kaybettiğiniz noktalarda hatırlamanızı tavsiye ederim. Kulağa çok klişe gelebilir fakat bence bu tekrar tekrar hatırlamaya değecek bir nokta.

Mülakatlara hazırlanmadan önce
Yazılım mühendisliği mülakatları ağırlıklı olarak algoritmalar & veri yapıları sorularından oluşuyor. Bununla birlikte soru tarzlarının akademik hayatta karşılaşılabilecek sorulardan birkaç noktada ayrıldığını belirtmekte fayda var. Bunlardan bence en önemlisi, mülakatta karşınıza gelecek sorunun yaklaşık 45 dakika içerisinde çözülebilecek bir soru olması gerekiyor. Mülakat sorularının bu özelliği bence hazırlık sürecini de şekillendiriyor. Örnek olarak, bence çok detaylı bir şekilde akademik algoritmalar & veri yapıları kitapları çalışmanız gerekmiyor, fakat bu konularda altyapınızın kuvvetli olması gerekiyor. Daha önce algoritmalar & veri yapıları dersleri almamışsanız bu dersleri alarak başlayabilirsiniz. İnternette birçok kaynak mevcut, benim kişisel olarak beğendiğim iki derse buradan ve buradan ulaşabilirsiniz. Bilgilerinizi tazelemek istiyorsanız yine bahsettiğim derslere göz atmanızı tavsiye ederim.

Mülakatlara hazırlanırken kullanılabilecek kaynaklar
Yazılım mühendisliği mülakatlarına hazırlanmaya niyetlenen herkesin hemen karşısına çıkan ve faydalı birkaç kaynak var. Bunlardan ilki Cracking the Coding Interview. Eğer daha önce okumadıysanız bu kitabı okumanızı tavsiye ederim. Özellikle kitabın ilk bölümlerinde mülakat sürecinde sizin neyin beklediğini detaylıca anlatıyor ve birçok soru işaretini gideriyor. Bunun yanında her şirketin mülakat süreci birbirinden farklı ve hepsinin kendisine özel bir yanı oluyor. Bu yüzden olası bir karışıklığı önlemek adına mülakatla ilgili aklınıza gelen her türlü soruyu şirketin insan kaynakları bölümünden irtibatta olduğunuz kişiye sormanız çok önemli.

Kitap olarak yararlanabileceğiniz başka bir kaynak Elements of Programming Interviews. Bu kitabın Java, C++ ve Python versiyonları var. Benim soru çeşitliliği ve kalitesi anlamında en çok yararlandığım kaynaklardan bir tanesi bu kitap oldu.

Diğer bir kaynak leetcode. Leetcode da en çok faydasını hissettiğim kaynakların başında geliyor. Çok geniş bir soru havuzu var, bunun yanında başkalarının çözümlerini de görerek sorulara bakış açınızı geliştirmenize olanak sağlıyor. Fakat soru üzerinde yeterince uğraşmadan başka çözümlere bakmanın size faydadan çok zarar vereceğini unutmamak gerekiyor. Leetcode dışında InterviewBit, HackerRank gibi platformlar da mevcut.

Mülakat dışında soru çözmek ve mülakat esnasında soru çözmek birbirinden çok farklı oluyor. Bunu mülakat esnasında bir teknik soru çözmeye çalışan herkes daha önce hissetmiştir diye tahmin ediyorum. Mülakat performansınızı geliştirmek, mülakatta özgüveninizi arttırmak ve mülakattaki heyecanınızı azaltmanın en iyi yolu bence olabildiğince fazla prova mülakat yapmak. Kesişen Yollar’da bu duruma ilaç gibi gelecek DevPaths adında bir program başlattık. Bu programda amacımız mülakatlarda sık yapılan hataları göstermek ve katılımcıların teknik mülakatlarda başarılı olmasını sağlamak. Bu dönem için program başladı ve şu anda başvuru alınmıyor fakat bir sonraki DevPaths programına dahil olmak isterseniz Facebook sayfamızdaki duyuruları takip etmenizi öneririm. Henüz kesin olmamakla birlikte yeni dönem başvurularının yaklaşık Eylül/Ekim gibi açılacağını tahmin ediyorum. Prova mülakat için güzel kaynaklardan başka bir tanesi pramp. Pramp’te mülakat yaptığınız kişi sizinle yaklaşık aynı tecrübede oluyor fakat bence mülakat ortamına alışmak için yine de faydalı bir kaynak.

Hazırlık süreci
Bu kısımda benim hazırlanma sürecimden bahsedeceğim. Yazımın en başında da bahsettiğim gibi, herkesin mülakatlarda zorlandığı noktalar farklı olabiliyor. Bu yüzden kendinizi mülakat esnasında tanıyıp, mülakatlarda yaptığınız hataları, eksiklerinizi ve yoğunlaşmanız gereken noktaları belirleyerek bunları kapatmaya çalışmak bence en verimli çalışma yolu olacaktır.

Ben mülakat hazırlık sürecine başlamadan önce algoritmalar ve veri yapıları bilgilerimi tazelemek adına CLRS olarak da bilinen Introduction to Algorithms kitabına hızlıca göz atmıştım. Bu kitap oldukça akademik ve aslında içerisindeki birçok konuyu da bilmek gerekmiyor. Fakat önemli noktalara göz atmak benim için asıl mülakat sorularına başlamadan önce faydalı oldu. Quora’daki bu post bence kitabın hangi bölümlerine ihtiyacınız olabileceğini güzel anlatıyor. Benim tavsiye bu kitapla çok zaman kaybetmemeniz, sadece bazı bilgilerinizi tazelemek için bir kaynak olarak düşünebilirsiniz.

Temel bilgilerinizi tazeledikten sonra bence Cracking the Coding Interview veya Elements of Programming Interviews kitaplarından en az bir tanesine en az baştan sonra çalışın, sorular üzerinde düşünün ve zaman ayırın. Eğer mülakatlara girmeden önce çok fazla zamanınız yoksa ikisini birden bitirmek çok gerçekçi bir hedef olmayacaktır. İdeal olarak ben ikisine de yeterince zaman ayırarak çalışmanın faydalı olacağını düşünüyorum fakat belirtmekte fayda var ki ikisini de bitirmeden Google’dan tam zamanlı iş için teklif alan arkadaşlarım oldu.

Eğer kitaplara çalışmayı çok sevmiyorsanız ve interaktif ortamları daha çok tercih ediyorsanız bir an önce Leetcode’da soru çözmeye başlamanızı öneririm. Kendinize soru çözme hedefi verebilirsiniz, ben yoğun olarak hazırlandığım dönemde pratik yapmam gerektiğini hissettiğim konularla ilgili günde 3–5 arası soru çözmeye çalışıyordum. Bu hedefi yakalayamadığım günlerde eksik soru sayısını bir sonraki güne ekliyordum.

Bahsettiğim gibi mülakat esnasında soru çözmek, mülakata çalışırken soru çözmekten çok farklı bir deneyim. Bu yüzden pratik yapmaya başladıktan sonra çok zaman kaybetmeden kendinizi mülakat esnasında görmekte fayda var. Bunun için mülakata hazırlanan başka bir arkadaşınızdan sizi mülakat yapmasını isteyebilirsiniz veya pramp’te prova mülakat yapabilirsiniz. Prova mülakatlar heyecanınızı kontrol altına almanızı sağlayacak ve gerçek mülakattaki performansınızı büyük ölçüde arttıracaktır. Mülakat esnasında yaptığınız hataları, kötü giden noktaları tespit ederek bunlar üzerine çalışmanızı tavsiye ederim.

Hazırlık sürecinde motivasyonunuzu korumak adına Quore, Medium gibi ortamlarda mülakatlarla ilgili gönderiler okuyabilirsiniz. Özellikle Quora’da birçok şirket çalışanı mülakat süreçleri hakkında soruları cevaplıyor, adaylara tavsiyeler veriyor. Daha önce mülakatları geçen kişiler kendi süreçlerinden ve nasıl hazırlandıklarından bahsediyorlar. Bence bu tarz gönderileri okumak da faydalı oluyor. Okurken her bilginin doğru olmayabileceğini de düşünerek bir filtreden geçirmenizi öneririm.

Sık yapılan hatalar
Ben de henüz kariyerimin başındayım ve daha önce profesyonel ortamda başka birisini hiç mülakat yapmadım. Bununla birlikte DevPaths programında izlediğim mülakatlarda ve yakın çevremde mülakatlara hazırlanan arkadaşlarımda sık yapılan bazı hataları gözlemleme fırsatım oldu.

Mülakattan önce:

  • Mülakata hazır olmak için mevcut bütün kaynakları çözmek zorundaymış gibi hissetmek: Mülakata hazırlıkta kullanılabilecek çok fazla kaynak olduğu için birçok kişi hepsini çözmek gerektiğini, en azından hepsine bir göz atmak gerektiğini düşünerek tüm kaynakları çözmedikleri zaman eksik hazırlanmış gibi hissedebiliyor. Ben mevcut tüm kaynakların çözülmesi gerektiğini düşünmüyorum, bu hedefi çok gerçekçi de bulmuyorum. Böyle bir hedef çoğu zaman adayı daha çok baskı altında bırakıyor. Örnek olarak Leetcode’da yaklaşık 1000 tane soru var. Bence 1000 sorunun tamamını çözmek yerine tüm konuları kapsayan, kaliteli 200–300 soru çözmek ve çözümleri iyice öğrenmek yeterince iyi bir hazırlık sağlıyor.
  • Problem çözme yeteneğini geliştirmek yerine çözülen toplam soru sayısına odaklanmak: Bu madde de tüm kaynakları çözmek zorunda hissetmekle biraz ilgili. Olabildiğince fazla soru ve çözüm yolu görmek tabi ki çok önemli. Fakat soru çözme tekniklerini, düşünme yollarını, soruya nasıl yaklaşmak gerektiğini öğrenmek bence fazla soru görmekten daha önemli. Örnek olarak bir soru üzerinde 1 saat harcamak ve soruyu çözene kadar cevaba bakmamak o konu hakkında 10 farklı sorunun cevabını okumaktan daha faydalı bir yol. Bu da bizi bir sonraki maddeye getiriyor.
  • Sorular üzerinde yeterince düşünmeden cevaba bakmak: Sorunun cevabına bakmak yerine soruya çok zaman ayırıp sonunda sizin çözmeniz bence soruya az zaman ayırıp cevabını okumaktan daha faydalı. Cevabı okuduğunuzda soruyu iyice kavradığınızı ve konuyla ilgili sıradaki soruları daha kolay çözeceğinizi düşünebilirsiniz. Fakat benim gördüğüm kadarıyla soru cevabı okumak problem çözme yeteneğinize soruyla içli dışlı olup iyice zaman ayırmak kadar katkı sağlamıyor. Eğer sorunun çözümünü bir türlü bulamıyorsanız, yeterince zaman harcadıktan sonra çözüme bakabilirsiniz. Benim tavsiyem bu şekilde cevabına baktığınız soruları not alın ve biraz zaman geçtikten sonra kendi başınıza tekrar çözmeye çalışın.
  • Mülakata hazır olduğunuz halde hazır hissetmemek ve başvuru yapmayı geciktirmek: Özellikle kendinizi çok fazla kaynak bitirme hedefi koyarsanız aslında mülakata hazır olduğunuz halde tüm soruları çözmediğiniz için mülakata hazır değilmiş gibi hissedebilirsiniz. Geç başvurmak özellikle staj arayan adaylar için bir dezavantaj çünkü staj pozisyonları hızlı dolabiliyor. Tam zamanlı iş pozisyonlarında durum biraz daha esnek fakat yine de şirketlerin özellikle yeni mezun alımını hızlandırdığı dönemler oluyor, bu dönemlerde başvurunuzu geciktirmemenizi tavsiye ederim.
  • Mülakatın teknik olmayan kısımlarına yeterince dikkat etmemek: Birçok aday yazılım mühendisliği mülakatlarını sadece teknik kısımdan oluşuyor gibi düşünüyor ve bu da elenmelerine sebep olabiliyor. Mülakatı şirketin sizi, sizin şirketi daha yakından tanımak için yapılan bir toplantı gibi düşünebilirsiniz. Bu yüzden şirketler işe alındığınız takdirde şirket kültürüne kolay alışabilecek misiniz, takım çalışmasına ne kadar uyabileceksiniz, bir problemle karşılaşınca ilk tepkiniz ne olacak gibi sorulara mülakatlarda cevap arıyor. Her şirketin kültürü farklı olduğu için bu konuda detaylı bir şey söylemek zor fakat size mülakattan önce şirketle ilgili daha fazla bilgi alabileceğiniz kaynaklar iletilecektir. Bence mülakattan önce bu kaynaklara iyice çalışarak şirketi yakından tanımak çok önemli. Ayrıca mülakatlarda sorulan davranışsal sorulara çalışmak da adayların bazen çok dikkat etmediği bir nokta fakat bu sorular mülakatların çok önemli bir parçasını oluyor. Bunlar dışında özellikle ilk işiniz/stajınız için başvururken özgeçmişinize de çok dikkat etmeniz gerekiyor. Bu aşamada elenen birçok aday oluyor. Özgeçmiş hazırlamak apayrı bir konu ve bu yazının odak noktası olmadığı için detaylara girmiyorum fakat Kesişen Yollar Medium sayfası da dahil olmak üzere internette nasıl iyi özgeçmiş hazırlayabileceğinize dair birçok kaynak mevcut.

Mülakat sırasında:

  • Çok sessiz kalmak: Sizinle mülakat yapan kişi soruya nasıl yaklaşıyorsunuz, çözümünüzü nasıl geliştiriyorsunuz, sonuca nasıl ulaşıyorsunuz gibi noktalara doğru cevaba ulaşmak kadar önem veriyor. Soruyu çözerken bir yandan çözümünüzü anlatmak ve sesli düşünmek bu yüzden epey önemli. Sesli düşünmek aynı zamanda takıldığınız noktalarda mülakat yapan mühendise sizi yönlendirebilme, gerekirse ipuçları verebilme imkânı sağlıyor. Örneğin aklınıza ilk gelen fikir aslında bir çözüme götürmüyor olabilir, sesli düşünerek ve fikirlerinizi mülakat yapan mühendisle tartışarak bunu erken fark edip zaman kaybından kurtulabilirsiniz. Ayrıca sesli düşünerek düşünce yolunuzu belirttiğiniz için artı puanlar kazanabilirsiniz. Mülakat sonunda soruyu çözmemiş olsanız bile mülakatı yapan mühendiste olumlu bir izlenim bırakabilirsiniz, mülakatı geçmenizdeki belirleyici faktörü olabilir çünkü genellikle onsite mülakatlarda 3–5 farklı mühendisle mülakat oluyor. Bazı adaylar sesli düşünmek yerine birkaç dakika kendileri soru üzerinde uğraşıp sonra çözümlerini açıklamak isteyebiliyor fakat bence bu yöntem biraz riskli. Mülakat yaptığınız kişi ile aranızdaki iletişimde kopukluk oluyor, karşınızdaki mühendis beklemekten sıkılabilir, size karşı ilgisi azalabilir veya dikkati dağılabilir. Mülakatı yapan kişi bunu normal karşılayabileceği gibi tamamen olumsuz bir sinyal olarak da algılayabilir. Bu yüzden benim tavsiyem, soruyu çözerken bir yandan fikirlerinizi açıklamaya ve sesli düşünmeye kendinizi alıştırmanız yönünde.
  • İyi iletişim kuramamak, mülakatı yapan kişinin söylediklerine dikkat etmemek: Dışarıdan izlediğim mülakatlarda en çok yapılan hatalardan biri adayın mülakatı yapan kişinin geri bildirimlerine dikkat etmemesi ve kendi fikrini kabul ettirmeye çalışması. Her şeyden önce teknik mülakatlar iki kişinin bir soru üzerinde fikir alışverişi yapması ve soru üzerinde konuşmasından oluşuyor. Bu yüzden bence mülakatı bir iletişim formu olarak görmek gerekiyor. Bu durum fikirlerinizi doğru aktarabilmenin ve iyi iletişim kurabilmenin önemini arttırıyor. Mülakat yaptığınız mühendislerin sizin mülakatta başarılı olmanızı istediğini düşünebilirsiniz çünkü bu şirket için iyi bir işe alım anlamına geliyor. Bu yüzden takıldığınız yerlerde size ipuçları bırakabilirler. Mülakatta aldığınız yorumlara ve geri bildirimlere çok dikkat etmenizi tavsiye ederim.
  • Çözüm yoluna çok dikkat etmemek, sadece doğru cevaba ulaşmaya odaklanmak: Daha önce bahsettiğim gibi mülakatlarda doğru cevaba ulaşmak kadar çözüm yolu da önemli. Bu yüzden cevap doğru olsun ne olursa olsun gibi düşünmekten yerine çözümünüzün iyi olmasına da dikkat etmenizi tavsiye ederim. Birçok teknik mülakat sorusunun cevabı farklı dizayn kararları arasındaki dengeden oluşuyor. Örneğin iki farklı cevaptan bir tanesi zamanı diğeri program hafızasını optimize ediyor olabilir. Çözümünüze giderken verdiğiniz kararların sonucu bu anlamda nasıl etkilediğinin bilincinde olmanız gerekiyor.
  • Okunabilir olmayan kod yazmak: Çözümünüz ve fikriniz her yönden iyi olsa bile bunu güzel bir ve okunabilir şekilde kodlamadıktan sonra mülakat yaptığınız kişiye aktarmanız zor olacaktır. Burada benim gördüğüm sık yapılan hatalardan bir tanesi kodu gereğinden fazla optimize etmeye çalışmak ve bunun sonucunda kodun okunabilirliğine zarar vermek.
  • Mülakatın en başında optimize çözüme ulaşmaya çalışmak: Bence mülakatın başarılı geçmesi için en başından itibaren optimize çözüm hakkında konuşmaya başlamak gerektiğini düşünmek doğru değil. Aklınıza bir çözüm gelir gelmez dile getirmenizi ve üzerinde tartışmaya başlamanızı tavsiye ederim. Bazı durumlarda siz daha iyi bir çözüm bulmaya çalışırken mülakatı yapan kişi bulduğunuz çözümü yeterince iyi bulabiliyor. Aynı zamanda aklınıza ilk gelen çözümü dile getirmek soru üzerinde konuşmaya başlamanızı sağlıyor. Sizden daha iyi bir çözüm bekleniyorsa bile bulduğunuz çözümün eksik yönleri neler, hangi noktalarda geliştirilebilir gibi soruları tartışarak çözümünüzü geliştirebilirsiniz, beklenen çözüme yaklaşabilirsiniz.
  • Çözümü iyi test etmemek, analizini iyi yapmamak: Birçok mülakatın sonunda çözümü tamamladıktan sonra analiz etmeniz, varsa hataları fark etmeniz bekleniyor. Mülakat yapan kişiler de genellikle çözümden emin misiniz, geliştirilebilecek noktalar var mı gibi sorular soruyorlar. Mülakatın bu kısmı varsa çözümünüzdeki hataları düzeltmek için iyi bir fırsat. Mülakat ortamında kodunuzu çalıştıramadığınız için testi kendiniz yapmanız, programın çalışmasını tekrar etmeniz gerekiyor. Testlerinizi anlatırken de sadece konuşmak yerine bir şekilde dökümanda yazıya dökerek gösterirseniz daha açıklayıcı oluyor. Bu yüzden kodunuzu rahatça test edebilecek durumda olmanızı tavsiye ederim. Bir diğer dikkat edilmesi gereken nokta da testlerinizin neleri test ettiği. İdeal olarak olabildiğince az sayıda test ile olabilecek bütün durumları test etmelisiniz, eğer iki test aslında aynı şeyi test ediyorsa size zaman kaybı olarak dönecektir.
  • Fazla heyecanlanmak: Mülakat sırasında heyecanlanmanız normal bir durum fakat bu heyecanınızı çok geçmeden bastırmanız ve mülakatta en iyi performansı gösterebilmek için sakin kalmanız gerekiyor. Mülakatların başındaki tanışma kısmını bunun için iyi bir fırsat olarak görebilirsiniz. Bence mülakat heyecanını yenmenin en iyi yolu olabildiğince prova mülakat yapmak ve tabi ki olabildiğince fazla gerçek mülakat yapmak. Gerçek mülakatları birkaç kez tecrübe ettikten sonra heyecanınızı daha kolay kontrol altında tutabileceğinizi düşünüyorum. Bence mülakatı gözde çok büyütmeyerek önünüze başka fırsatların çıkacağını düşünmek heyecanınızı bastırmak için iyi bir bakış açısı.

Sonuç
Toparlayacak olursak bazı noktalara dikkat ederek mülakat performansınızı büyük ölçüde arttırabileceğinizi ve hedefinizdeki mülakatları geçebileceğinizi düşünüyorum. Herkesin mülakatlarda zorlandığı noktalar farklı olabiliyor. Bence bu yüzden mülakat çalışmasında eksikleri doğru tespit etmek ve gidermek çok önemli. Bunun da en iyi yollarından bir tanesi konu eksiğini kapattıktan sonra olabildiğince fazla prova mülakat yapmak. Mülakatlarınızda bol şans ve başarılar dilerim!

--

--