Biyoinformatik | Programlama Nedir?
Ayşegül MURAT, Ege Ünv. Sağlık Biyoinformatiği A.B.D., Doktora Öğrencisi
Geçtiğimiz günlerde 1 milyon yazılımcı projesi kapsamında T.C. Hazine ve Maliye Bakanımızın açıklamalar yaptığını duymuşunuzdur. Türkiye’de sektörün yazılımcı ihtiyacının büyük ölçüde karşılanması için açıklanmış bu proje alacağınız eğitimin dijital (1milyonistihdam.hmb.gov.tr) özgeçmişinize işlenip kamu ya da özelde işverenin size ulaşması sürecini içeriyor. Son zamanların konuyla ilişkili diğer başlığı ise, tüm dünyanın etkilendiği Corona virüsüne karşı aşı, ilaç geliştirilmesiyle de çokça karşılaştığımız yapay zekâ, yazılım, algoritma geliştirme, aday proteinler belirleme gibi kavramlar var. Aslında iç içe yaşadığımız bu alan son başlıklarla varlığını daha çok belirginleşirdi. Google, Facebook, Microsoft, Apple, Amazon ve diğer teknoloji şirketlerinin belkemiği, binlerce yetenekli programcının iş birliği ile yazılan dev bilgisayar programlarıdır. Peki daha birçok başlık altında görmeye devam edeceğimiz yazılım/programlama biyoinformatik alanı için ne ifade ediyor?

Resim 1: Milyon yazılımcı projesi kapsamında verilen online eğitimler
Bilgisayar mühendisliği alanındaki öğrenciler için hayli kolay, fizik, matematik ve istatistik bölümleri için biraz daha kolay olsa da biyoloji, kimya, ziraat fakültesi, diş hekimliği, tıp fakültesi gibi alanlarının yaygın eğitim şekillerinin yazılım/programlama içermemesinden dolayı, bu bölüm öğrencileri için biyoinformatiği yazılımla birleştirmek hayli zor olabilir. Özellikle bireysel merakı ile bu alana yönlenmek isteyen öğrencilerin en büyük problemi programlamaya nereden başlayacağını bilmemesi.
Biyoinformatik Çalışacak Biri Programlamayı Kesin Öğrenmeli Mi? Nereden Öğrenmeli?
Birinci soru için iki cevabım olacak; eğer yapmak istediğiniz çalışmalarda %100 özgür olmak düşüncesindeyseniz evet kesinlikle en az bir yazılım dilini öğrenmelisiniz. Yok sadece çalışma sonucunuzu yorumlamak, standart biyoinformatik araçlar kullanırken ilk sıkıntı yaşadığınızda konuyu bilen birini arayarak verinizi analiz etmek istiyorsanız tercih sizin. İkinci sorunun cevabı ise, bahsettiğim projenin sayfasından, Udemy, Freecodecamp, Coursera, edX, Codewars, Khan Academy, DataCamp gibi online eğitimle1 ya da Türkiye için Mustafa Akgül Özgür Yazılım kampında gönüllü hocaların ücretsiz olarak verdiği birçok yazılım/programlama dili eğitimiyle ve Kadın Yazılımcı grubunun eğitimlerini, birçok üniversite tarafından düzenlenen eğitimleri de takip ederek öğrenebilirsiniz. E-öğrenme teknolojilerinin gelişmiş olması, eğitim öğretim alanında gelişen veya Corona gibi ani değişkenlik gösteren durumlar için uygulanabilirlikte oldukça etkiliği olduğunu da söylemeliyiz.2

