Doğallık

Söz konusu siyaset, savaş olunca her şey çok doğal oluyor. Siyasiler seçim kazanmak için bize rahat rahat söyleyebilirler. Muhalefet yetersiz, yanlış işler yapmasına rağmen sırf iktidar partisini yenmek için onu desteklememiz gerek. Savaşlar tarihimizin önemli parçalarıdır. Onlar olmasa biz olmazdık.

Doğallık konusunu çok iyi anladığımı sanmıyorum. Sözlükteki tanımlarla bir deneme yapayım.

  1. Doğada olan, doğada bulunan: Evet bunların hepsi doğada bulunmakta. Bunun yanında doğada çok daha fazlası var ama onlara karşı tamamen karşı olabiliyoruz, ya da kabullenmiyoruz.
  2. Doğada rastlandığı gibi, doğaya uygun olan, doğa güçlerine, kurallarına uyan, tabii, natürel: Doğaya uygun olamayacak bir şey bilmiyorum. Plastik gibi bir şey mi acaba? Bu tanım girişteki konuyla çok ilgili değil sanki.
  3. Kendiliğinden olan, insan eliyle yapılmamış, yapay karşıtı: Bu da olmamalı, yukarıda dediklerimin hepsi insan yapımı.
  4. Yapmacık olmayan: Bu da değil.
  5. Olağan, alışılmış, her zamanki gibi olan, beklenildiği gibi: Bu biraz yakın gibi. Bunu not alayım.
  6. Sağduyuya, mantığa, olağan düzene uygun olan: Yukarıdaki noktaların mantığa, olağan düzene uygun olduğunu sanmıyorum.
  7. Katıksız, saf: Bunun da alakalı değil gibi.

TDK bu kadar tanım vermiş. O zaman beş numaralı tanım üzerine düşüneyim biraz. Alışılmış, beklenildiği gibi olan şeyleri doğal karşılayabilirim gerçekten de ama bu şeylere alışmak zorunda mıyım? Sanırım alışmak için çaresizlik önemli bir kıstas olabilir. Örneğin ölümün doğallığı gibi. Ben de öleceğim ve buna karşı bir çözümüm yok. Belki de bunu engellemek için çok büyük bir motivasyonum da yok. Gerçekten de beklediğim, alıştığım bir şey. Ya savaş? Savaşa karşı da yapabilecek çok bir şeyim yok sanırım. Tarihte de birçok insan buna karşı bir şey yapamadı. Bir kısmı yapabildi ama. Savaştan kaçanlar oldu. Hatta savaşı önleyenler de oldu. Belki sadece geciktirdiler ya da başka bir şekilde sahnelenmesine yol açtılar ama engellenen savaşlar oldu. Siyaset soruları bu kadar bile kesin ya da çaresiz değil. Eğer iktidarın gitmesini istiyorsam muhalefetin bana göre hatalarını eleştirebilirim. O hatlar düzeltilirse daha iyi bir muhalefet olacaktır. Bunu istemiyor olamazlar. Ha, benim bahsettiğim şeyleri hata olarak görmüyor olabilirler. Bu bana yazılım dünyasını hatırlatıyor. Bir programda bir şey yapmaya çalışırız ve program bizim beklediğimiz gibi çalışmaz. Sonra o programa küfrederiz, şikayetler yazarız filan. Programcı da çıkar ve bu programın hatası değil, kullanıcı hatası der. Eminim bu durum kullanıcıya o kadar da doğal gelmez. Ben bir program kullanırken kafamda bir model vardır, programın da o modele göre çalıştığını varsayarım. Eğer uyumsuzluk varsa o programın yerini alabilecek başka programlar ararım. Eğer becerebileceğime inanırsam bu programı kendim yazmayı bile düşünebilirim. Siyaset işini de sanırım böyle düşünüyorum. Kafamda bir dünya, devlet modeli var. Beklentilerim var. Bu beklentiler karşılanmadığı zaman rahatsız oluyorum ve başka seçeneklere bakıyorum. Neden otomatikman kullanıcı hatası diye düşüneyim ki? Büyük ihtimalle kimse bu durumlarda kullanıcı hatası olduğunu düşünmez. Sadece yapacak bir şey olmadığına inanıp kabul edebilir. Olağanlaştırabilir. Önce kötünün iyisini seçiyoruz deriz, sonra bu işin normali bu noktasına geliyoruz. İyileşme arzumuz da bu esnada köreliyor sanırım. Neyse, bugünlük de bu kadar yeter. Gidip başka şeyler öğreneyim. Hem o sırada bu düşüncelerden de kaçabilirim biraz.

