Daniel Habib isimli bir programcı, yazılım görüşmelerinde konu ne olursa olsun nasıl bir yaklaşım sergilemeniz gerektiği konusunda bir spreadsheet oluşturmuş.
1. İnceleme
- İnput’un ne olduğunu açıkça belirttim mi?
- İstenen output’un ne olduğunu netleştirdim mi?
- Elle çözülebilecek basit bir örnek oluşturdum mu?
- Tüm aksiyomları yazdım mı?
- Tüm constraints‘ler benim için ok midir?
- Tüm akla yatkın varsayımları yazıp türettim mi?
2. Strateji
- Brute force bir çözüm için beyin fırtınası yaptım mı?
- Brute force çözümün çalışma zamanını analiz ettim mi?
- Brute force çözümün space gereksinimini analiz ettim mi?
- İnput’un memory üzerindeki kapladığı büyüklük ne kadar?
- Daha iyi, daha karmaşık bir çözüm bulabildim mi?
- Bu çözümün time complexity‘sini analiz ettim mi?
- Bu çözümün space complexity‘sini analiz ettim mi?
- Bu çözümü doğrudan ilk uyguladığım basit çözümümle karşılaştırdım mı?
- Kodlamaya başladığımda kendime güveniyor muyum?
- Aklıma gelen tüm yaklaşımları düşündüm mü?
- İstediğim stratejiyi açıkça yazdım mı?
- Açıkça base case‘leri dikkate aldım mı? Takıldığım durumlarda ne kadar iyi idare ettim?
3. Kodlama
- Kodum ne kadar temiz yazılmıştı?
- Off-by-one hatalarını kontrol ettim mi? Yani index’lerin 0’dan başlaması veya while içerisinde <= yerine < kullanımı gibi.
- Kodlama sırasında hangi fonksiyonları kullanacağımı tahmin edebildim mi?
- İnceleme kısmında yaptığım “Beyin fırtınası stratejim” sorunu çözdü mü?
- Kodlama süreci ne kadar sorunsuzdu?
- Yazdığım kod ile çözümümü anlatabildim mi?
- Kodumdaki ilginç fonksiyonların avantajlarından yararlandım mı?
4. Review
- Time complexit’yi kanıtladım mı?
- Space complexit’yi kanıtladım mı?
- Farklı test senaryoları yazıp bunları uyguladım mı?
- Ne kadar önemsiz olursa olsun satır satır mı gittim?
- Kodumu gözden geçirirken herhangi bir değişiklik yapmam gerekti mi?