Resim 2: Nasıl başlayacağımızı anlatan güzel bir owlturd.com çizimi
Belki içinizden birileri aslında biyoinformatik araçların nasıl çalıştığını nasıl o grafiği çizdiğini, sonuç olarak verdiği sekansın hizalanmış halini ne oranda doğru verdiğini, pathway (yolak) analizi yaparken neden kullanılan programlar arası farklılık olduğunu merak etmiştir. Bir işi yaparken ulaşamadığınız karanlık alanınız olmadığı sürece işin tamamına hâkim olacaksınız. Biri size neden o değil bu, aynı işi yapabileceğiniz diğer program dururken neye göre onu değil bunu seçiğinizi elbet bir şekilde soracak. O soru geldiğinde sebebini cevaplarken sıkıntı yaşamamanız için, cevabınıza her gün bir önceki günden daha fazla şey öğrenerek hazırlanın derim.
İlk Yazılımcı- Ada Lovelace
Bu yazımın ana başlığının oluşmasını sağlayan bir kadın olarak daha fazla gurur duyduğum Lovelace ilk yazılımcı olarak kabul görür.3 19. yüzyılda erkek egemen bilim ve matematik alanlarında çalışan, gelecek için iddialı hayalleri olan vizyoner bir matematikçi aristokrat bir kadın. 1843’te Lovelace, Charles Babbage’ın mekanik genel amaçlı bir cihaz olarak olanaklarını belirlediği analitik motorunun bir hesabını yayınladı. Babbege’ın analitik motoru hızlı bir hesap makinesinden daha fazlaydı. Ada Lovelace’ın hayati öngörüleri sayesinde muazzam bir hesaplama gücü olanağı sundu. 1936’da matematikçi Alan Turing, bugünün bilgisayarı için teorik bir temel olarak görülen bir seminal matematik makalesi yazdı.4,5

Resim 3: Ada Lovelace'ın suluboya portresi, 1840. Bilim Müzesi Grup Koleksiyonu
Programlama Kavramları
Program|program: Bilgisayarın bir görevi gerçekleştirmek için izlediği talimatlar dizisidir. Program isim olarak ifade edildiğinde bilgisayarda çalışan yürütülebilir bir yazılımdır. Fiil olarak kullanıldığında, bir yazılım programı oluşturmak demektir. Örneğin, programcılar bilgisayara ne yapması gerektiğini bildiren bir kod yazarak programlar oluşturur.6,7
Programlama|programming: Belirtilen hesaplama işlemlerini ve işlevselliğini kolaylaştırmak için mantığın uygulanmasıdır. Uygulama, etki alanı ve programlama modeline göre farklılık gösteren bir veya daha fazla dilde oluşur. Bir uygulama oluşturulurken programlama dili semantiği ve sözdizimi kullanılır. Bu nedenle programlama, uygulama alanları, algoritmalar ve programlama dili uzmanlığı bilgisi gerektirir. 6,7
Programlama Dili|programming language: Python, C, C++, Java, Matlab, PERL, R, Unix, gibi dillerin mantığı geliştiriciye göre değişir. İyi bir programlama dili 1. Sağlamlık|robustness: hatalardan veya yanlış veriden bağımsız olarak program devam etme kapasiesine odaklanır, 2. Güvenilirlik|reliability: doğru tasarım ve algoritma uygulamasına odaklanır, 3. Verimlilik |efficiency: programaları optimize etmek için kullanılan bellek, donanım veya diğer özelliklere odaklanır, 4. Okunabilirlik|readability: diğer program geliştiricileri veya tasarımcılarına bilgi sağlayan uygun dokümantasyon ve girinti kullanılabilirliği özellikleri içermelidir.8

