(Blog anasayfasına dön)

“Hangi programlama dili en geçerlisi?” sorusu kodlama ile ilgilenen veya işi düşen herkesin biz hocalara yönelttiği bir soru. Cevabı yok, ve bunu anlatmak pek kolay olmuyor. Bu soru aynı “en iyi kıyafet hangisi?” sorusu gibi, cevabı nereye gideceğinize, ne yapmaya çalıştığınıza bağlı.

Artık bilgisayar bilimleri bölümüyle bir resmi bağım kalmamış olsa da zaman zaman programlama dersleri veriyorum: Yazları Nesin matematik Köyü‘nde, İş Analitiği başlığında verdiğim eğitimlerde ve derslerde. Bu eğitimlerde lise öğrencilerinden uzman profesyonellere kadar programlamaya başlayanlar için bir programlama dilini gözüne kestirmek ihtiyacı vardır. Çünkü göz korkutucu görünen bir iştir. Olsa olsa bir programlama dili öğrenebileceklerini düşünür ve haklı olarak en doğrusunu seçmek isterler.

İşin doğrusu şu ki asıl öğrenilmesi gereken algoritmik düşüncedir. Şöyle düşünün bir dili bilmek sizin o dilde güzel öyküler yazabileceğiniz anlamına gelmiyor. Güzel bir öykü yazmak kompozisyon ve anlatım tekniklerini bilmeyi gerektirir. Bu şekilde tasarladığınız bir öyküyü bildiğiniz herhangi bir dilde yazabilirsiniz. gerçekten de güzel öyküler farklı dillere çevrildiğinde gücünden hiçbirşey yitirmiyor. Buna benzer şekilde algoritmik düşünce bir hesaplama hikayesini doğru şekilde ifade etmeniz için temel bilgidir.

Ortaokul-lise düzeyinde öğrencilerle çalışırken amacımız onlara problemlere sistematik yaklaşma ve çözümleri doğru ve güzel ifade etme becerilerini kazandırmak. Bu yüzden dünyanın en basit programlama dillerinden biri olan ve kökeni 1950’lere kadar giden Scheme’i kullanıyoruz. Çok basit ve öğrenmesi çoook kolay bir dil olmasına rağmen algoritma kurma ve hesaplama problemlerini sistematik olarak çözmek için gerekli tüm temel sözdizimlerini sağlıyor. Böylece bir hikaye oluşturmak için aşmak gereken iki zorluktan birini neredeyse ortadan kaldırmış oluyoruz, çocuklar daha temel olan algoritmalara odaklanabiliyorlar.

Programlama öğrenmeye yeni başlayacak herkes içi Scheme iyi bir öneri. Ne var ki daha ileri yaşta üniversite öğrencileri veya profesyonellerin soruları genellikle “Programlama için Java mı, C++ mi, Python mu?” veya “En geçerli veri analitiği dili R mı Python mu?” şeklinde geliyor. Ben de bu soruya doğrudan yaklaşacağım.

Öncelikle C/C++ seçeneğini masadan kaldıralım. Bilgisayarın derinliklerine (işlemciye ve donanımın diğer parçalarına, programcıların deyişiyle ‘çıplak metal’e) ulaşabilen bu diller bir bilgisayar sisteminin alt katmanlarında (metal’in hemen üstünde) yer alan bilgisayar programları için uygun. Günümüzde bunları yazan az sayıda programcı var. İşletim sistemi veya donanım sürücüsü yazmıyorsanız bu dile ihtiyacınız yok demektir.

Şimdi Java ve Python’u karşılaştırabiliriz. Bunlar neredeyse birbirinin tam tersidir. Java yazılım endüstrisi tarafından geliştirilmiş bir dildir. İki temel tasarım ilkesi vardır: (1) Bir kere yazılan kodun farklı müşterilerin sistemlerinde çalışabilmesi (platform bağımsızlık), ve (2) “Yazılımı yazılımcıdan korumak” olarak tarif edebileceğim “kati tipleme” (programlama dili jargonunda ‘strict typing’). Birinci ilke Java’nın ‘metal’den olabildiğince uzak durması anlamına geliyor. Gerçekten de bir C/C++ programı ne kadar ‘metal’e yakın bir yerde çalışıyorsa bir Java programı da o kadar metal’in üstünde ve uzaktır. Böylece sistemden sisteme olan donanım farklılıklarından etkilenmez. Java programı ‘Java Virtual Machine’ denilen bir tür farazi bilgisayar üzerinde çalışırlar. Java sisteminin üreticileri farklı bilgisayar sistemleri için bu farazi bilgisayarın uyarlamalarını yapıyorla. Böylece java yazılımı üretenler bu farklılıklardan etkilenmiyor, ürünleri platform bağımsız oluyor. Bu yüzden de en yaygın dillerden biri. İkinci tasarım ilkesi ise programcılar için bir cehennem. Java dili yazılımcının istediği algoritmeyı ifade etmesini ön plana çıkartarat tasarlanmamıştır. Onun yerine yazılım imalatının kalabalık şirketlerde yapıldığı, ürünü tasarlayanlar, kodu yazanlar, grafik arayüzü üretenler gibi farklı yazılım departmanlarının bir endüstriyel plana göre çalışacağı, ve aralarındaki en küçük uyumsuzluğun tespit edilebileceği, sıkı kontroller gözetilerek tasarlanmıştır. Bir programcı için java programlamak bir avuç çivi yutuyormuş hissi verir. Gençlere ilk dil olarak Java öğretmeye kalkışmak onların programcılıktan soğumasını garantiler; bunun ne kadar yaygın olduğunu düşünmek tüylerimi ürpertiyor.

