21 Mart 2017 Salı

Doğayı (Bilgisayarla) Modellemek Üzerine

Fizikle ilk tanışmam, zamanında mühendislik okurken yakın bir arkadaşımın bir vesileyle 'Schrodinger'in Kedisinin Peşinde' adında bir kitabı elime tutuşturmasıyla başlamıştı. Kuantum fiziği üzerine yazılmış hala en iyi popüler kitaplardan biri olan bu kitapta ilk defa 'modern fizik' konseptleri ile karşılaşmış; çift yarık deneyinde elektronların tıpkı ışık gibi davrandığını, belirsizlik ilkesinin doğanın en temelinde yatan prensiplerden biri olduğunu öğrendiğimde ufkum açılmıştı. Bir taraftan da günlük hayatta deneyimlediğim 'gerçeklik'ten oldukça uzak görünen fakat doğanın dili olduğu iddiasıyla 'fizik' olarak nitelendirilen bu alan gittikçe daha da ilgimi çekmeye başlamıştı. Sonrasında derinlere daldıkça karşılaştığım onlarca 'garipliklerle' aslında 'gerçekliğe' dair ne kadar az şey bildiğimi düşünüp, aklımdaki soruları cevaplamak adına yola çıktım. Hedefim oldukça iddialıydı: 'Gerçeklik' perdesini aralayıp onu saf bir şekilde görüp, anlayabilmek... Ne kadar naif olduğumu yıllar sonra ancak anladım.

Derin felsefi analizler yapmak niyetim yok aslında; lafı dolandırmadan sonuca gelirsem; aslında fizik uğraşı ile en baştaki hedefim gereği 'gerçekliği' saf haliyle anlamanın mümkün olmadığını, buna ancak elimizdeki modeller vesilesiyle yakınsayabileceğimizin gittikçe farkına varmaya başladım. Burada anahtar kelime 'model'; yani doğayı kavramak konusunda kullandığımız temel araçlar. Fizikte temel olarak yaaptığımız karşımızdaki olabildiğine karmaşık fenomeni ilk başta tüm karmaşıklığından arındırarak 'oyuncak bir model' ile temsil edip, adım adım modelin karmaşıklık seviyesini arttırarak gözlemler ve deneylerle kontrol edip, alınan geri besleme ile 'işe yarayan' - gözlemleri en iyi açıklayan mümkünse en basit açıklamayı ortaya çıkarmak. Örneğin lise fiziğinde sabah akşam uğraştığımız 'sürtünmesi ihmal edilmiş' sistemler ya da nokta parçacık olarak düşündüğümüz kütleler bu tarz modellerden; belirli ölçeğe kadar elinizdeki fenomenleri açıklıyabiliyorlar. Örneğin gezegenleri boyutsuz nokta parçacık olarak düşündüğünüzde 'gel-git' kuvvetlerini açıklayamıyorsunuz fakat Güneş Sistemi'ndeki yörüngeleri belirli bir hassasiyete kadar hesaplarken zaten buna ihtiyaç duymuyorsunuz. Fakat bunların her birini kattığınız takdirde elinizdeki hesaplama gücü ile altından kalkamayacağınız bir karmaşa ile karşılaşıyorsunuz; bu da 'işe yaramayan' bir şey. Ünlü bir laf vardır: 'Tüm modeller yanlıştır, bazıları işe yarar.' Buradaki 'yanlış' olma hali, iddialı bir şekilde 'gerçekliği' tam anlamıyla ifade ediyor olmasına istinaden.

