Simplicity is the Key - Basitlik Kilit Noktadır

Basitlik Kilit Noktadır (Simplicity is the Key)

http://www.extremeprogramming.org/rules/simple.html

Basit bir tasarım her zaman karmaşık bir tasarımdan daha az zaman gerektirir. Yani her zaman çalışabilecek en basit şeyi yap. Karmaşık bir şey bulursan, daha basit olanıyla değiştir. Çok daha fazla zaman israf etmeden önce, karmaşık kodun yerine yenisini koymak her zaman daha hızlı ve ucuzdur.

Birçok insan basitliği ölçmeye çalışır. Basit, ölçüme meydan okur çünkü çok öznel bir niteliktir. Bir kişinin basiti diğerinin karmaşığıdır. Gelişmiş bir teknoloji eklemek bir uygulamayı kolaylaştırabilir, diğerini ise bir karmaşaya çevirebilir.

Projede neyin basit olduğuna takım karar verir. Beraberce kodunuzu öznel olarak tartarsınız. Ben dört öznel nitelik öneriyorum; Testable (Test edilebilir), Understandable (Anlaşılabilir), Browsable (Taranabilir) and Explainable (Anlatılabilir) (TUBE).

Test edilebilir demek sorunları otomatik olarak kontrol edebilmek için birim ve kabul testlerini yazabilmek demektir. Bu, uygulamanızın genel tasarımını ve uygulamadaki nesnelerin eşleştirilmesini etkiler. Sisteminizi küçük, test edilebilir parçalara ayırın.

Taranabilirlik bir şeyi ne zaman istersen onu bulabilme niteliğidir. İyi isimler aradığınız şeyi bulmakta yardımcı olur. Polimorfizm, delegasyon ve türetmeyi doğru bir şekilde kullanmak ihtiyacınız olduğunda aradığınız şeyi bulmayı kolaylaştırır.

Anlaşılabilir açıktır, ancak yine de büyük ölçüde özneldir. Yeni birinin tamamen kafası karışsa da, bir sistem üzerinde uzun bir süredir çalışan bir takım anlar. Bu yüzden Anlatılabilir’i de bir nitelik olarak ekliyorum ki, yeni insanlara her şeyin nasıl çalıştığını anlatmanın kolay olduğu anlamında kullanılsın.

Birçok insan basitlik ölçüsü olarak şunu önerir: Sadece ve sadece bir kez (Once and Only Once). Çoğu kişi “only once” bölümünü anlar gibi görünüyor, ancak “once and” bölümü anlaşılmıyor. İlk bölüm şu anlama gelir: kod tekrarı anlamına gelse de, kodunun tüm niyetini ifade et.

Şöyle basit bir örnek düşünün; bir kesiri 100 ile çarparak yüzdeye çeviriyorsunuz ve ayrıca santimetreyi metreye çevirmek için de 100 ile çarpıyorsunuz. Şimdi bu işlemler için convertToPercentOrMeters(x) adında, 100 ile çarpan tek bir metot mu yazarsınız? HAYIR! Böyle yapmak bazı kod tekrarlarını giderse de hayır. İki metot olsun istersiniz; convertToPercent(aFraction), ve convertMetersToCentimeters(aLength). İki metot istersiniz, çünkü bu iki metot size farklı şeyler söyler. Sadece 100 ile çarpacağınızı değil, ayrıca neden 100 ile çarpacağınızı ve ne tür sayıların geçerli girdiler olduğunu.

Basit tasarımlarla ilgili bir şey varsa, o da tanınabilir olmaları için irfan (knowledge) gerektirmesidir. İrfan bilgiden (information) farklıdır, bir sürü bilginiz olabilir ancak irfanınız olmayabilir. İrfan sorun alanınıza dair ve zamanla gelişen kavrayıştır.

Basit tasarımlar sıklıkla proje bir süre ilerledikten sonra gelirler. En iyi yaklaşım sadece uyguladığınız özelliklerin kodunu yazmak, bir yandan da en basit tasarımı açığa çıkaracak yeterli irfana ulaşmaktır. Sonra aşamalı olarak yeniden düzenleyerek (refactor) yeni anlayışınızı ve tasarımınızı uygulayabilirsiniz.

Zamanı gelmeden özellik eklemeyerek, her şeyi olabildiğince uzun süre, olabildiğince basit tut. Ama dikkat et, tasarımı basit tutmak zor bir iştir.

Ayrıca Bakınız

K.I.S.S. - Keep It Simple Stupid

Last updated