Olaylar

Projelerde geçmişte verdiğimiz yanlış kararlar asla peşimizi bırakmıyor. Özellikle yazılım alanında verilen kararların uzun yıllar boyunca aynı şekilde geçerli kalması pek yaşadığım bir durum değildi zaten. Hala da değil. Bu günlerde tek değişiklik bu yanlışlamanın çok daha sık olması. Müşteriler artık daha yenilikçi adımlar atmaya meyilli. Teknoloji hızla gelişiyor. Rakipler de artıyor.

Bu ortamda uzun zaman önce şöyle harika bir tasarım yapayım da her müşterinin istediği olsun beklentisini terk etmiştim. Bu yönde tek sıkıntım o değişiklikleri hızla uygulayabilecek teknikleri henüz kullanmıyordum. Son zamanlarda biraz bu tekniklere yatırım yaptım. Bu sayede aynı anda birçok değişikliği programın mevcut müşterilerini rahatsız etmeden yapabiliyorum.

Önümüzdeki fuar nedeniyle yeni bir projeye de başladık. Bu proje sayesinde değişik bir alan için makineler üretebileceğiz. Uğraştığımız temel konu makinenin kendi kendine doğru parametreleri öğrenmesi üzerine. Teknik olarak nispeten kolay bir sorun. Sadece matematik. Zor olan kısmı ise bu matematiği çok değişik müşteri yelpazesini memnun edecek şekilde paketlemek. Çoğu müşteriler hiçbir şey yapmadan makinenin öğrenmesini isteyecektir. Bunların da çoğu belki tek bir tuşa basmaya razı olacaktır. Çok daha teknik müşteriler ise daha teknik verileri görüp kararlarını ona göre vermek isteyecektir. Bu kullanım senaryolarını belirlemek için toplantılar yaptık. Bu senaryolar aynı zamanda işlemin hangi modülde, nasıl yapılması gerektiğini ve de hangi arabirimlere ihtiyacımız olacağını da belirleyecek.

Sonunda uzun tartışmalar sonunda veri toplamanın ve işlemleri yürütmenin benim programladığım kısımda yapılmasına karar verildi. Ben de ihtiyacım olan arabirimlerin sunulması karşılığında bir sorun görmediğimi söyledim. Bunun yanında ileride ihityaçlara göre bu algoritmanın başka modüllere kayabileceği uyarısını da yaptım. Büyük ihtimalle bu uyarım çoktan unutulmuştur ama ben görevimi yaptım.

Dün görüntü işlemeden M ile kullanabileceğim arabirimler üzerine konuştuk. İlk toplantılarda bana söz verilen arabirimlerin hiçbirini alamayacağımı öğrendim. Peki dedim, “fuara bir ay bile kalmadı ama. İşimi zorlaştırırsanız bütün makine yetişmez.” diye de ekledim. Herkesin projeye bakış açısı farklı tabii ki. Kullanıcı arabirimini yazan arkadaş tabii ki kullanıcı için doğru şeyi yapalım, bu iş bir kerede bitsin istiyor. Ben de öyle yapalım ama fuara yetişecek şeyleri buna göre belirleyelim dedim. Az ama doğru şeyleri yapmak herkes için daha iyi olabilir. M elimizdeki arabirimleri kullanmanın en iyi yol olduğunu savundu. Grup şefi fuar için son müşterinin işine yaramayacak ama bizim sistemi kolayca test edebileceğimiz bir arabirim daha iyi olur dedi.

Her zamanki gibi karma bir yol seçildi. Anlatmak istediğim olaylar bunlar değildi ama. Program içindeki olaylardan behsedecektim. Yıllar önce projede bir parametre dışarıdan bir etki olmadan değişirse bu değişikliği benim programıma bildirebilsin diye bir mesaj tanımladık. O zamanlarda bunun ileride ne büyük belalara yol açabileceğini düşünemedik.

Sorun bu mesajı aldığımda sadece parametrenin değiştiğini bildirmesiydi. Bu parametrenin hangi ürüne ait olduğu ve neden değiştiği hakkında hiçbir bilgi yoktu. Dolayısıyla bazı senaryolarda yapacak pek bir şeyim olmuyordu:

