Monthly Archives: June 2007

Yazılım Sanatı

Yazılım danışmanlığı yapan bir firmanın siesinde gezinirken rastladığım yazının başlığı şöyleydi: "Software as A craft". Daha öncede iş arkadaşımla konuşurken bu düşüncemi belirtmiştim. Bencede Yazılım geliştirmek otomatikleştirilmiş bir süreçten ziyade sanatsal bir süreç. Heykeltraş nasıl ufak ufak, yavaş yavaş yontup sonunda nasıl mükemmel bir heykel ortaya çıkaracağını düşünerek arzuyla işini yapıyorsa, Yazılım geliştirme sürecinin aynı sanatsal amacı olduğuna inanıyorum. Özellikle Agile, TDD pratiklerinde özellikle Refactoring yaparken bunu daha çok hissediyorum. Sonuçta Refactoring yaparken çalışan bir kodu davranışını değiştirmeden daha iyi bir yapıya, tasarıma kavuşturmaya çalışıyoruz aslında şeytan "hiç bulaşma çalışmaya devam etsin (if it works, don’t fix it)" diyor. Ama ne kadar böyle desede içim rahat etmiyor hep içimden daha iyisini yapmak için ,daha iyi yapıya kavuşturmak istiyorum (sanatçı olduğuma dair kanıtlar :) ) . Yazılımı bu yüzden kendi açımdan güzel oluşturma arzusu olarak görüyorum. Ve bu şekilde çok daha verimli sonuçlar ortaya çıkıyor. Daha önceden ceviz.net de gördüğüm bir yazıda da programcıların sanatçılarla benzerliklerini anlatan bir araştırma yazısı okumuştum bana şuanda daha anlamlı geliyor açıkçası. Birde sanatsal yönden yazılıma baktığınıza en önemli sonuçlardan biride robot gibi insanları alıp bir makina, ürün vb. üretmesi için bir yere koyamassınız. Koyarsınız ama doğru ürün zaman, maliyet açısından ne kadar iyi sonuçlar alabileceğiniz tartışılır. Bu yüzden yazılım geliştirmede insan etkeni çok fazla önem yaşıyor bence. Çünkü sanatsal olarak yazılım geliştirip ortaya mükemmel ürünler çıkaracak olanda aynı insan, başından savma işlerle zaman maliyet açısından zarara uğratacakta aynı insan. Bu anlamda da Agile metodolojiler ile tam olarak örtüşüyor. Agile metodolojilerin temelinde de yazılımın insanlar tarafından geliştirilen bir süreç olduğu, iletişim, takım ruhu gibi kavramlar var. Bu açıdan Agile metodolojiler sanatı ve sanatçıyı korur diyebiliriz :).

Snake Game – Görev Tamam

Dün birkaç saat uğraşarak başladığım,Bugünde 1-2 saat uğraştıktan sonra çalışan bir snake oyunu yapmış bulunmaktayım. Pratik açısından oldukça iyi oldu. Debugger kullanmadan kod yazmanın zevkini yaşadım diyebilirim. Genelde Test Driven Development tarzı ile kod geliştirmemekte ısrar edenlerin en çok yakındığı konulardan biriside TDD’nin fazla vakit aldığını savunmalarıdır. Daha önceden okul projelerinde de buna benzer oyun vs. birçok proje yapmıştık. Ve bu kadar kısa sürede hiçbirini bitirdiğimi hatırlamıyorum. Tabi en önemli avantajı bence kodun temizliği, GUI den bağımsız oluşu, küçük ve yönetilebilir sınıflar olmasıydı. Ayrıca kod herzaman iyileştirmelere açık Refactoring işlemi oldukça kolay çünkü sizin kodunuzun yapması gerekenlerin testi yazılmış bir şeyi değiştirdiğinizde test başarısız olursa oldukça kolay yakalayabiliyorsunuz. Birkaç düzenlemeden sonra makale olarak yayınlamayı düşünüyorum umarım faydalı olur.

Test Driven Development Pratik – Snake Game

p>Önümüzdeki günlerde TDD kullanarak pratik yapma adına hepimizin en azından telefonda da olsa bir defa oynadığı Snake oyununu yapmayı düşünüyorum. Tamamen TDD pratiklerini uygulamayı düşündüğüm küçük projemi Java Swing ile yapmayı düşünüyorum. Burada ilerleme kaydettikçe yararlı olabilecek bilgileri paylaşmaya çalışacağım

Perfection

p>Perfection is achieved,
not when there is nothing left to add
but when there is nothing left to remove.

Antoine de Saint-Exupery

XP,Agile yöntemlerinin temel kod felsefesi olan basitlik kavramının özeti diyebiliriz..