Yurtdisinda Yazilim Gelistirme — Mulakat Tipleri

Photo by Chris Ried on Unsplash

Giris

Bu yazida son yillarda yurtdisinda girdigim yazilim mulakatlarin bir ozetini yapacagim. Bunlarin buyuk bir kismi gunluk hayatta karsilasmadigimiz tipte olan ama hayatimizin da bir gercegi olan kodlama problemleridir. Ayni hatalari sizin de yapmamaniz icin ogrendigim dersleri de paylasacagim.

Siz de deneyimlerinizi yorumlara yazabilir, is arayan tanidiklarinizla yaziyi paylasabilirsiniz. Bazen yurtdisi deneyimlerimi LinkedIn’de kisaca yaziyorum. Beni oradan da takip edebilirsiniz.

Mulakat Asamalari

Sirketten sirkete degisiklik gostermekle birlikte genelde 3 asamali mulakatlar yapilir: klasik IK gorusmesi, ilk teknik mulakat ve ikinci teknik mulakat.

Insan Kaynaklari Gorusmesi

Ilk asama insan kaynaklariyla yapilir. Google’da hemen cevabini bulabileceginiz, yillardir sorulan klasik sorulari cevaplamaniz beklenir: “Neden su anki isinizden ayrilmak istiyorsunuz” gibi. Insan kaynaklari diye hafife almayin, bu asamada basit hatalarla elenebilirsiniz. Tecrubelerime gore bu tur sorulara kisa ve net bir cevap vermelisiniz. Onceden hazirlanip mumkun oldugunca dogaclama yapmamaya calisin.

“Uzmanlik alaninizi net olarak aktarin”

Neden? Cunku ise alim uzmanlari sizi bir kefeye koymak isterler. Eger “elimden her is gelir” imaji cizerseniz, karsi tarafin kafasini karistirirsiniz. Ornegin, kendinizi full-stack developer olarak tanitmissaniz “Do you have more experince in front-end or back-end development?” sorusu mutlaka gelir. Yuzde kac front-end/backend kodlama yaptiginiz ogrenilir. Isterseniz bir mulakatta Python, JavaScript, Java, C#, ve Scala dillerinde uzman oldugunuzu soyleyin, bana hak vereceksiniz. Buyuk ihtimalle hangisini en cok kullandiginizi soracaktir: “I know you have experience in many different languages but can you tell me your main language?”.

Ilk Teknik Mulakat

Ikinci asama ise teknik mulakatlarin ilkidir. Bu mulakatlar sirketten sirkete degisiklik gosteriyor.

🎯 Cevrimici kodlama (Online/Live Coding)

Basvurdugunuz sirkette calisan kidemli bir yazilimci ile Zoom gibi araclar uzerinden canli olarak kodlama yapmaniz beklenir. Verilen problemi “pseudo kod” olarak cozmeye calisirsiniz. Burada onemli olan soruya yaklasiminizi ogrenmek, zaman ve alan karmasikligini (time and space complexity) hesaplayabilmenizdir. Hangi dili kullandiginiz, syntax dogrulugu vb. cok da onemli degildir. Ancak bazi sirketler cevrimici IDE’lerle kodu calistirmanizi da isterler. Sure 45 ile 60 dakika arasindadir.

Bu tip bir mulakata yogun bir gunden sonra girmenizi onermem. Mumkunse o gun izin alin. Kafanizin mutlaka bos olmasi lazim. I

🎯 Cevrimdisi Kodlama (Offline Coding)

Codility, HackerRank gibi sitelerde sure kisitlamasiyla birkac soru cozmeniz gerekir. Genellikle 3 soru soru icin toplam 100 dakika sure verilir. Ilk soru en kolayidir ve sadece dogru sonucu bulmaniz beklenir (correctness). Akliniza gelen ilk cozum genelde en verimsiz, karmasikligi en yuksek olan yontemdir (brute-force yaklasimi), ama bu sorun degildir. Diger sorularda ise hizli ve verimli (efficiency) bir cozum bulmalisiniz. In-place algorithms, hashing, dynamic programming gibi teknikler ise yarayabilir.

Bana kalirsa en zor tip “cevrimici” asamadir. Cunku veri yapilarini ve algoritmalari cok iyi bilmeniz, probleme ne tip bir cozum (array, greedy, hashing, dynamic programming vs.) uygulayacaginizi soruyu okuyunca o anda karar vermeniz gerekir. Ayrica bazen problemi anlamak da basli basina bir sorun oluyor. Bazen basit bir soru oyle bir Ingilizceyle ve absurd formullerle yazilir ki, anlamak cozmekten daha zor oluyor.

Bu sorular gunluk hayatta ne isime yarayacak?

Sirketlere sorarsaniz size soyle bir klasik cevap verecektir: “We want to see how you approach and solve problems…”. Gercekte ise amac sadece adaylari zaman kaybetmeden elemektir — 1 saniyede onlarca saglam ve curuk elmani ayirabilen bir makine gibi… Belki o elenenler gercek hayat sorularini iyi cozen, yazilim prensiplerini uygulamak icin yoneticilerle savasmayi goze alabilen, ekibe/projeye iyi adapte olabilen, disiplinli yazilimcilardir. Ancak bir ilana yuzlerce kisi basvurunca hepsiyle teker teker gorusme yapmak yerine daha hizli ve az maliyetli bu yontem kullaniliyor.

🎯 Proje Odevi

Gercek hayata en yakin olan testtir. Size bir gereksinim listesi (requirements) verirler. Ornegin, Java Developer pozisyonlari icin bu bir Spring Boot bir projesidir. Bazen framework secimini size birakirlar. Birim ve entegrasyon testleri, kod kalitesi, tasarim desenlerinin (design paterns) kullanimi gibi kriterler vardir. Genellikle 1 hafta icinde bitirmenizi beklenir. Bazi agresif sirketler 3 gun de isteyebilir — ki bunlar kucuk veya orta buyuklukteki danismanlik sirketleridir.

Bu odevlerin en onemli avantaji ogretici olmalari. Eksikliklerinizi farkedip kendinizi gelistirme motivasyonunuzu artabiliyor. Bir sonraki mulakat icin de daha donanimli olabiliyorsunuz. Bu tarz odevler veren sirketler cok fazla degil. Zamaniniza saygi duyup diger tipteki mulakatlara calismanizi beklemedikleri icin calisana daha cok deger veriyorlar gibi geliyor bana. Boyle bir odev verilirse bu firsati degerlendirin, elinizden geleni yapin! Gerekirse izin alin, o odevi iyi teslim edin, en kotu ihtimalle yeni bir sey ogrenirsiniz :)

🎯 Telefon Mulakati

Bazen ilk teknik mulakat telefonla yapilir. Yukarida bahsettigim adimlara gecmeden once sirketin belirledigi kritere uygun olmayan adaylar elenir. Cevrimici ve cevrimdisi kodlama yontemine gore daha basittir ve genelde standart sorular sorulur: Java icin String vs StringBuilder, Throw vs Throws vb.

Ikinci Teknik Mulakat

Son asama sirketten sirkete degisiyor ama genelde kidemli yazilimcilar veya takim lideriyle soru-cevap seklinde mulakata girersiniz. Sorular da gercek hayatta karsilastiginiz problemlerin cozumuyle ilgilidir. Bunlar hem teknik hem de teknik olamayan (soft-skills) tarzda olur.

Ornegin, “Karsilastigin cok zor bir teknik sorunu nasil cozdugunu anlatir misin?” cok sorulan sorulardan biridir. Teknik olmayan sorulardan bir ornek ise: “Takim liderinle bir sorun yasarsan, sorunu nasil cozmeye calisirsin?”. Baska bir ornek de senior developer pozisyonuna basvurduysaniz “Neden kidemli yazilimci oldugunu dusunuyorsun — what makes you a senior developer?” olabilir.

Tecrube ettigim baska bir konu ise kariyerinizde gitmek istediginiz yon ile mevcut durumunuz arasinda teknik bilgi acigi varsa, basvurdugunuz pozisyona uygun oldugunuzu ikna etmek zok zor oluyor. Ornegin, siz “Full-stack Developer” rolunde deneyimlisiniz ama “Java Backend Developer” alaninda uzmanlasmak istiyorsunuz. Bu noktada “Java Backend Developer” pozisyonu mulakatinda sizin yeterince backend deneyimine sahip olmadiginiz anlasiliyor. Ilk sorulan soru ise “Projelerde yuzde kac oraninda backend isi yaptiniz?” oluyor.

Bunu asmak icin is disinda yaptiklariniz — blog yazmak, sertifika almak, online egitimler almak, projeler yapip GitHub ‘a koymak — az olsa da ikna edici olabiliyor.

Peki Nasil Hazirlanalim?

Evet! Bir cok elementi tanidik bir cok elementi gorduk. Simdi geldik en civcivli bolume: Kodlama mulakatlarina nasil hazirlanacagiz?

Acikcasi bu konuda uzman degilim ama tecrubelerime gore bunun kestirme yolu yok. Mucizevi bir kitap, video, online egitim vs ile tek seferde hazirlanip “kurtulmaya” calismaktansa, uzun vadeye yayip planli calismak gerekiyor. Asagidaki gibi farkli kaynaklardan calisabilirsiniz:

Software Engineer, Oracle Certified Java Programmer, http://suleymanyildirim.org/

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Suleyman Yildirim

Suleyman Yildirim

Software Engineer, Oracle Certified Java Programmer, http://suleymanyildirim.org/

More from Medium

Head First Java Edition II Article.

Using Java8 on MacOS

The Complete Guide to Understanding LocalStorage

How DB indexing works in a storage engine