Yurtdışı mülakatlarına hazırlananların okuması gereken 3 kitap!
Mülakatlara hazırlanırken kendini geliştirmene yarayacak 3 harika kitap ve yurtdışındaki mülakatların anatomisi
2015 yılında kariyerime yurtdışında devam etmeye karar verdiğimde tam olarak beni nasıl bir sürecin beklediğini bilmiyordum. Hatta 2015 yılında Türkiye’deki teknoloji trendlerini ve hatta mülakat kültürünü düşündüğümüzde yurtdışındaki mülakatların bu kadar farklı olabileceği aklıma gelmemişti. Artık durum tabii ki çok farklı. Bir çok yerli firma da yurtdışında uygulanan işe alım süreçlerini yavaş yavaş kullanmaya başladıkları gibi mülakatları da benzer bir hal aldı diyebiliriz. Bunda muhtemelen bir çok kişinin artık yurtdışı firmalarla görüşmeye başlayıp oradaki süreçleri çok yakından tanımasının da katkısı var diyebiliriz.
Bugün farklı bir şey yaparak bir değil, üç kitap tanıtacağım ve bu kitapların teknik olarak hangi alanda gelişmenize yardımcı olacağından bahsedeceğim. Eğer mülakata girmiyorsanız bile bu kitapların sizin yeteneklerinize katacağı çok şey olacağına inanıyorum. Umarım faydalı bulursunuz.
Teknoloji firmalarının mülakat süreçleri
Teknoloji firmalarının mülakatları genellikle benzer bir takım adımları izliyor. Ancak kimi zaman daha kısa kimi zaman da daha uzun olabiliyor. Bu sürecin uzunluğu ve detayı biraz da firmanın hangi aşamada olduğuna göre değişiyor. Bu yüzden bunu biraz daha alt kırılımlara böleceğim. Unutmayın her bu genel bir sınıflandırma ve anlatımı basitleştirmek için köşelerini biraz keseceğim. Amacım mülakat öncesi firmayı incelerken aklınızda bir fikir oluşması.
Erken dönem girişimler; A serisi yatırım turuna henüz girmemiş firmalar dersek çok da yanılmayız. Bu firmalar genellikle ölçeklenmeye uygun bir fikri uygulayabileceğini düşündükleri bir pazarda çalıştırmaya çalışırlar. Takım çoğunlukla 3-5 kişiden fazla değildir. Aradıkları profil genellikle Fullstack yazılımcılardır ancak bir alanda özelleşmiş roller de bulabilirsiniz. Bu firmalar riskli işe alımlar yapabilirler ve sizin potansiyelinize güvenerek size normalde alabileceğinizden daha yüksek pozisyonlar teklif edebilirler. Maaşları skalası büyük rakiplerine oranla daha az olabilirken, size daha fazla düşük fiyattan (ya da bedava!) hisse alma opsiyonu verebilirler. Mülakatları genelde çok formal olmaz.
Fonlanmış girişimler; Genellikle fikrini ispatlamış, ya da ispatlayabileceğine yatırımcıları ikna etmiş firmalardır. Bu durumda A serisi yatırım turunu tamamlamış diyebiliriz. Artık ürünlerini ölçeklendirmek için adımlar atmaya başlarlar. Belli alanlarda özelleşmiş yazılımcılara ihtiyaç duymaya başlarlar, örneğin Front-End, Back-End ya da Infrastructure üzerinde geliştirme yapacak yazılımcılar vs. Bu aşamada firmalar hala riskli işe alımlar yapabilir ve size büyük roller teklif edebilirler. Maaşları yavaş yavaş rekabet etmeye başlayabilir ve genelde bu aşamdaki firmalar bol bol para yakarak ilerlerler.
Scale-up girişimler; Fikirlerini ispatlamış ve artık ölçeklendirmeye başlayan firmalardır. Bunlar çılgınca büyüme hedeflerini hayata geçirmek için işe alım yaparlar. Artık belli alanlarda özelleşmiş takımlar oluşmuştur, Developer Enablement, Cloud Infrastructure, Data Enablement gibi value-stream dışında stratejik amaçlı takımlar oluşur. Bu gibi firmalar iyi kurulursa 100’lerce işe alım yapabilir ve aynı zamanda sekteye uğratmadan ürün geliştirebilirler. Hypergrowth aşaması da bunun bir alt kırılımı diyebiliriz. Bu aşamada firmaların çok güçlü liderlere ihtiyacı olabilir. Bu noktada sizin liderlik yetkinliğiniz varsa teknik olarak çok güçlü olmasanız da teklif alabilirsiniz. Mülakatları, ulaşmak istedikleri ölçeklere bakarsak hızlı bir şekilde ilerleyebilir çünkü rolleri hızlı kapatmak isteyeceklerdir.
Big Tech ve yerleşmiş girişimler; Bu firmalar ölçeklenme hedeflerini başarmış, artık bunu sisteme oturtmuş belki de halka arzını tamamlamış firmalardır diyebiliriz. Big Tech genelde Facebook, Twitter, Uber, Netflix gibi firmalar için kullanılırken Enterprise kavramı da çoğunlukla Microsoft, Oracle gibi firmalar için kullanılıyor. Bu firmalar artık dramatik bir şekilde büyüseler bile bunu öğrenmişler ve kültürlerinin bir parçası haline getirmişlerdir. Tabii ki bunun kötü örnekleri yok değil. Ama onlardan burada bahsetmiyorum. Bu firmalar riskli kararlar veremezler. Çünkü önceki aşamalarda yaptıkları riskli kararlarla bu noktaya gelmelerine rağmen pazarda ciddi bir rekabetin içinde oldukları için her zaman “A Player” dediğimiz en iyi yetenekleri en yüksek maaşla işe almaya çalışırlar. Firmanızda Principal, Staff, Senior engineer olduğunuz halde buralarda size orta seviye yazılımcı teklifleri gelebilir, ve sürpriz bir şekilde bu teklifler sizin mevcut maaşınızdan %50 daha fazla bile olabilir!
Yazılımcı mülakatları 3 ana temadan oluşmasına rağmen firmaların hangi aşamada olduklarına ve risk iştahlarına göre farklılıklar gösterirler.
Sistem Tasarımı ve Mimari
Bu görüşmede mülakatı yapan kişi sizin iletişim ve problem çözme becerilerinizi ölçmeye çalışır. Bunu yaparken de bir çok farklı sinyalden faydalanır;
Görüşmeyi yapan kişinin sorduğu soruyu anladınız mı?
Anlamaya çalışırken nasıl sorular soruyorsunuz, sorduğunuz sorularla konuya hakimiyetinizi gösterebiliyor musunuz?
Sorunu anladıktan sonra farklı “edge case”’leri düşünebiliyor musunuz?
Bilmediğiniz bir konuyla karşılaşırsanız bununla nasıl baş ediyorsunuz?
Problem çözerken aklınızdakini net bir şekilde anlatabiliyor musunuz?
Soruyu soran sizi sınarken ona nasıl tepki veriyorsunuz? Korumacı mısınız yoksa açık fikirli mi?
Varsayımlar yaparken bunların varsayım olduğunu fark edebiliyor musunuz?
Tasarımı yaparken süreci siz yönetebiliyor musunuz?
Aklınızdaki çözüme giderken yanlış olduğunu fark edince nasıl pivot ediyorsunuz?
Direkt çözümün detaylarına dalıp soru soranı unutup kendiniz mi çözüm üretiyorsunuz?
İşe bu gibi sinyaller sizin bu görüşmedeki başarınızı ve hatta başarılı olursanız da sizin alacağınız teklifin seviyesini belirliyor. Bunlardan çok fazla “Red Flag” almadan, olumlu sinyaller toplarsanız başarılı oldunuz demektir. Genellikle büyük teknoloji firmalarında bu mülakat iki farklı round şeklinde karşınıza çıkabilir. Ancak çoğunlukla 1 saat
Bu konudaki kitap önerim; Alex Xu’dan System Design Interview: An Insider’s Guide. Kitap size ölçeklenebilir bir sistem mimarisi kurabilmeniz hakkında yardımcı oluyor. Aynı zamanda da bu sorulara nasıl yaklaşacağınız hakkında adım adım anlatımlarda bulunuyor. Şimdi “benim bu kitaba neden ihtiyacın olsun iki kutu çizebilirim ne olacak ki” diyebilirsiniz. Eminim sorulacak soruların cevabını biliyorsunuzdur, ancak bir çok zaman bu sorunları milyarlarca kullanıcı, yüzbinlerce istek için ölçeklememiş olabilirsiniz. Dolayısıyla bunu tecrübe etmediyseniz sizin bakış açınızı değiştireceğine inanıyorum. Bu konuda kendinizi geliştirmek istiyorsanız Kevin Modzelewski’nin 2012 yılında Stanford’taki How We’ve scaled Dropbox sunumunu ve Educative.io üzerinden erişebileceğiniz Grokking the System Interview eğitimini de inceleyebilirsiniz.
Eğer hedefiniz büyük verilerle çalışan firmalarsa ve sizin de bu alanda çok fazla tecrübeniz yoksa kesinlikle Martin Kleppmann’ın “Designing Data-Intensive Application” kitabına da göz atmanızı öneririm. Özellikle büyük teknoloji firmalarıyla yapacağınız görüşmelerde cevaplayacağınız soruların ölçekleri de çok fazla olacağı için bu kitapta anlatılanlara kulak aşinalığı bile olması sizin yaratacağınız etkiyi değiştirebilir.
Kodlama mülakatı
Bu mülakatı yapan kişiler sizin kullandığınız yazılım diline olan hakimiyetinize, teknik yetkinliğinize, aklınızdaki çözümü nasıl anlattığınıza ve nasıl test ettiğinize dair sinyaller toplamaya çalışıyor. Yani konu yine sadece problemi çözmeniz değil, aynı zaman nasıl test ettiğiniz ya da farklı test case’leri nasıl gördüğünüz ile de ilgili. Bu görüşmenin yıllar içinde iki farklı çeşidini gözlemledim. Büyük teknoloji firmaları genellikle soru havuzlarından rastgele 2-3 soru seçip sizin bu soruları çözmenizi bekliyorlar. Daha küçük firmalarda daha spesifik bir problem verip sizden bu problemi uçtan uca kodlamanızı bekliyorlar. Buna bağlı olarak da bu mülakattan beklenti değişebiliyor. Eğer ilk tarz soruları merak ediyorsanız, benim önereceğim kitap Gayle Laakmann McDowell’den “Cracking the coding interview” kitabı. Ancak bu kitaba sadece mülakata hazırlanmak olarak bakarsanız kesinlikle yanılırsınız. Çünkü kitabın size öğretmeye çalıştığı bir problem çözme metodu. Kısaca özetlemek gerekirse;
Problemi çok iyi anla ve varsayımlar yapıyorsan bunları açıkça dile getir ve elindeki verilere bak.
Varsayımlarını ay, yıl ve onlarca yıllık tahminlere oturt. Örneğin saklayacağın veriyi 100mb olarak hesapladıysan uzun yıllar sonunda nasıl bir alana ihtiyacın olacağını düşün ve problemi uzun vadeli çözmeye çalış.
Problemi ilk başta brute force şeklinde çözmeye çalış. Gereksiz optimizasyonlardan kaçın ancak bunun bilincinde olduğunu açıkça dile getir.
Problemi çözdükten ve testlerini yaptıktan sonra optimizasyon noktalarını ve hata durumlarını belirle.
Eğer vaktin varsa bunları uygula, yoksa bunları açıkça dile getir.
Kolay duyuluyor değil mi? Aslında zaten kolay, konu detaylarda saklı. Kitap bu yüzden bir çok optimizasyon yönteminden ve bunları nasıl uygulayabileceğinizden bahsediyor. Bunlar aslında computer science derslerinden aldığınız bilgiler olabilir, ancak uygulamaya geldiğinde işler biraz değişebiliyor. Eğer kitabı almak istemiyorsanız leetcode, hackerrank gibi sitelerden de sorular çözerek kendinizi geliştirebilirsiniz.
İkinci farklı çeşit gördüğüm kodlama mülakatı da size verilen bir problemi bir ürünmüş gibi ele alıp düşünmeniz yönünde. Örneğin finansal hesap yapan uygulamanın bir servisi olabilir, ya da hazır bir API’dan veri çekerek bunları anlamlandırmak üzerine olabilir ya da bir veri seti üzerindeki verileri hesaplamalardan geçirip sonunda bir çıktı üretmek üzerine olabilir. Bu gibi görüşmelerde görüşmeyi yapan aşağıdaki sinyalleri toplamaya ve buna bağlı olarak sizin tecrübenizi seviyelendirmeye çalışır.
Planlama aşamasını nasıl atlattı? Varsayımlar yaptı mı? Varsayımlarını sorular sorarak anlattı mı?
Kodun okunabilirliği nasıl? Kullandığı değişken ve fonksiyon isimleri mantıklı mı?
Çözüm yeterince esnek mi? Değilse nedeninden bahsetmiş mi?
Çözümün performansını düşünmüş mü? Tercihlerini bilinçli mi yapmış?
Test edilebilir bir kod mu yazmış? Test yazmış mı? Yazmadıysa nedenini anlatmış mı?
Hata yönetimini düşünmüş mü? Ne gibi hatalarla karşılaşabileceğinden bahsetmiş?
Verilen süre içinde ne kadarlık bir kısmı çözebilmiş? Çözdüğü kısım doğru sonuç veriyor mu? Tümünü çözdüyse, uygulama çalışıyor mu?
Davranış Mülakatı
Kimi firmalar bu aşamaya “Culture fit” ya da “values fit” gibi isimler de koyabiliyorlar. Ancak genelde “culture fit” ismi farklı bir çağrışım yaptığı için tercih edilmiyor. Burada her firmanın farklı bir yaklaşımı olabiliyor, kimi firmalar kendi değerlerini baz alarak bir mülakat formatı hazırlıyor, kimisi senin sorunlar karşısındaki davranışını anlamaya çalışıyor, bazıları da tecrübenden nasıl firmalarda çalıştığını görmeye çalışıyor.
Bu aşamada önemli olan bir kaç nokta var;
Her zaman cevaplarınızı verirken gerçek tecrübelere dayandırın. Mümkün olduğunca ayakları yere basan örnekler verin. Örnekler verirken de bağlamı da vermeyi unutmayın ve sonunda kesinlikle sonuçlarından bahsedin. Bunun için STAR yöntemini kullanabilirsiniz. Situation, Task, Action, Result.
Unutmayın çoğu durumda bir tane doğru cevap yok. Yani firmadaki yazılımcı sayısı, içinde bulunduğu kısıtlar, çalıştığı sektör ve o an içinde bulunduğu durumu da hesaba katarak opsiyonlardan bahsedebilirsiniz. Örneğin iyi bir proje nasıl geliştirilir sorusuna bir çok farklı yanıt verebilirsiniz, ya da iyi bir CI pipeline nasıl olur derseniz o da yazılımcı sayısı, teknoloji, firmanın süreçleri gibi bir çok farklı koşula göre değişebilir.
Her zaman idealinin ne olması gerektiğinden bahsedin, ancak cevaplarınızı gerçek hayat örnekleri vererek somutlaştırın. Bu sizin tecrübenizin bir yansıması olacaktır.
Asla yalan söylemeyin. Bilmediklerinizi bilmiyorum demenizin bir sakıncası yok.
Başarısızlıklarınızı anlatmaktan çekinmeyin, ama onlardan ne öğrendiğinizi ve çıkardığınız dersleri paylaşın.
Mülakat öncesi firmayı inceleyin, ne iş yaptığını çok iyi anlamaya çalışın anlamadığınız yerleri bu görüşmede sorun. Aklınızda “Neden bu firmada çalışmak istiyorum” sorusuna bir cevap olsun.
Mülakat sonrası
Mülakat sonrasında “hire” ya da “no-hire” kararını size görüşmeyi yaptığınız işe alımcı verecektir. Eğer başarılı olduysanız ya size başvurduğunuz pozisyonda bir teklif ile gelecektir ya da minimum çıtayı karşılıyor ancak tam o seviye değilseniz daha düşük bir seviyede teklif gelecektir. Gelen teklifin bir kaç adımı olabilir ancak bunun detayına burada girmek yerine daha önceden paylaştığım bir twitter bilgiselini buraya bırakacağım.
Tüm mülakatların sonunda genellikle size 10-15 dakikalık bir zaman verilir ve burada mülakatı yapana sorular sorabilirsiniz. Benim önerim “Firma kültürünüz nasıldır” “hangi teknolojileri kullanıyorsunuz” gibi sorular sormamanız. Bunun yerine, sizinle mülakat yapacak kişilerin kariyerlerine mülakat öncesi göz gezdirin ve onlara bunun sinyalini vererek neden bu firmayı tercih ettiğini sorun. Örneğin “Gördüğüm kadarıyla X, Y firmalarında çalışmışsın daha önce, neden Y’yi bırakıp da buraya geçtin? Sence neden bu firmayı tercih etmeliyim?” ya da en sevdiğim zor sorulardan biri olan “Sence firmada iyi gitmeyen neler var?” sonrasında da “Neden bunu değiştirmiyorsun?”. Bir başka örnek de “Günde kaç defa deployment yapıyorsunuz?”, “Deployment yapmak ne kadar zamanını alıyor?”, “Neden o kadar yavaş?”, “Bunu neden düzeltmiyorsunuz?”. Bunu önermemin nedeni şu, eğer soruyu direkt olarak sorarsanız size firma kültürü hakkında pazarlamacı lafları söyleyecekler olmaları. Bunun yerine firmanın kültürünü anlamak için sorunuzun ayaklarını yere bastırmanız. Böylece hem karşı taraf sizin soracağınız sorularla tecrübenizi daha iyi anlayacağı gibi aynı zamanda da daha dürüst cevaplar alabileceksiniz.
Bu yazıda mümkün oldukça son 6 yıldır hem aday hem de firma adına yaptığım toplamda 200’den fazla mülakat sonucu edindiğim bilgileri paylaşmaya çalıştım. Umarım sizin için faydalı olmuştur. Her zaman olduğu gibi geribildirimde bulunmayı unutmayın!
Bu haftayı kapatırken vurgulamak istediğim çok önemli bir konu var. Burada bahsettiklerim sanki sizi ÖSS’ye hazırlıyormuşum gibi duyulabilir. Ancak bir çok firma sürecini sizi en iyi şekilde tanımak ve değerlendirmek için hazırlıyor. Yani günün sonunda sizin bu mülakatlardaki başarınız aynı zamanda sizin teknik yetkinliğinizin ve tecrübenizin bir yansıması olacak. Yani diyorum ki, bu kitapları sanki bir üniversite sınavına hazırlanır gibi değil, daha iyi bir yazılımcı olmak için incelemeye alırsanız dramatik bir şekilde farkı göreceksiniz. Bu sözüm özellikle üniversite öğrencisi arkadaşımlarıma! Geriye dönüp baktığımda, keşke bu içeriklere üniversitedeyken ulaşmış olsaydım ya da okuldaki hocalarım bunları bana öğretmiş olsalardı diyorum. Ancak biliyoruz ki üniversite eğitimi çoğu üniversite için, kendi içinde çok rijit ve standartları olan bir müfredata bağlı. Dolayısıyla eğer yazılım alanında bir kariyer kovalamak istiyorsanız, hatta çok iyi bir yazılımcı olmak istiyorsanız bu bilgileri üniversitede edinip bol bol tecrübe etmek adına kod yazmanızı öneririm.
Gelecek hafta görüşmek üzere! 👋
Algoritma soruları genel olarak leetcode'daki sorulardan easy/med/hard hangisine denk geliyor ? .
Bizi küçük küçük yurtdışına hazırlıyor gibisin. Sayende gideceğiz galiba. :)