Bilimsel programcılık disiplini

Hesaplamalı bilim, ortak bir programlama disiplini oluşmadığı için yakın gelecekte bir krizle karşı karşıya kalabilir. Bilimsel programlama yapan araştırmacılar çalışmalarının güvenilirliği ve paylaşılabilirliği için yazılım geliştirme tekniklerini öğrenip uygulamalılar.

Artık fizik, kimya, biyoloji, mühendislik araştırmacısı olup da program yazmamak imkansız. Belki yaptığınız deneyin verilerini analiz etmeniz gerekiyordur, veya ulaştığınız teorik sonucu hesaplamalı bir yöntemin sonucuyla karşılaştıracaksınızdır, ya da teorik çözüm bulunamayan bir problemi simülasyon aracılığıyla çözmeye çalışacaksınız. Hepsinde şu ya da bu dille küçük veya büyük bir program yazmanız gerekecektir.

Akademik araştırmacılar program yazmayı genellikle kendi kendilerine öğrenirler. Pek pek, programlamaya giriş 101 dersinde Fortran veya C görmüşlerdir (benim öğrenciliğimde mühendislikteki arkadaşlarım Pascal(!) öğreniyorlardı). Fen ve mühendislik fakülteleri bilimsel programlama araçlarını ve tekniklerini öğreten dersler açmaya pek tenezzül etmezler; araştırmacının böyle “basit” konuları nasılsa öğrenebileceği varsayılır. Sözgelişi birkaç sene önce, gcc’den LaTeX’e, Matlab’dan Gnuplot’a birçok faydalı aracı anlatan bir ders teklif etmiştim. Dünyada örnekleri bulunmasına rağmen, idare “yeterince akademik bulunmadığı için” reddetmişti.

Programlama, araştırmanın sonuçlarına ulaşmak için bir araç olarak görülür. Araştırmacı, yazdığı programın sadece kendisi tarafından kullanılacağını düşünür, o yüzden profesyonel programcılardan farklı gayretleri vardır. Bu yaklaşım, deneysel araştırmacıların laboratuar düzeneği kurmalarına benzer: Bir deneysel fizik düzeneği kurmak için ciddi bir elektronik bilgisine ihtiyaç duyulur, ama kimse deneysel fizik öğrencisine “git, bir de elektronik mühendisliği oku” demez. Labdaki doktora öğrencisi bu bilgiyi labda çalışırken okuyarak ve usta-çırak ilişkisiyle öğrenir. Kurulan düzenek sadece o çalışma grubu tarafından kısıtlı bir problemi incelemek için kullanılacağından, sanayide çalışan elektronikçiler gibi bir düzenlilik ihtiyacı duyulmaz. Araştırmacılar, dışarıdan bakana karmakarışık görülen laboratuarın her ayrıntısına hakimdir.

Aynı sebeplerden ve alışkanlıklardan dolayı, bilimsel program yazan araştırmacının yazılım mühendisliği okuması beklenmez. Programların dökümantasyonu yoktur, daha kötüsü eksik veya geçersizdir. Kod sarih (açık, net) değildir, değişken isimleri rastgele verilir, yalap şap spagetti kod yazılır. Fortran 77 gibi antika bir dil hala yaygındır. Nasılsa bir kerelik işi görecek bir program yazıyoruz, nasıl çalıştığını da biliyoruz, niye diğer ayrıntılarla uğraşalım?

Problem şu ki, program bir kerelikle kalmaz, tekrar kullanılabilir. Başkaları o programı benzer işler için kullanmak isteyebilir. Hatta araştırmacı birkaç ay sonra programa döndüğünde kendi yazdığını anlamayabilir. Bu durumlarda, bilimsel programlama disiplininin eksikliği başa büyük dertler açabilir.

Bu dertlerin bazıları “Nature”da yayınlanan bir haberde Zeeya Merali tarafından anlatılmış.En önde gelen iki mesele, hazırlanan programların dökümantasyonunun eksikliği ve kodların yeterince ciddi test edilmemesi. Merali’nin verdiği örnekler, bu meselelerin artık ciddi sonuçları olabileceğini gösteriyor. Birinci örnek, birkaç ay önce patlayan “Climategate” skandalında, gevşek programlama yüzünden iklim araştırmacılarının düştüğü zor durumu anlatıyor. Küresel ısınma artık politik bir kavga haline geldiği için, iklimbilimcilerin işlerini daha sıkı tutması gerekiyor. İkinci bir olay, Scripps Research Institute araştırmacılarının başka bir labdan alıp kullandıkları bir programdaki küçük bir işaret hatası sebebiyle sonuçlarının yanlış çıkması. Bu hata keşfedilince Science, PNAS ve Journal of Molecular Biology dergilerinde yayınlanmış beş makaleyi geri çekmek zorunda kaldılar. Çok can yakıcı bir hata!

