Pazartesi, Ekim 20, 2008

Pratik Bir Nesne Modelleme Araci: Mapsys

Mapsys normalde sistem dinamiği modelleri geliştirmek için üretilmiş bir araç. Fakat çok hızlı bir şekilde çizge (bağlantılı öğelerden oluşan bir şema) oluşturma kabiliyeti sunduğu için, bu aracı yazılım geliştirmede nesne modellemesi için de kullanmak çok pratik oluyor.


UML'in sunduğu özelliklerin çoğunu desteklemiyor, Mapsys. Bu normal, çünkü bir UML tasarım aracı değil. Fakat benim için en önemli özelliklerden biri, çok hızlı bir şekilde basit nesne çizgeleri geliştirmek. Bunu yapabilmemi sağlıyor.



Resimde oluşturduğum bir modelden örnek bir kesit gösteriyorum. UML'den biraz farklı bazı yazım standartları kullanıyorum. UML'de nesne başlıkları, "< obje_adı >:@lt class_adı >" şeklinde. Bense şu şablonu kullanıyorum: "< class_adı > @ < obje_adı >"

Bu yazım şeklinin okunabilirlik açısından bir faydası var: Bazen sadece class ismini, bazen sadece obje ismini kullanmak istiyorum. UML'de bunu yapmak mümkün, fakat görsel ayrıştırma çok kuvvetli olmuyor.

Yazının Devamı...

Pazar, Ekim 19, 2008

Komplo Teorilerindeki Dusunme Yontemi Hatalari

Komplo teorileri günümüzde çok yaygın. En çok satan kitaplar ve en çok izlenen videolar komplo teorilerine dayanıyor. Sadece kendi ülkemizde değil, tüm dünyada özellikle ABD'de en çok rağbet gören fikir akımları komplo teorilerine dayanır hale geldi.

Benim kişisel hayatımda da komplo teorileri çok yer alıyor. Çok sıkçana çevremdeki insanlarla, komplo teorileriyle ilgili tartışırken buluyorum kendimi. Ne yazık ki, komplo teorilerine inanan insanları bunun tersine ikna etmede çok nadiren başarı sağlayabiliyorum. Bu yüzden, konuyu felsefi olarak daha derin bir şekilde incelemeye karar verdim. Umarım, yeterince doğru ve kapsayıcı bir fikir eseri ortaya çıkar.

Konuyla ilgili en az iki makale planlıyorum. Bu ilk makale denemesinde, komplo teorilerini savunanların çok sıkça düştükleri bazı mantık ve yöntem hatalarını ele alıyorum. Bundan sonraki makalede, komplo teorilerinin inanmanın altında yatan gerekçeleri incelemeyi planlıyorum. Burada ifade ettiğim fikirlerin sağlamlaştırılmasıyla ilgili katkısı olabilecek her türlü destekleyici veya muhalif düşünceye açığım.

Komplo teorilerinde yaygın mantık ve düşünme yöntemi hatalarının şu maddeleri içerdiğini düşünüyorum:

• tümevarım/genelleme: doğru olabilecek bir örnekten genel kural çıkarma
• iddia edilen tezleri yanlışlanabilirlikten soyutlama
• orjinal kaynakları bilmeden, kaynakların güvenilirliğini araştırmadan kesin iddialarda bulunma
• kendi inandığı teze muhalif delilleri araştırmama
• gündelik mantığı bilimsel muhakeme olarak görme
• sonuçtan sebebe gitme (ters sebep-sonuç ilişkisi)

Tümevarım/genelleme: doğru olabilecek bir örnekten benzerlik kurup genel kural çıkarma

Tümevarım çok önemli bir mantıksal çıkarım yöntemidir, fakat tek başına kullanıldığında güvenilir ve kapsayıcı değildir.

Örnekler:
• Türkiye'de Ergenekon örgütü de cinayet ve terör olaylarını, kendi rakiplerinin üzerine atıyor. Öyleyse, CIA de 11 Eylül gibi olayları kendi yapıyor ve bunu radikal islamcıların üzerine atıyor.

