- Peter Naur’un "Programming as Theory Building" metni, programlamayı program metni üretme etkinliği olarak değil, programcının problem ve çözüm hakkında bir teori kurma etkinliği olarak görür.
- Buradaki “teori”, yalnızca soyut önermeler ya da belgelenmiş tasarım açıklamaları değildir.
- Gerçek dünyadaki problemin ne anlam taşıdığını anlamak,
- program yapısının bu gerçeklikle nasıl örtüştüğünü açıklayabilmek,
- neden böyle tasarlandığını gerekçelendirebilmek,
- yeni gereksinimler geldiğinde bunların mevcut yapı içinde nasıl entegre edileceğine karar verebilmek demektir.
- Dolayısıyla bir programın çekirdek bilgisi, kodun ya da belgelerin içinde bütünüyle yer almaz; o programı anlayan programcının zihnindedir.
Programlama ve bilgi
- Naur, programlamayı gerçek dünyadaki etkinlikleri bilgisayarın yürütebileceği biçimsel sembol işlemlerine eşleme faaliyeti olarak görür.
- Bu bakış açısında programı değiştirmek de programlamanın bir parçasıdır.
- Çünkü gerçek dünyadaki faaliyet değişirse program da değişmek zorundadır.
- Programlamanın özü, ortaya çıkan belge ya da kod değil, programcıların biriktirdiği belirli türden bilgidir.
- Belgeler önemlidir ama ikincil konumdadır.
- Belgeler teorinin yerini tamamen tutamaz.
- Daha çok teori kurmayı destekleyen araçlardır.
Örnek 1: Derleyici devri ve başarısızlık
- Grup A, L dili için bir derleyici yaptı.
- Grup B, genişletilmiş L + M dili için bir derleyici yapmak üzere A grubunun derleyici kodunu, belgelerini ve tavsiyelerini aldı.
- Kod ve belgeler yeterince verilmişti, ancak B grubu bazı tasarımlarda mevcut yapının gücünden yararlanamadı ve yama tarzı çözümler önerdi.
- A grubu sorunu hemen fark etti ve mevcut yapı içinde daha basit, daha doğal çözümler sundu.
- Bu örneğin özü şudur:
- Yalnızca program metni ve belgeler, tasarımın derin teorisini aktarmaya yetmez.
- Mevcut tasarımın “neden”i ve “nasıl genişletilmesi gerektiği” yalnızca belgelerle yeterince aktarılamaz.
- Daha sonra A grubunun yönlendirmesini almayan başka programcılar derleyiciyi değiştirirken, başlangıçtaki güçlü yapı giderek biçimsiz eklemelerle zayıfladı.
- Bu da program metni ve belgelerin, çekirdek tasarım teorisini korumakta sınırlı kaldığını gösterir.
Örnek 2: Büyük ölçekli gerçek zamanlı sistem
- Yaklaşık 200 bin satırlık endüstriyel bir gerçek zamanlı sistem örneği verilir.
- Kurulum ve hata teşhisinden sorumlu programcılar, sistem tasarımının ilk aşamalarından itibaren uzun süre sistemle yakından bağlantılıydı.
- Bu kişiler hataları teşhis ederken çoğunlukla kendi anlık sistem kavrayışlarına ve açıklamalı koda güvendiler.
- Buna karşılık belge ve eğitim almış dış operatör programcılar sürekli zorluk yaşadı.
- Üreticinin deneyimli programcıları ise bu sorunları kolayca çözdü.
- Sonuç:
- Büyük programların bakımı ve değiştirilmesi, esas olarak programla uzun süre bağlantıda kalmış kişilerin sahip olduğu bilgiye dayanır.
- Belgelenmiş açıklamalar tek başına bu bilginin yerini tamamen alamaz.
Ryle’ın “teori” kavramı
- Naur, Gilbert Ryle’ın teori kavramını ödünç alır.
- Bir teoriye sahip olmak, sadece bazı önermeleri bilmek demek değildir.
- Bir şeyi yapabilmek,
- o şeyi açıklayabilmek,
- soruları yanıtlayabilmek,
- kendi yargılarını gerekçelendirebilmek anlamına gelir.
- Zeki faaliyetler zorunlu olarak yalnızca kuralları izlemeye indirgenemez.
- Çünkü kuralları izleme işi de zeki biçimde yapılmalıdır.
- Kuralların nasıl izleneceği için bir başka kurala ihtiyaç duyulursa sonsuz gerileme ortaya çıkar.
- Bu nedenle zihinsel faaliyet, yalnızca kural uygulamak değil, durumlar arasındaki benzerlikleri kavrayıp uygun biçimde karşılık verebilme yetisini de içerir.
Teori kurallarla bütünüyle ifade edilemez
- Bir teoriye sahip kişi, gerçek hayattaki farklı durumlar arasında anlamlı benzerlikleri fark eder.
- Ancak bu tür benzerlikleri açık ölçütler ya da kurallarla bütünüyle ifade etmek zordur.
- Örnekler:
- Yüz benzerliği,
- melodi benzerliği,
- şarap tadı benzerliği.
- Benzer şekilde programlamada da yeni bir gereksinimin mevcut yapıya nasıl benzediğini ve nereye entegre edilmesi gerektiğini basit kurallara indirgemek zordur.
- Örtük bilginin özü de burada yatar.
Programcının sahip olması gereken teori
- Bir programın teorisine sahip olan programcı şunları yapabilmelidir:
1. Gerçek dünya ile program arasındaki karşılığı açıklayabilmek
- Programın her bölümünün gerçek dünyadaki hangi faaliyet ya da kavrama karşılık geldiğini açıklayabilmelidir.
- Tersine, gerçek dünyadaki bir faaliyetin program içinde nasıl ifade edildiğini de açıklayabilmelidir.
- Neyin ilgili, neyin ilgisiz olduğuna karar verebilmek için gerçek dünyanın bütünü hakkında anlayış gerekir.
2. Programın neden öyle olduğunu gerekçelendirebilmek
- Programın yapısının ve uygulama ayrıntılarının neden öyle tasarlandığını açıklayabilmelidir.
- Bu gerekçelendirme kurallar, çıkarımlar, tasarım ilkeleri, nicel tahminler vb. kullanabilir.
- Ancak nihayetinde hangi ilkenin uygulanacağına karar vermek, programcının doğrudan kavrayışına bağlıdır.
3. Yeni değişiklik taleplerine yapıcı biçimde karşılık verebilmek
- Yeni bir gereksinimin, mevcut programın hangi işlevine ya da yapısına benzediğini fark edebilmelidir.
- Bu benzerlikten hareketle, değişikliği mevcut teoriye doğal biçimde entegre olacak şekilde tasarlayabilmelidir.
- Bu yeteneğin yerini yalnızca belgelenmiş prosedürlerle doldurmak zordur.
Program değişikliği ve maliyet
- Yazılım kaçınılmaz olarak değiştirilir.
- Çünkü kullanım sırasında yeni gereksinimler ortaya çıkar,
- gerçek dünyanın koşulları da değişir.
- Sıklıkla mevcut programı değiştirmenin yeniden yazmaktan daha ucuz olduğu düşünülür.
- Ancak Naur’un bakış açısından bu beklenti her zaman geçerli değildir.
- Program değiştirmenin maliyeti, metni düzenleme maliyeti değildir.
- Asıl maliyet mevcut programın teorisini anlamakta
- ve yeni gereksinimi bu teori içine entegre etmekte yatar.
- Bu yüzden kodun kolayca düzenlenebilir bir metin olması tek başına değişikliğin kolay olduğunu göstermez.
Esnekliğin sınırları
- Programa gelecekteki değişikliklere hazırlık olsun diye önceden esneklik koyma iddiası ancak kısmen doğrudur.
- Esneklik bedelsiz değildir.
- Hangi gelecekteki durumlara hazırlanılacağına karar vermek gerekir,
- parametreler ve yapılar tasarlanmalıdır,
- uygulama, test ve açıklama maliyetleri vardır.
- Bunun yararlılığı belirsiz gelecekteki olaylara bağlıdır.
- Dolayısıyla esneklik, değişime uyum için genel bir çözüm olamaz.
- Asıl önemli olan, her türlü değişikliğe önceden yapı kurmak değil, değişiklik geldiğinde programın teorisine dayanarak uygun karar verebilme yetisidir.
İyi değişiklik ve kötü değişiklik
- Aynı dış davranışı sağlayan değişiklikler bile farklı şekillerde uygulanabilir.
- Yüzeyde hepsi doğru görünebilir.
- Ancak programın teorisi açısından aralarında büyük fark vardır.
- Bazı değişiklikler mevcut teoriyi doğal biçimde genişletir.
- Bazıları ise mevcut yapının üstüne eklenmiş bir yama gibi çalışır.
- İkinci tür değişiklikler tekrarlandıkça program giderek yamalı bohçaya döner.
- Programın uzun vadeli yaşayabilirliği, her değişikliğin mevcut teoriye ne kadar iyi kök saldığına bağlıdır.
Programın yaşamı, ölümü ve dirilişi
Programın yaşamı
- Programın teorisine sahip programcılar hâlâ o programı etkin biçimde denetliyorsa, program yaşıyordur.
- Bu kişiler değişiklik taleplerine zihinsel olarak karşılık verebilir.
Programın ölümü
- Programın teorisine sahip ekip dağılırsa program ölür.
- Ölmüş bir program hâlâ çalışabilir ve yararlı sonuçlar üretebilir.
- Ama değişiklik taleplerine gerektiği gibi yanıt veremediğinde bu ölüm görünür hâle gelir.
Programın dirilişi
- Bu, yeni bir ekibin mevcut programın teorisini yeniden kurmaya çalışma girişimidir.
- Naur’a göre bu, sıkı anlamda mümkün değildir.
- Çünkü yalnızca belgeler ve kodla, ilk ekibin sahip olduğu teoriyi eksiksiz biçimde geri kurmak mümkün olmaz.
- Diriliş mümkün olsa bile pahalı ve zordur; ayrıca özgün teoriden farklı bir teori üretme olasılığı yüksektir.
- Bazı durumlarda mevcut kodu kurtarmaya çalışmaktansa, yeni ekibin problemi baştan çözmesi daha iyi ve daha ucuz olabilir.
Metodoloji eleştirisi
- Naur, programlama metodolojisini “programcının hangi sırayla hangi işleri yapacağını belirleyen kurallar kümesi” olarak görür.
- Teori kurma bakış açısından bu anlamdaki metodoloji, programlamanın özünü yakalayamaz.
- Nedenleri:
- Teori kurmada sabit bir sıra yoktur.
- Teori, özünde parçaların doğrusal birleşimi değildir.
- Gösterimler ya da belge biçimleri teori kurmaya yardımcı olabilir ama teorinin kendisi değildir.
- Bu yüzden programlamanın birincil faaliyeti için evrensel olarak doğru bir yöntem olmadığı sonucuna varılır.
Bu, metodolojinin bütünüyle değersiz olduğu anlamına gelmez
- Naur’un reddettiği şey, mekanik biçimde iyi tasarımı garanti eden prosedür olarak metodolojidir.
- Metodolojiler, tasarım teknikleri, gösterimler ve doğrulama teknikleri eğitsel değer taşıyabilir.
- İyi örneklere, yapılandırma ilkelerine ve doğrulama tekniklerine aşina olan programcıların daha iyi teoriler kurma olasılığı yüksektir.
- Ancak hangi tekniğin ne zaman ve hangi sırayla uygulanacağı, gerçek problemi anlayan programcının yargısına bırakılmalıdır.
Programcının konumu
- Programlama endüstriyel üretim gibi görülürse programcı, değiştirilebilir bir parça gibi ele alınır.
- Bu, prosedürler ve kurallar izlenirse herkesin aynı sonucu üretebileceği bakış açısıdır.
- Naur bu bakışı reddeder.
- Eğer programın asıl çıktısı programcının sahip olduğu teori ise, programcı kolayca değiştirilebilen bir emekçi değildir.
- Programcı, bilgisayar içeren tüm faaliyeti sorumlu biçimde geliştiren ve yöneten bir profesyonele daha yakındır.
- Bu nedenle programcıya süreklilik taşıyan bir statü ve sorumluluk verilmelidir.
- Eğitim de yalnızca söz dizimi, gösterimler ve veri işleme tekniklerinin ötesine geçip teori kurma becerisini geliştirmeye yönelmelidir.
XP’de metafor ve teori kurma
- XP’deki “metafor”, Naur’un teori kurma bakışıyla iyi açıklanabilir.
- İyi bir metafor, ekibin program yapısı hakkında benzer varsayımlar kurmasına yardımcı olur.
- Örnekler:
- Programı bir “montaj hattı” olarak anlamak.
- Programı bir “restoran” olarak anlamak.
- İyi bir metafor yalnızca bir benzetme değildir.
- Tasarımcıların hangi yapıları beklemesi gerektiğini,
- yeni kodun nereye eklenmesi gerektiğini,
- başkalarının yazdığı kodla nasıl uyum kuracağını değerlendirmelerine yardımcı olur.
- Ekip büyüdükçe ve paralel çalışma arttıkça paylaşılan metaforun değeri de artar.
- Ortak bir teori yoksa her programcı kendi teorisini kurar ve sistem giderek daha uyumsuz ve karmaşık hâle gelir.
Belgelemenin rolü
- Belgeler programın güncel durumunu bütünüyle yakalamakta zorlanır.
- Yine de bu, belgenin gereksiz olduğu anlamına gelmez.
- Belgenin amacı her şeyi kaydetmek değil, bir sonraki programcının uygun bir teori kurmasına yardımcı olmaktır.
- İyi belge, okurun belleğini ve deneyimini harekete geçirir; doğru düşünme yollarını açar.
- Bu tür belgeler, yalnızca mevcut sınıf, fonksiyon ve modül listelerini sıralayan belgelerden daha uzun ömürlüdür.
İyi bir tasarım belgesinin yapısı
- Deneyimli tasarımcılar genellikle belgeye şu öğelerle başlar:
- Temel metafor,
- ana bileşenlerin amacının açıklanması,
- ana bileşenler arasındaki temel etkileşimleri gösteren diyagram.
- Bu üç unsur, sonraki ekibin tasarım teorisi kurmasına büyük ölçüde yardımcı olur.
- Kaynak kodun kendisi de teori aktarma aracıdır.
- Tutarlı adlandırma,
- basit yapı,
- öngörülebilir kalıplar,
- gereksiz istisnaların en aza indirilmesi.
- “Temiz kod”un önemli bir bölümü, okurun sistem hakkında tutarlı bir teori ne kadar kolay kurabildiğiyle ilgilidir.
Henüz yorum yok.