Senaryo: Bir ürün üretilmekte. O sırada arabirimde bir işlem yapılıyor ve bu işlem görüntü işleme biriminde bir parametrenin değişmesini tetikliyor. Bu değişimin mesajı gelmeden önce arabirimde başka bir ürün seçiliyor ve bu ürün üretilmeye başlanıyor. Sonra parametrenin yeni değeri merkeze ulaşıyor. Bu değişim mesajında ürün bilgisi olmadığından sistem bu yeni değeri o an aktif olan ürüne yazıyor. Bu hatayı gidermek için şimdilik ürün değişimlerinde ekstra bir bekleme süresi koyuluyor. Bu süre boyunca yeni ürün aktifleştirilmiyor. O zamana kadar eski ürünü ilgilendirebilecek değişimlerin merkeze bildirileceği umuluyor.  
Senaryo: Ürün parametrelinin görüntü işleme birimi tarafından öğrenilmesi. Bu işlemde makineden geçen ürünlerin hatasız olduğu varsayılıyor. Görüntü işleme öğrenme modu boyunca bazı ölçümleri topluyor ve öğrenme bittiği zaman bu ölçümler ile parametreleri hesaplıyor. Bu hesaplamalar bitince parametrelerdeki değişiklikler tek tek merkeze bildiriliyor. Yukarıdaki senrayoda olduğu gibi ürün bilgisi olmadığından arada yapılacak bir ürün değişimi bu parametrelerin bir kısmının önceki, kalanının da sonraki ürüne kaydedilmesine yol açıyor. Bu durumda iki ürünü de bozmuş oluyoruz. Ürün değişiminde kullandığımız ekstra bekleme süresi de burada bir işe yaramıyor çünkü sayısı belli olmayan çok fazla parametre mesajı gönderiliyor ve bunların işlenmesi kullanıcının beklemek istemeyeceği kadar uzun sürüyor.

Bunlar şimdiye kadar yaşadığımız, herkesin bildiği sorunlardı. Burada arkadaşla konuşmaya başladık. M bu mesajın doğru olduğunu, çünkü geçmişte olan bir olayı temsil ettiğini söyledi. Bu olayın olduğundan ve bu mesajın sadece bunu söylediğinden hiçbir şüphem yoktu. Sadece bu mesaj işime yaramıyordu. Şu örneği vermeye çalıştım:

Senaryo: Arabirimden iki işlem başlatalım. Bu işlemler kullanıcı açısından birbirlerinden bağımsız olabilir. Diyelim ki bu işlemler görüntü işleme biriminde aynı parametreyi değiştiriyor. Bu olay tabii ki kullanıcının varsayımını geçersiz kılıyor ama kullanıcının bunu bilmesine imkan yok. Arabirim programcısı bile bunu bilemiyor. Bu durumda merkezi birim aynı parametre için iki değişik mesaj alacak. Eğer bu mesajlar sadece gösterilecek olsa sorun yok diyebilirim ama bu mesajlarla iki değişik prosesle ilgili iki değişik güncelleme yapacaksam hangisinin kime ait olduğunu nasıl çözebilirim?

Burada zamanında vermiş olduğumuz yanlış ya da eksik bir kara yüzünden kullanıcının yaptığı proses ile bu prosesin en temel parçalara ayrılıp bunlar üzerinden haberleşilmesi bir uyumsuzluk yaratmıştı. Prosesler ve olaylar arasında bir bağ kalmamıştı. Bu prosesleri aynı anda işlememek gibi bir kural da tanımlanabilirdi ama bu durumun da kısmen otomatik tespit edilmesi lazım, yani ortak parametreler var mı ve proseslerin hangi özellikleri var sorularını her an çözebilmemiz lazım. Yoksa kullanıcı bazı durumlarda gereksizce beklemek zorunda kalacak. Ayrıca bu durum sadece arabirim üzerinden başlatılan işlemler için değil, görüntü işleme birimi içinde olan işlemler için de dikkate alınmalı.

Bence bir parametre içten bir nedenle bile değişse, nedensellik her zaman olacaktır. Mesaja en azından bu nedensellikle ilgili bilgiler eklememiz sorunu çözebilir. Ya da diğer uç noktaya giderek parametrelerin değişimini tetikleyebilecek işlemleri aynı anda çalıştırmayı engelleyebiliriz. Her işlem kendinden önceki işlemin tamamen bitmesini bekleyebilir. Bu yöntemi programımda kullandım ama bir süre sonra kullanıcılar bu işlemler birbirinden bağımsız ama neden aynı anda işletilmiyorlar diye şikayet de ediyor.