Resim 4: 2019 makalesine göre 8 programlama dillerinin ve bunların kütüphanelerinin hangi oranda kullanıldığının şematik gösterimi
Programcı|programmer: Bilgisayara özel programlama talimatları vererek bilgisayar yazılımı veya uygulamaları yazan/oluşuran bir bireydir. Çoğu programcı, yapılandırılmış soru dili (SQL), Perl, genişletilebilir işaretleme dili (XML), PHP, HTML, C, C++ ve Java dahil olmak üzere birçok programlama dili ve platformunda geniş bir bilgi işlem ve kodlama geçmişine sahiptir.9
Kod|code: 1 ve 0’dan anlayan bilgisayar tarafından anlaşılan dildir. Bilgisayar bizim kullandığımız dili anlamadığı için, yapmasını istediğimiz şeyi onun dilini kullanarak ona anlatmamız gerekiyor. Bilgisayar kodu verileri girdi olarak kullanır, bazı işlemler yapar ve sonra çıktıyı verir.10
Kaynak Kod|source code: Bir bilgisayar programlama dili kullanılarak bir programcı tarafından yazılan talimatlar ve ifadeler kümesidir. Bu kod daha sonra bir derleyici tarafından makine diline yani 1 ve 0’a çevrilir. Çevrilen bu koda nesne kodu|object code denir.10
Sözde-yalancı kod|pseudocode: Algoritma ve programlar oluşturulurken kullanılan, günlük konuşma diline benzer ve belirli bir programlama dili detayı olmayan bir nevi kodun taslak halidir.Yalancı kod bir programın adımlarını veya akışını temel bilgileri hariç özetler.10,11
Algoritma|algorithm: En basit haliyle algoritma bir problemi sonlu sayıda adım kullanarak çözmek için olan matematiksel bir süreçtir. Aslında bilgisayara sadece ne yapması gerektiğini değil, nasıl yapacağını da tanımladığımız bir talimatlar dizisidir. Muhtemelen bir bardak suyu içmeyi, çay demlemeyi, diş fırçalamayı, kurabiye yapmayı, ya da bir hastaya ilacı nasıl içeceğini bir reçete yazmayı adım adım yazmak hepimizin muhtemel kolaylıkla yapacağı şeylerdir. Tüm bu örnekleri bir bilgisayara adım adım anlatmak bir insana anlatmaktan inanın daha zor. Prof. Dr. Halit Oğuztüzün’ün “Bu ve benzeri hesapları bilgisayar kullanarak yapmaya başlayınca bilgisayarı bir hesaplama aracı olarak tanıyoruz. Hesaplama yöntemlerimizi de algoritma olarak adlandırıyoruz” diyerek 2005 yılındaki derlemesinde algoritmayı açıklamıştır.12,13
Kaynakçalar
1. Salleh, S. M., Shukur, Z., & Judi, H. M. (2013). Analysis of Research in Programming Teaching Tools: An Initial. Procedia-Social and Behavioral Sciences, 103, 127-135.
2. Alowayr, A., & Badii, A. (2014). Review of monitoring tools for e-learning platforms. arXiv preprint arXiv:1407.2437.
3. Aiello, L. C. (2016). The multifaceted impact of Ada Lovelace in the digital age. Artificial Intelligence, 235, 58-62.
4. Fara, P. (2020). Ada Lovelace: the making of a computer scientist: by Christopher Hollings, Ursula Martin and Adrian Rice, Oxford, Bodleian Library, 2018, xiii+ 114 pp.,£ 20.00 (hardback), ISBN 978-1-85124-488-1.
5. Hewitt, C. (2020). Development of Foundations for Computer Science: Dedekind, Russell, Gödel, Wittgenstein, Church, and Turing. Russell, Gödel, Wittgenstein, Church, and Turing (February 15, 2020).
6. Lundqvist, I. K. (2004). Introduction to Computers and Programming.
7. Kenny, T. (2007). Basic programming. The Nuts and Bolts of Cardiac Resynchronization Therapy, 79.
8. Amaral, V., Norberto, B., Goulão, M., Aldinucci, M., Benkner, S., Bracciali, A., ... & Karatza, H. (2020). Programming languages for data-Intensive HPC applications: A systematic mapping study. Parallel Computing, 91, 102584.
9. Bayman, P., & Mayer, R. E. (1983). A diagnosis of beginning programmers' misconceptions of BASIC programming statements. Communications of the ACM, 26(9), 677-679.
10. Marino, M. C. (2006). Critical code studies. Electronic book review, 4.
11. Gandhi, R. S., Kumar, T., Singhal, T., Migalani, V., & Maya, B. S. (2020). Review on Code Generator with Statistical Models. Studies in Indian Place Names, 40(70), 876-879.
12. Ribeiro Filho, J. L., Treleaven, P. C., & Alippi, C. (1994). Genetic-algorithm programming environments. Computer, 27(6), 28-43.
13. Halit Oğuztüzün (Şubat 1998). "Berimsel Bir Deneme". 20 Şubat 2015 tarihinde kaynağından Arşivlendi. Erişim tarihi: 23 Ağustos 2010.