Pragmatik Programcı — 7

İbrahim Kürce
Jul 20, 2017 · 4 min read

İzli Mermiler

Karanlıkta, makineli tüfekle ateş etmenin iki yolu vardır. Hedefinin tam olarak nerede olduğunu bulursun. Çevresel faktörleri tahmin edersin. Kullandığın barut ve mermilerin tam olarak özelliklerini belirlersin. Bütün bu hesaplamalar ve çevresel faktörler düzgün olduysa, attığın merminle hedefinin yakın bir yerinden vurursun.

Ya da izli mermi kullanırsın.

İzli mermi ateşlendiğinde, onun içindeki fosfor, mermi hedefi vuruncaya kadar arkasında iz bırakır.

İzli mermiler, yukarıdaki bahsettiğimiz hesaplamaların yerine daha çok tercih edilir. Geri bildirimi hemen olur. Gerçek bir cephane ile aynı çevresel faktörlere sahip olduğu için, dış etkiler en aza indirgenmiştir.

İzli mermiler özelliği, daha önce benzeri yapılmamış yeni projeler yapılırken kullanılabilir. Nişancılar gibi, sizde karanlıkta hedefinizi vurmaya çalışıyorsunuzdur, çünkü kullanıcılar daha önce böyle bir sistem görmemişlerdir. Ayrıca, kullanıcıların gereksinimleri de belirsizdir. Projenin tamamlanması da bir süre alacağı için büyük ihtimalle o zamana kadar üzerinde çalıştığın ortamda değişmiş olacaktır.

Pragmatik programcılar bu gibi durumlarda izli mermiler kullanmayı tercih ederler.

Karanlıkta Parlayan Kod

Kodda da, izli mermilerdekine benzer bir sonuç alabilmemiz için, sistemin son halini genel hatlarıyla görebileceğimiz, gözle görülür ve tekrarlanabilir, gereksinimlerden çıkarabileceğimiz şeylere ihtiyaç duyarız.

15. Tavsiye: Hedefinizi bulmak için izli mermiler kullanın.

Bir keresinde karmaşık bir istemci-sunucu veritabanı projesini devralmıştık. Gereksinimlerden bir kısmı, geçici sorguların çalıştırıldığı bir yapı kurmaktı. Sunucular, ilişkisel ve özelleşmiş veritabanlarından oluşuyordu. İstemci grafiksel kullanıcı arayüzüde(GUI), Object Pascal’da yazılmıştı ve arka tarafta C kütüphaneleri kullanıyordu. Kullanıcıların sorguları sunucu tarafında Lisp benzeri bir gösterimde tutuluyordu ve çalıştırılmadan önce uygun bir şekilde SQL sorgusuna çevriliyordu. Birçok bilinmeyen ve farklı çevreler vardı ve kimse kullanıcı arayüzünün nasıl çalıştığını tam olarak kestiremiyordu.

Bu durum, izli kod kullanmak için çok iyi bir fırsattı. Önyüz için bir çatı(framework), sorguları göstermek için kütüphaneler ve saklanmış sorguları veritabanına özelleşmiş sorgulara çeviren bir yapı geliştirdik. Hepsini bir araya koyduk ve çalıştığını gördük. Sonraki aylarda, temel yapımızı güncelledik, her bir bileşene yeni fonksiyonlar ekledik. Önyüz tarafı yeni bir sorgu tipi eklediğinde, kütüphane daha da büyüdü ve SQL üreten yapımız daha karmaşık sorgular üretmeye başladı.

İzli kod tek kullanımlık değildir. İzli kod, tüm hata kontrollerini, yapısal bölünmeleri, dökümantasyonu ve ürünün sahip olduğu tüm kodların kendi kontrollerini bünyesinde tutar. İzli kod geliştirmede, bileşenler arası uçtan-uça bağlantı kurmayı başardığınızda, yeni özellikler eklemek daha kolay olur.

İzli kod geliştirmede, projenin asla bitmeyeceği bir anlayış hakimdir. Her zaman eklenecek yeni gereksinimler ve yeni özellikler olacaktır. Bu ayrıca artışlı bir yaklaşımdır.

Geleneksel alternatif yol ise bir nevi ağır mühendislik yaklaşımıdır. Kod modüllere bölünür, modüller kendi içinde geliştirilir. Modüller sonra bir üst seviyede birleştirilir. Bu durum tam bir uygulama olana kadar tekrarlanır. En sonda uygulama bir bütün olarak kullanıcıya sunulur ve testi yapılır.