İş hayatında her gün bu basit program olayları yüzünden çok ciddi gerçek hayat olayları yaratabiliyoruz. Düzeltmeleri, iyileştirmeleri geciktirdikçe de sorunlar sadece büyüyor.

Ödev

– “Hocam, ödevleri kontrol ettiniz mi?”

– “Evet, okudum ödevleri. Bugün sizinle ödevlerinizi konuşmak istiyorum. Hepsini ayrı ayrı işlemek çok uzun olacağından sadece birine bakacağız. Bu ödev diğerlerinden farklı olarak hızlı başlamış ve ardından çok yavaş ilerlemiş. Yine de ödev size verilen sürede bitmiş ve istenen sonucu da elde etmiş. Neden böyle bir seçim yaptığını sınıfa anlatmak ister misin CC?”

– “Ödevin girişi hızlı oldu çünkü kalan kısmın başarılı olabilmesi için zamana ihtiyacım olacaktı.”

-“Neden zamana ihtiyacın olduğunu düşündüğünü de arkadaşlarına açıklamak ister misin?”

-“Tabii. Ödevimde sonucun bulunmasını tesadüfe bırakmak istedim. Bu nedenle uzun zamana ve büyük bir alana ihtiyacım vardı.”

Sınıfta birden ateşli bir tartışma başladı. “Neden böyle bir riske girdin ki?” “Bütün kurallar verilmişti zaten, basit parametrelerle bu kuralları bulacak bir yöntem tasarlamak çok kolaydı.” “Hem öyle yapsaydın işin çok daha çabuk bitecekti.”

-“Ödevlerde gördüğüm ortak özelliklerden biri de buydu. Disiplin sağlamak için kullanılan yöntemler. Tehditler, cezalar. İşe de yaradılar tabii ki. Senin ödevinde de buna benzer yöntemler var, bunu biraz açıklasana.”

-“Aslında öyle bir planım yoktu ve uygulamadım da. Anlaşılan belli şartlar oluştuğunda sistemler kendiliğinden bu durumlara evriliyor.”

Bunun üzerine arka sıralardan bir ses yükseldi.

-“Bunun ne demek olduğunu biliyor musun peki?”

-“Elbette biliyorum. Eğer bundan korkacaksak ama bu okulda ne işimiz var?”

-“Peki CC, şimdi ödevinin sonucu nasıl bulduğunu da kısaca anlat. Diğer ödevlerdeki gibi disipline ulaşan topluluklar mı hedefe ulaştı?”

-“Evet, o gelişmeler farkında olmadan çok işlerine yaradı, birçok şeyi çok hızlı buldular. Kendi aralarında, hatta çevrelerine karşı verdikleri yarış da çok etkili oldu. Bence ödevdeki tesadüfi etmenler iyi bir seçim oldu. Yalnız bu mücadeleler aynı zamanda onları asıl hedeften de saptırdı. Bu sırada bu yola sapmayan, çok daha ilkel varlıklar basit kuralları çözmeye ve onları kullanmaya başladılar. Tabii ki bu varlıkların ilkelliği nedeniyle bu yeteneklerin gelişmesi ve yayılması çok yavaş oldu, fakat sonunda resimde de gördüğünüz A12C47 adını verdiğim tür bütün temel kuralları buldu ve ödev de bitti.”

-“Arkadaşınızın bu ödevini incelemeniz için onun birer kopyasını size de dağıtacağım. Bir hafta sonra bu kopyalar dahil büdün ödevleri toplayacağım ve yazılı raporlar dışında ödevler ve dolayısıyla da ödevlerde kullanılmış her şey imha edilecek. Çocuklar, hepinizin ödevi istenen şartları sağladığına göre bu sınavı başarıyla verdiniz ve bir sonraki sınava katılma hakkını kazandınız. Gösterdiğiniz gelişmeden çok memnun olduğumu da söylemek istiyorum. Haftaya görüşmek üzere.”

Öğrenciler masadaki raporları alıp çıkarken öğretmen de onları dikkatlice izliyordu. Bir hafta sonra bu evrenlerin çoğu çoktan unutulmuş olacatı. İçlerinden bir iki tanesi ise şimdiden ilginç sorular sormaya başlamıştı. Belki de kuralları çözecek kişi bunların arasından çıkacaktı. Birden hayalleri hafif bir korkuyla kesildi. Masada alınmayı bekleyen ödevlere baktı ve sonra da gülümsemeye başladı.

Anca beraber kanca beraber 2

Oyunun bu varyantında orijinal soruya küçük ama önemli bir değişiklik yapıyoruz.

