Bugün yeni bir yazı dizisine başlamayı düşünüyorum. Max Kanat-Alexander'in Kod Basitliği adlı kitabını elimden geldiğince okuyup anladığım kadarıyla , bazen de küçük notlar ekleyerek yazmayı düşünüyorum. Kitap 9 bölümden oluşmaktadır. Ben de 9 yazı şeklinde bunu yayınlamayı düşünüyorum. Her haftanın belirli bir günü yazıları yayınlamayı düşünüyorum. Bana bu konuda ilham veren Büşra Uzun'dur. Daha önce medium üzerinden yayınlamış olduğu Clean Code adlı ünlü kitabın çevirisi çok hoşuma gitmiş ve her okuduğum yazıda kendisine müteşekkir olmuştum. Her birimiz böyle değerli bir kitabı iyi kötü çevirsek bu konuda daha da gelişiriz diye düşünüyorum. Kısa bir girişten sonra artık sözü kitaba devredelim :)
Ön söz
İyi programcı ile kötü programcı arasındaki fark, anlamaktır. İyi programcı ne yazdığını anlar, kötü programcı ise anlamaz. İnansanız da inanmasanız da gerçek aslında bu kadar basittir. Bu konuda daha önce Özcan Acar'ın kopyala yapıştır kültürü ile ilgili yazmış olduğu bir makaleyi okumuştum. Orada da kopyala yapıştır tabi ki yapılabilir. Burada önemli olan kopyaladığınız kodu gerçekten anlıyor musunuz yoksa sadece çalışıp çalışmamasına bakıp işinize devam mı ediyorsunuz ?
Eğer yazılımcı iseniz bu kitap yöntemlerin neden çalıştığını, çalışmayan yöntemlerin ise neden çalışmadığı konusunda size rehberlik edecektir. Yazılımcı değil, fakat yazılım sektöründe çalışıyorsanız yazılımcıları anlamanızda ve onlarla iletişimde size yardımcı olacaktır.
Yeterince tecrübeli olmasanız veya İngilizce ana diliniz olmasa bile bu kitabı okumanız size faydalı olacak ve size yeni tecrübeler katacaktır. Bununla birlikte bu kitap yazılım geliştirmeyle ilgili olmasına rağmen çok nadir kod içermektedir. Kod yerine gerçek dünyadan örnekler vermekteyiz. Bunu da her hangi bir programlama dilinden bağımsız yapıyoruz. Sonuç olarak umarız bu kitabı eğlenerek okursunuz.
Bilgisayarlardaki Sorun Nedir ?
Bilgisayarlar neden sıklıkla kırılır. Yazılım için bunun tek bir nedeni var, o da kötü programlamadır. Yazılımcılar her ne kadar müşterileri suçlasa da aslında problemin tepesinde yine kendileri vardır. Yazılımcılar zeki insanlar olmasına rağmen neden kötü kod yazarlar ? Bunun cevabını karmaşıklık olarak verebiliriz. Buna örnek olarak Windows 2000 verebiliriz. Yaklaşık 30 milyon satır koddan oluşuyor. (ki şuan bu Windows 10 ile kim bilir kaç milyon olmuştur. Kısa bir araştırma yaptım. Google yaklaşık 2 milyar satır koddan oluşmaktaymış. Şok oldum açıkçası :)) Bu karmaşıklığı yönetmek gerçekten zor. Eğer bu söylenenler somut şeyler olsa bir şekilde belki düzenlerdiniz, fakat tüm bunlar soyut ve bunu da ancak karmaşıklığı basite indirgeyerek yapabilirsiniz. İyi programcılar bunu kontrol altına almaya çalışırken kötü programcılar "sadece çalışsın" mantığı üzerinde durduklarından bunu kontrol edemez hale gelirler.
Belirli bir zaman sonra yöneticilerin ve müşterilerin baskısı ile kötü yazılımcılar işi yetiştirmek için iyice kodu basit indirgemekten uzaklaşırlar ve bu da zamanla kontrol etmesi zor bir işe döner. Proje büyüdükçe de oluşan hataları debug yaparak bulmak yüksek maliyetlere sebebiyet verir, aksi halde kod iyi bir şekilde basitleştirilmiş olsa bunun maliyeti çok daha uygun olurdu. İyi yazılımcılar kendilerini diğerlerinden farklı kılan şeyin kodu anlaşılır ve basit kılmak olduğunu bildikleri için bunu ihmal etmezler.
Programcılar hızlı kod yazmanın basit kod yazmaktan önemli olduğuna inanırlar, ama gerçek böyle değildir. Kodu yazarken üzerinde düşüneceğiniz fazladan 2-3 dakika ileride tekrardan kodunuza baktığınızda onu anlamanızı oldukça kolaylaştıracaktır. Yapmış olduğunuz 2-3 dakikalık fedakarlık size çok daha fazla olarak geri dönecektir. Aynı şey testler için de geçerli. Genelde test yazmaya zamanımız yok vs gibi bahaneler çok olur, fakat daha sonra proje büyüyüp yönetilmesi güç duruma gelince testlerin ne kadar değerli olduğunu o zaman anlıyorsunuz.
Bir Program Tam Olarak Nedir ?
Genel olarak bunun için 2 farklı açıklama yapılabilir:
- Bilgisayarlara verilen talimatlar dizisidir.
- Verilen talimat sonucu dönen cevaptır.
Bu açıklamalardan 1.si geliştiricilere aittir. 2.si ise kullanıcıya aittir. Aslında bakılırsa ikisi de aynı şey üzerinde çalışmasına rağmen farklı tanımlamalar yaparlar. Çünkü geliştirici bu işin matematiği ile uğraşırken kullanıcı ise aldığı sonuca bakar. Buna baktığımızda geliştirici ile kullanıcı arasındaki en temel fark bu değil midir ? İki tarafın birbirini yeterince anlamaması ve bunun sonucunda çıkan problemleri hepimiz görüyoruz ve görmeye de devam edeceğiz.
Aslında bakılırsa bu ikisi birbirini tamamlamayan şeylerdir. Bir market listesi hazırladığınızı düşünün , siz markete gidip bu listeyi almadığınız sürece o listenin bir önemi olmayacaktır. Tam tersi de markete gidip ne alacağını bilmemek de size bir fayda sağlamayacaktır. Bunun gibi de talimat ve eylem birlikte olduğunda ürün ortaya çıkacaktır. Buradaki market listesi ile talimat arasında şöyle temel bir fark var. Eğer siz markete listeyi dağınık dahi verseniz yavaş da olsa işinizi halledecektir, fakat talimat listesi market listesi kadar kısa olmayacağı için bu iş kabusa dönecektir. O yüzden talimat listesi çok düzenli olmalıdır ki , bu zor olan iş daha da zorlaşmasın.
Ayrıca talimata bu kadar bağlantılı başka bir alan yoktur. Mesela bir inşaat projesinde mimar sürekli yanındadır ve seni yönlendirir. Sürekli iletişim halinde olursunuz, fakat yazılım projelerinde bu böyle değildir. Kodu yazarken bilgisayarla başbaşasınızdır. Kalite burada makineye , geliştiricinin fikrine ve kodun kalitesine bağlı oluyor. Bu 3 sebep yazılım projelerinde karşılaştığımız en büyük problemdir. Bu kitap da kodun geliştirilmesine odaklanmıştır. Geliştiriciler hemen sonucu görmek arzusunda olurlar. Böylelikle kodun kalitesini ihmal edebiliyorlar. Bu kitapla bunu bırakıp kodun kalitesini ihmal etmemeyi de öğreneceğiz.
Bir bilim olarak kodun geliştirilmesine ihtiyacımız vardır.
Kod Basitliği adlı kitabın ön söz ve giriş kısımlarını bugün birlikte ele almaya çalıştık. Dediğimiz gibi 9 yazılık bir seri yazma hedefimiz var. 1'inciyi yazdık geriye kaldı 8 tane. Umarım aksatmadan hedeflediğimiz yere ulaşabiliriz.
Daha bilinçli ve güzel kodlar yazmak dileğiyle. Hoşça kalın.
Hiç yorum yok:
Yorum Gönder