Programlamanın Tao´su 3. ve 4. Kitap

0
FZ
3. Kitap - Tasarım

Ve şöyle dedi usta programcı:

"Program test edilmeye başlandığında tasarım değişiklikleri yapmak için artık çok geçtir."
3.1

Bir zamanlar bir bilgisayar fuarına giden bir adam vardı. Her gün girişteki güvenlik görevlisine şöyle diyordu: "Ben büyük bir hırsızım, arakladığım şeyler yüzünden meşhurum. Seni uyarıyorum bu fuar da benden nasibini alacak."

Bu konuşma güvenlik görevlisini çok rahatsız etmişti çünkü içeride milyonlarca dolar değerinde bilgisayar ekipmanı vardı ve o da bu yüzden hırsız olduğunu söyleyen adamı yakın takibe almaya karar verdi. Ancak adam bir standdan diğerine gidiyor ve kendine kendine mırıldanıyordu, tüm yaptığı buydu.

Adam fuarı terk eder etmez, güvenlik görevlisi onu bir kenara çekiyor baştan sonra arama tarama yapıyordu. Adamın hırsızlığına işaret eden hiçbir şey çıkmıyordu üzerinden.

Ertesi günü fuara gelen adam güvenlik görevlisine yanaşıp dedi ki: "Dün iyi iş çıkardım ama bugün daha da iyi olacak." Tüm huzuru kaçan bu sefer takip işini daha sıkı tutmaya karar vermişti ancak sonuç gene hüsrandı.

Fuarın son gününde dayanamayan güvenlik görevlisi adama gidip şöyle dedi:"Sayın Hırsız, o kadar şaşırmış durumdayım ki huzurum kaçtı, çok kötü durumayım, lütfen beni aydınlatın, çaldığınız şey nedir?"

Adam gülümsedi ve tek bir cümle sarf etti:"Fikir çalıyorum."

3.2

Bir zamanlar yapısal olmayan programlar yazan bir usta programcı vardı. Çömez programcı onu taklit etmeye yeltendi ve o da yapısal olmayan programlar yazmaya başladı. Sonra ustaya gidip programlarını değerlendirmesini isteyince usta ona yapısal olmaya programlar yazmadığı için kızdı ve dedi ki: "Usta için uygun olan çömez için uygun değildir. Yapıyı aşmadan önce Tao'yu kavramalısın."

3.3

Bir zamanlar savaş lordu Wu'nun topraklarında yaşayan bir programcı vardı. Wu onu huzuruna getirtti ve sordu: "Hangisini tasarlamak daha kolaydır, bir muhasebe paketi mi yoksa bir işletim sistemi mi?"

Programcı cevapladı: "Bir işletim sistemi."

Kulaklarına inanamayan savaş lordu içini çekti ve dedi ki: "Bir işletim sistemi ile kıyaslandığında muhasebe yazılımının çok basit olduğu su götürmez!"

"Tam olarak öyle denemez efendim", dedi programcı, "bir muhabesebe paketi tasarlarken programcı değişik fikirleri olan insanlarla muhatap olmak zorunda kalır: program nasıl çalışmalıdır, raporlar nasıl görünmelidir, vergi kanunlarına ne şekilde uymaldıdır, vs. Oysa bir işletim sistemi dış görünüş ile sınırlandırılamaz. Bir işletim sistemi tasarlarken programcı makina ve fikirler arasındaki en basit uyumu arar bu yüzden de işletim sistemi tasarlamak daha kolaydır."

Savaş lordu Wu başını onaylar biçinde salladı ve gülümsedi: "Güzel ve akıllıca! Peki hangisinin hatalarını ayıklamak daha kolaydır?"

Programcı cevap vermedi.

3.4

Bir müdür usta programcıya gitti ve yeni bir uygulama ile ilgili özellik listesini gösterdi. Sonra da sordu: "Eğer 5 programcıyı görevlendirirsem sistemin tasarlanması ne kadar sürer?"

"1 yıl," diye cevapladı usta hiç tereddüt etmeden.

"Fakat bu iş çok acil! 10 programcı çalıştırsak?"

Ustanın kaşları çatıldı. "Bu durumda iki yıl sürer" dedi.

"Peki ya 100 programcı çalıştırsak?"

