5 Mart 2007 Pazartesi

Bir Yazılımcının Gözünden Evrim Fikri

Evrim yaşandı mı, yaşanmadı mı?

Ne kadar kritik bir soru değil mi? Cevabı evetse yaradan inancı sarsılacak, hayırsa ateizm çok ciddi darbe alacak. Cevabını bilemiyoruz. Bilememek bizi inanmaya sevk ediyor. İnanmak cehaletin bir sonucuymuş, ispat edemediğin şeylere inanırmışsın, öyle derler. Ondan bize İslam âlimleri nefs-i emmare demişler ve kurtuluşları çok zayıftır hükmünü vermişler. Allah’a inanmayanlara ise (kâfir diyeceğimi sanıyorsanız yanılıyorsanız) marifetullah mertebesine ulaşmış demişler. Yani “Allah’ı Bilmeğe”. Bizler cehaletimiz sonucu Allah’ın varlığına/yokluğuna inanıp inanmama çizgisinde gider geliriz. Sorular, şüpheler, cevaplar, tuzaklar hep karşımızdadır. Peygamberimizin dediği gibi kalbimiz meydana bırakılmış bir tüy tanesi gibi bir oraya bir buraya savruluyor.

Bu savruluş sırasında iki kavram ile karşılaşıyoruz: Evrim ve Yaratılış. Evrim ya da yaratılış, insanın varoluşun nedenini anlamlandırma çabasıdır, bilimsel bilgi olarak değerlendirilmesini doğru olduğunu düşünmüyorum. Çünkü bilimsel bilgi nedenden ziyade mekanizmanın kendisi ile ilgilenir, açıklar. Sen doğadaki mekanizmaları açıklayan verilere bakarsın ve kendince yorum yaparsın. Bu yapılan yorumlar ki yorum yapanın sıfatı ne olursa olsun, bilimsel bilgi değildir. Yani sen bir fosile bakıp "bunlar tesadüfen bu hale gelmiştir" yada "yaradılışımızın bir sonucudur" demen bilimin sınırları içinde değildir. Bilimsel verinin şahsi olarak yorumlanmasıdır

Yaratılış bilimsel veri gibi sunulamaz, bu dini açıdan da doğru olamaz. Çünkü doğası gereği yalnızca bir sefer olmuştur. Yalnızca bir sefer olmuş bir şeyi bir bilimsel disipline sokamazsın. Aynı evrimin dayanağı tesadüfü sokamayışın gibi... Bilimsel bilgi doğadaki döngüyü açıklayan bilgiler topluluğudur; zaten bu döngülerin oransal ifadesine de matematik diyoruz. Örneğin dünyanın kendi ekseni etrafındaki hareketi ve periyodunu 24 saat olarak tamamlaması gibi...

Yaratılış elbette vardır. Ama yaratılış fikri doğası gereği zaten döngüsel olmayanı savunmaktır. Yani bilimsel bilgi ile ifade edilemeyecek olanı. Bu noktada, çok yapılan bir hatayı bir kısa not olarak düşmek isterim ki, din bilime aykırıdır iddiasına cevap verme adına yaratılışın bilimsel bilgi olarak ifade edilebileceği söyleyen insanlar olabiliyor. Bu yapılan, -dünyada çeşitli ülkelerde dile getirenler iyi niyetli olsalar da- yanlış bir iddiaya yanlış bir cevap vermekten başka bir şey olmamaktadır ne yazık ki. Dolayısıyla varoluşun nedenine hep şüphe ile yaklaşacağız; zaten hayatın sırrı şüphe etmektir. Sonucunda tercih edebilme yetisine kavuşabilmektir. İnşallah bir şeyleri başarıp, imtihanı başarabilmek…

Şüpheler imtihanımızın gereğidir ve şüpheler ve sorular ile bilgimizi artırırız. Onlar olmasa olmaz. Siyah olmadan beyaz olmaz. Her şey bir denge içindedir. Evrende, vücudumuzda, ruhani tabiatımızda hep bir denge vardır. Evrimi de buradan konuşmaya başlamalıyız. Evrendeki dengeden, düzenden başlayarak… Öncelikle sormamız gereken soru şu: Evren değişime açık mı? Evrende değişim var mı?

Hayır, yoktur desem... Ama doğduğunuzdan beri her şeyin değiştiğini görüyoruz; her şeyin bir değişim içinde olduğu söylenmekte diye düşünerek yadırgar mısınız beni. Yadırgarsanız hata yaparsınız. Çünkü canlılık değişime açık bir yapıya sahip değildir.

Madem yazılımcı gözü ile anlatacağız dedik öyle yapalım. İlk kodlamaya başladıklarında mühendisler her şeyi tek bir exe’nin içine koymuşlar. Her defasından kodu tekrardan yazmak… Of, ne can sıkıcı… Kodun yeniden kullanılabilirliği (reusable) yalnızca kopyala-yapıştırdan ibaretmiş.
Bakmışlar böyle olmayacak demişler biz dinamik olarak bağlanabileceğimiz dosyalar oluşturalım sınıflarımız oraya koyalım oradan istediğimiz sınıfın istediğimiz fonksiyonuna ulaşırız demişler. Böylelikle kodu yeniden; yeniden yazmanın anlamı olmadığı gibi, (dikkat) dll'lere koyacağımız sınıflarda yapacağımız herhangi bir değişiklikten de exe’miz yani çalışan kodumuz etkilenmez demişler. Hmm… 2 tane farklı yerdeki kod birbiri ile etkileşim halinde bir tarafı değiştireceksin ve öteki taraf etkilenmeyecek ha? Öyle kolay değil o işler.