• Afrika'da açlık, Batılı silah tüccarlarının kışkırtmasından doğan iç savaşlardan kaynaklanıyor. Öyleyse, Batılı provakatörler dünyanın tek hakimidir ve tüm dünyayı fesadın içine sokan güç onlardır. Demek ki, 11 Eylül'ü ve 2. Dünya Savaşındaki Nazi katliamını aslında dünyayı yöneten gizli komite gerçekleştirmiştir.

(Not: Aslında doğa bilimleri de özünde tümevarıma dayanarak tekil gözlemlerden genel teoriler oluşturur. Fakat bilimsel düşünme yönteminde, tümevarımı sağlamlaştırmak için kullanılan fakat komplo teorilerinde bulunmayan çok sayıda ek yöntem bulunur.)

İddia edilen tezleri yanlışlanabilirlikten soyutlama

Tümevarım ve tümdengelim, birbirinin tam tersi olan iki mantıksal çıkarım yöntemidir. Tümevarım, tekil gözlemlerden, genel bir sonuca ulaşmaktır. Tümdengelim ise, genel bir kabulden, tekil olaylarla ilgili sonuçlar çıkarmaktır. Her iki yöntemin de yerine göre ve diğer muhakeme yöntemleriyle sağlamlaştırılarak kullanılması durumunda, sorun olmaz. Fakat bu iki yöntemin yanlış yerde yanlış şekilde kullanılmasının sonucunda, yüzeysel incelemede makul görünebilen, yanlış sonuçlara ulaşırız.

Burada önemli bir ayrım var: Bir mantıksal çıkarımın insanlar için çok ikna edici olması, varılan yargının doğru olduğu anlamına gelmez. Retorik, hitabet ve belagat sanatı gibi bazı yöntemler kullanılarak, son derece mantığa uygun ve ikna edici fikir eserleri üretilebilir. Fakat bir eserin bilimsel anlamda doğru kabul edilmesi için bu anlatım tekniklerinin iyi kullanılmış olması yeterli değildir.

Komplo teorilerini savunanlar, bazen tümdengelim yöntemini yanlış bir şekilde kullanarak, iddia ettikleri tezleri yanlışlanabilirlikten soyutluyorlar. Örneğin, komploya inanan bir kişiyyle şöyle bir diyalog geçtiğini varsayalım:

A (komplo teorisinin muhalifi): "Bilim adamları ikiz kulelerin jet yakıtının neticesinde çökebileceğini açıkladılar."
B (komplo teorisinin destekçisi): "Bilim adamları da komplonun bir parçası" ya da "Bunun tersini açıklayan bilim adamlarını konuşmaktan korkutuyorlar." diyebilir
A: "Batı ülkelerinde şeffaflık ve hukuk egemendir. Bilim adamlarının fikirleri devlet baskısıyla kontrol edilemez."
B: "Batı ülkeleri aslında en kapalı ve baskıcı devletlerdir."

Bu düşünceleri çürütmek mümkün olmuyor, çünkü bazı genel önkabullere dayanıyor. Mesela yukarıdaki durumda, "Batılı devletlerin en üst seviyede kapalı ve baskıcı rejimler olduğu" böyle bir genel önkabuldür. Bu bir veri olarak kabul edilince, Batı üniversitelerindeki bilim adamlarının açıklamalarına ve makalelerine güvenilmemesi, tümdengelimle üretilmiş bir mantıksal çıkarımdır. Ne var ki, sorun şu: Burada kendi içinde kapalı, mantıksal bir fikirler (önerme) zinciri var. Buna mantıkta totoloji denir. Bunların mantıksal olarak çürütülmesi imkansızdır.

Yukarıdaki örnekte, komplocu bakış açısının ürettiği kapalı daire şu şekildedir:

"Batılı devletler, kapalı ve baskıcıdır" => "Bilim adamlarına güven olmaz" => "İkiz kulelerin jet yakıtıyla yıkıldığını söyleyen bilim adamları yanlış söylemektedir." => "ABD ikiz kuleleri kendisi yıkmıştır" => "Batılı devletler, kapalı ve baskıcıdır."

Orjinal kaynakları bilmeden, kaynakların güvenilirliğini araştırmadan kesin iddialarda bulunma