Usta omuz silkti ve "O zaman tasarım asla tamamlanmaz" dedi

4. Kitap - Kodlama

Ve şöyle dedi usta programcı: "İyi yazılmış bir program kendi içinde bir cennettir, kötü bir program ise cehennemin ta kendisi."

4.1

Bir program hafif ve çevik olmalıdır. Alt rutinleri inci dizileri gibi bağlanmalıdır. Programın ruhu ve amacı sürekli göz önünde bulundurulmalıdır. Fazla ya da az olmamalı, gereksiz döngüler ve değişkenler kullanılmamalıdır. Ancak yapıdan yoksunluk ya da değiştirilemez bir katılık da bulunmamalıdır.

Bir program "En Küçük Şaşkınlık" yasasını takip etmelidir. Nedir bu yasa? Program kullanıcıya daima onu en az şaşırtacak şekilde cevap vermelidir.

Bir program, ne kadar karmaşık olursa olsun, tek bir birim gibi çalışmalıdır. Program dış görünüşü tarafından değil içsel mantığı tarafından yönlendiriliyor olmalıdır.

Eğer program bu ihtiyaçları karşılamazsa düzensizlik ve karmaşa hakim olur. Bunu düzeltmenin tek yolu programı yeniden yazmaktır.

4.2

Bir çırak ustaya sordu: "Bazen çalışan, bazen de çöken bir programım var. Programlama kurallarına uydum ama gene de apışıp kaldım. Bunun sebebi ne olabilir?"

Usta şöyle cevapladı: "Kafan karışmış çünkü Tao'yu anlamıyorsun. Sadece bir insan etrafındaki insanlarda rasyonel davranışlar bekler. Sen neden aynı şeyi insanların yaptığı bir makinadan bekliyorsun? Bilgisayarlar determinizmi simüle ederler, mükemmel olan ise sadece Tao'dur.

Programlama kuralları geçicidir. Sadece Tao kalıcıdır. Bu yüzden aydınlanabilmek için önce Tao'yu kavramalısın."

"Peki ama aydınlandığımı nasıl anlayacağım?" diye sordu çırak.

Usta cevap verdi: "Programın düzgün çalışacak."

4.3

Bir usta çıraklardan birine Tao'nun doğasını anlatıyordu: "Tao tüm yazılımların içinde vardır, ne kadar küçük olurlarsa olsun bu yazılımlar."

"Bir hesap makinasında Tao var mıdır?" diye sordu bir çırak.

"Vardır."

"Peki bir video oyununda da var mıdır Tao?" diye devam etti çırak.

"Bir video oyununda bile vardır," dedi usta.

"Peki, kişisel bilgisayardaki Windows sisteminde de Tao var mıdır?" diye sordu çırak.

Usta öksürdü, boğazın temizledi, biraz kımıldandı ve "Bugünkü dersimiz bu kadar," dedi.

4.4

Prens Wang'ın programcısı yazılım kodluyordu. Parmakları klavye üzerinde dans ediyor, programları tek bir hata mesajı olmadan derleniyor ve rüzgar gibi çalışıyordu.

"Mükemmel!" diye bağırdı Prens. "Tekniğin kusursuz!"

"Teknik mi?" dedi programcı ve terminalinden yukarı doğru baktı. "Benim takip ettiğim şey Tao'dur - tüm tekniklerin ötesinde. Programlamaya ilk kez başladığımda tüm problemi tek bir kütle gibi görüyordum. Aradan yıllar geçtikten sonra o kütleyi görmüyorum. Bunun yerine alt rutinler kullanıyordum. Ancak şimdi artık hiçbir şey görmüyorum. Tüm varlığım şekilsiz bir boşluk gibi. Ruhum plansız programsız, içgüdülerini takip ederek özgürce çalışabiliyor. Kısaca programım kendi kendini yazıyor. Evet, doğru, bazen güç problemlerle karşılaştığım oluyor. Onların geldiğini görüyorum ve yavaşlayıp sessizce izliyorum. Sonra tek bir satırı değiştiriyorum ve problemler duman gibi uçup gidiyor. Programı derliyorum ve yapılan işin güzelliği varlığıma işliyor. Gözlerimi kapatıyorum ve sonra sistemden çıkıyorum."