Bu durumun çöküşü çok da uzun sürmemiş. Çünkü öncelikle DLLdeki kodlarda kullanılan function overloading mekanizması(name mangling)nın farklı marka derleyicilerde farklı olması, ikincisi ve en önemlisi sınıfta yaptığın değişiklik ile oluşan nesnelerin boyutunun artması -örneğin exe 8 byte veri beklerken ve o kadar geleceğini tahmin ederek ona göre yer ayırırken 16 byte gelmesi- işleri berbat etmiş. Bakmışlar bu işler böyle olmuyor 2 farklı kodu birbiri ile uyum içinde çalıştırmak öyle kolay bir şey değil. Önce COM teknolojisini tasarlamışlar sonra aslıdan onun bir ileri basamağı olarak düşünülen .NET teknolojisini üretmişler. Bu teknolojilerin detayları her ne kadar konumuz olmasa da aklınızda tutmanız gereken şey çalışan 2 kodu birbiri ile uyum içinde çalıştırmanın zorluğu hele ki yalnızca tek taraflı bir değişimin diğer taraftaki kodu nasıl etkilediği ve sistemi çökerttiği. Bu buffer overflow atakları da stackteki IP(Instruction Pointer) üzerine ekstra veri yazılmasından kaynaklanmaz mı?... Her şey dengede olmak zorunda ne kadar veri geleceğini sistem bilmek zorunda ona göre yer ayırmak zorunda ve bunu tek taraflı değiştiremezsin. Değiştirirsen bedelini sandığından daha ağır ödersin. Ki bu güne kadar defalarca ödemişler…

Eee, bunun evrimle ne alakası var?

Evren bir koddan ibarettir. Daha doğrusu trilyonlarca kodun birleşmesinden canlılık, cansızlık hem birbiri hem de kendi arasında uyum içindedir. İşte problem burada, sen uyum içindeki bir kodu tek taraflı değiştiremezsin. Hemen bir örnek verelim; hava bir koddur havadaki oksijen oranı da bir koddur bunu alıp kullanacak ciğerlerimiz de bir koddur. Ciğerlerimiz belirlenmiş bir oranda oksijenin varlığına hazır olarak tasarlanmıştır. Bundan azını fazlasını göndermenin bedeli sistemin çökmesidir.

Yani canlılık değişime açık değildir. Doğada ise değişim yoktur. Daha doğrusu olmamalıdır. Zaten devamlı olarak değişime engel olmaya çalışmaz mıyız? Ozonu yeniden dikmeye çalışmamız, buzulları eritmeme çabamız…

Ama yapraklar düşüyor vs... her şey değişim içinde?
Hayır, hiçbir şey değişim içinde değil her şey bir döngü içinde, buna değişim demek yanlıştır. Bu periyodik değişimdir yani döngüdür. Bak şimdi çok önemli bir şeye geldik. Her şey bir koddur dedik. Ve doğada değişim yoktur olamaz dedik. Peki, yazılım literatüründe değişiklik diye bir ifade var mıdır eğer ki her şey kodsa? Tabi ki de yoktur çalışan tüm kodlar döngü ve koşuldan ibrettir. Kod veri üzerinde döngü ve koşul ile ilerler.

Aslında bilimsel bilgi de içinde periyodikliği barındırdığı zaman değerlidir. İşte o zaman matematiksel olarak ifade edilebilir hale gelmiş olmaktadır. Her şey döner ama her şey; sinüs döner, elektronlar döner, gezegenler döner aynı bir mevlevinin döndüğü gibi.

Matematiğin, complex analizin en önemli konusu: fourier transform. Fourier serisine açma yalnızca periyodik fonksiyonlar için geçerlidir periyodik olmayan fonksiyonları ne yaparız?
Onları da sonsuzda periyodikmiş gibi düşünür (bazı özel şartlar altında) fourier dönüşümünü alırız. Yani mühendislik matematiği için periyodik olmak zorundadır fonksiyonlar periyodik değilse onu sonsuzda periyodik olarak düşünmelisin.

Bir şey yalnızca periyodik olduğu zaman değerlidir. Yalnızca o zaman bilimsel bilgi için anlamlıdır. Değişe değişe bu hale geldiğimizi iddia eden evrim bu hali ile bilimsellikten olabildiğince uzakta bir hayat sürmektedir.

Peki yaradılış?

Hayır, o da bilimsel bilgi olarak ifade edilemez. Çünkü yaradılış tek seferlik olmuş olağanüstü bir durumdur. Döngüsel değildir; matematiksel denklemini çıkaramazsın. Bunu yaradan da izin vermez. Vermemiştir de zaten. Çünkü sadece bu şartlar altın da bizler tercih edebiliriz; tercih etme hakkımızı kullanabiliriz.

Yaradan kendisini evrendeki döngünün ardına gizlemiştir.
Ama gün olur durur zaman
Dalarız döngüsüz alemi seyre…

0 comments :