Fizikte modelleri analitik olarak, genelde diferansiyel denklemlerle kurup çözümlerini arayabilirsiniz, ki yüzlerce yıllık birikim bu konuda müthiş ilerlemeler sağlamımıza yaradı. Fakat bu haliyle bile çok temel denklemlere sahip, karmaşıklık olarak oldukça 'basit' modellerin ötesine geçmek çok zor çünkü modelimizin içine ele aldığımız sistemin komponentlerinin etkileşimleri girdiğinde işler çoğu zaman çığırından çıkabiliyor, sonucun 'kaos'a çıkması işten bile değil. Aynı zamanda bir sistemin davranışını analitik olarak incelemeden önce bir kestirim yapabilmemizi sağlayacak bir yöntem olsaydı da denklemlerle boğuşmaya başlamadan önce probleme dair 'sezgisel' bir fikrimiz olsaydı diyor insan. İşte bu noktada bilgisayarlar devreye giriyor.

Elimizde sistemin işleyişine dair temel kuralları birkaç satır kodla bilgisayara verip, saniyede milyarlarca işlem yapabilen bu olağanüstü makinaların ortaya çıkaracağı sonuçlara artık kolayca erişebiliyoruz. 'Kullanıcı-dostu' programlama dillerinin gittikçe geliştiği, bilgisayarların hesap yapma gücünün astronomik seviyelere çıktığı şu dönemde bunu en temel uygulamalarda kullanmamak bile ayıp! Tabii bu durumun eğitim gibi hala 19. yy pratiklerini takip eden bir alanda kolay yankı bulacağını düşünmek ayrı bir naiflik olurdu, fakat son zamanlarda dönüşüm hızıyla paralel bilim eğitiminde bir çok 'çatlak ses' bu duruma işaret etmeye başladığı söylenebilir.

Feynman'ın ölümünden sonra odasındaki karatahtada karalanmış olarak bulunan şu ünlü sözü vardır hani: 'Yaratamadığım şeyi anlayamam' (İngilizcesi: 'What I can not create, I do not understand.'); bunu benzer şekilde son zamanlarda kendimde gözlediğim 'kodlayamadığım şeyi yeteri kadar anlamadığım' gerçeği bu konuya dikkat çekme isteği uyandırdırdı. Son zamanlarda gözüme çarpan birkaç ders ve kitaba işaret etmek niyetim.

Feynman'ın ölümünden önce çalıştığı karatahtasından geriye kalanlar. Sol üst köşede: 'What I cannot create, I do not understand' (Kaynak: Caltech Archives)

