Silikon Vadisi şirketlerinde nasıl staj / iş bulurum? — Kodlama Testleri

Selim Onal
kesisenyollardernegi
3 min readJan 16, 2020

Bundan önceki yazılarımızda (Silikon Vadisi şirketlerinde nasıl staj / iş bulurum? — Mülakat Öncesi) özgeçmiş hazırlarken ve başvuru sırasında nelere dikkat etmeniz gerektiğinden ve (Silikon Vadisi Şirketlerinde Nasıl İş Bulurum — Davranışsal Mülakatlar) davranışlar mülakatlara nasıl yaklaşmanız gerektiğinden bahsetmiştik. Bu yazıda ise birçok şirket için teknik mülakat sürecinin ilk aşaması olan kodlama testleri konusuna değineceğiz.

Çok nadir de olsa bazı şirketler, recruiter görüşmesinden sonra doğrudan sizi son aşamaya (onsite mülakatlara) çağırabilir, bazı şirketlerde ise telefonda bir mühendis ile teknik bir mülakat yaparsınız. Ancak günümüzde git gide birçok şirket bu aşamalardan önce size bir kodlama testi(coding challenge) yolluyor. Bu testler bazen bir zaman sınırlaması ile HackerRank, Codility gibi platformlar üzerinden, bazen şirketlerin kendi platformları üzerinden, bazense siz kodunuzu bitirince e-posta üzerinden şirketle paylaşmanız şeklinde yapılıyor. Bu aşamada bazı şirketler Veri Yapıları ve Algoritmalara odaklanan sorular sorarken, bazı şirketler ufak ama çalışan bir sistem tasarlamanızı ve kodlamanızı bekliyor. Bu aşamada ilk yapmanız gereken size yollanacak testin tam olarak içeriğini ve sizden beklentilerini öğrenmek.

Bu yazıda HackerRank, Codility gibi zaman sınırlaması olan ve genel olarak Veri Yapıları ve Algoritmalara odaklanan testlere değineceğiz. Bu tarz testler genelde 60 dakika ile 3 saat arası süren, ortalama 2–3 soru çözdüğünüz ve birçok durumda çözümünüzü hemen test edebildiğiniz örnek girdiler(input) oluyor. Burada sizinle bazı girdiler paylaşılırken, bazı girdiler paylaşılmıyor ve sadece kodunuzun kaç girdide başarılı olduğu ile ilgili bir istatistik veriliyor. Mülakat sürecinin her aşamasında olduğu gibi bu aşamada da, sizden beklentilerin tam olarak ne olduğunu öğrenmek ilk yapacağınız şey olmalı. Recruiter’dan size gelen mailde “ Our programming challenge assesses with Data Structures and Algorithms”, “We are trying to get an idea about how you apply theoretical concepts to real life examples ” gibi standart gözüken cümleler size ipucu verebilir. Ayrıca ufak bir Google araması, glassdoor.com, teamblind.com gibi siteler size çözeceğiniz sorularla ilgili yeterli ipucu verebilir. Eğer dış kaynaklardan yeterli bilgiyi toplayamazsanız, teste başlamadan önce size kaç soru sorulacağı, ne kadar zaman verileceği gibi standart sorular dışında da olabildiğince bilgi almak önemli: Kodunuzun okunurluğun önemli olup olmadığı (code readability), kodun içine açıklama yazıp yazmamanızın gerekliliği (commenting), kodunuzun sadece bir sistem tarafından mı değerlendirileceği yoksa bir mühendisin inceleyip incelemeyeceği, ek testlerle denenip denenmeyeceği gibi konuları da açıklığa kavuşturmanız de basit ama önemli detaylar. Bu gibi detaylar size gönderilen e-posta’da belirtilmemişse sizinle iletişime geçen recruiter’a ulaşıp bunların açıklığa kavuşturulmasını isteyebilirsiniz. Bazı şirketler olabildiğince hızlı çözmenizi isterken bazı şirketler olabildiğince temiz kod yazmanıza önem veriyor.

Bu tarz testlerde yazdığınız kodun kaç girdide çalışıp çalışmadığı veya doğru sonucu verip vermediğini genelde otomatik olarak sizinle paylaşılır. Burada eğer kodunuz size açık olan verilen örneklerin hepsinde çalışıyor ama gizli örneklerin tamamını geçemiyorsa dikkat etmeniz gereken şeyler:

  • Kodunuzun bütün uç durumlarda (edge case dediğimiz tüm durumlarda) çalıştığından emin olmak yapmanız gereken ilk şey. Burada çözdüğünüz deneme sorularında yaptığınız yanlışları, özellikle kaçırdığınız edge caseleri not almak ve konulara göre ayırmak iyi bir pratik olacaktır. Böylece daha önce pratik yaptığınız konudan olan ama tam olarak doğru yapamadığınız bir soruda daha önce benzer sorularda kaçırdığınız edge caseler ilk bakmanız gerekenler olmalı.
  • Kodunuz yeteri kadar hızlı değilse (yani bazı örneklerde timeout alıyorsanız), seçtiğiniz veri yapılarına bir kez daha bakın. Mesela soru sizden yeni bir veri yapısı dizayn etmenizi istiyorsa, her çağrılışında bütün sakladığınız datanın üzerinden geçen bir metotu mutlaka bir kez daha düşünün. Ya da recursive bir metot yazıyorsanız, aynı input için hesaplamayı birden fazla kez yapmadığınızdan emin olun. Size input boyutları verildiyse algoritmik olarak hangi algoritmaların timeout almayacağını analiz edin (input boyutu 10⁶ olan bir girdi de O(n²) çalışan çözümünüz timeout alacaktır.)
  • Eğer var olan kodunuzu optimize etmek istiyorsanız, önce çalışan ama timeout alan ya da bazı örneklerden hata veren kodunuzu silmeyin, comment out edip, iyileştirmeleri var olan kodunuzun kopyası üzerinde yapın.
  • Her zaman için çalışan ama yavaş bir kod, 90%‘ı tamamlanmış, çok hızlı olacak ama sürenin sonunda çalışmayan bir koddan daha iyidir.
  • Eğer test sırasında aklınıza hiçbir şey gelmezse, en azından orada verilen basit örnekleri geçecek, brute force bir çözüm bulmanız, tamamıyla boş geçmenizden daha iyi olacaktır.

Bu aşamada ikinci olarak çok kullanılan yöntem ise ev ödevi. Burada şirket size zaman sınırlaması koymadan, daha geniş ve birçok durumda ucu açık bir problemi çözmenizi ve genelde çözümünüzü kısa bir şekilde açıklayacağınız dokümantasyonu sizden bekler. Bu tarz ödevlerde yaklaşımınız daha sonraki yazılarda değineceğimiz telefon (phone screen) ve onsite mülakatlarında dikkat etmeniz gereken konularla paralel olduğu için burada bir daha detaylara girmeyeceğiz. Bir sonraki yazıda değineceğimiz konular ev ödevlerinde de uygulanabilir tavsiyeler olacak.

--

--