Evrendeki tüm problemleri çözen bir yazılım?

programlamakendimce

12 gün önce 0 yorum

Kelimenin tam anlamıyla her şeyi çözebilen bir yazılım. Bir sonraki asal sayıyı bulan bir yazılım, gelecek ay yapacağınız harcamayı belirten bir yazılım, bir saat sonraki kurları veren bir yazılım, suriyedeki iç savaşı bitirmek için gerekli olan planı çıkaran bir yazılım, yaşamınızı uzatmak için hücre yenileme yöntemlerini söyleyen bir yazılım.

Böyle bir şey mümkün mü?
Biraz düşünelim hemen hayır demeden önce.

Bazı fikirler evrendeki her şeyin madde olduğunu ve bunun sonu kaçınılmaz bir şekilde aynı biteceğini savunuyor. Yani olacak bitecek her şey maddeye bağlı. Eğer en ufak bir değişiklik söz konusu olursa son değişir ve bu, kaos olur. Bu öğretiye Determinizm denir. 

Eğer bu şekilde bir evren olsaydı o zaman bu uygulamayı yazabilir miydik? Her maddeyi kayıt altına alabildiğimiz nelerin olacağını gördüğümüz kaçınılmaz sonu bildiğimiz. Aklınıza evet geliyor değil mi? Çünkü sonunda ne olacağını biliyorum hangi maddenin hangi maddeyi etkileyeceğini bildiğim için.

O zaman da ben şu soruyu soruyorum. Bu yazılımın birden çok kişide olduğunu varsayarsak o kişilerin kur farklarını takip ederek zengin olma olasılığı nedir?

Burada benim determinizme olan inancım sarsılıyor. Evrende aynı zamanda (evet kesinlikle aynı zamanda) aynı yönde hareket eden iki cisim bu yazılımın dünyadaki tüm paranın sahibi ol butonuna basıyor. Peki sonuç ne olur? FIFO mu kullanırsın :D yoksa kişinin bağlı olduğu sunucuya giden ping'e bağlı olarak mı karar verirsin? Hayır bu yazılımın bir server'a ihtiyacı yok, bir arayüze bile ihtiyacı yok. Bu yazılım öyle bir yazılım ki kendisinin olmayıp çalışma olasılığı bile var. Çünkü evrendeki her problemi çözüyor. 

Evet sizce iki kişiyi de memnun edebilir mi bu yazılım? İki kişi var ve dünyadaki tüm paranın sahibi olmak istedi. Buna ancak bir kişi sahip olabilir, ama yazılımımız aynı anda çalıştırıldı. 

Biraz kafanızı açtığıma göre anlatıma geçebilirim.

Bahsettiğim bu son şey benim için bir bilinmezlik. Buna gayb diyebiliriz de. Arapçada "gizli kalmak, gizlenmek, görünmemek, uzaklaşmak, gözden kaybolmak" anlamına geliyor bu kelime. Bilgisayarlar kaçınılmaz bir sona varırlar, eğer ki paralelleştirme yoksa.

Mano'nun basit bilgisayarında CPU kendisine gönderilen veriyi okur ve işler; dolayısıyla kaçınılmaz bir sona sahiptir. Ancak madde için hayır. Her işlem her zaman aynı anda bitmez. Transistörler yarı iletkenlerden oluşur ve anahtarlama yapabilmesi için belirli bir aralıkta potansiyele (volt'a) ihtiyaç duyar. Aynı zamanda clock sinyali kesin olarak doğru değildir. Basit bir clock sinyali oluşturan devre; sığaç ve op-amp'dan oluşur. Sığaç sıcaklığa bağlı olarak erken veya geç dolabilir. Ve biz insanlar hesaplaması önemli olmadığını düşündüğümüz bu değerleri ihmal ederiz. Kimisinin bilgisayarı 1ns daha hızlıyken kimisi 0.1ns daha hızlıdır. Arada pek bir fark görünmese de deminden beri anlatmak istediğim şeye denk geliyoruz. Sözün özü:

Gayb'ı bilemeyen bizler böyle bir yazılımı yazamayız.

Ancak noksan sıfatlardan münezzeh olan Allah, ayetinde bizlere mealen şunu söylüyor:

"Gaybın anahtarları Allah'ın yanındadır; onları O'ndan başkası bilmez. O, karada ve denizde ne varsa bilir; O'nun ilmi dışında bir yaprak bile düşmez. O yerin karanlıkları içindeki tek bir taneyi dahi bilir. Yaş ve kuru ne varsa hepsi apaçık bir kitaptadır."
En'âm ; 59

