Gelecekten Geçmişe Bir Not: O "Rastgele" Sayıların Ardındaki Süreç
Sevgili o heyecanla ilk kodu yazmaya başladığım günkü ben… Eğer sana bir şey söyleyebilseydim, büyük ihtimalle de bu olurdu: Hiçbir şey gerçekten tamamen rastgele değil.
Hatırlıyorum da, üniversitedeki o ilk projelerimizde ne kadar takıntılı olduğumuzu. Arduino’nun seri porta gönderdiği sensör verilerinin ya da bilgisayarın rand() fonksiyonundan gelen o "özgür" görünen sayı dizilerinin bizim için ne kadar büyük bir bilinmezlik olduğunu sanırdık. Bizim zihnimizde kaos, kontrolsüz doğanın kaotik bir yansımasıydı ve bunu taklit ettiğimiz her an, sanki evrenin kurallarını çözmüş gibi hissediyorduk.
Oysa ki, bu "rastgelelik" dediğimiz şey bile katmanlardan oluşuyor. Sen sadece son çıktıyı görüyorsun; o temiz, beklenmedik gibi duran değeri. Ama arka planda dönen süreç bambaşka bir disiplin gerektiriyor.
Tohum ve Tekrarlama Döngüsü
En çok kafamı karıştıran şey, kullandığımız donanımın bile bu kaosu nasıl ürettiğiydi. Örneğin, bir analog okuyucuyla gürültüye bağlı bir değeri örneklemek istiyorum diyelim. Dijitalleştirdiğimiz bu analog dalgalanmalar, bir miktar öngörülemezlik sunar. Ama biz bunu yazılıma taşırken, bu okuma sayısındaki o küçük elektronik sapmayı nasıl bir matematiksel girdi olarak algıladığımız kritik.
Eğer sürekli aynı voltaj seviyesini okumaya çalışıyor, ancak sıcaklık değişimleri veya parazitik elektromanyetik alanlar sayesinde okumanın düşük 1023’e yakın bir değer ile 345’e düşmesi arasındaki o anlık kaymayı yakalamaya çalışıyorsak, biz aslında bir tür entropi kaynağı kullanıyoruz. Buradaki tutarlılık, bizim algıladığımız süreklilikte yatıyor.
Senin o ilk defa srand(time(NULL)) komutunu girdiğin günkü heyecanınla, bu fonksiyonun aslında sadece bir başlangıç noktasını (seed) aldığını ve sonraki tüm üretilen sayılar dizisinin, o tohumdan itibaren deterministik bir yol izlediğini bilmiyordum. Bu benim için büyük bir aydınlanmaydı; kaotik gibi görünen her şey, doğru başlangıç parametresiyle çözülebilir bir diferansiyel denklem kadar yapısal olabilir.
Kontrol Etmek mi, Teslim Olmak mı?
Peki bu bilginin pratik uygulaması ne oldu benim için? Başlangıçta amacım, bilgisayarın "özel bir ruh haline" sahip olmasını sağlamaktı. Sonuçta, gerçekten tamamen öngörülemez bir olay üretmek isteseydim, bunu sadece termal gürültüye veya hava koşullarına gerçekten bağımlı bir sistemle yapmalıydım.
Ama bizim projelerimizde, ya mikrodenetleyicinin sayıcı döngüsünün milisaniyelik varyasyonunu kullanıyorduk ya da bir alıcının o anki sinyal gürültüsünü örnekliyorduk. Bu durumda, biz rastgelelikten kaçmıyor; biz bu sezgisel kaosu, yazılımın anlayacağı bir düzene sokuyorduk.
Unutma genç ben, projede karşılaştığın aksaklıklar nadiren gerçekten "hata"dır. Onlar, sistemin seni zorla o bilinmeyen, ancak potansiyel olarak en verimli çalışma moduna ittiği anlardır. O beklenmedik okuma, o tutarsızlık; onlar senin tasarladığın algoritmaya, hayatın kendisinden gelen bir geri bildirim olarak dahil oluyor.
Bu yolculuk, her zaman sadece kodu yazmaktan ibaret değilmiş. Bazen de evrenin sana gönderdiği kaotik sinyali dinlemekle ilgiliymiş. Devam et, ama artık her sayının bir hikayesi olduğunu bilerek kodla.