Belli ki hesaplamalı bilim, 1960’lardaki yazılım krizi benzeri bir krize yaklaşıyor. Eski program yazma alışkanlıkları yeni ve karmaşık projelerle başedemiyor. Bu krizi aşmak için bilimsel programcıların yazılım mühendislerinin tecrübelerinden faydalanmaları gerekiyor; özellikle tasarım, test etme, belgeleme, sürüm kontrolü gibi konularda.

Yazılım geliştirme disiplini sadece hatalardan kaçınmayı sağlamaz, “tekrarlanabilir araştırma” prensiplerine uymayı da kolaylaştırır. İyi belgelenmiş, test edilmiş ve kolay derlenebilen bir program yazdıysanız onu makalenizle beraber yayınlamamak için bir sebep yoktur. Böylece her programcı sıfırdan başlamaz, varolanın üstüne ekler. Bilimsel uygulamalarda açık kaynak dönemi başlayabilir. Belli bir dar alandaki araştırmacılar sadece teoriyi değil, hesaplama araçlarını da birleştirip standartlaştırabilirler.

Ancak bu aşamaya gelebilmek için akademik araştırmacıların öğrenmeye zaman ayırmaları gerekir. Bazısı kendi kendine öğrenecektir, diğerleri de tekrarlanabilir araştırma prensiplerinin yayılmasıyla öğrenmeye zorlanacaktır. Yakında bilimsel dergiler makaleleri yayınlamadan önce, kullanılan programların çalıştırılabilir halde müsveddeyle beraber verilmesini şart koşacaklar. O zaman herkes ister istemez zaman ayırıp öğrenecektir. Nihayetinde bu bilgi lisans seviyesine sızmalı, lisans müfredatına en az iki dönem bilimsel programlama dersi eklenmeli, diğer derslerde de hesaplamalı problemler kullanılmalı. Öğrenciler hesaplama tekniklerini ve iyi programcılığı yumurta kapıya dayanmadan önce öğrenmeliler.

Bir yandan da profesyonel yazılımcıların bilimcilere hitap eden kitaplar yazması gerekli. En iyi bilinen örneklerden biri Greg Wilson’un Software Carpentry kursu. Sitede Python dili, kabuk programlama, sürüm kontrol, test etme, Make dosyası, düzenli ifadeler, nesneye yönelik programlama, web programlama gibi konulara değiniliyor. Bütünlüğü olan bir eğitim paketi olarak hazırlanmış.

Suely Oliveira ve David E. Stewart tarafından yazılmış Writing Scientific Software: A Guide for Good Style nümerik hesaplarda dikkat edilecek noktalardan başlıyorlar; yazılım tasarımı, veri yapıları ve testleri anlattıktan sonra hızlı çalışan ve hafızayı iyi kullanan program yazma prensiplerini anlatıyorlar. Buradan ulaşılabilir.

Handbook of Open Source Tools (Sandeep Koranne) ise bilimsel hesaplamada kullanılabilecek programlama araçlarını tanıtıyor. İşletim sistemi, kütüphaneler, paralel programlama araçları, matematik kütüphaneleri, görselleştirme gibi konularda yararlı olabilir. Buradan ulaşılabilir.

Reklamlar

Kaan Öztürk hakkında

Kaan Öztürk İstanbul’da doğdu. İstanbul Lisesi ve Boğaziçi Fizik mezunu. Rice Üniversitesi‘nde uzay fiziği alanında doktora yaptı. Işık ve Yeditepe üniversitelerinde ders verdi. 2015-2016 döneminde Rice'da ziyaretçi araştırmacı olarak çalıştı. Bugünlerde Sabancı Üniversitesi'nde optimizasyon ve yapay öğrenme konularında doktoraüstü araştırmacı olarak çalışıyor.