Bunun üzerine Prens Wang dedi ki "Keşke tüm programcılarım senin kadar bilge olsaydı."

İlgili Yazılar

EnderUNIX'den 11. yerli yazılım

honal

EnderUNIX VoIPong, bağlı olduğu ağda, bütün trafiği görebilen bir noktaya yerleştirildiğinde, o anda aktif olan bütün VoIP çağrılarını tespit edebilmekte ve G711 algoritması ile sıkıştırılmış olanları (örneğin Microsoft Netmeeting görüşmeleri) PC'lerin "de facto" ses dosyalama standardı WAVE dosya formatında (.wav) diske kaydedebilmektedir. Sonradan, bu görüşmeler standart bir ses ortam yürütücüsü (örneğin Linux play, Windows Media Player) ile açılıp dinlenebilmektedir.

Windowsçular için Açık Kaynak Kodlu Yazılımlar

FZ

Bir grup cesur adam demiş ki "GNU/Linux ile haşır neşir olanlar zaten açık kodlu yazılım, özgür yazılım nedir ne değildir biliyor, biz MS Windows kullananları hedefleyerek şöyle ortaya karışık bir güzellik yapalım adını da TheOpenCD projesi koyalım."

Evet, aynen böyle demişler ve binbir değişik yerden download edebileceğiniz bir CD hazırlamışlar bunun içine de masaüstü kullanıcısını hedefleyerek OpenOffice.org, DictInstall, AbiWord, Beonex Communicator, FileZilla, Putty, WinVNC, XChat, Audacity, CDex,7-Zip, NetTime, Win Privacy Tray, Sokoban YASC 1.53, Celestia gibi yazılımları koymuşlar.

CD'de söz konusu yazılımlara ek olarak açık kaynak kodlu yazılım felsefesi ile ilgili makaleler ve başka bilgiler de mevcut.

Herhangi Bir Metnin Hangi Dilden Olduğunu Hızlıca Anlama

FZ

Yapay zekâ dersim için Prolog ile boğuşurken ve comp.lang.prolog haberleşme/tartışma grubunu mesaja boğarken oraya katkıda bulunan bir hocanın, Gertrand Van Noord'un enteresan bir çalışması dikkatimi çekti.

Perl ile yazılmış bir tür dil kategorizasyon programı. Yani bir GİRDİ'ye bakıp, "hmm bu Türkçe" diyor, başka bir girdiye bakıp "hmm, bu da Portekizce" diyor ve bunu kısa sürede, yüksek başarım oranı ile, 69 farklı dil için yapıyor. Açık kodlu, özgür yazılım kategorisinde alan TextCat'in bir de web demosu var.

Van Noord, TextCat'in ticari ve ticari olmayan rakiplerini de sıralamış. Kendi yazılımına dil sayısı olarak en çok yaklaşan yazılım XEROX Language Identifier ticari bir yazılım ve 40 civarı dil ayırt edebiliyor.

Hep birlikte tekrarlıyoruz: Özgür Yazılımı Seviyoruz! :)

Truva Linux 1.0 RC2 Hazır

atlantis

Türkçe İşletim Sistemi Projesi olan Truva Linux'un 3. deneme sürümü olan Truva Linux 1.0 RC2 download sunuldu.

Uzun süredir yapılan altyapı çalışmaları sonunda meyvesini vermeye başlamıştır. Artık kendi paketlerimizi kolayca hazırlamamıza yardım edecek olan sistem oturmak üzeredir. Tek bir betik yardımı ile programa ait kaynak kodlar indiriliyor, derleniyor ve paket hazırlanıyor. Bu sisteme göre düzenlenen paketler yazılım depolarımız aracılığı ile sizlere ulaştırılacaktır. Bu yıl içerisinde tamamlamayı hedeflediğimiz sistem ile normal bir kullanıcı da istediği zaman kendi paketlerini hazırlayabilecektir.

NVU - web tasarım aracı

anonim

Artık Linux için de Frontpage ve Dreamwever gibi WYSIWYG web sitesi hazırlamayı sağlayan bir program var. Kahramanımızın adı NVU.
Her ne kadar henüz download aşamasına bile gelememiş olsa da GPL olması açısından önemli bir adım.

Not: Ben yine de Quanta'yı öneririm. :)