'Nature of Code' şu ana kadar enerjisi bakımından kimseyle karşılaştıramayacağım 'Daniel Shifman' adlı bir akademisyen/programcının geliştirdiği, 'ulaşılabilir' bir arayüz üzerinden doğadan esinlenilmiş problemleri modellemek üzerine harika bir kitap. JavaScript temelli p5.js adlı bir platform üzerinde geliştirdiği programlarla birkaç satırda 'rastgele yürüyüş' simulasyonlarından, fraktal yapı modelleri, kuşlar ve balıkların 'kümelenme' davranışlarına kadar birbirinden ilginç problemleri ele alıyor [Örnekler için şu sayfada 'Simulate' başlığı altındakilere bakmanızı öneririm: https://p5js.org/examples/ ]. p5.js aslında görsel tasarımcıları ve sanatçıları programlama ile tanıştırmak için oluşturulmuş, grafik arayüze çok kolay ulaşılmasını sağlayan bir çok fonksiyon barındıran bir proje; tipik c++, Python gibi dillerdeki karmaşıklıktan uzak, ekranda objelerin oynadığı, dinamik simulasyonar için birebir. Shiffman aynı zamanda kitaptaki konuların büyük bir çoğunluğunu işlediği bir de online ders veriyor: Nature of Code - Kadenze. Ayrıca Youtube Coding Train kanalında her hafta p5.js ile ilgili bir problemi ele aldığı harika bir video yayınlıyor.

p5.js ile yapılmış bir 'düşen parçacıklar' simulasyonu (detaylar ve kod için tıklayınız)

Yine bunun paralelinde, bu sefer biyoloji üzerinden modellemeye yaklaşan iki harika kitap var. İlki 'Nature in Code' adında. Biyolojideki en temel birimler olan genlerden yola çıkıp, çok basit modellerle çoğalma, mutasyon, rekabet ve en nihayetinde 'doğal seçilim' mekanizmalarını yine JavaScript ile modelleyen başka güzel bir kitap. Kitabın online ders platformu edX'de aktif bir de dersi var [Nature in Code: Biology in Javascript], adım adım sıfırdan programlamanın temelleriyle birlikte konuyu işliyor. Özellikle kodların herbirini basit bir text editörü ile yazıp gidip bir internet tarayıcısında çalıştırması çok hoşuma gitti. Özellikle programlamaya yeni başlayacak bir kişi için bundan daha 'basit' bir başlangıç olamaz herhalde...

Son olarak yine biyoloji temelli bir 'modellemeye giriş' kitabından bahsedeceğim. Fakat öncesinde aynı kişinin [Philip Nelson]'ın modellemenin altındaki programlama becerileri üzerine yazdığı genel bir kitap var, onunla başlayalım: "A Student’s Guide to Python for Physical Modeling". Yaklaşık 150 sayfalık kitapta adım adım temel Python kullanımı ve özellikle modellemede kullanılan yönleri öz bir şekilde anlatılıyor, üzerine uygulama bile yapıyor. Asıl bahsedeceğim kitabı ise 'Physical Models of Biological Systems'. Biyolojik sistemleri ele alan bu şahane kitap pedagojik yaklaşımı, konuyu anlatış tarzı, adım adım her noktayı açık bir şekilde gösteriyor oluşu ile karşılaştığım en iyi ders kitaplarından biri sanırım. Temel konular biyoloji ile ilişkili olsa da modellemenin altında yatan olasılık, istatistik ve hesaplama gibi birçok temel konuda oldukça aydınlatıcı bölümlere sahip. Kitabın hedef kitlesi temel fizik ve matematik derslerini vermiş meraklı 2.-3. bilim öğrencileri.

Geçmiş senelerde lisans sonunda yazdığım 'Yeni Mezundan Fizik Lisans Tavsiyeleri' yazı dizisinde her yıl özellikle vurgulamaya çalışmıştım programlama ve bilgisayarla hesaplama yapma becerisinin bir fizikçi (ve genel olarak bilim insanı) adayı için ne kadar önemli olduğunu. Bu konuda becerilerinizi tipik yazılımcı gözüyle yaklaşık sabah akşam (bana kalırsa) hiç de ilginç olmayan 'programlama' problemleri yerine doğadan esinlenilmiş 'gerçek' problemler üzerine kafa yorarak çok daha etkili bir şekilde geliştirebilirsiniz. Bunlar için öğrenilen dil ilk etapta çok da önemli değil aslında, Python, JavaScript yada başka biri; önemli olan altta yatan kavramları ve yöntemleri özümseyip, bir fiziksel problemi modelleme becerisi kazanabilmek. Bunun sonrasında bilgisayarın sağladığı olanaklar ve hayal gücünüzle yapabilecekleriniz tek kelimeyle 'sınırsız'!

NOT: Modellemeye girişten bahsettim ama bu konuda hızlı başlayıp aynı hızla devam etmek için temel programlama becerileri konusunda şu iki siteyi tavsiye edebilirim. Hackerank ve Hackerearth. Bu siteler 'hacking skills' diyebileceğimiz, programlama konusunda yeterli ve etkili bir seviyeye hızlı bir şekilde gelmeniz için epey yardımcı olacaktır. Bu sitelerde ilk başta giriş 'tutorial'ları ile egzersizlerle başlayıp, düzenli olarak problem çözüp ardından periyodik olarak açılan yarışmalara katılıp kodlama becerilerinizi ilerletebilirsiniz. Bu siteler platformdan bağımsız bir şekilde birçok dilde destek veriyorlar. 

0 yorum:

Paylaş!

 

Copyright © 2010 Gök Günce | Blogger Templates by Splashy Templates | Free PSD Design by Amuki