08 Kasım 2010 tarihinde Bilimsel Programlama içinde yayınlandı ve , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin. 4 Yorum.

  1. Gabriel Conroy

    Selamlar,

    Biyoinformatik alanına ilişkin gözlemlerimi kısaca aktarmak isterim. Bu alanda, malum, iki tür araştırmacı profili mevcut. İlki moleküler biyoloji, genetik veya benzer bir alanda lisans (ve/ya yüksek lisans eğitimi) almış ancak çalıştıkları konu veya ilgileri gereği biyoinformatik araçlarını düzenli ve etkin bir şekilde kullanmaları gereken araştırmacılar. İkinci grup araştırmacılar ise daha çok teknik bir altyapısı olan, örneğin Bilgisayar Bilimleri ya da Fizik Mühendisliği gibi alanlarda eğitim almış, bununla birlikte artık biyobilim alanında çalışmak istemeye karar vermiş olanlar. Bu ikinci grup çoğu zaman pragmatik ve pratik nedenlerden ötürü biyobilim çatısı altında biyoinformatik alanında çalışıyorlar.

    Gözlemlediğim kadarıyla, bu iki grubun “bir biyoinformatik analiz aracı olarak programlama dili” tercihlerinde açık bir farklılık söz konusu. İlk gruptaki araştırmacılar Perl ile programlamaya giriş yapmayı tercih ederken, ikinci gruptaki araştırmacılar alışkanlıkların da etkisiyle Python kullanmaya daha eğilimli oluyorlar.

    Perl – Python karşılaştırmasını teknik bir zeminde yapabilecek yetkinlikte biri değilim. Bununla birlikte, Perl’ün Python’a kıyasla “daha kişisel” bir programlama dili olduğunu gözlemledim. Her ne kadar bir kodun dökümantasyonel zenginliği genellikle o kodu yazan kişinin programlama tarzı ile yakından ilişkili olsa da, Perl kullanan araştırmacılar yazdıkları küçük programları çoğunlukla sadece kendi projeleri için kullandıklarından ötürü -bu durum ileride kendileri için sıkıntı yaratacak olsa dahi- programlamanın dökümantasyon ayağına pek önem vermiyorlar. Öte yandan, formal bir şekilde programlama kültüründen gelen ikinci gruptaki araştırmacılar yazdıkları çok kısa kodlar için dahi uygun bir dökümantasyonu eklemeyi ihmal etmiyorlar.

    Dolayısıyla, bence bu durum biraz programlama kültürüne aşinalıktan kaynaklanıyor. İyi üniversitelerin biyobilim alanındaki programlarının müfredatlarına baktığımızda dişe dokunur bir yoğunlukta programlama eğitiminin (JAVA, Matlab, Unix kullanımı, Perl / Python vb.) zorunlu veya seçmeli dersler ile verildiğini görüyoruz. Ancak bu derslerin içerikleri çoğunlukla “mevcut bir soru veya sorunun hesaplamasal bir perspektif ile nasıl formüle edilebileceği” ile sınırlı. (Hatta, bu bile pek çok ders için oldukça iyimser bir yaklaşım.) Dökümantasyon üzerine sadece dönemin başında “değişken isimlerine dikkat edin, mükerrer isimler hataya neden olur” gibi gayet pragmatik (sonuç odaklı) bir uyarıdan başka bir şey anlatıldığını zannetmiyorum.

    Uzun lafın kısası, programlama dili öğrenmek (algoritmik düşünebilmek) geçtiğimiz 4-5 sene içerisinde evrensel bir şekilde elzem hale geldi. Veri analizinin birçok işbirliği gerektireceği önümüdeki dönemde bu dökümantasyon sorunun bir sıkıntı olmaktan çıkacağını düşünüyorum ben şahsen.

    Sevgiler,

    Gabriel

  2. Gabriel, katkın için çok teşekkürler. Dil tercihlerinin böyle farklı olduğunu bilmiyordum, çok ilginç. Aslında biyologların sadeliğinden ötürü Python ‘u tercih edeceğini düşünürdüm. Perl herhalde string işlemedeki kuvveti sebebiyle tercih ediliyor.

    Programların otomasyonunda kullanmak için Perl’e şöyle bir göz atmıştım, ama içinden çıkamadım, vazgeçtim. Alışkanlığım C’dir ama Python’u görünce kullanışlılığına hayran kaldım. Bence C ve Python mükemmel bir bileşim.

  1. Geri bildirim: Tekrarlanabilir araştırma ve Rogoff-Reinhart olayı | Kaan Öztürk Blog

  2. Geri bildirim: diye başlamışla… | paylasimintekveyeniadresi

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: