Algoritmalar Neden Önemlidir?

  • Son zamanlarda algoritma sözcüğüne haberlerde daha sık rastlıyoruz. Haber sitelerinde algoritma kelimesini (bkz https://www.ntv.com.tr/ara?q=algoritma) arattığımızda çok sayıda güncel haber listeleniyor. “WhatsApp, ‘herkesten sil’ özelliğini değiştirdi”  (https://bit.ly/2Dm4p84) haberinde yeni algoritmayla “atılan mesajı silme” özelliğinin çalışma prensibinin değiştiği; “Pelikan yuvadan uçmaya hazırlanıyor” (https://bit.ly/2oOGYjg) haberinde Meteksan Savunma’nın geliştirdiği Pelikan Güdümlü Mermi Simülatörü’nün kullanıcıya farklı algoritma ve parametreleri deneyebilme imkanı verdiği; “Facebook kaç paranız olduğunu bilecek” (https://bit.ly/2ovrPmL) haberindeyse Facebook’un satın aldığı yeni algoritma anlatılıyor.

Önümüzdeki günlerde bu sözcüğü daha çok duyacağız gibi görünüyor. Henüz ülkemizde yaygınlaşmadı ama bir “algoritma çağı”ndan bahsedenler de var (http://radioopensource.org/the-algorithmic-age/, http://firstmonday.org/ojs/index.php/fm/article/view/8097/6583). Rainie vd.’ye (2017) göre algoritmalar her şeyi optimumlaştırmaya çalışıyor, hayat kurtarıyor, işleri kolaylaştırıyor ve kaosu önlüyor ancak şirket ve hükümetlerin elde edebileceği güç nedeniyle de endişe uyandırıyor. Rainie vd.’nin (2017) algoritmalar ve etkileri üzerine yaptıkları çalışmaya katılan bilişim teknolojileri uzmanların neredeyse tamamı algoritma tabanlı uygulamalar hakkındaki endişelerini ifade ediyor. Bu uzmanların %38’i algoritmaların olumlu ve %37’si olumsuz etkilerinin daha ağır bastığını düşünüyor. %25’ine göreyse algoritmaların olumlu ve olumsuz etkileri yarı yarıya. Ancak uzmanların büyük çoğunluğu, algoritmaların görünmez bir şekilde hızla yayılacağı ve gelecekteki etkilerinin çok daha büyük olacağı hakkında hemfikir.

Enformasyon çağı, bilgi çağı ve şimdi karşımıza çıkan algoritma çağı gibi tanımlamalara karşı bazı çekincelerim olsa da önümüzdeki günlerde algoritmaları daha çok konuşacağımız ve tartışacağımız kesin. Algoritmaları daha sağlıklı tartışabilmek için de bir zamanlar sadece matematikçilerin ve yazılım geliştirenlerin aşina olduğu bir terim olan algoritmanın ne olduğunun ve bilgisayımsal (computational) işlemlerdeki yerinin anlaşılması gerekiyor. Dolayısıyla kodlama eğitimlerini yalnızca bir meslek edindirme kursu olarak değerlendirmemeli. Bu eğitimler, öğrencilere bilgisayımsal bakış açısı kazandırmak için önemli bir fırsat. Hatta kodlamayı, eğitimin amacı değil, bilgisayımı anlamanın ve yaparak öğrenmenin bir aracı olarak ele almak daha yerinde bir yaklaşım olabilir. Birçok okulda yeterli bilgisayar altyapısının olmadığını düşünerek karamsarlığa kapılmamak lazım. Bilgisayımsal bakış açısı, bilgisayar olmadan da (belki daha başarılı olabilir) kazandırılabilir. Örneğin https://classic.csunplugged.org/ adresinde çocuklara bilgisayar bilimini, bilgisayar olmadan öğretebilmek amacıyla çeşitli oyunlar ve etkinlikler hazırlanmış. Aynı sitede, ücretsiz indirebilen ve çeşitli dillere çevrilmiş bir kitap da var. Kitap henüz Türkçeye çevrilmemiş olmasına karşın kitaptaki bazı etkinliklerin Türkçe çevirileri de var. İkilik düzeni, sıralama, arama ve metinleri sıkıştırmada kullanılan algoritmaları oyunla öğreten eğlenceli etkinlikler var.

Okullarda yıllardır Word, Excel, Power Point vb anlatılarak yapılan teknoloji eğitiminden kökten farklı bir eğitim anlayışına gereksinim var. ABD ve Avrupa’da kodlama eğitiminin hedefleri arasında ucuz işgücü yetiştirmek olabilir; belki biz de sadece onların acemi bir taklitçisiyiz. Buna rağmen bilgisayar bilimini, çeşitli algoritmaları ve kodlamayı neden öğrenelim? Bilişim teknolojilerinden yararlanmak (örneğin tweet atmak, sosyal ağlarda örgütlenmek) için tüm bunları bilmeye gerek var mı? Sonuçta, televizyon izleyebilmek için elektronik ya da modern sağlık hizmetlerinden yararlanmak için tıp üzerine çalışmıyoruz.

Kimi zaman eğlenceli de olabilecek bu öğrenme zahmetine katlanmak için başlıca iki nedenimiz olduğunu düşünüyorum. Birincisi, adı ister algoritma çağı isterse başka bir şey olsun algoritmalara dayalı toplumsal düzenlemelerin çoğalacağı bir sisteme doğru ilerliyoruz. Bilgisayarların çalışma ilkelerinin büyüden arındırılması gerekiyor. Bilgisayarların nasıl çalıştığı bilinmediği zaman bilişim teknoloji hakkındaki mitsel düşüncelere daha kolay kapılıyoruz. Ayrıca Erwig’in (2017) belirttiği gibi yaşadığımız dünyada kendi başına hareket edemeyen nesnelerle etkileşim halindeyiz ve temel mekanik bilgisi bu nesnelerin hareketini önceden tahmin edebilmemizi böylece daha güvende olmamızı sağlıyor. Erwig’e (2017) göre bilgisayar bilimi de benzer bir yarar sağlayacaktır. Toplumsal yaşamı ve politik sistemleri etkileyen algoritmaların nasıl çalıştıklarının, varsayımlarının, hangi koşullarda daha iyi sonuç verebildiklerinin ya da sonuçlarının kesin mi yoksa olasılık hesabına mı dayandığının bilinmesi önemlidir.

İkinci neden ise bilgisayar biliminin, bilgisayar ve elektronik cihazlar dışında da gündelik yaşamdaki sorunları anlamaya ve çözmeye katkıda bulunabilme potansiyelidir. Algoritma kelimesi, Ebu Abdullah Muhammed Bin Musa El-Harezmi’den (780-850) gelmektedir. Harezmi, Hindistan’da geliştirilmiş onluk sistemi ve Arap rakamlarıyla sıfır kavramını Avrupa’ya tanıtmıştır. Cebir kelimesi El-Harezmi’nin 1830’da yazdığı “El’Kitab’ül-Muhtasar fi Hısab’il Cebri ve’lMukabele” (Cebir ve Eşitlik Üzerine Özet Kitap) adlı eserinde geçmektedir. El-Harezmi bu kitabında “hangi sayının karesi, sayının 10 katı ile toplanırsa 39 eder?” probleminin çözüm yolunu hem sözlü hem de geometrik olarak göstermektedir. El-Harezmi’nin adını “Algorizm” olarak telafuz eden Avrupalılar da “Arap sayıları kullanarak aritmetik problemler çözme kuralları”na algoritma adını vermiştir (http://bit.ly/1hcAajP). Fakat algoritmalar, bu terim kullanılmaya başlamadan önce de vardır. Ayrıca belirli bir problemi çözmek için uygulanan bu alışılmış yöntemler (rutinler), olarak tanımlayabileceğimiz algoritmaların kullanım alanları matematikle sınırlı değildir. Babiller’in hukuksal sorunlarda karar verebilmek ve Latince öğretmenlerinin doğru gramer elde edebilmek için algoritmalardan yararlandığı bilinmektedir. Tüm kültürlerde algoritmaların geleceği tahmin etmek, hangi tıbbi tedavinin uygulanacağına karar vermek, yemek hazırlamak gibi uygulama alanları vardır (Barbin vd., 2012). Yemek ya da bir sandviç hazırlarken bir tarifte yer alan talimatları uygularız. Aslında yaptığımız şey malzeme, mutfak gereci, enerji ve hazırlama zamanı gibi kaynaklardan yararlanarak alışılmış yöntemleri uygulamak ve ham içeriği nihai bir ürüne dönüştürmektir. Bilgisayımsal eğitim, gündelik yaşamımızdaki bu tip süreçleri tekrar gözden geçirmemizi sağlayabilir.

Bu bağlamda, Erwig’in (2017) Once Upon an Algorithm: How Stories Explain Computing (Bir Zamanlar Bir Algoritma: Masallar Bilgisayımı Nasıl Açıklar) adlı kitabının güzel bir çeviriyle bilgisayımsal eğitim için eşsiz bir kaynak olacağını düşünüyorum. Erwig (2017), popüler masallar, romanlar ve filmler aracılığıyla bilgisayar biliminin temel kavramlarını basit ama ayrıntılı bir biçimde anlatıyor. Erwig’in (2017) Hansel ve Gretel’den nasıl yararlandığına bakalım.

Hansel’in Algoritması

Erwig (2017) algoritmaları tartışmaya bilgisayımın ne yaptığı ve ne olduğu sorularıyla başlar. Birinci görüş, bilgisayımın problem çözdüğüdür. Bu bakış açısında, bir problemin uygun biçimde gösterildikten ve alt problemlere ayrıldıktan sonra çözülebileceği vurgulanmaktadır. Bilgisayımla problem çözme arasındaki farklılıkları dikkate alan ikinci görüşe göreyse bilgisayım herhangi bir problem çözme değil bir algoritmanın uygulanmasıdır. Algoritma, bilgisayımı kesin olarak tanımlar, bilgisayımın otomatikleştirilmesini ve analizini olanaklı hale getirir. Bilgisayımda problemler ortak özelliklerine göre sınıflandırılır ve bu sınıfta yer alan problemlerin çözümü için bir algoritma tasarlanır. Böylece algoritmalar, belirli bir sınıfta yer alan problemlerin çözümünde uygulanabilecek bir beceri haline getirilir.

Erwig (2017) daha sonra bu tartışmayı Hansel ve Gretel adlı masalla derinleştirir. Masalı hatırlayalım. Hansel ve Gretel, babalarıyla ve üvey anneleriyle yaşayan iki kardeştir. Üvey anneleri, çocuklardan kurtulmak ister ve babalarını, çocukları ormanın derinliklerinde bir yere bırakmaya zorlar. Babasıyla üvey annesinin konuşmasına kulak misafiri olan Hansel’in aklına ormandan eve geri dönebilmek için bir çözüm gelir. Gece dışarı çıkar ve çakıl taşı toplayıp cebine doldurur. Sabahleyin ormanın derinliklerine doğru yola çıktıklarında Hansel cebindeki çakıl taşlarını yol boyunca serper. İki kardeş ormanda yalnız başlarına kaldıklarında havanın kararmasını beklerler. Daha sonra ay ışığında parlayan çakıl taşlarını takip ederek evlerine geri dönerler.

Burada temel problem, tehlikeli ormandan güvende olabilecekleri evlerine dönebilmektir. Problem tek adımda çözülemeyeceğinden Hansel problemi parçalara ayırır. Asıl problem şimdi iki çakıl taşı arasındaki mesafeyi kat etmekle çözülebilecek daha alt problemler haline getirilmiştir. Sistematik biçimde, çakıl taşlarını izlemeleri gerekmektedir. Sistematik yaklaşım, bilgisayımın temel özelliklerinden biridir. Aşağıdaki resimden de görüldüğü gibi Hansel, ana problemi daha kolay çözülebilir parçalara ayırarak çözebilmiştir. Fakat bu stratejinin tek başına yeterli olmadığına ve çakıl taşı gibi tamamlayıcı bir ögeye gereksinim duyduğuna dikkat edelim. Çözüm sürecinden anlaşıldığı gibi bilgisayımın gerçek dünyadaki bir problemi çözebilmesi için problemin gösterimi (representation) gerekmektedir. İlk gösterim, ormanın tehlikeli ve evin güvenli olduğu bir durumu ifade etmektedir. Hansel ve Gretel, tehlikeli bölgeden güvenli bölgeye geçmelidir. Hansel’in çözümünde ise bir çakıl taşı, o anda bulundukları yeri ve çakıl taşlarının tamamı da ormandan çıkış yolunu göstermektedir. Çakıl taşları, bilgisayımı olanaklı hale getirmektedir.

Bilgisayım, problem çözme sürecidir. Ama ne her bilgisayım bir problem çözer ne de her problem çözümü bilgisayımdır. Hansel ve Gretel, problemin gösterimiyle ilgisiz biçimde, etrafa çakıl taşı serpmiş olabilir. Ormanın içinde bunları takip ederek dolaşmaları ve sonra aynı yere gelmeleri bir çözüme götürmeyecektir. Her çözüm de bilgisayım kapsamında değerlendirilemez. Hansel’in gözleri iyi görmeyen cadıyı kilo almadığına inandırmak için parmağını uzatmak yerine bir kemik parçasını uzatması zekice ama anlık bir çözümdür. Bu çözümde sistematik bir yaklaşım yoktur. Hansel’in geri dönüş takibi için çakıl taşlarını kullanmayı akıl etmesi de sistematik bir düşüncenin sonucu olmayıp anlık bir çözümdür. Hansel’in daha sonra çakıl taşı bulamayınca ekmek parçalarını kullanması yine anlık bir çözümdür. Çakıl taşlarının takip edilerek eve dönülmesiyle uygulanan çözüm tekrarlanabilme özelliğine sahiptir. Ama Hansel’in çözüme yardımcı olmak amacıyla çakıl taşını kullanmayı akıl etmesi ve daha sonra bunun yerine ekmek parçalarını kullanmayı akıl etmesi tekrarlanamaz; üçüncü kere ormana bırakılmaları gerekseydi Hansel’in aklına bir başka parlak fikrin gelmesini bekleyecektik.

Bilgisayımın problem çözümü olarak ele alınması bilgisayımı sistematik ve bölünebilir bir süreç olarak göstermesi açısından önemlidir. Ancak bilgisayımın nasıl çalıştığını ve neden benzer durumlarda uygulanabilir olduğunu göstermekte yetersiz kalmaktadır.

Hansel ve Gretel, aşağıdaki algoritmayı uygulamaktadır:

  1.  Daha önce ziyaret edilmemiş parlak bir çakıl taşı bul ve ona doğru ilerle.
  2. Eve geri dönene kadar bu adımı uygula

Algoritmaların en büyük özelliği tekrarlanabilirliktir. Hansel ve Gretel, aksi bir koşul oluşmadıkça aynı algoritmayı her seferinde başarıyla uygulayabilir. Bu nedenle, algoritmalar bilgisayımda temeldir. Bir algoritmanın bir dilde ifade edilebilmesi, bir sınırının olması (sonsuza kadar gitmemesi) ve işe yarar olması gerekir. Algoritma ayrıntılandırılabilir. Örneğin, Hansel’in taşları serperken görüş mesafesini dikkate alması gerekir. Çünkü bir taşın bulunduğu yerden sonraki taşın nerede olduğunu görerek hangi yöne gideceğine karar verebilmelidir. Masal da anlatılmamış ama aynı taşı iki kere ziyaret etme gibi bir durum da olabilir. O zaman ne yapmaları gerekir? Bu tip sorunların önüne geçebilmek için Hansel ve Gretel önlerine çıkan çakıl taşlarını toplamaları gerekecektir. Yeni algoritma aşağıdaki gibi olabilir:

  1.  Daha önce ziyaret edilmemiş parlak bir çakıl taşı bul, bulunduğun yerdeki taşı cebine koy ve yeni taşa doğru ilerle.
  2. Eve geri dönene kadar bu adımı uygula

Ne yazık ki bu yeni algoritma nedeniyle masalın yeniden yazılması gerekecektir. Çünkü eve vardıklarında Hansel’in cebinde yine taşlar olacağından ekmek kullanmak zorunda kalmayacaklar, kuşlar yoldaki ekmekleri yemeyecek ve cadının eline düşmeyeceklerdir. Ama masalda anlatılmayan başka olasılıklar da vardır. Algoritmanın her zaman sonlanabilmesi ve doğru sonucu vermesi gerekmektedir. Eğer ormana doğru ilerlerken düz bir yol takip etmeyip zikzak çizdilerse aşağıdaki gibi bir durumla da karşılaşılabilir:

D noktasından hem B hem de C görülebiliyorsa algoritmanın bunu da dikkate alması, örneğin DCBA yolu yerine DBC’de takılıp kaldıysa bir önceki konumuna dönmesi gerekir. Algoritmaların durması da önemli bir özelliktir. “Daha önce ziyaret edilmemiş” şartını kaldırdığımızda işler yine karışabilir. Algoritmada sonsuz döngüye girilebilir.

Erwig (2017) daha sonra “bilgisayım algoritmanın uygulanmasıdır” görüşüne geçer ve bilgisayımın algoritma uygulandığında gerçekleştiğini belirtir. Bilgisayar, bilgisayım yapan kişi ya da şeydir. Buna göre iki tip bilgisayar vardır. Birincisi, anlayabileceği dilde tarif edilen herhangi bir algoritmayı en azından (prensipte) uygulayabilen, insan, dizüstü bilgisayar ya da akıllı telefon gibi evrensel bilgisayarlardır. İkinci tip bilgisayarlarsa tek bir algoritmayı çalıştırabilirler. Algoritmanın donanımla bütünleştiği hesap makineleri bu tip bilgisayarlardır.

Ayrıca bilgisayarın tipi veya bilgisayımı yapanın insan veya makine olması fark etmeksizin bilgisayımın bir maliyeti vardır. Bilgisayım için bilgisayarın kaynak kullanması gerekir. Oyun oynarken dizüstü bilgisayarınız ısınabilir ya da akıllı telefonda çok fazla uygulama çalıştırırsanız pili daha hızlı bitebilir. Bu nedenle, bir algoritmanın bir problemi çözebilmesinin yanında yeterince hızlı hesaplama yapabilmek için bilgisayım kaynaklarını nasıl kullandığı değerlendirilmelidir. Örneğin, bir sıralama algoritması 100 kaydı çok hızlı biçimde sıralayabilir. Ama milyonlarca kaydın aynı algoritmayla istenilen zamanda sıralanıp sıralanamayacağını öngörebilmek için algoritmanın sonuca nasıl ulaştığı bilinmelidir. Kayıt sayısının artması algoritmadaki adım sayısını nasıl etkilemektedir? Bir diğer deyişle, algoritmanın çalışma zamanı karmaşıklığı (runtime complexity) nedir?

Hansel ve Gretel’e dönersek… Çocukların algoritmasındaki “daha önce ziyaret edilmemiş parlak bir çakıl taşı bul ve ona doğru ilerle” bir algoritma adımıdır. Hansel ve Gretel’in adım büyüklüklerindeki farklılıklar ya da bilgisayarların işlemci modelleri algoritmanın uygulama hızında etkilidir. Ama algoritmaların verimlilik analizi ve birbiriyle karşılaştırılabilmesi için gerçek adımdan farklı olan algoritma adımı dikkate alınır:

Algoritmaların çalışma zamanı karmaşıklıklarının ölçümü daha büyük girdilerin (masalımızda daha uzun mesafelerde) çalışma zamanını nasıl etkileyeceğini göstermektedir. Hansel ve Gretel örneğinde, mesafe (kullanılan çakıl taşı) artıkça algoritma adımı sayısı da aşağıdaki gibi doğrusal olarak artmaktadır:

Her adımda bir çakıl taşı olmak zorundadır ve algoritmanın problemi çözüp çözememesi gidilen mesafeye, Hansel’in cebinin bu kadar çakıl taşı alıp alamayacağına bağlıdır. Hansel’in cebinin büyüklüğünün yolu bulmaya etkisi veya bilgisayar bilimi bağlamında bilgisayarın bir algoritmayı çalıştırabilmesi için gerekli alan, alan karmaşıklığı (space complexity) olarak adlandırılır. Görüldüğü gibi Hansel’in çakıl taşlı algoritması işe yarar gibi gözükmesine rağmen cebine sığan çakıl taşlarıyla sınırlıdır.

Şimdi masalı değiştirelim. Hansel’in cebi yeterince büyük değil ve bunun için yola bir çakıl taşı bıraktıktan sonra aşağıdaki gibi eve geri dönüp yeni bir çakıl taşı alması gerekiyor:

Bu durumda bir çakıl taşı koymak için 1 adım atacaktır. İkinci çakıl taşı için önce eve geri gidecek (1 adım), sonra da 2 adım ileri atacaktır. Üçüncü çakıl taşı için gidiş gelişte 5 (2 geri, 3 ileri adım), dördüncü için 7 adım (3 geri, 4 ileri adım) atacaktır. Böylece atılması gereken adımlar aşağıdaki gibi olacaktır:

Yukarıdaki örüntüye göre n çakıl taşlık mesafe için n² tane algoritma adımı gerekmektedir ve çalışma zamanı karmaşıklığını gösteren fonksiyonumuz bu sefer doğrusal değil, ikinci derece fonksiyondur:

Algoritmaların çalışma zamanı karmaşıklarının hesaplanması çeşitli algoritmaları karşılaştırma ve problemi istenilen sürede çözüp çözemeyeceğini öngörebilme olanağı sağlar. İkinci algoritma belki kısa mesafede uygulanabilir; ama mesafe artıkça Hansel’in kondisyonu yetersiz kalacaktır.

Erwig (2017), Hansel ve Gretel’den yola çıkarak bilgisayar bilimiyle ilgili birçok konuyu tartışmakta ve açıklamaktadır. Dil Derneği’nin sözlüğünde bilgisayar “çok sayıda aritmetiksel ya da mantıksal işlemlerden oluşan bir işi, önceden verilmiş bir izlenceye göre yapıp sonuçlandıran elektronik aygıt, elektronik beyin” olarak tanımlanıyor. Ama Erwig’in (2017) de vurguladığı gibi bilgisayar, bir insan da olabilir, elektronik aygıt da. Christian ve Griffiths’in (2017) Hayatımızdaki Algoritmalar adlı kitabı, “insan” bilgisayarların bilinçli veya bilimsiz kararlarında algoritmaların önemli bir yere sahip olduğunu göstermektedir. Yazının devamında da görüleceği gibi bu algoritmalardan yola çıkarak daha gerçekçi ve yararlı öneriler içeren bir kişisel gelişim kitabı bile yazılabilir.

En Doğru Yerde Duraklama

Boş park yeri bulmanın zor olduğu bir yere giderken çoğu zaman tereddüt ederiz: Boş bir yer gördüğümüzde hemen park etmeli miyiz? Yoksa daha az yürümek için arabayla biraz daha gidip şansımızı zorlasak mı? Ama ne kadar ilerlemeliyiz?

Seyahat eden bir turistiz. Haritaya baktığımızda güzergahımızda n tane otel olduğunu gördük. n. otele kadar gelip daha sonra içlerinden en iyi otele geri dönmek gibi bir şansımız olmadığından bir yerde durup konaklamamız gerekiyor. En uygun oteli nasıl seçeceğiz?

Otuz gün içinde bir kiralık ev bulmamız gerekiyor. İlk gördüğümüz evi beğendik. Hemen tutmalı mıyız? Ama biraz daha araştırma yapsak daha iyi olmaz mı? 29 gün boyunca kiralık evlere baksak, son gün de en beğendiklerimizi karşılaştırsak daha iyi olmaz mı? Ama ya beğendiğimiz ev tutulursa?

Ev kiralamaya bir de karşı taraftan, ev sahiplerinin gözünden bakalım. Kiralık ilanı verdikten sonra gelen ilk kiracı adayıyla anlaşalım mı? Ya daha iyi bir kiracı gelirse? Biraz daha bekleyebiliriz, ama Dimyat’a pirince giderken evdeki bulgurdan olmak da var.

Genç kızın kapısından görücü eksik olmuyor. Ne doktorlar, ne mühendisler evlenmek için kapısını çalıyor ama hiçbirine yüz vermiyor. Daha iyi bir koca adayı bekliyor. Anne ve baba, kızları evde kaldı diye endişeleniyor. Genç kız, daha ne kadar beklemeli?

Bu problemlerin hepsinde zamana karşı yarışırız. Tüm seçenekleri değerlendirmek istesek de kaynaklarımız sınırsız değildir; bir yerde durmamız ve kararımızı vermemiz gerekir. Nerede duracağız? Araştırmaya ne zaman son vermemiz gerekiğinin yanıtını arayan bu tip problemler en doğru yerde duraklama (optimal stopping) problemleri olarak adlandırılır. Christian ve Griffiths’in (2017) belirttiği gibi bu problemlerin en ünlülerinden biri de sekreter problemi olarak tanınmaktadır. Belirli bir sayıda sekreter adayı vardır ve işe alım, adayların özgeçmişine bakarak değil de birebir görüşülerek yapılacaktır. Aday uygunsa işe kabul edilecek ve görüşmeler sonlandırılacaktır. Yine yukarıdakilere benzer bir sorun vardır. Eğer aceleci davranılırsa en iyiyle hiç karşılaşmama, çok geç karar verilirse de belki de hiç olmayan daha iyiyi boş yere beklemiş olma ihtimali vardır. Ama matematik önemli bir ipucu sunmaktadır. Tek bir aday varsa bu adayın en iyi olma ihtimali %100’dür. İkinci aday varsa onun en iyi olma ihtimali %50, beşinci adayınki %20, yüzüncü adayınkiyse %1’dir. Dolayısıyla sonraki görüşmelerde daha iyi bir adayla karşılaşma ihtimali olabilir ama bu ihtimal giderek azalacaktır.

Şimdi adım adım ilerleyelim. İki adayımız var. Doğrudan birinciyi seçebiliriz veya onu göz ardı edip ikinciye geçebiliriz. Her iki durumda da en iyi adayı seçme ihtimalimiz %50. Üç adayımız varsa rastgele bir seçimle en iyi adayı seçebilme şansımız %33. Sonraki iki adayla görüşmeden ilk adayı seçersek veya ilk iki adayı eleyip üçüncüyü seçmek zorunda kalırsak en iyi aday için şansımız sadece %33 olacaktır. Ama algoritmamız şöyle olursa başarı şansımız %50 olacaktır:

  1. Birinci adayla görüş
  2.  İkinci adayla görüş
    • Eğer ilk adaydan daha iyiyse ikinci adayı seç
    • Eğer ilk adaydan daha iyi değilse üçüncü adayı seç

Deneyelim. Üç kişi için altı farklı sıralama yapılabilir: 1-2-3, 1-3-2, 2-1-3, 2-3-1, 3-1-2, 3-2-1. Eğer birinci aday en iyi adaysa (1-2-3 ve 1-3-2 durumlarında) en iyiyi ararken onu kaçırırız. Eğer ikinci aday en iyi adaysa, ikinci adayın birinci adaydan güçlü olduğu durumlarda (2-1-3 ve 2-3-1 durumlarında) ikinci aday seçilecektir; zaten en iyi adaydır. İlk adayla görüştükten sonra ikincinin birinciden daha kötü olduğunu gördüğümüzden (3-1-2 durumu) üçüncü adaya geçerek yine en iyi adayı seçebiliriz. 3-2-1 durumunda ise ikinci aday birinciden daha iyi diye üçüncü adayı beklemediğimizden en iyi adayı seçme şansını kaçırırız. %100 doğru seçim yapamayız ama şansımızı %33’ten %50’ye çıkarmış oluruz.

Aday sayısı dört olduğunda ikinci, beş olduğunda da üçüncü adaydan sonra seçme işlemine başlamamız önerilmektedir. Aslında aday sayısı artıkça bu algoritma daha çok önem kazanmaktadır. Dört adaylı bir seçmede ikinciden, beş adaylıda üçüncüden sonra seçme işlemine başlamamız rastlantı değildir. Burada geçerli algoritma şöyledir:

  • Hiçbirini seçmeden adayların %37’sine bakın
  • %37’yi aştıktan sonra o ana kadar gördüğünüz adaylardan en iyi olanını seçin

Aşağıdaki tablodan da görüleceği gibi en iyi adayı seçme şansı yine %37’ye yaklaşacaktır:

Christian ve Griffiths’in (2017) belirttiği gibi algoritmaların içerdiği temel varsayımlar önemlidir. Yukarıdaki sekreter probleminde temel varsayım adayları ancak birbirleriyle karşılaştırarak hangisinin daha iyi olduğuna karar verebildiğimizdir. Elimizde ikinci adayın birincisinden ne kadar iyi olduğu hakkında hiçbir bilgi yoktur. Ama YDS (Yabancı Dil Bilgisi Seviye Tespit Sınavı) puanı gibi bir parametre eklersek en iyi adayı bulmaya daha çok yaklaşırız. Bu yeni koşulda, ilk %37’ye bakarken YDS puanı 95 olan birini doğrudan elemeyiz. Çünkü geri kalan adaylar arasında 95’ten yukarı puana sahip birini bulmak daha düşük olasılıktır. Bu nedenle, en iyi adayı bulmak için algoritmayı değiştirmek ve iyileştirmek gerekir.

Benzer bir durum, bir evini kiraya veren kişi için de geçerlidir. Sekreter probleminde olduğu gibi ev sahibinin bazı ön bilgilerle hareket etme şansı vardır. Kiracı adaylarını sadece verdikleri tekliflerle karşılaştırmaz; eve ödenecek en düşük ve en yüksek miktarları tahmin edebilir ve evin boş kalma maliyetini dikkate alarak kiracı adaylarıyla görüşür.

Christian ve Griffiths (2017), ev satışı, park yeri, sevgili seçimi gibi en uygun zamanda durup seçim yapmayı gerektiren problemler için uygulanabilecek farklı algoritmaları tartışmaktadır. Bu algoritmalar, her zaman en iyi adaya ulaştıramasa da rastgele bir seçimle karşılaştırıldığında en iyiye ulaşabilme olasılığını artırmaktadır.

Araştır veya Kullan

Christian ve Griffiths (2017), araştır/kullan ikileminde bilgi toplamak ve eldeki bilgiyi kullanma arasındaki dengeyi tartışmaktadır. Yabancı bir şehirde yemek yiyeceğiz. Daha önce gittiğimiz ve beğendiğimiz bir yere mi gitmeliyiz? Belki daha önce hiç gitmediğimiz bir yere giderek yeni tatlar aramalıyız. Bulunduğumuz şehri birkaç gün sonra terk edeceksek yeni tatlar aramak pek yararlı olmayacaktır. Çünkü iyi bir restoran keşfetsek bile bunun keyfini çıkarma süresi az olacaktır. Ama vaktimiz bolsa yeni şeyler denemek keşfettiğimiz tatların keyfini çıkarma süresi vereceğinden daha iyi bir seçenek gibi görünmektedir.

Christian ve Griffiths (2017) matematikçileri yıllardır meşgul eden bir soru sorar: “Bir kumarhanede iki kumar makinesi var. Birinde 15 oyun oynayıp 9 kere kazandınız ve 6 kere kaybettiniz. Diğerinde ise sadece iki oyun oynadınız ve sadece bir oyun kazandınız. Sonraki oyununuzu hangisinde oynardınız?” Birincisinde başarı oranı %60, diğerinde %50’dir. Hemen bir karar vermeden önce birincisinde 15 oyun oynarken diğerinde sadece iki oyun oynadığımızı dikkate almamız gerekir. Lokanta seçiminde olduğu gibi zaman yine önemli bir parametredir: Kumarhanede ne kadar kalacağız?

Herber Robbins 1952’de yazdığı makalesinde iki kumar makinesi için “Kazan kal, kaybet değiştir” stratejisinin işi şansa bırakmaktan daha iyi bir çözüm olduğunu savunmaktadır: Kazandığın sürece aynı makinede kal, kaybedince diğer makineye geç. Robbins’in bu stratejisini tartışan çok sayıda çalışma vardır. Bu tip araştırmalardan elde edilen sonuçlar hükümet ve şirket politikalarının oluşturulmasına yardımcı olmaktadır. Unilever 1970’lerde John Gittins adlı matematikçiden ilaç denemelerini en iyi şekilde planlamasını ister. Çünkü diğer ilaç şirketleri gibi Unilever de bir yandan yeni ilaçlar bulabilmek için AR-GE yatırımları yapmak isterken (araştır) diğer yandan mevcut ilaçlarından kazanç sağlamayı devam ettirmek istemektedir.

Web sitelerinde en uygun tasarımı bulmak için kullanılan A/B testi de yine bir araştır/kullan problemidir. A/B testlerinde web sitelerinin renk, resim, haber başlığı vb özellikleri değiştirilerek ziyaretçiler rastgele ama eşit bir şekilde farklı versiyonlara yönlendirilir. Sonra “KATKIDA BULUN”, “BAĞIŞ YAP”, “SATIN AL” gibi bağlantılara ne kadar tıklandığı karşılaştırılarak en uygun tasarıma doğru ilerlenir. İnternet reklamcılığında ve e-ticarette çok sık kullanılan bir stratejidir. ABD’deki son seçimlere sosyal ağlardaki yalan haberler damga vurmuş olsa da Obama’nın kazandığı seçimin yıldızı A/B testleridir.

Önbellekleme

Web tarayıcıların önbelleği, daha önce ziyaret edilen html sayfaları, resimler gibi içerikleri saklar ve daha sonraki ziyaretlerde bu içeriği web sunucuna gidip almak zorunda kalmadığı için önbellekteki içerik daha hızlı yüklenir. Önbellekleme, bilişim teknolojilerinde çok sık başvurulan bir yöntemdir. İşlemcilerin, sabit disklerin ve işletim sistemlerinin önbellekleri vardır. Bu nedenle, hafıza mimarisinde ve işlemci çiplerinin milimetrik yerleşiminde önbellekleme önemli parametrelerden biridir. Web sitelerinin hızlı açılması için sadece web tarayıcılarında değil sunucu tarafında da önbelleklemeye başvurulur.

Kısaca önbellekleme, sıklıkla başvurulan içeriğin daha hızlı erişilebilecek bir yerde saklanmasıdır. Önbelleklemeyi gündelik yaşamda da çok sık kullanırız. Sürekli kütüphaneye gitmemek için daha sık başvurulan kitapları kütüphaneden ödünç almak bir tür önbelleklemedir. Önbellek uygulamalarındaki en büyük kısıtlama önbelliğin sınırlı kapasitesidir. Örneğin kütüphaneden en fazla beş kitap ödünç alabiliriz. Yeni bir kitap almak istediğimizde elimizdeki beş kitaptan birinden vazgeçmemiz gerekir. Burada temel sorun, hangi kitabı iade edeceğimizdir. Farklı algoritmalar kullanılabilir. Örneğin, rastgele bir kitabı iade edip yenisini alabiliriz. İade ettiğimiz kitaba tekrar ihtiyacımız olduğunda ise yine elimizdeki beş kitaptan herhangi birini rastgele seçip iade edebiliriz. Bazı durumlarda basitliği nedeniyle tercih edilebilecek bir yöntemdir. İkinci yöntem, FIFO’dur (First-In, First-Out, İlk Giren İlk Çıkar). Buna göre yeni kitabı ödünç alabilmek için ilk aldığımız, yani en uzun süredir elimizde bulunan kitap iade edilmelidir. Fakat bu çözüm her zaman uygun olmayabilir. Belki de FIFO’da en önde yer alan kitabın en uzun süredir elimizde bulunma nedeni ona çok başvurmamızdır. Üçüncü yöntem, son zamanda en az kullanılanı çıkar (Least Recently Used – LRU), çoğu zaman en verimli sonucu sağlamaktadır:

LRU bize bir sonrakine ihtiyaç duyacağımız şeyin en son ihtiyacımız olan olduğunu, bundan sonra ihtiyaç duyacağımızın da muhtemelen en son ikinci kullanılan şey olduğunu söylemektedir. Ve en son ihtiyacımız olacak şey de en uzun zamandır kullanmadığımızdır (s. 140).

Gündelik hayatta LRU’ya sıklıkla başvururuz. Bazen de farkında olmadan. Dağınıklığın altında LRU algoritması yatıyor olabilir. Okumakta olduğu kitapları, kitaplığa geri yerleştirmek yerine masaya veya koltuğa koyanları ve dışarıdan gelince montu askıya asmayıp ortalıkta bırakanları bir de bu açıdan değerlendirebiliriz.

LRU önbellekleme için kullanılan tek algoritma değildir. Elde önbelleğe konulacak içeriğin ne olabileceği hakkında veri olduğunda farklı yöntemler de kullanılabilmektedir. Amazon, bir bölgede popüler olan ürünleri o bölgedeki alt depolarına göndererek çok daha hızlı teslimat yapabilmektedir. Netflix de insanların yaşadıkları yerlerle ilgili filmleri daha çok seyretmeye eğilimli olduğunu fark ettikten sonra filmlerini sunucularında buna göre depolamaya başlamıştır.

Çizelgeleme

Gündelik hayatta çok sık başvurduğumuz bir başka algoritma da önceliklerimizi belirlediğimiz ve buna göre harekete geçtiğimiz çizelgeleme algoritmalarıdır. Vaktimiz sınırlı ve yapmamız gereken işler vardır. Cuma gününde olduğumuzu ve önümüzde dolu dolu bir hafta olduğunu varsayalım. Pazartesi fizik ödevinin teslimi için son gün. Çarşamba matematikten, perşembe geometri ve biyolojiden sınav var. Cuma günü de matematik ödevimiz var. Bu arada doğalgaz almaya gitmemiz gerekiyor, en fazla beş gün yetecek doğalgaz kalmış.

Hayatta bazen işler yığılır ve her işi aynı anda yapamayacağımıza için bunları bir sıraya koymamız gerekir. Sıralamayı yaparken farklı ölçütler devreye girer. Bazen en yakın zamanda bitirilmesi gereken işten bazen de en kısa sürede bitebilecek işten başlarız. Bazı kişisel gelişim kitapları kısa sürede tamamlanabilecek bir işi hemen yapıp listeden çıkarmayı, bazıları önce en zordan başlamayı öğütler.

Matematikçiler ise olaya daha bilimsel yaklaşmaktadır. RAND’da çalışan Selmer Johnson 1954’te yayımlanan bir makalesinde şöyle bir problem ortaya atar: Biri çamaşırınızı yıkayan diğeri kurulayan iki makineniz var. Çamaşırları önce yıkayıp, sonra kurutmanız gerekiyor. Ancak bazı çamaşırlar fazla lekeli olduğu için daha uzun sürede yıkanmakta, ama kurulama zamanı değişmemektedir. Ayrıca çamaşırın fazla olması kurutmayı olumsuz etkilerken yıkamayı etkilememektedir. Çamaşır yıkamanın ve kurulamanın en iyi yolu nedir?

Johnson, en kısa yıkama süresini en başta, en kısa kurutma süresinin de en sonda olacağı bir algoritmanın en iyi çözüm olacağını belirtmektedir. Johnson’un çizelgelemeyi algoritmik olarak ifade etmesi, optimum çizelgeleme hakkında yapılan araştırmaları da artırır. Christian ve Griffiths (2017), Johnson’un çalışmasının iki makinenin çalışma sürelerini en iyileştirmek üzere kurulduğunu gündelik hayatta günlük kararlarımızda ise tek makine gibi davrandığımızı hatırlatmaktadır. Bir diğer deyişle, işlerin belirli yapılma süreleri varsa toplam zamanda bir iyileştirme yapmak söz konusu olmayacaktır. Nasıl bir iyileştirmenin hedeflendiği önemlidir.

İstenen iyileştirme, maksimum gecikmeyi azaltmak olabilir. Bunun için teslim tarihi en erken olan işten başlama stratejisi uygulanabilir. Hizmet sektöründeyseniz, müşterinin teslim tarihi, karşınıza geldiği andan itibaren başlayacağı için geliş sırasına göre bir çizelgeleme yapılması gerekecektir. Her hafta pazara gidip taze meyve alıyorsanız meyvelerin bozulma zamanı, teslim tarihleri olacaktır. En erken bozulacak meyveden başlanabilir. Christian ve Griffiths (2017) bunun en lezzetli ve sağlıklı seçenek olmasa da yiyeceklerin bozulma sürelerini en az indireceğini yazmaktadır.

Teslim tarihinin önemli olduğu işleri bitirmek içinse işlem sırası en kısa olan işi bitirmek daha uygun sonuç verecektir. Örneğin, pazartesi günü başlamanız gereken A (dört gün sürecek) ve B (bir gün sürecek) işleri varsa, B’den başlamak daha uygun bir çözüm olacaktır. Böylece B bir gün (iş teslimi pazartesi öğleden sonra), A da beş gün (iş teslimi cuma öğleden sonra) bekleyeceğinden müşterilerin toplam bekleme süresi altı gün olacaktır. A’dan başlanırsa bu iş perşembe günü biteceğinden A’nın bekleme süresi dört gün, B’ninki ise beş gün olacaktır. Her iki durumda da işler toplam beş günde tamamlanacaktır. Fakat toplam bekleme zamanı dikkate alındığında birinci ve ikinci seçenek arasında üç günlük bir fark vardır.

Önce en kısa olan işleri yapmak işler arasında bir öncelik sıralaması yoksa işe yarayacaktır. B işine başlamak için A’yı tamamlamak gerekiyorsa problem değişecektir ve yeni bir algoritmaya ihtiyaç vardır. Christian ve Griffiths’in (2017) sorunun bununla sınırlı olmadığını ekler. Hayat durağan değildir; A ve B için bir planlama yapıp işe koyulmuşken C işi gelmişse nasıl karar vermemiz gerekir? Hangi durumda yaptığımız işi yarım bırakıp C’ye başlamalıyız yoksa yeni işi göz ardı mı etmeliyiz? Farklı bir algoritma tasarlamak ve uygulamak gerekecektir; bu durumda benzer sorunlarla karşılaştığında “kullanıcıyı yavaşlatmadan ya da gerginlik içine sokmadan mümkün olduğu kadar uzun bir süre göreve devam eden” işletim sistemlerinin çalışma ilkelerinden yararlanılabilir.

***

Christian ve Griffiths’in (2017) kitabında yer alan diğer algoritmalar incelendiğinde zaten insan denen bilgisayarın sezgisel olarak sık sık bunlara başvurduğu; ama elektronik bilgisayarların çalışma ilkelerinden de yeni şeyler öğrenilebileceği ya da günlük kararlarını bu algoritmaları kullanarak iyileştirilebileceği görülmektedir. Christian ve Griffiths’in (2017) algoritma örnekleri, kişisel gelişim kitaplarından çok daha yararlı olabilir!

Algoritmaların doğası ve çalışma mantığı kavrandıktan sonra her bir algoritma karşılaşılan soruna göre olduğu gibi uygulanabilir veya yeni koşullara göre geliştirilebilir. Ancak son yıllarda, hükümetler ve şirketlerin hem gündelik hayata gömülü algoritmalara müdahale edebilme hem de yukarıdan yeni algoritmalar dayatabilme gücüne erişmeye başladığına da dikkat etmek gerekiyor. Algoritmalara dayalı düzenlemeler, kişisel sağlıktan sosyal politikalara kadar her alanda, hızla ve fazla dikkat çekmeden yayılıyor. Sonraki yazılarda özellikle algoritmaya dayalı düzenlemeler üzerinde duracağım.

Kaynaklar:

Barbin, E., Borowczyk, J., Chabert, J. L., Guillemot, M., Michel-Pajus, A., Djebbar, A., &

Christian, B., Griffiths, T. (2017). Hayatımızdaki Algoritmalar, Çev. Ali Atav, Buzdağı Yayınevi.

Erwig, M. (2017). Once Upon an Algorithm: How Stories Explain Computing. MIT Press.

Martzloff, J. C. (2012). A history of algorithms: from the pebble to the microchip. Springer Science & Business Media.

Rainie, L., Anderson, J., & Page, D. (2017). Code-dependent: Pros and cons of the algorithm age. Pew Research Center, 8.

16 Ağustos 2018

Posted In: algoritma, algoritmik toplum, araştır ve kullan, Bilgisayar Bilimi, çizelgeleme, duraklama, kodlama, önbellekleme, Özgür yazılım, Teknoloji Tarihi, Yazılım Çalışmaları, Yazılım Mühendisliği

Yazılım Nedir?

Skandalı bol ülkemizin nisan ayındaki skandallarından biri ortalığa saçılan kişisel verilerdi. 2009 yerel seçimlerinde oy kullanan vatandaşların verilerini içeren veritabanı ilk kez şubat ayında paylaşılmış, 4 Nisan’da da şifresiz olarak dolaşıma girmişti. Ulaştırma Denizcilik ve Haberleşme Bakanı Binali Yıldırım’ın belirttiği gibi verilerin çalınması yeni bir olay değildi. 2010 yılında kişisel verilerin bir DVD içinde satıldığına dair haberler yayımlanmıştı. Fakat internet kullanıcıları sosyal medyadan duyurulan bir web sitesinde, ad soyad bilgileriyle sorgulama yaptıklarında durumun vahametini daha net gördüler. Yapılan sorgulamalarda herhangi bir kişinin TC kimlik numarası, anne adı, baba adı, cinsiyet, doğum yılı, doğum yeri, nüfus kayıt yeri bilgilerinin yanı sıra adres bilgilerine de erişilebiliyordu. Bu bilgilerin dolandırıcılık ve sahtecilik amaçlı kullanılabilecek olması insanları ürküttü.

Verilerin kim tarafından, kimden ve nasıl sızdırıldığının yanında zamanlaması (neden 6 yıl sonra?) da sorgulandı. Ama kimse, “bu işin fıtratında var” demedi. Onu da ben ekleyeyim. Tüm seçmenlerin bilgilerinin ortalığa saçılmış olması büyük bir skandal. Ancak bunu, günümüz toplumunun gelişiminin doğal bir sonucu olarak görüyorum. Bu olay büyük bir patlamaydı. Öncesinde de kişisel verilerimizi teslim ettiğimiz yerlerden veri sızıntıları oluyordu. Üstelik kişisel verilerimizi yalnız kamu kurumlarına değil, özel kuruluşlara da sonrasını düşünmeden ve çoğu zaman gönüllü olarak sunuyorduk. Kişisel Verilerin Korunması Kanunu bile henüz yeni yasalaşmışken (http://www.resmigazete.gov.tr/eskiler/2016/04/20160407-8.pdf), bu tip skandalların yaşanması neredeyse kaçınılmaz. Bu kanunun ne kadar etkili olabileceğini ve ne ölçüde uygulanabileceğini zaman içinde göreceğiz. Şu an için bu skandalı geleceğe dair kritik bir uyarı olarak değerlendirmeli.

Her Türkiye Cumhuriyeti vatandaşının benzersiz (unique) TC kimlik numarası vardır. Herhangi iki kişinin aynı kimlik bilgilerine (ad, soyad, baba adı, anne adı, doğum tarihi vb.) sahip olmasının önünde hiçbir engel yoktur. Fakat aynı TC kimlik numarasına sahip iki kişi olamaz. Bunun yanında TC kimlik numaraları, farklı kurumların veritabanlarındaki kişi verilerini de birbirine bağlamaktadır. Örneğin, TC kimlik numarası ile kişinin tüm hastane kayıtları, adres bilgileri, elektrik abonelikleri, öğrenim bilgileri, banka işlemleri vs ilişkilendirilebilmektedir. Benzersizlik ve farklı veritabanlarını ilişkilendirme gereksinimi, toplumsal ilişkileri daha çok yazılımın içine gömmüştür.

Artık yazılımın farklı derecelerde gündelik hayatı koşullandırdığı, ekonomik ve toplumsal ilişkileri düzenlediği bir dünyada yaşıyoruz. Yazılım, yeni iş yapma biçimleri sunuyor, var olan pratikleri otomatikleştiriyor ve hızlandırıyor. Yazılım gündelik hayattaki ilişkilerde dört farklı düzeyde karşımıza çıkmaktadır. Birincisi, hızla yaygınlaşan kodlanmış nesneler. Nesneler kodlanarak daha akıllı hale gelmekte ve yeni işlevler kazanmaktadır. İkincisi, kodlanmış nesnelerin ağından oluşan kodlanmış altyapılardır. Bu altyapılar, kısmen ya da tamamen yazılımla izlenip düzenlenebilmektedir. Örneğin bilgisayar ağları, yayın ağları (televizyon, radyo, uydu), kamu hizmeti ağları (su, elektrik, gaz, kanalizasyon). Üçüncü düzey ise kodlanmış süreçlerdir. Kodlanmış süreçler, kodlanmış altyapılardaki işlemleri ve dijital veri akışını ifade etmektedir. Kodlanmış süreçlerde dijital veri akışı, oluşturulmuş belirli kurallar ve biçimler doğrultusunda gerçekleşir. Banka kartınızı (kodlanmış nesne) bankamatiğe yerleştirip şifreyi girdikten sonra şifreniz doğrulanır ve bankanın kodlanmış altyapısına erişirsiniz. Bu erişimden sonra da belirli kurallar çerçevesinde belirli işlemler yaparsınız. Dördüncü düzey, kodlanmış birliktelikler, kodlanmış altyapıların entegrasyonu veya yakınsamasıyla oluşur. Farklı altyapılar bir araya geldiğinde parçaların toplamının ötesinde bir bütün meydana getirirler; bu yeni bütünlük onunla etkileşim halinde olan kullanıcıları da değiştirir. Örneğin, finans kuruluşları birbirleri ile bağlandığında arka planda sistemler birbirleriyle konuşur, veri transferi gerçekleşir. Artık bir bankaya, kredi başvurusunda bulunan herhangi bir müşteri yoktur. Banka, kendisine başvuran müşterinin finansal geçmişini bilir ve krediye uygunluk kararını buna göre verir. Ülkemizde kişi verilerini tutan kodlanmış birlikteliklerde TC kimlik numaralarının rolü kritiktir; parçalar çoğunlukla TC kimlik numaralarıyla bağlanmaktadır. Dolayısıyla son kriz sonrası gündeme gelen TC kimlik numaralarının değiştirilmesi önerisinin maliyeti de yüksek olacaktır.

Gündelik hayattaki etkinlikler, yazılım ile dolayımlanmakta, güçlenmekte, kolaylaşmakta ve düzenlenmektedir. Bu yeni dünya, makinelerce okunan ve yazılan bir dünyadır; enformasyon insan müdahalesi olmaksızın rutin bir biçimde toplanmakta, işlenmekte ve üzerinde çalışılmaktadır. Buna karşın yazılım hakkındaki bilgimiz son derece sınırlıdır. Yazılım denilince ilk akla gelen, bilgisayarın donanım ve yazılım olarak ikiye ayrıldığı, yazılımın da,

“Bir bilgisayarda donanıma hayat veren ve bilgi işlemde kullanılan programlar, yordamlar, programlama dilleri ve belgelemelerin tümü” (Türk Dil Kurumu)

olduğudur.

Yazılım terimini ilk kullanan John W. Tukey olmuştur. Tuckey, 1958 yılında American Mathematical Monthly dergisinde yayımlanan makalesinde, elektronik hesap makinelerinde bulunan matematiksel ve mantıksal komutların giderek daha önemli hale geldiğini yazmaktadır. Makalede, kablolar, transistörler, teypler vs donanım olarak nitelendirilirken yordamlar ve derleyiciler yazılım olarak nitelendirilmektedir. 1968 yılında IBM’in donanım ve yazılım bölümlerini ikiye ayırması, yazılım sektörünün önünü açar.

Yazılım, bilgisayar donanımını, donanımın içerdiği elektrik devreleri komuta eder. Kullanıcının kodu görmemesine karşın kodun etkileri son derece görünür ve somuttur. Yazılımın bir canlı olmadığı açıktır. Ama Thrift ve French (2002) yazılımın suni olarak da değerlendirilemeyeceğini iddia eder. Yazılım, ikisinin arasında bir yerdedir. Yazılım, veri toplamakta, enformasyonu işlemekte, durumları değerlendirmekte, kararlar verebilmekte ve en önemlisi de bunları insan müdahalesi olmadan özerk olarak yapabilmektedir. Mackenzie’ye (2006) göre yazılım kendini çalıştırdığı zaman ikincil bir eylemliliğe sahiptir. Çalışması her zaman görünür ya da açık seçik değildir; kimi zaman oldukça karmaşık çıktılar üretmesine karşın ancak hatalı işlem yaptığında ya da çalışmadığında varlığından haberdar olunmaktadır.

Çoğu insan yazılımı, kendisiyle bir şeyler yaptıkları bir araç olarak görmektedir. Yazılım mühendisliği, bu aracın nasıl daha iyi geliştirilebileceği üzerine çalışırken sosyal bilimciler de bu aracın topluma etkilerini tartışmaktadır. Her ikisinin de yararı vardır. Ama toplumsal etkilerine bakarak yazılımın ne olduğunu anlamamız olanaklı değildir. İşte bu olanaksızlıktan yola çıkan Yazılım Çalışmaları disiplini, yazılımın kendisine odaklanmaktadır.

Yazılım Çalışmaları

Kitchin ve Dodge (2011), yazılım çalışmaları ile bilişim teknolojilerinin topluma etkileri üzerine yapılan çalışmalar arasındaki farklılığı açıklarken bunu hastalıkların epidemiolojisine çalışmakla hastalıkların dünyadaki etkisine çalışmak arasındaki farka benzetir. Hastalıkların dünyadaki etkisini araştırırken çok şey öğrenilebilir. Ama hastalığın etiolojisini (nedeni, kökeni, evrimi) bilmeden hastalığın topluma etkisi hakkındaki bilgilerimiz de eksik olacaktır.

Yazılım çalışmalarına ilk kez Lev Manovich’in The Language of New Media adlı kitabında değinilmiştir. Manovich (2001), yeni medyanın mantığının anlaşılabilmesi için yüzümüzü bilgisayar bilimine dönmemiz gerektiğini savunur. Manovich’e (2001) göre medya çalışmalarından yazılım çalışmalarına, medya teorisinden yazılım teorisine kayılması gerekmektedir. Yazılımın nasıl yazılıp geliştirildiği; yazılımın çalışması sonucu dünyada nasıl öznellikler, pratikler, etkileşimler, ve hareketlilikler yaratıldığı; yazılım endüstrisinin doğası; kodun farklı alanlardaki (iş, sağlık, eğitim, eğlence) sosyal, ekonomik, kültürel ve politik etkileri yazılım çalışmaları kapsamında araştırılması gereken konulardır. Bu bağlamda, yazılımın günümüz kültürünün oluşumuna etkisi kadar yazılımın geliştirilmesinde etkili olan kültürel, toplumsal ve ekonomik güçler de tartışılmalıdır.

Manovich (2001), yeni medyayı da bu doğrultuda tanımlar. Yeni medyaya atfedilen etkileşim ve programlanabilirliği, yeni toplumsal etkinlikleri, bireylerin duygu ve düşüncelerini paylaşabilme olanağının artmasını yeni medyayı var eden yazılımın beş temel özelliğiyle ilişkilendirir: Sayısal temsil, modülerlik, otomasyon, değişkenlik, kod çevrimi.

Sayısal temsil, yeni medya verisinin matematiksel olarak tanımlanabilirliğini ve verinin algoritmik olarak müdahaleye açık olduğunu belirtmektedir. Modülerlik, yeni medyanın çeşitli elemanlardan (piksel, poligon, katman, ses kanalı) oluşmasıdır. Böylece herhangi bir görüntüyü yeniden çekmeden görüntünün pikselleriyle oynamak mümkün olabilmektedir. Otomasyon, yukarıdaki iki özelliğin sağladığı olanaklarla, içerik üzerindeki işlemlerin otomatikleştirilebilmesidir. Örneğin, görüntülerin otomatik olarak düzenlenmesi, renk karşıtlıklarının (contrast) ayarlanması, gürültünün ayıklanması yazılımlarla otomatik olarak yapılabilmektedir. Değişkenlik ise aynı medyadan neredeyse sonsuz sayıda farklı medya üretilebilmesidir. Değişen gereksinimlere göre, ana medyaya zarar vermeden farklı medyalar türetilebilmektedir. Sonuncu özellik, kod çevrimi (transcoding), en kritik olanıdır. Kod çevrimi teknik anlamda, bilgisayardaki bir dosyayı bir biçimden diğerine dönüştürmeyi anlatır. Manovich (2001) ise kod çevrimiyle bir medyadaki anlam ve işlevin, başka medyalara aktarıldığını anlatmak istemektedir. Bilgisayarlardaki mantık ve iş yapma şekilleri farklı medyalara taşınmakta, oradaki iş yapma biçimlerini değiştirmekte, yeni bir kültür oluşturmaktadır.

Manovich’in (2001) kitabının dışında yazılım çalışmaları alanındaki başlıca çalışmalar şunlardır:

  • Behind the Blip (Fuller, 2003)
  • Protocol (Galloway, 2004)
  • Media Ecologies (Fuller, 2005)
  • Cutting Code (Mackenzie, 2006)
  • Software Studies: A Lexicon (Fuller, 2008)
  • Software Takes Command (Manovich, 2008)
  • My mother was a computer (Hayles, 2010)
  • Code/space: Software and everyday life (Kitchin ve Dodge, 2011)

Bu yazıda, Kitchin ve Dodge’un (2011) Kod/mekan (Code/space) kitabını, sonraki yazılarda da yazılım çalışmaları disiplininin diğer kitaplarını tanıtmak istiyorum.

Kod/mekan

Kitchin ve Dodge’un (2011) temel tezi, yazılımın mekanı ürettiği, toplumsal süreçleri ve ekonomik ilişkileri şekillendirdiğidir. Mekanın üretimi her geçen gün koda daha bağımlı hale gelmekte ve kod mekanın yeniden üretimi için tekrar yazılmaktadır. Bu bağlamda, kod/mekanlar ve kodlanmış mekanlar arasında bir ayrım yapmaktadırlar. Kodlanmış mekanlarda kod, yine mekanın oluşumuna etkide bulunmasına rağmen mekanın bir parçası değildir. Kod ve mekan karşılıklı olarak birbirlerini oluşturmazlar. Örneğin, bir dersin LibreOffice Impress ya da Microsoft PowerPoint ile anlatılmasının hem öğretmen hem de öğrenciler üzerinde (olumlu ya da olumsuz) etkisi olur. Sunum yapılan bilgisayarın arızalanması dersin daha verimli anlatılmasını engelleyebilir, öğretmen bazı konuları aktarmakta zorlanabilir. Ama bu dersin yapılmasını engellemez; sınıfın sınıflığı devam eder. Kod/mekanın varlığı ise koda bağımlıdır. Kodun çalışmaması durumunda mekan niteliğini kaybedecektir. Kitchin ve Dodge (2011), süpermarket ve havaalanı örneğini verir. Süpermarketteki yazılımlar çalışmazsa kasiyerin bir bakkal gibi çalışması, markette satılanların fiyatlarını bilmesi, meyveleri tartması o kadar kolay olmayacaktır. Çalışanlar bu duruma göre eğitilmemiştir. Havaalanındaki yazılımların arızalanması durumunda ise havaalanı işlevini yerine getirmekte zorlanacak ve bir kaos oluşacaktır. Bir diğer deyişle, kodlanmış mekanlarda yazılım kolaylaştırma, izleme ve iyileştirme aracıyken kod/mekanlarda kontrol ve düzenleme aracıdır.

Kitchin ve Dodge’un (2011) kod/mekanları tartışırken yaptığı yazılım sınıflandırması açıklayıcı ve öğreticidir. Önce, yazılım içermeyen nesneleri, yazılım dünyasına dahil edebilmek için bu nesnelerin nasıl benzersiz ve makinece okunur (machine readable) hale getirildiklerini ele alırlar. 1970’lerin sonlarından itibaren tüketim malları barkodlanmaktadır. Barkod bilgisi lazer ile taranmakta ve ürün eşleştirilmektedir. Kitchin ve Dodge (2011), barkodlu nesnelerin okunma sırasında pasif olduğunu belirtir. RFID (Radio Frequency ID ) etiketi taşıyan ürünlerde ise bilgi aktif olarak, radyo sinyalleri ile iletilir, etiketin lazer ile taranmasına gerek yoktur. RFID’nin yakın zamanda barkod teknolojisinin yerini alması beklenmektedir. Nesneler, kendileri herhangi bir yazılım içermeksizin dışsal olarak etiketlenerek ağa dahil olmaktadır. Ama günümüzde asıl belirleyiciliği olan yazılım nesneleridir.

Yazılım nesneleri iki gruba ayrılmaktadır: Çevresel olarak kodlanmış nesneler ve kodneler (codejects).

Çevresel kodlanmış nesneler de yazılım içerir. Yazılım nesneyi daha işlevsel hale getirir. Fakat içerdikleri yazılımın çalışmaması onların kullanımına engel değildir. Yalnızca daha verimli ve üretken kullanımları sınırlanmış olur. Örneğin bir fırındaki dijital saatin bozulması, fırının pişirme aracı olarak kullanımını engellemez.

Kodneler ise işlevleri doğrudan içerdikleri yazılıma bağlı olan nesnelerdir. Adından da anlaşılabileceği gibi kodun ve nesnenin bütünlüğünü gösterir. Kodneler, programlanabilirlik, etkileşim, hatırlama, önceki kullanımlara göre sonrakini tahmin etme ve ilişkisellik kapasitelerine göre üçe ayrılır: Sabit kodneler (hard codejects) , üniter kodneler (unitary codejects), logne (logjects).

Sabit kodneler, USB belleklerde olduğu gibi, bellenim (firmware) adı verilen, işlevselliği önceden belirlenmiş ve sabit bir yazılım içerirler.

Üniter kodneler belirli bir düzeyde programlanabilme ve etkileşim olanağına sahiptir. Üniter olarak adlandırılmalarının nedeni işlevsellikleri için gerekli olan her şeyi kendi yapılarında barındırmalarıdır. Üniter kodneler de ikiye ayrılır. Kapalı kodneler ve algısal kodneler. Kapalı kodneler, çevrelerinden bağımsız çalışırlar. DVD oynatıcılar ve dijital saatler bu tipte nesnelerdir. Arayüzleri son derece sınırlı bir etkileşime ve programlamaya (saat ayarlama, DVD içinden seçim yapma gibi) olanak vermektedir. Algısal kodneler ise dış dünyadaki değişimlere karşı duyarlıdırlar. Klima sistemindeki dijital termostatlar ya da ışık düzeyini ayarlayabilen dijital kameralarda olduğu gibi çevresel faktörler dikkate alınmaktadır.

Logneler, durum ve kullanım bilgilerini kaydetmeleriyle üniter kodnelerden ayrılmaktadır. Bir logne aşağıdaki özelliklere sahiptir:

  • Benzersiz olarak dizinlenebilir.
  • Çevresinden haberdardır ve işlevi bağlamındaki çevresel değişimlere yanıt verir.
  • Belirli bir düzeyde programlanabilir (ayarları değiştirilebilir.)
  • Belirli bir zaman ve mekandaki kullanımları ağdaki diğer bilgisayarlara iletebilir.

Ağa bağlı kodneler, makineden makineye, makineden insana, insandan makineye haberleşebilmektedir. Bir kargo aracı konumunu belirli aralıklarla izleme istasyonuna iletir (makineden makineye), trafik enformasyon sistemi sürücüyü rotasındaki kazalar hakkında uyarabilir (makineden insana), arabanın kapısı uzaktan kumanda (insandan makineye) ile açılabilir.

Bu sınıflandırmanın yanında Kitchin ve Dodge (2011), Greenfield’in (2010) ortaya attığı everyware terimini değerlendirir. Everyware ile bilgisayarların klasik kullanım alanlarının genişletilerek gündelik hayatın temel bileşenleri haline gelmeleri anlatılmaktadır. Everyware ile,

  • Yazılımın işlevselliği mekana ve nesnelere gömülmektedir
  • Algılayıcılar belirli tip etkinlikleri algılayıp kaydetmektedirler
  • Etiketler, aktörleri tanımlamaktadır
  • İnsanlar sistemlere tepki vermemekte, onlarla etkileşim halinde olmaktadır.
  • Yazılım durumları modellemektedir

Günümüzde everyware beş biçimde karşımıza çıkmaktadır: her tarafa yayılan berim (pervasive computing), duyarlı berim (sentient computing), somut berim (tangible computing), aynı zamanda her yerde olan berim (ubiquous computing), giyilebilir berim (wearable computing).

Her tarafa yayılan berim, gündelik hayatı ve etkinlikleri, gündelik hayattaki nesnelere çeşitli algılayıcılar ve kısmen karar verebilen teknolojiler ekleyerek değiştirip dönüştürmektedir. Artık yalnızca fare ve klavye ile kullanılan bilgisayarlar yoktur. Duyarlı berimde ise bilgisayar kişiyi algılar ve buna göre hareket eder. Örneğin kişiyi algılayınca kilitli kapıyı açar, adres defterini gösterir, ağ kullanımlarını kişiselleştirir. Somut berim, insan ve bilgisayar arasındaki etkileşimi daha doğal hale getirmeye çalışmaktadır. Bir bilgisayarı fare ve klavye ile kontrol etmek her zaman olanaklı olmayabilir. Bunun yerine ses ve jest tanıma teknolojileri kullanılabilmektedir. Aynı zamanda her yerde olan berim, her tarafa yayılan berime benzemesine karşın burada algılayıcı olan çevreden değil kişiyle beraber hareket eden berimsel (computational) güçten söz edilmektedir. Dolayısıyla, her tarafa yayılan berimde her şey berimsel güçle donatılmak istenirken aynı zamanda her yerde olan berimde bu gücün her yere taşınması hedeflenmektedir. Giyilebilir berimde ise yazılım belirli kodnelerden giysilere ve aksesuarlara kaymaktadır. Ülkeler, everyware’in farklı türlerine yoğunlaşmaktadırlar. Kitchin ve Dodge (2011), Japonya’da eğilimin aynı zamanda her yerde olan berim, Kuzey Amerika’da ise her tarafa yayılan berim yönünde olduğunu belirtmektedir.

Kitchin ve Dodge’in (2011) yazılım çalışmalarına en büyük katkısı çoğu zaman ihmal edilen mekanın önemine yaptıkları vurgudur. Yazılım, içinde bulunduğu toplumun, mekanın ve zamanın bir parçasıdır. Onlarla etkileşim içinde etkin olur ve gelişir. Yazılım hem bir ürün hem de bir süreçtir; özyineli (recursive) bir süreç. Yazılımı geliştirenler, kodlarla mekanın temsilini yaratmakta; bu temsili mekan, gerçek dünyadaki ilişkileri düzenlemeye girişmekte; bu girişimin sonucunda da mekanın yazılımla yeni temsili geliştirilmektedir. Dolayısıyla her yazılım eksiktir. Tamamlandığı anda değişen mekan, değişen toplumsal ilişkiler yeni gereksinimler yaratır.

Kitchin ve Dodge (2011) kod/alan tanımlamasının teknolojik determinizm olmadığını savunmaktadır. Kod ve alan arasında tek yönlü bir belirlemenin olmadığını, kodun ve mekanın karşılıklı olarak birbirlerini oluşturduklarını vurgularlar. Ayrıca kod/mekanın doğasının ve dönüşümünün olumsal bir süreç olduğunu belirtirler. Yere, zamana ve bağlama (kültürel, politik, ekonomik ilişkilere ve durumlara) göre farklılaşabilmektedir.

Bunun yanında, Kitchin ve Dodge’un (2011) yazılımın hegemonyası hakkında yazdıkları da son derece ilgi çekicidir. Yazılım gündelik hayatın her alanına yayılmakta ve yoğunlaşmakta ama çok az sorgulanmaktadır. Neden? Sorgusuz sualsiz kabullenmenin başlıca nedeni insanların, güvenlik ve refah, terörizmle savaş, sağlık, refah vb için bu sistemlerin gerekli olduğu konusunda ikna edilmiş olmalarıdır. Daha öncekilerin kimin için ne ifade ettiğini sorgulamadan n. sanayi devrimlerini selamlamaktadırlar. İkincisi, yazılımların evrimsel gelişimlerinin de etkisiyle yeniliklerin hep öncekinin bir devamı olarak görülmesidir. Örneğin, yakın zamanda kullanıcı adı ve şifrelerin yerini biyometrik temelli güvenlik sistemleri alacak ve bu da doğal bir durum olarak kabullenilecektir. Üçüncüsü, yeni sistemlerin kaçınılmaz olarak gösterilmesi ve doğallaştırılmasıdır. Dördüncüsü, çoğu yazılımın doğrudan insanlara hissettirilmeden ve onları hayatına doğrudan bir zorluk katmadan çalışmasıdır. Arka planda büyük veri üzerinde düzenleyici ve ayrıştırıcı algoritmalar çalışır; ama bunun gündelik hayata hemen fark edilebilir olumsuz etkisi olmamaktadır. En önemlisi de insanların ayrımcılığa uğrayacakları ya da kötü muameleye maruz kalacakları endişesiyle itiraz etmekten kaçınmalarıdır.

***

Kişisel verilerimizin çalınmasına kızmak, sorumluları kınamak ve olabilecekler konusunda endişelenmek hakkımızdır. TC kimlik numarası bilgileri ile yapılabilecek sahtecilikler korkutucu. Ancak TC kimlik numaralarının yaşadığımız mekanların kritik bir yazılımsal bileşeni olduğunu ve yalnız dolandırıcıların değil “yasal” olarak birçok yerde saklanıp rızamız olmadan paylaşıldığını da unutmamak gerekiyor. Büyük olasılıkla bu skandalın ardından hükümet kimlik bilgilerinin paylaşımı konusunda kısıtlamalar getirecek ve bilişim profesyonelleri veri güvenliği konusunu teknolojik çözümler kapsamında tartışacaklar. Ama yazılım deryasında, “derya içre olup deryayı bilmeyen balık” gibiyiz. Yeni teknolojik çözümlerle yazılım deryasına daha çok gömüleceğiz…

Kaynaklar

Fuller, M. (2003). Behind the blip: Essays on the culture of software. New York: Autonomedia.

Fuller, M. (2005). Media ecologies: Materialist energies in art and technoculture. MIT Press.

Galloway, A. R. (2004). Protocol: How control exists after decentralization. MIT press.

Hayles, N. K. (2010). My mother was a computer: Digital subjects and literary texts. University of Chicago Press.

Greenfield, A. (2010). Everyware: The dawning age of ubiquitous computing. New Riders.

Kitchin, R., Dodge, M. (2011). Code/space: Software and everyday life. Mit Press.

Mackenzie, A. (2006). Cutting code: Software and sociality. New York: Peter Lang.

Manovich, L. (2001). The language of new media. MIT press.

Manovich , L. (2008). Software takes command. http://black2.fri.uni-lj.si/humbug/files/doktorat-vaupotic/zotero/storage/D22GEWS3/manovich_softbook_11_20_2008.pdf, son erişim 20 Nisan 2016.

Thrift, N., S. French. (2002). The automatic production of space. Transactions of the Institute of British Geographers 27 (3): 309–335.

20 Eylül 2016

Posted In: kod, mekan, Özgür yazılım, yazılım, Yazılım Çalışmaları

WP Twitter Auto Publish Powered By : XYZScripts.com