15 Nisan 2018 Pazar

Code Simplicity ( Kod Basitliği - 3)

     S.a. Arkadaşlar,
     Bildiğiniz gibi Kod Basitliği kitabı yazı serisine başlamıştık. Önceki yazıda kayıp bilimi işlemiştik. Yazılımcının aynı zamanda bir tasarımcı olduğunu ve yazılım bilim ilişkisi üzerinde durmuştuk. Bugün ise 3.bölüm olan yazılım tasarımının zorluklarına değineceğiz. Şimdi kısa bir giriş yaptıktan sonra yazımıza geçebiliriz.
       Yazılım yaparken ne yaptığımızın farkında olup, amacımızın ne olduğuna iyice karar vermeliyiz. Aslına bakılırsa tüm yazılımların ortak amacı "insanlara yardım etmektir". Zaten yazdığımız programlara bakarsak her ne kadar belirli bir ücret karşılığında bunu yapsak da  insanların işini kolaylaştırıyoruz. Sadece yazılım için de değil, mühendislik başlığı altındaki çoğu icat ve buluş için de bu geçerlidir.

      İnsanlara yardım etmek kavramını özelleştirebiliriz. Mesela kelime işlem programlarıyla metinler konusunda yardımcı olurken , tarayıcılarla internette gezme konusunda yardımcı oluyoruz. Bazı programlar belirli bir kısma hitap eder mesela. Muhasebe programlarının sadece muhasebecilerinin kullanması veya ide'leri yazılımcıların kullanması gibi. Yazılımları hep insanlar için yazıyoruz, yoksa bir bilgisayar için yazılım yazılmaz. Belki bilgisayarı hızlandırmak için bir program yazıyoruz, ama bu bile insanı bilgisayar başında daha fazla rahat edebilmesidir için. Eski edebiyatımızda sanat sanat için midir sanat toplum için mıdır tartışması aklıma geldi:) Burada yazılım insan içindir diyoruz. 

     Şimdi "yardım etmek" anlamına odaklanalım. Yardım etmek kişisel bir kavramdır. Kişiden kişiye değişiklik gösterebilir. Ama Webmaster'in Yeni Dünya Sözlüğünde ,  bir şeyi kolaylaştırmak için yapılan eylem. Bir çok konuda yardım edilebilir. Bir işi organize ederek, bir kitap yazarak (biz de blog yazarak :)), diyet planlayarak vb tüm işlerlerle yardım edilebilir.

     Yazılımın amacı para kazanmak veya ne kadar zeki olduğunu göstermemek olmamalıdır. Para kazanmak tabi ki çok önemlidir, ama liseden bir öğretmenimizin not için çalışmayın, öğrenmek için çalışın , notu zaten alırsınız derdi. Ben de burada işi gerçekten güzel yaparsak zaten para da kendiliğinden gelecektir diyorum. Bu konulara girmek olası hatadır ve bu işin kalitesine zarar verebilir.

      Başkasına yardım etmeyi düşünmeyen insan kötü yazılım yapar ve bu yazdıkları yazılım da çok faydalı olmaz. Tahminden öte çoğu yazılımcının görüşü olarak potansiyel yetenekleriniz iyi kod yazmanıza bağlıdır. Burada kendimizi düşünelim. Bir iş istendiğinde önümüzdeki bir kaç yol olduğunu varsayalım. O yollardan biri işi hemen yapıp bitirmek, yöneticinizin baskısı veya iş yetiştirmek stresini de üstüne de katarsak, bu yol doğru olmasa da sadece o an işin halledilmesine bakabiliyoruz. Diğer seçeneği düşünelim. O an yaptığımız geçici çözüm doğru değil ve biraz daha kafa patlatarak daha doğru bir çözüm buluyoruz. Buradan da görebileceğimiz gibi iyi kod bizdeki potansiyeli nasıl da ortaya çıkarıyor. 

      Sonuç olarak rehberimizi birilerine yardım etmek olarak belirlemeliyiz. Unutulmamalı ki yardımın da dereceleri vardır. Siz talep edilen özellikleri buna göre değerlendirebilirsiniz. Hangi özellik insanlara en çok yardımcı olacaksa onu en öncelikli istek yapın. Önceliği belirlemek için bir çok soru sorulabilir fakat bunlardan basit ve iyi olan bir tanesi ise "Kullanıcıya ne kadar yardımcı olabiliriz ?" sorusudur.

      Genel olarak, yazılımı tasarlarken insanlara yardım etmek amacını zihninizde taşımalı ve anlamlı bir tasarım tanımlamaya izin vermelisiniz.

     Yazılım Tasarımının Amaçları
     Artık yazılım tasarımının amacını biliyoruz. Böylece bir nebze yazılım tasarıma yönelebiliriz. Yazılım tasarımının temel amacının insanlara yardım etmek olduğunu biliyoruz. .Yazılım tasarımın amacı ise "mümkün olduğu kadar yazılımın kullanıcıya yardımcı olmasına izin vermek" . İkinci olarak da yazılımın insanlara yardım etmesini devamlı kılmak istiyoruz. Böylece 2.amacımız da "mümkün olduğu kadar yazılımın kullanıcıya yardımcı olmaya devam etmesini sağlamaktır".

     Ulaşılmak istenen büyük gaye budur, ama büyüyen projelerde bu yardımı sağlamak zamanla daha da zorlaşmaktadır. Çünkü projeyi yönetmek zorlaşır. Hızlanan bir araba gibi düşünelim, araba hızlandıkça kontrol etmesi nasıl zorlaşıyorsa , büyüyen yazılımı da kontrol etmek de böyle zorlaşır. Tabi bu karmaşıklığı yönetmek için bir sürü çare düşünülmüş ve hala da bu konuda çalışmalar devam ediliyor. Gerçekten de bu zamanlarda projeyi yazmak artık çok zor, yazılımcılar da "yeter ki çalışsın" kısmına takılıp kullanıcıyı iyice ihmal ederler. Buna benzer olarak , yazılımın kolaylığını sağlamak yazılımcının kullanıcıya daha çok yardım etmesine olanak sağlar. Ve bu da 3.amacımıza önderlik eder: "Yazılımı mümkün olduğu kadar kolay oluşturup sürdürülebilen sistemler tasarlamak -böylelikle en iyi şekilde yardımcı olmaya devam etmek -"

      3.amacımız yazılım tasarımının geleneksel prensiplerinden biridir. Bununla birlikte 1. ve 2.amaçlarımız da bize rehberlik edeceklerdir. Biz bunların bizi motive etmesini istiyoruz. Bu fikir yazılımlarımızı zor ve karmaşıklaştırmak yerine kolaylaştıracaktır, fakat bu her şeyin basit olacağı anlamına gelmez. Şöyle ki bazen bu yeni sistem ve tasarımları öğrenmek zamanınızı alabilir, fakat uzun vadede yazılımının sürdürülebilir olmasını sağlamaktadır. Bu şuna benzer, belki daha önceki yazılarımda da aynı örneği vermiş olabilirim, test yazmakla başta zaman kaybı gibi görünse de projenin ilerleyen kısımlarında faydaları görülmektedir. 

      Bazen 1.amaç ile 3.amaç bir nebze çakışabilir. Yazılımın kolaylaştırılmasını sağlarken sürdürülebilmesini zorlaştırabilirsiniz. Özellikle ülkemizdeki müşteri/kullanıcı isteklerini göz önüne alırsak , bunun ne kadar zor bir iş olduğunu daha iyi anlarız diye düşünüyorum. Buna rağmen tarihsel süreçte birbirlerine olan ihtiyaçları, birbiriyle çelişmelerinden daha fazladır. Tamamıyla sürdürebilir  bir yapı oluştururken kullanıcıya da yardımcı olunabilir. Eğer bu yapıyı koruyamazsanız 2.amaç olan yardım etmeye devam etme prensibini de iyice zora sokarsınız. Böylece 3.amacımızın önemi bir kez daha ortaya çıkmaktadır. Çünkü sürdürebilir bir yazılım tasarlamadan diğer iki amacımızı gerçekleştiremeyiz.

     Sürdürebilir, kullanıcı dostu yazılımlar yazmak dileğiyle. Hoşça kalın

Hiç yorum yok:

Yorum Gönder