Soru Cevap 1

Halil Coşgun
3 min readAug 12, 2021

Bir ürünü baştan sona geliştirmekte zorlanıyorum. Bu zorluğu nasıl aşabilirim?

Bu durumun iki nedeninin olabileceğini düşünüyorum. Birincisi, öğrenmek istenilen çok şey olması ve bu sebeple bir türlü tek bir projeye odaklanamamak durumu… İkincisi de tecrübe eksikliği

Cevaplamaya en zoru ile başlayayım; tek bir projeye odaklanamamak durumu

Tecrübe eksikliğini gidermek için, Arcanoid, Tetris, Space Inviders, Pac-Man gibi oyunları baştan yazmayı, yani taklitlerini yapmayı tavsiye ediyorum. Taklit etmek, öğrenmenin en güzel yollarından biri bence.

Hangi sırayla geliştirmeliyim peki önerdiğiniz 4 oyunu derseniz; en başta Arcanoid ve Tetris’i bitirmek, ardından Space Inviders’ı klonlamak ve en son da Pac-Man’le acemiliği atmaya bir adım daha yaklaşmak, doğru bir sıralama olacaktır.

Kendimi geliştirmek için izleyebileceğim kurs önerileriniz nelerdir?

Patika.dev’deki eğitim videolarını ve Kodluyoruz Bootcamp’leri yakından takip etmenizi öneririm.

C++ ile ilgileniyorsak The Cherno ve Json Turner’ı takip etmenizi şiddetle tavsiye ederim.

Jorge Rodriguez’den oyun geliştiriciler için matematik… Defalarca izlemek gerek!

Okumam için önerebileceğiniz kaynaklar nelerdir?

Clean Code — Robert C. Martin

C# in Depth — Jon Skeet

Code Complete — Steve McConnell

Clean Architecture — Robert C. Martin

Software Craftsmanship — Sandro Mancuso

Working Effectively with Legacy Code — Michael C. Feathers

Mimarisi incelenebilecek github projesi önerilerinizi paylaşabilir misiniz?

Şimdilik 1 tane bırakayım. Ancak EA, Blizzard, Valve, Riot gibi oyun dünyasının devlerinin github profillerine de bir göz atmanızı tavsiye ederim.

OOP konusunda kendimi geliştirmem için tavsiyeleriniz nedir?

Üzülerek söylüyorum ki, elimde bu paradigma özelinde bizleri uzmanlaştıracak muhteşem bir formülü yok. OOP’nin bir paradigma olduğunu kabul edip, onun sunduklarını ve sınırlarını iyi anlamak gerekiyor. Abstraction, Encapsulation, Inheritence, Polymorphism… Bu dört temel kavramı önce teorik olarak çalışmak, daha sonra da bol bol kod yazmak gerekiyor. Yazdığımız her kodda çok fazla hata yapacağız. Önemli olan, her yazdığımız kodun eksiklerini görüp, onları kabullenmek ve o eksikleri iyileştirmeye çalışmak. Hatalı kod üret, hatalı tasarımlar yap, ders al ve düzelt döngüsüne sadık kaldığımız sürece, bu paradigmayı daha hızlı kavrayacağımızı düşünüyorum.

Yazılım mimarisinden ve OOP’den amacımız Unity oyunumuzu, her biri 300–400 satırlık 7–8 scripte sıkıştırmak yerine daha planlı, her biri single responsibility taşıyan ve 200 satır kodu geçmeyen en az 25–30 script ile projeyi kurmak. Böylelikle daha readable, reusable, daha optimize ve daha clean kod yazmayı hedefliyoruz. ObjectPooling, Inheritance, Polymorphism, Design patterns gibi kavramları biliyoruz, uyguluyoruz, ama nasıl en az 25–30 scriptin önce taşıdıkları sorumlulukları belirleyip sonra bu bahsettiğimiz kavramları hayata geçirerek scriptler aralarındaki ilişki ağını kurarız, mimari oluştururuz?

Öncelikle şunu belirtmeliyim ki, nasıl daha iyi mimari yaparım sorusu, bir çok geliştiricinin ömrü boyunca arayacağı bir soru. Takdir edersiniz ki; aynı zamanda bu soru, cevaplaması en zor sorulardan biri.

Kodunuzun en büyük birimlerinden, en küçük birimlerine kadar bir haberleşme ağı kurmak, kodun kontrol edilebilir bir akışını sağlamak, yani bu kocaman karmaşayı yönetmek meselesi, bütün yazılımcıların hali hazırda farklı yöntemler kullanarak çözmeye çalıştıkları bir mesele. Ne yazık ki yazılım dünyası, herkes tarafından kabul edilen ve karmaşayı nasıl yönetiriz sorununu tam olarak çözebilecek bir kurallar bütünü sunamıyor bize. “Çok kod oku, çok kod yaz, çok hata yap ve yaptığın her hatayı çözmek için daha iyi bir yol ara”… Kısa bir araştırma yapıldığında bu öneriler döngüsünü defalarca duymak mümkün.

Sorunun kesin cevabını veremiyorum ama, en azından bu sorunun cevabını bulmuş ya da bulmaya benden çok çok daha yakın ustalarımın videolarını, bloglarını aşağıya bırakıyorum.

Lemir Orhan Ergin, Bilgem Çakır, Burak Selim Şenyurt, Bjarne Stroustrup, Jon Skeet, Robert C. Martin, Herb Sutter, Jason Turner, Martin Fowler

Umarım sorulara verdiğim naçizane cevaplar işinize yaramıştır. Sürç-i lisan eylediysek affoluna.

Sevgiler :)

--

--