Cuma, Ağustos 28, 2009

Fall on Fifth


Fall on Fifth, originally uploaded by muckster.

Yazının Devamı...


, originally uploaded by K_iwi.

Yazının Devamı...

Çarşamba, Ağustos 12, 2009

Debug Edilebilirlik

Birkaç gündür, bir probleme takıldım kaldım. Tezi bitirmek için önümde 1 ay kaldı. Problem şu: bir web sayfası unicode olduğu halde, Türkçe karakterler bir yerde programın çökmesine sebep oluyor. Sorunun sebebini bulmak için kullandığım web arayüzü kütüphanesini (django) debug ediyorum.

Programı debug ederken şöyle bir düşünce geldi aklıma: Bir yazılım kütüphanesini anlatan kitaplar, kütüphanenin tüm kullanım özelliklerini tarif etmek yerine, sorun çıktığında nasıl debug edilebileceğini detaylı olarak tarif etseler çok daha iyi eder. Bütün yazılımların içinde mutlaka çok sayıda yazılım hatası bulunuyor. Veya yazılım hatası olmasa da, programcının tüm mantığı bir bütün olarak kavraması imkansız olduğundan, programcı için karanlık kalan bazı kullanım sorunları çıkıyor. Kitapların, her şeyi tarif etmesi mümkün değil. Çözüm tarif edilmiş olsa da, programcının ihtiyaç duyduğu bilginin nerede olduğunu bulması çok zaman alıyor.

Bu soruna benim çözüm önerim şöyle: Kitaplar, bir kütüphanenin en ince detaylarına kadar gerektiği zaman nasıl debug edilebileceğini tarif etsin. Böylece programcı, sorunla karşılaştığında, kendi kendine bunun sebebini bulur. Hem insanın bir şeyi uğraşarak öğrenmesi, hazır bilgiyi okuyarak öğrenmesinden çok daha iyi yerleşir.

Bunlara ek olarak, tüm altyapı kütüphanelerinde mutlaka soyutlama sızıntısı (abstraction leakage) bulunuyor. Soyutlama sızıntısının anlamı şu: Mesela araba kullanıyorsunuz. Direksiyon, pedal ve viteslerin nasıl kullanıldığını bilmeniz yeterli. Arabanın içindeki şanzıman, motora dair hiçbir şey bilmeseniz de olur. İşte burada, arabanın iç yapısı, kullanıcısından soyutlanmıştır.

Yazılım kütüphanelerinde, bu tür soyutlama sızıntıları mutlaka oluyor. Çok basit yazılımlar bile, bir arabadaki mekanik parametrelerden daha çok sayıda çeşitlilik ve karmaşıklık içerebiliyor. Bu yüzden yazılımlardaki altyapı kütüphanelerinin, üst katmanlardan tamamen soyutlanması çok zor. Dolayısıyla, bir kütüphaneyi kullanan programcı, sadece bunun kullanım arayüzünü bilmesi yeterli olmuyor. Ayrıca iç işleyiş mantığını da bilmesi gerekiyor ki, karşılaştığı sorunları çözebilsin. Burada da debug edilebilirlik çok kritik bir özellik. Çünkü eğer altyapı kütüphanesi, yeterince kolay ve şeffaf bir şekilde debug edilemezse, o zaman, programcının basit bir problemin sebebini anlaması çok zaman alıyor.

Yazının Devamı...