Bilimsel düşünme yöntemi, uzman görüşlerine ve tanıklıklara atıfta bulunmakla ilgili hassas ve katı kurallar içerir. Alıntıların kaynakları belirtilmeli, kaynakların yalanlanmamış olduğundan emin olunmalı, kaynakların güvenilirliğiyle ilgili araştırma yapılmalı, alıntı edilen sözlerde tam olarak ne dendiğine dikkat edilmeli abartmaya veya kendi tezinize uygun halde yorumlamaya gidilmemeli. Fakat komplo teorilerini üretenler veya bunlara ikna olmuş halde başkalarına yayanlar, bu kurallara titizlik göstermiyor.

Örnekler:
• 5 yıl önce İngiltere'den 4 bilim adamı çıkmış ve açıklama yapmışlardı: "cep telefonunun kanser yapmadığını bilimsel olarak ispatladık". Şimdi ABD'de 10 bilim adamı tam tersini ispatladı. Bunca yıl boyunca bunu bildikleri halde insanları aldattılar.

• Youtube'da video ile gösteriyorlar. İkiz kuleler yıkılırken, kat kat içeriden bombaların patladığı görülüyor.

• Pentagon'a düşen uçak enkazının resmini gösteriyorlar. Ortada uçaktan bir tek parça yok. Demek ki, uçak düşmemiş, CIA füze atmış.

• 11 Eylül olayında ölen yahudi yok. Mossad olaydan önce yahudileri uyardı.

Kendi inandığı teze muhalif delilleri araştırmama

Komplo teorilerine inananlar, bu teorilere karşı yeterince eleştirel davranmıyor. Komplo teorileriyle çelişen verileri dikkate almıyorlar veya araştırmıyorlar. Bilimsel düşünme yöntemi ise bir tezle ilgili destekleyici ve muhalif tüm delilleri dikkate alarak muhakeme etmeyi gerektirir.

Örnekler:
• Yukarıda ifade edilen 11 Eylül olayında ölen yahudi olmaması meselesi.
Türkiye'de 11 Eylül olaylarının ardından böyle bir söylenti farklı kanallardan dolaşmaya başladı. Bu söylentiyi yayanlar, iddianın doğru olduğuna kesin olarak inanmadan önce, iddianın doğruluğunu sorgulaması gerekir. Bu teknik olarak çok kolay bir işlem. Google'da "dead jews in 911" gibi bir sorgulama yapmak yeterli. Olayda ölmüş yahudilere ait çok sayıda tanıklık, fotoğraf, adres ve liste bu arama sorgusunun sonunda bulunuyor.

Burada sorun, komplo teorisine eleştirel bir bakış açısıyla yaklaşmamaktan kaynaklanıyor. İddia edilen tez eğer kişinin daha önceden sahip olduğu önkabullerle uyumluysa, kişi hiçbir eleştirel araştırma yapmadan, tezi kabul ediyor.

Bu örnekte, google'da çok sayıda muhalif verinin çıkmış olması tek başına, komplo teorisini çürütecek bir delil değildir. Fakat bilimsel düşünme yöntemde şöyle bir ilke vardır: Bir tez yayınlarken, bu tezi destekleyen veya bu teze muhalif tüm deliller araştırılmalı ve yayınlanmalıdır. Fakat komplo teorilerini savunanlar, tezlerine muhalif delilleri toplamak için yeterli özen göstermemektedir.

Gündelik mantığı bilimsel muhakeme olarak görme

Doğa olaylarında, bir şeyin mümkün olup olmadığına karar vermek için, hesap veya deney yapmak gerekir. Ortaokulda öğretilen basit bir fizik konusuna ait bir soruyu yanıtlamak için, kağıt, kalem ve hesap makineleri kullanarak dakikalarca hesap yaparken, gerçek dünyada gerçekleşmiş, çok karmaşık bir fizik olayını hesap kitap kullanmadan bir anda çözmek sağlam bir yöntem değildir.

Komplo teorilerine inananlar, hesap kitap kullanmadan bir fizik olayını açıkladıkları halde, bu açıklamanın bilimsel olduğunu söylüyorlar. Halbuki bu açıklamalar, bilimsel muhakemeye değil, gündelik akıl yürütme yöntemine bir örnektir.

Örnekler:
• Akıl var mantık var, uçak yakıtıyla bina çöker mi? Mümkün değil.

• İkiz kuleler bulunduğu yere yıkıldı. Eğer uçak kazasından dolayı yıkılmış olsaydı, yana doğru yıkılırdı. İçeriden patlatılmış bombalarla yıkıldığından, bulunduğu yere yıkıldı.

Sonuçtan sebebe gitme (ters sebep-sonuç ilişkisi)

Kriminal araştırmalarda, bir işten kimin yarar sağladığı şüphelilerin tespitinde kullanılan yararlı bir akıl yürütme yöntemidir. Fakat bu yöntem suçu ispatlamak için değil sadece şüpheli sayısını azaltmada kullanılabilir. Bir suçtan yarar sağlayabilecek kişilerin sayısı birden çok olabilir. Bazen suçu işleyen kişi, olaydan bizzat kendisi en büyük zararı görmüş olabilir. Bu yüzden, sonuçtan sebebe gitmek tek başına yeterli delil oluşturmaz.

Örnekler:
• 11 Eylül işi ABD'ye yaramıştır, o zaman bu işi ABD yapmıştır.

• 11 Eylül'den müslümanlar en büyük zararı görmüştür, bu yüzden yapanlar müslüman topluluklardan olamaz.

Yazının Devamı...

Çarşamba, Ekim 15, 2008

Probleme Olumlu Yaklasim Ustalastirir

İnsan yeni bir problemle karşılaştığında ne olur?
Kişinin bilgi seviyesi ne kadar çoksa, problemlerle karşılaştığında, bunu daha olumlu bir tavırla karşılar. Yani bilgi, kişinin problemlere yatkınlığını artırır. Problemlere yatkınlık, iş yapma istek ve azmini artırır. İstek ve azim, kaliteli çalışmanın süresini artırır.

Kaliteli çalışma miktarının artması, kişinin problem çözmesini kolaylaştırır, yani kişinin iş üretkenliğini artırır. Üretkenlik arttıkça, kişi daha fazla öğrenme deneyimi yaşar ki bu da kişinin bilgi miktarını artırır. Bu da başlangıç noktası olan problemlere yatkınlığı daha da artırır. Yani kişi işi sevdikçe ustalaşır, ustalaştıkça işi daha çok sever. Bu geribesleme döngüsü, pekiştirici bir döngüdür. Yani değişkenlerin birinde olumlu yönde bir artış, döner dolaşır yine aynı değişkene geri döner ve değişim miktarını aynı yönde artırır.

Bu sürecin içinde ikinci bir pekiştirici geribesleme döngüsü daha var: Kişinin bilgisi ne kadar çoksa, üretkenliği o kadar çok olur; çünkü kişi problemleri daha çabuk çözer, işi daha hızlı ve pürüzsüz bir şekilde yapar. Üretkenlik arttıkça, kişinin iş deneyimleri de artar. Ve kişi deneyim kazandıkça, daha fazla bilgi öğrenir. Dolayısıyla, bilgi miktarının artması, döner dolaşır, yine bilgi miktarını artırır.



Bu yukarıda bahsettiğim pekiştirici geribesleme döngüleri, her zaman olumlu bir şekilde çalışmak zorunda değildir. Bazen işler olumsuz bir şekilde de gelişebilir. Bu durumda, olumsuzluk giderek büyüyerek artar. Buna kısır döngü denir. İşin ilginç tarafı şu: pekiştirici döngü eğer olumlu bir şekilde çalışmaya başlarsa, bir tür refah veya saadet döngüsü oluşturur. Fakat tersine olumsuz bir şekilde çalışmaya başlarsa, o zaman da içinden çıkması giderek zorlaşan bir kısır döngü oluşturur.
Genellikle neden-sonuç döngülerini tanımlarken, anlaşılmayı kolaylaştırmak için değişken isimlerini olumlu yönüyle belirtmek tavsiye edilir. Fakat yapının olumsuz bir şekilde çalışması durumunda, bu yapının kısır döngüler üreteceği unutulmamalı.

Yazının Devamı...

Pazartesi, Ekim 13, 2008

Yari Cevik Tasarim

Çevik süreçler genel olarak, sistemin ön tasarım ile geliştirilmesinin yerine, tasarımın test ve programlama içinden geliştirilmesini söylüyor. Bu kural genel olarak doğru bir kural. Fakat istisnaları var.
Son zamanlarda üzerinde çalıştığım iş akışı otomasyonu projesinde, farklı bir yöntem izliyorum. Önce dokümantasyon ile birlikte, sözde kod benzeri mantıksal bir tasarımı çıkarmaya çalışıyorum. Gayet verimli oluyor. Program ve testin yararı, mantıksal adımlardaki boşlukları tümüyle gidermek oluyor. Fakat ister istemez, üst seviye hızlı bakıştan biraz ödün vermek gerekiyor. Ayrıca kod bir kere yazıldıktan sonra, mevcut kod evrime engel oluyor.
Dinamik diller, type inferencing, otomatik refactoring desteği mevcut kodun evrilmesini kolaylaştırıyor; fakat yine de bu araçlarla bile değişim düşüncenin hızına yetişemiyor. Ne var ki, aklın da kapasitesi çabuk doluyor. Tasarım kararlarının sayısı belirli bir miktarın üzerine çıkınca, zihin bunları takip edemiyor.
Bu yüzden, şöyle bir yöntem izliyorum: Eğer tasarım gerektiren zor bir problem üzerine çalışıyorsam, önce sözde kodlarla mantıksal tasarımı geliştiriyorum. Aklımın kaldırabileceği kadar karmaşıklığa varınca, program ve testleri yazıyorum. Sonra bir sonraki tasarım problemi için yeniden, mantıksal tasarımı elle yapmaya geri dönüyorum. Çevik ilkelerin tavsiye ettiği gibi, bu da yine devirli bir tasarım süreci. Fakat çevik ilkelerden farkı, önce tasarım, sonra program/test.
Gerçi bu usul çok yeni bir farklılaşma da sayılmaz. Yıllardan beri çevik yöntemlerden sayılan Jeff de Luca ve Peter Coad’ın FDD (feature driven development) yöntemi de önce tasarım, sonra programlama çevrimini tavsiye ediyor.

Yazının Devamı...

Çarşamba, Ekim 08, 2008

Word'deki Yazilim Hatalari




Dünyanın en çok kullanılan yazılımlarından biri olan Word, çok fazla yazılım hatasına sahip. Özellikle büyük belgeler hazırlarken, Word kullanıcıyı anlaşılmaz birçok sorunla rahatsız ediyor. En son beni çokça uğraştıran bir sorun, eşimin Word'de yazdığı doktora tezinde ortaya çıktı.

Sorun şu: Word belgesini, pdf'e dönüştürüyoruz. pdf dosyadaki sayfa numaraları, word belgesindeki sayfa numaralarından farklı. Sorunun nereden kaynaklandığını anlamak için, 5 farklı pdf dönüştürücüsü kullandım: Word 2007'nin kendi pdf dönüştürücüsü, zamzar.com, expresspdf.com, pdfwriter ve cutepdf. Hepsinde aynı sorunla karşılaştım.
Ayrıca dosyayı yazıcıdan bastırdığımda da aynı sorun ortaya çıkıyor.
Sorunun sebebi neden kaynaklanıyor, diye biraz araştırdım.
İlk sorun, Resim 1'de görünen sorun. Resmin sol tarafında word belgesi, sağ tarafında ise pdf belgesi görünüyor. Şekil 3 dikkat ederseniz, pdf dosyasında metnin içine gömülmüş. Şeklin gerçek yeri burası değil. Şeklin gömüldüğü yerde aslında şekle referans (caption) bulunuyor. Fakat muhtemelen word belgesinin içindeki bir yazılım hatası, word'ün belgeyi basarken, bu referansın yerine şekli gömmesine sebep oluyor.
2. ve 3. resimlerdeki sorun daha da garip. Basılmayan karakterleri göster komutunu verdikten sonra, word belgenin formatını değiştiriyor. Tablo 14 bir alt sayfaya kaydırılmış.
Neyse, word böyle işte. Ben şahsen, eşime tezini yazmaya başlamadan önce, word yerine latex kullanmasının yararlı olabileceğini söylemiştim. Fakat latex'in de kullanımı teknik konulara ilgili olmayan kullanıcılar için, oldukça zor. OpenOffice'in bu gibi yazılım hatalarında Word'e kıyasla ne durumda olduğunu merak ediyorum. Muhtemelen daha iyi olsa gerek. Çünkü Word çok uzun bir geçmişe sahip olduğundan, geçmişten gelen, muhtemelen geliştiricilerinin dahi ne işe yaradığını unuttuğu çok fazla yazılım koduna sahip. Bu yüzden, muhtemelen dünyada en çok test edilen yazılımlardan biri olduğu halde, hala çok fazla yazılım hatası içeriyor.

Yazının Devamı...

Salı, Ekim 07, 2008

Bilginin Dogrulugu ve Ahlaki Sorumluluk

İnsanlar bazı kurum veya kişilerle ilgili çok çarpıcı iddialar ve suçlamalar içeren mailler yolluyorlar birbirine. Bu mailler, çeşitli deliller ve tanıklıklara başvuran haberlerle pekiştiriliyor. Fakat sorun şu ki, kaynak olarak kullanılan delil ve tanıklıklar çoğu zaman gerçek değil. Bu genel ve her yerde her zaman geçerli olan bir sorun. Sadece öteki grupların gönderdiği maillerde değil, bizzat kendi görüşümüzdeki, kendimizi ait gördüğümüz gruptaki insanların gönderdiği haberlerde bu sorun geçerli.

Şimdi ahlaki açıdan işin önemli yanı şu: Söylediğimiz her şey doğru olmalıdır. Başka bir kaynaktan bir bilgi aktarırken dahi, kaynakların doğruluğundan emin olmak bizim sorumluluğumuzdadır.

Eğer aktardığımız bilgiler, toplumdaki bazı insanların itibarını yaralayıcı ise, bu bilgilerin yanlış olması durumunda, ahlaki olarak sorumlu oluruz. Dolayısıyla, bir kişi veya kurumun itibarını zedeleyici bir bilgiyi insanlarla paylaşmadan önce, bu bilginin doğruluğundan emin olmak için, sağlam bir araştırma yapmak ahlaki sorumluluğumuzdur. Bu kolay bir iş değildir. Sağlam bir araştırma yapmak, iyi bir bilim adamı, hukukçu veya araştırmacı gazetecinin işine gösterdiği özeni göstermemizi gerektirir. Bu ise çok zor bir iştir. Bir bilim adamı, gerçeklikle ilgili ufak bir yargıya ulaşabilmek için, çok uzun mesailer harcar. Bir hakim de, bir yargının doğru olup olmadığına karar verebilmek için, çok zaman harcar. Aynı çabayı, bizim birbirimize gönderdiğimiz maillerde göstermemiz mümkün değil. Çünkü hepimizin işi gücü var. Başlı başına bir meslek sahibinin gösterdiği özeni, bir haberin doğruluğunu araştırmak için harcayamayız.

Dolayısıyla, bir bilgi objektif kanallardan doğrulanmamışsa, bu bilgiyi yaymadan önce şu soruyu kendimize sormalıyız: Bu bilginin yanlış olması durumunda, bundan zarar görebilecek kişiler var mıdır? Eğer durum böyleyse ahlaki doğruluktan ayrılmamak için iki seçeneğimiz bulunuyor: Birinci seçenek, bilgiyi paylaşmaktan kaçınmak. İkinci seçenek, bilgiyi paylaşmak, fakat önce kendi ev ödevimizi yapmak. Nedir bizim ev ödevimiz? Çok şey olabilir. Benim aklıma gelenler şunlar:

1. Bilginin yayılmasından zarar görebilecek kişilerle irtibat kurup, konuyla ilgili fikirlerini öğrenmek.
2. Bilginin kaynağının doğruluğunu tahkik etmeye yönelik eleştirel bir araştırma yapmak.
3. Bilgiyi insanlarla paylaşırken, bu bilgiyle ilgili şüpheli yönleri de tüm gerçekliğiyle ortaya koymak.
4. Bilgiyi insanlara aktarırken, bilginin objektif olarak doğrulanmamış olduğunu özellikle vurgulamak.
Bilginin doğruluğu çok önemli bir mesele. Hayatımızın tümünde bilimsel yönteme uygun bilgi üretmek ve yaymak, hepimizin için çok yüksek fayda sağlayacaktır.

Yazının Devamı...