Bununla karşılaştırıldığında Python kodu yazmak ise Mango meyvası yemek gibidir diyebilirim. Python’un temel tasarım ilkesi programcının zihnindeki algoritmaları ifade etmesini kolaylaştırmaktır. Bu yüzden programcının zihnindeki algoritma hatalı ise hata -Java’da olduğu gibi- hiçbir engelle karşılaşmadan koda yansır. Dolayısıyla müşteriye doğrudan satışı yapılacak bir yazılım için en uygun seçenek olmayabilir. Ama örneğin Google’da en yaygın kullanılan dildir. Çünkü Google kodlarını değil bu kodların çalışmasıyla ortaya çıkan servisleri müşteriye satıyor. Ve evet hataları da oluyor. Ancak hızlı inovasyon yapmak istiyorsanız, problemlerinize düşündüğünüz çözümleri hızla koda dökmek istiyorssanız Python idealdir. Python da C/C++’ın aksine ve Java’ya benzer olarak (onun kadar olmasa da) ‘metal’e uzaktır. Python kodu farklı sistemlerde hemen hiç değişiklik gerektirmeden çalışır.

Python’un bir başka temel özelliği de muazzam miktarda farklı amaçlar için yazılmış kitaplık olması. Ticari satışa pek elverişli olmaması, ama programcılar tarafından pek çok farklı iş için kullanılıyor olması biraraya gelince bu programcılar kodlarını da açık kaynak olarak paylaşıyorlar (Python paket endeksi’nde an itibarıyle 166,075 farklı proje bulunuyor). Ayrıca Internet forumlarında da çok büyük miktarda örnek ve yardım bulmak mümkün, java’da olmayan ölçüde. Hepsi iyi kalitede olmasa de muazzam bir bolluk bu.

Veri analitiği için bazılarınca Python’un cazip bulunmasının bir nedeni bu paket bolluğu. Ancak şunu söylemek gerek ki Python çok amaçlı ve kod yazımı kolay bir dil olarak tasarlanmış. Bu tasarım ilkesi onun kendi kulvarlarında Java veya C++ ile yarışamayacağı anlamına geliyor. C/C++’ın hızına yaklaşması veya metal’e erişmesi mümkün değil. Java kadar hata tespitinde yetenekli ve platform bağımsız da değil. Ancak yeni bir algoritmik problemin çözümünü hızlıca üretmek konusunda kimse eline su dökemez.Dolayısıyla programın çalışma hızı değil ama programcının çalışma hızı konusunda iddialı bir dildir.

Yine de Python veri analitiği konusunda ihtisaslaşmış bir dil değil, aksine ihtisaslaşmaya karşı bir dil. R ise bir istatistiksel programlama platformu. Dolayısıyla veri analitiği ve istatistik konuları sözkonusu olduğunda R ile Python’u karşılaştırmak İsviçre çakısı ile motorlu testereyi karşılaştırmak gibi olurdu. Ağaç kesmek için çakı kullanmadığınız gibi kampa giderken de ağaç testeresi götürmenin alemi yoktur. Eğer veri analitiği ile uğraşacaksanız tercihiniz kesinlikle R olmalı!

R kullanarak veri analitiği yapacak profesyonellerin fazla algoritma becerisine ihtiyacı yoktur. Onun yerine hangi analiz yönteminin (örn. karar ağaçları, regresyon, sepet analizi, kümeleme, vb.) hangi iş problemini çözeceği konusuna odaklanırlar. İş analitiğinin aşamalarını yerine getirmek için birkaç satırdan oluşan R komutları yazıp çalıştırmaları yeterli olacaktır.

Öte yandan standart olmayan bir analiz algoritması geliştiriyorsanız bunu yapan bir R (veya başka bir dilde) paketi bulamazsınız. bu durumda yapılacak doğru şey Python veya R ile bu algoritmayı kodlamak olmalıdır. Böyle bir durumda hangisinin doğru olduğunu sözlemek zor. Algoritmanın alt parçaları için ihtiyaç duyduğunuz kitaplıkları hangi platformda bulabiliyorsanız onu kullanın diyebilirim.

Bitirirken şunu da söyleyelim: bir programlama dilinde edindiğiniz beceriler diğer programlama dillerinde de ‘hikaye yazma’nızı kolaylaştıracaktır. İhtiyaçlarınıza uygun dili öğrenip kullanmadıkça hikayeyi doğru anlatamazsınız. Çakıyla ağaç kesmeye çalışır duruma düşmekten kaçının.