***İ.K. Notu: Aslında yazarlar, izli kod geliştirme ile Agile, Scrum, Kanban, Lean gibi çevik yazılım geliştirme yöntemlerini kastediyor, geleneksel alternatif yöntem ise Waterfall(Şelale) yöntemini göstermektedir.

İzli kod yönteminin birçok avantajı vardır:

  • Kullanıcılar uygulamanın çalışan halini erkenden görürler. Kullanıcılar olgunlaşmamış bir şey göreceklerini bilirler ama en azından çalışan bir şeyler olur. Proje ilerlerken, katkı yapma şansları olur.
  • Geliştiriciler çalışan bir yapı kurarlar. En zorlayıcı kağıtlardan biri üzerinde hiçbir şey olmayandır. Uygulamanın etkileşimleri uçtan-uca ortaya çıkmaya başladığında ve kod olarak şekillendiğinde, takım daha fazla katkı sunmaya başlar. Bu da herkesi daha üretken ve teşvik edici yapar.
  • Bütünleşmiş platformun olur. Sistem uçtan-uca bağlandığında, birim testlerinin yapılmış olduğu yeni kodların eklenebileceği bir çevren olmuş olur. Çok büyük bir entegrasyon testleri yapmak yerine, her gün yapılmış testlerin olur.
  • Gösterecek bir şeylerin olur. Projenin sponsorlarının uygunsuz zamanlarda demo görme isteği her zaman olur. İzli kod ile, her zaman gösterecek bir şeyleriniz olur.
  • İlerlemeyi daha iyi gözlemlersiniz. İzli kod geliştirmede, geliştiriciler işleri birer birer bitirirler ve bir sonrakine geçerler. Böylece performans ölçümü ve ilerlemenin gösterimi daha net ortaya çıkar.

İzli Mermiler Her Zaman Hedefi Vurmazlar

İzli mermiler vuracağın şeyi gösterirler. Bu her zaman hedef olmayabilir. Hedefini vurana kadar, amacını tekrar gözden geçirirsin. Asıl amaç budur.

İzli kodda da durum benzerdir. Gittiğin yerden %100 emin olmadığın durumlarda bulunabileceğin teknikler kullanmış olabilirsin. İlk denemelerde, ıskalayadabilirsin. Kullanıcı, “kastettiğim şey bu değil” de diyebilir. Değişikliği yönetme güdün seni hedefe daha çok yaklaştırır. Ufak kod parçacığının hareketsizliği daha azdır, değiştirmek hızlı ve kolay olur. Geri bildirimleri toplar, daha hızlı ve daha az maaliyetli daha doğru bir versiyon üretirsin. Her büyük bileşen, izli kod geliştirmende gösterildiği için, kullanıcılar gördükleri hakkında daha çok kendinden emin olurlar.

İzli Kod, Prototiplemeye Karşı

İzli kod geliştirmeyi, prototiplemenin agresif bir isimlendirilmiş hali gibi düşünüyor olabilirsiniz ama arada fark vardır. Prototip ile, sistemin son halinin farklı açıdan keşfetmeyi amaçlarsınız. Doğru bir prototip sonucunda, konsept ile bir araya getirdiğiniz ne varsa atarsınız ve bunlardan öğrendiğiniz dersler ile tekrar düzenli bir kodlama yaparsınız.

İzli kod yaklaşımı farklı bir problemi gösterir. Uygulamanın bir bütün olarak nasıl durduğunu bilmeniz gerekir. Kullanıcılarınıza, etkileşimlerin pratikte nasıl çalıştığını göstermek istersiniz. Bir kere bütün bileşenler tam olarak çalışmaya başladığında, geliştiricilerinize ve kullanıcılarınıza göstereceğiniz bir çatınız olur. Zamanla, bu çatıya yeni özellikler eklersiniz, yine de çatınız sağlam kalır. Yeni özelliklere rağmen bilirsiniz ki, sisteminiz, izli kodun ilk tamamlandığı zamanki gibi çalışmaya devam edecektir.

Prototipleme tek kullanımlık kod üretir. İzli kod ise yalın ama tastamam, sistemin son halinin iskeletinin olduğu bir yapı üretir.


Prototipler ve Yapışkan Notlar

Yazının devamını buradan okuyabilirsiniz.

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade