Bilimsel programlar ve “reproducible research”
Hesaplamaya dayalı araştırmalar yayınlanırken, araştırma için yazılan programların makaleyle beraber verilmemesi bilimsel kontrolü zayıflatır. Hesaplamalı bilimciler, sonuçların tekrarlanabilmesi için yazılan kodun açıkça sunulması gerektiğini savunuyorlar.
Eskiden bilimin teori ve deney olarak iki metodoloji takip ettiği kabul edilirdi. Artık bunlara bir de hesaplamanın eklendiği oybirliğiyle kabul ediliyor. Çoğu bilimci şu veya bu programlama dilini “derdini anlatacak kadar” bilir, çünkü veri analizi için, simülasyon için, veya kapalı bir formülle oluşturulamayan problemleri çözmek için program yazmak gerekir. Çoğu durumda çalışmanın sonuçlarının güvenilirliği için hesaplamanın doğru yapılması çok kritiktir.
Hesaplamanın bu önemine karşılık, hesaplamalı yöntemler kullanan bilimsel yayınlarda programın kaynak kodunun da verildiği neredeyse hiç görünmez. En iyi ihtimalle kullanılan algoritma, yöntemler vs. makalede anlatılır, ama o kadarla kalır. Bu eksikliğin birkaç sebebi vardır:
- Uğraşılan bilimsel problemin çözümü asıl amaç olarak görülür.
- Dergide sayfa sayısı kısıtlıdır.
- Program iş görüyordur ama geliştici dışındakinin anlaması ve çalıştırması gayet zordur. Yeterli dökümantasyonu yoktur, parametreler kaynak koduna katılmıştır, her değişiklikte tekrar derlenmesi gerekir, çıktısının ne olduğu açık değildir, elle düzeltmeler gerekir, vs. vs.
Nature dergisinin 14 Ekim sayısında yazılım geliştirme uzmanı Nick Barnes, yukarıdaki sebeplere rağmen bilimcileri yazdıkları programları yayınlamaya davet ediyor. Profesyonel programların önemli kısmının da eğreti yazılmış olduğunu söylüyor ve “Programınız mükemmel yazılmış olmasa da, eğer doğru iş görüyorsa yayınlamaya değer” diyor.
Barnes’ın tavsiyesi, “Reproducible Research” (RR) olarak anılan bir hareketin felsefesi ile aynı çizgide. RR felsefesinde, bir bilimsel çalışma program yazmayı da içeriyorsa, hazırlanan programın aynen tekrar çalıştırılabilmesi için gereken ne varsa okuyucuya sunulmalıdır: Kaynak kodu, parametre konfigürasyonu, derleme bilgisi, nasıl çalıştırılacağı,.. yani, makalede sunulan sonuçları oluşturmak için gerekli bütün yazılım ortamı. Böylece okuyucular (veya hakemler) programı kendileri çalıştırabilir, hatta başka parametreler deneyip ne olduğuna bakabilirler. Daha da önemlisi, programda hatalar varsa bulunabilir; ya kaynak koduna bakarak, veya sonucu bilinen özel durumlara bakılarak.
Ancak bu derece şeffaflık meslek gereği mükemmeliyetçiliğe alışmış araştırmacıları ürkütebilir. Genellikle bilimciler yazılım mühendisliğinin prensiplerini bilmezler. Sonuçta ellerinde işlerini gören, ama o aşamaya gelene kadar organik olarak büyümüş, anlaması ve değiştirmesi zor bir program olur. Herhangi bir deney laboratuarına girdiğinizde gördüğünüz karışık manzaranın yazılıma aktarılmış hali gibi yani. Araştırmacı bu karışıklığı göstermek istemez; ya programı düzenlemek ister, ki bu araştırmadan zaman çalmak demektir, veya programı kendine saklar.
Programın kontrolünü elden kaçırmak istememek de direnç yaratabilir. Eski çalışma grubumda manyetosfer fiziği problemleri için bir yazılım geliştirilmişti. Yazılıma büyük katkısı olmuş bir araştırmacı dışarıdan gelen taleplere göre belli konfigürasyonla programı çalıştırır ve sonuçları isteyene gönderirdi. Neden programı yayınlayıp bu dertten kurtulmadığını sorduğumda “bilmezler, yanlış parametrelerle çalıştırıp yanlış sonuçlar alırlar” cevabını vermişti. Aslında kod üzerindeki hükümranlığından vazgeçmek istemediği belliydi. Kıdemli araştırmacıların teşvikiyle sonradan kod yayınlandı.
Araştırmacı yazdığı programı yayınlamakla, diğer araştırmacıların o programın doğruluğunu denetlemesine kapı açmış olur. Eğer program doğru çalışıyorsa, sonuçlar tekrar üretilebiliyorsa, yazılım mühendisliği kurallarına uyup uymadığı çok önem taşımaz. Zaten diğer araştırmacılar bildirilen sonuca itibar etmeden önce hesaplamanın doğru olup olmadığına bakmak isteyeceklerdir. Bu sayede her araştırmacı yazdığı programa fazladan dikkat edecek, hata yapma ihtimalini azaltacaktır. Dahası, bu tür paylaşımlarla bilimsel programlamaya dair ortak bir disiplin ve kullanım etiği ortaya çıkar.
RR hakkında bir toplantıda bazı prensipler ve amaçlar belirlendi. Önümüzdeki birkaç yılda kod paylaşmayı kolaylaştıran araçlar, kodların depolandığı merkezler, ve makalenizle beraber programınızı da incelemek isteyen editörler görmeniz ihtimali yüksek.
Kütüphanenizin aboneliği varsa, bu konudaki makaleler için IEEE’nin Computing in Science and Engineering dergisine göz atabilirsiniz.