Buradaki "apaçık bir kitap" "Allah’ın her şeyi kuşatan ilmi" olarak kullanılmıştır alimlerce. 

Bu konulara değinmemin sebebi fayda veren ilmin amel edilen ilim olduğundandır. Bu düşündüklerim sizlere Allah'ın kudretini hatırlatıyorsa amacıma ulaştım demektir. Bir başka taraftan insanın uğraşmaması gereken fuzuli işlerin de önemine değinmekti.

Yazılımınız Evrendeki Tüm Problemleri Çözemez!

Neden bunu diyorum biliyor musunuz? Bazen geleceği düşünerek kod yazarken aşırıya kaçıp, projenizi aslında birkaç kişinin sadece bir kere kullanacağı butonlarla; komponentlerle ve kodlarla doldurup duruyorsunuz. Peki o dahiyane fikir ne zaman ihtiyacınıza yarayacak biliyor musunuz; hiçbir zaman! 

Örnekler fikrimi açıklamak için yardımcı olacaktır. Bundan yıllar önce takım arkadaşlarımın aklına takılsın, araştırsın diye bir yerlere bir kod gizledim. Aslında görünürde ancak bir helper olduğu için çok etkileşimde olmayan bir yer. Tam olarak şöyle bir kod:

function strToDate (date) {
    if (!date) return ' ';
    date = date.split('-').join('');
    var yil = date.slice(0, 4); // bu kod 10000 yılında çalışmayacaktır.
    var ay = date.slice(4, 6);
    var gun = date.slice(6, 8);
    var saat = date.slice(8, 10);
    var dakika = date.slice(10, 12);
    var saniye = date.slice(12, 14);
    var milisaniye = date.slice(14, 17);
    var tarih = '';
    tarih += yil + '/';
    tarih += ay     ? (ay     + '/') : '';
    tarih += gun    ? (gun    + ' ') : '';
    tarih += saat   ? (saat   + ':') : '';
    tarih += dakika ? (dakika + ':') : '';
    tarih += saniye ? (saniye)       : '';

    tarih = new Date(tarih);
    milisaniye && tarih.setMilliseconds(milisaniye);
    return tarih;
}

Bu fonksiyon Ymdhis şeklinde gelen bir string'i JavaScript'de tarih nesnesine dönüştürüyor. Yorum satırında da görüldüğü gibi 10bin yılında kodun çalışmayacağını dile getiriyor, neden; çünkü YYYYY olacağı için kod doğru çalışmayacak. Peki buradaki notu ciddiye alıp bu kodun 10bin yılında da çalışması için düzenlenmeli miydim? :)

Şunun şurasında 7979 yıl var. Ne var yani benim kodum 10bin yılında da çalışsa fena mı olur? Bunu düşünmenin saçma olduğunu mu düşünüyorsunuz? Bu konuda 3 mühendis bir araya gelmişler ve şöyle bir rfc2550 oluşturmuşlar. Bu problemler Y2K Y10K gibi adlandırılıyor, yani 2bin yılı sorunu 10bin yılı sorunu gibi. 2bin yılı sorununu belki hatırlayanlarınız vardır. O zaman üretilen hiçbir yazarkasa işe yaramaz olmuştur ve çöpe atılmıştır. Çünkü yıllar çift hane ile ifade ediliyormuş, yani 73 96 gibi (1973 1996)

Düşünmenin sınırı yok ama zamanın sınırı var. O yüzden bu yazılımı ileride başka bir şekilde kullanırım diye düşünürken çok fazla zaman kaybetmemek lazım.

Kısıtlı hayatımızda planladığımız onlarca şey tamamen bir mucizeden ibaret. Bizler her zaman sürtünme kuvvetini, yer çekimini ihmal eden insanlarken cismimizin A noktasından B noktasına sağlıklı bir şekilde varacağını düşünen hayalperestlermişiz.

Hata kontrolü, try/catch, throw gibi şeyler tam olarak bizim gibiler için tasarlanmış şeyler. Evreni anlamak istiyorsak try/catch'i oluşturan insanlar olmalıyız, kullananlar değil!

Düşündüklerin nedir ?

Abdurrahman Eker

(1010 Eylül 11111001100)

  • Full Stack Developer at Detaysoft Turkey/Sivas
  • İnternette Avare Kodcu
  • codewars
  • github
  • linkedin
  • superpeer
  • youtube
  • Yeni içeriklerden haberdar olmak ister misin ?