Sizi ve o güne kadar hiç karşılaşmadığınız birini iki farklı odaya koyuyorlar ve bir oyun oynuyorsunuz. Oyunun kuralları şöyle:

Her turda iki seçenekten birini uyguluyorsunuz.

  1. Oyunu bitiriyorsunuz ve bir renk söylüyorsunuz.
  2. Diğer odadaki oyuncuya yazılı bir mesaj gönderiyorsunuz. Bu yazılı mesajdan başka hiçbir iletişim imkanınız yok. Eğer iki oyuncu da mesaj göndermeye karar vermişse mesajlar aynı anda iletiliyor.

Eğer ikiniz de aynı turda oyunu bitirir ve aynı rengi söylerseniz oyunu kazanıyorsunuz. Eğer ikiniz de farklı turlarda oyunu bitirmeye çalışır ya da aynı turda bitirip de farklı renkleri söylerseniz kaybediyorsunuz.

Diğer oyuncu da sizin kadar mantıklı ise oyunu kazanmak için nasıl oynarsınız?

Anca beraber kanca beraber (Çözüm)

Soru

Seriye kolay bir soruyla başlamıştım. Oyuncular mesajlarını sırayla iletebiliyordu. İlk turda oyunu bitirip rastgele bir renk söylemenin oyunu kazanmak için iyi bir strateji olmadığını görmek kolay olmalı. İki oyuncu da oyunu bitirmeden önce hangi rengi söyleyeceklerine karar vermeli. Ayrıca oyunu hangi turda bitireceklerini de bulmaları lazım. Bu karar verilene kadar birbirlerine mesajlar göndermeleri lazım.

Neyse ki oyunun bu varyantında işler kolay. İlk turda mesaj gönderme sırası kendisinde olan oyuncu örneğin şu mesajı gönderebilir.

“İkinci turda oyunu bitireceğiz ve kırmızı diyeceğiz.”

Bu şekilde iki oyuncu arasında basit bir sözleşme yapılmış olur. Kurallara ve oyuncuların mantıklı olmalarına güvenilirse bu yöntem yeterli olacaktır. Eğer biraz daha güvenlik istenirse o zaman sözleşmenin karşı taraftan onaylanması istenebilir. Sonuçta kurallara göre mesaj gönderebiliyoruz ama mesajın doğru gidip gitmediğini bilmiyoruz. Bu durumda şöyle mesajlar kullanılabilir:

  1. tur (birinci oyuncu): Üçüncü turda oyunu bitireceğiz ve kırmızı diyeceğiz. Lütfen bunu ikinci turda onayla!
  2. tur (ikinci oyuncu): Üçüncü turda oyunu bitireceğiz ve kırmızı diyeceğiz.

Eğer ikinci turun mesajı birinci oyuncuya ulaşmışsa üçüncü turda oyun kırmızı renkle bitirilir. Burada hala küçük bir belirsizlik var tabii. İkinci mesaj yerine ulaştı mı? Sonuçta ortama güven ne kadar yüksekse oyun o kadar kısa sürecek.

Anca beraber kanca beraber

Alex Bellos’un the guardian’daki pazartesi bilmecelerinden hoşuma giden bir grup bilmece daha. Aynı tema üzerine çeşitlemeler de diyebiliriz. Önce en basit versiyonunu çözmeye çalışalım.

Sizi ve o güne kadar hiç karşılaşmadığınız birini iki farklı odaya koyuyorlar ve bir oyun oynuyorsunuz. Oyunun kuralları şöyle:

Her turda iki seçenekten birini uyguluyorsunuz.

  1. Oyunu bitiriyorsunuz ve bir renk söylüyorsunuz.
  2. Eğer mesaj gönderme sırası sizdeyse diğer odadaki oyuncuya yazılı bir mesaj gönderiyorsunuz, eğer sıra sizde değilse hiç bir şey yapmıyorsunuz. Mesaj gönderme sırası her turda diğer oyuncuya geçiyor. Bu yazılı mesajdan başka hiçbir iletişim imkanınız yok.

Eğer ikiniz de aynı turda oyunu bitirir ve aynı rengi söylerseniz oyunu kazanıyorsunuz. Eğer ikiniz de farklı turlarda oyunu bitirmeye çalışır ya da aynı turda bitirip de farklı renkleri söylerseniz kaybediyorsunuz.

Diğer oyuncu da sizin kadar mantıklı ise oyunu kazanmak için nasıl oynarsınız?

Çözüm