Programlama Dilini Kim Konuşur?

Arda Arman
Kodcular
Published in
5 min readJul 9, 2018

Bu hikaye milattan sonra 780 yılında başlıyor. Günümüzde Özbekistan’da yer alan Harezm bölgesinde, Hive isimli bir şehirde, Musa isimli bir adamın, Muhammed adında bir çocuğu olmuş. Muhammed bilime ilgi duyuyormuş ve Bağdat’taki bilim dünyasından haberdarmış. Hayatı boyunca pek çok bilim dalında çalışmalar yayınlamış. Peki bu adam bizi neden bu kadar ilgilendiriyor? Yazdığı bir eserin adını okuyun: Tamamlama ve Dengeleme ile Hesaplama Üzerine Özlü Kitap (Arapçası: al-Kitāb al-mukhtaṣar fī ḥisāb al-jabr wal-muqābala). Bu “al-jabr” sözü ilgimi çekti. Türkçede “cebir” diyoruz, işte bu kelimeden geliyor. Arapçada ise “tamamlama, düzeltme” anlamına geliyormuş. Matematik dersinde denklem çözerken eşitliğin iki tarafına da aynı işlemi uygulamak gerektiğini, yazar bu kelimeyle anlatmış. (İngilizcede de cebire algebra denir.) Batı dünyası, Muhammed bin Musa’yı doğduğu bölgenin adıyla tanıdı. Harezmi, ya da al-Khwarizmi. Bu size tanıdık geldi mi? İtalik yazdığım ismi birkaç defa hızlı hızlı söyleyin. Harezmi’ye birazdan geri döneceğiz.

Bir mola verelim. Biz mola verince kahve yaparız. Herkesin kahve yapışı birbirinden farklıdır… Kahvenizi yaparken, bugün bir şey farklı olsun: adımlara dikkat edin. Mutfağa girdiğiniz andan, elinizde bardakla kapıdan çıkıncaya kadar ne yaptığınızı unutmayın, gerekiyorsa yazın. Adımlar her yerdedir. Ben de kahvemi yaptım, belki sizinkinden farklı olmuştur, ama adımlarım şöyleydi:

  1. Mutfağa girdim, cezveyi ve kahve kavanozunu aldım
  2. Bir bardak su ölçtüm, kahveyle birlikte cezveye koydum
  3. Karıştırdım
  4. Kısık ateşte ısıtıp, köpüğün ortasındaki delik bozuk para kadar küçülene dek bekledim
  5. Bardağa boşalttım, köpüğün yetip yetmediğine baktım
  6. Yetmedi, ben de biraz daha kaynatıp kalanını da boşalttım

Siz kaç adım saydınız? Bende altı tane çıktı, ama kolaylıkla bir iki adımda ya da yirmi adımda aynı konuyu anlatabilirdim. Burada ne gördüğünüzü bir düşünün. Bir kurallar bütünü oluşmuş oldu. Bu kurallar dizisi, benim nasıl kahve yaptığımı kesin ve açık bir şekilde anlatıyor. Kural dizileri her yerdedir: yemek kitapları, ders kitapları, matematik formülleri, ev işleri…Biz sevsek de sevmesek de, hayatımızı kurallar ve sıralı işlemler eşliğinde yaşarız. Jean-Luc Chabert’in düzenlediği bir kitapta bu şöyle açıklanır “…[bunlar] basitçe bir dizi komuttur. Bu komutlar mekanik bir şekilde uygulanır ve istenen bir sonuç elde edilir.” İşte Al-Khwarizmi’nin adından türeyen kelimeyi bulduk…algoritma! (Alıntı yaptığım kitabı Amazon’dan alabilirsiniz). Algoritmalar, arka arkaya uygulanmak üzere tasarlanmış kural kümeleridir. Programlama dillerini, algoritmaları açıkça yansıtabilme özelliği güçlü kılar. İyi güzel, yansıtıyorlar ama, bu kimin işine yarıyor? Programlama dilini kim konuşuyor?

Bu soruyu daha iyi cevaplayabilmek için hikayemize devam edelim. Harezmi’nin çalışmalarından 1000 yıl kadar sonra, Alan Turing bilgisayarın tohumlarını attı. Aslında matematiksel bir formülün ispadı için hazırladığı makalesinde, tezini açıklamak için yarattığı Turing makinesi, günümüz bilgisayarının da kavramsal atasıdır.

Bu makine elle tutulabilen ya da gözle görülebilen bir şey değil değil, tamamen kavramsaldı. Bir paragrafta, benim şu anda size seslendiğim gibi, yalnızca kelimeler ile oluşturulmuştu. Elinize bir kalem alın, kağıda bir çizgi çizin ve bu çizgiyi ufak parçalara bölün. Şimdi kalemle bu çizgi üzerinde sağa sola giderek, hanelere çeşitli semboller (1 ve 0, ya da harfler) yerleştirin. Daha sonra bu sağa sola gitme işlemini sürekli tekrar ederek, gördüğünüz, yani okuduğunuz hücrelerdeki değere göre bir sonraki adımıza karar verebilirsiniz. Mesela diyebilirsniz ki, “Eğer bir hücrede 0 görürsem, önce onu silip 1 yapacağım ve sağdaki hücreye geçeceğim.” Turing makinesi işte bu kuralların matematik formülleriyle ifade edilmiş halidir. Bizim için çok önemli, çünkü tarihte daha önce kimse bir kurallar dizisinin bu kadar saf işlemlere dönüşebileceğini düşünememişti. İşte bu arka arkaya uygulanması gereken kurallar Turing’in de algoritma kullanmak istediğini bize gösterir. Bunu ilk programlama dili olarak da tanımlayabiliriz.

Turing’in çalışmaları yazılımın temellerini de atmış oldu. İlk programlama dilleri, bir Turing makinesinden çok da farklı gözükmüyordu. 1954'te günümüzde hala kullanılan FORTRAN ortaya çıktı. Onun ardından C, BASIC, C++ gibi diller geldi. Her dil, başka amaçlarda kullanılmak üzere tasarlandı. Okuduğunuz bu internet sayfası da HTML, CSS ve JavaScript dillerinin birleşimiyle oluşturuluyor.

Şimdi kahvemize geri dönelim. Kahve yapışımı anlattığım ve Türkçe kelimelerle ifade edilmiş cümleleri, anlaşılması çok daha açık bir hale getirmek mümkün mü? Herhangi bir programlama dili kullanmak istemiyorum, yalnızca kullandığım algoritmanın (artık algoritma diyebilirim, değil mi?) açık ve anlaşılır bir şekilde gözler önüne serilmesini istiyorum. Bunun için pseudocode yöntemini kullanacağım. Pseudo, yani sahte kod. Sahtekod yazmanın belirli bir kuralı yoktur. Önemli olan adımları açık bir şekilde gösterebilmektir. Aşağıda bunun bir örneğini görüyorsunuz.

mutfağa gir
cezve, kavanoz al
bir bardak su ve kahveyi cezveye koy
üç defa
karıştır
ateşi kısık aç, cezveyi koy
köpük oluşup kabarana kadar
bekle
bardağa boşalt
köpük yetmediyse
ocağa koy ve kaynat
bardağa boşalt

Bunu her yazılımcı farklı yazar, siz de benzer bir şekilde yazmayı deneyebilirsiniz. Dikkatinizi bir ayrıntıya çekmek istiyorum. Bazı satırlarda birkaç boşluk bırakarak başladım. Bu bir yazım hatası değil. İfade etmek istediğim şey, boşlukla başlayan satırların bir mantık işlemi içinde gerçekleştiğidir. Mesela karıştırma işlemi, üç defa tekrarlanır. Köpük kabarana kadar beklemek gerekir. Eğer köpük yeterli değilse tekrar ocağa koymak gerekir. Vurguladığım sözcükler, aslında programlamanın temelinde yer alan işlemlerdir.

Yazılımcılar bu algoritmaları önce sahtekod yöntemiyle kafalarında ya da not defterlerinde şekillendirirler. Sonra da kullandıkları programlama dilleriyle bilgisayara aktarırlar. Bilgisayarlar ne yazık ki programlama dillerini doğrudan çalıştıramazlar. Onların içinde yalnızca çeşitli gerilimlerde ve sürelerde elektrik akımları vardır. Projelerin kodlanığı programlar, bilgisayar mühendislerinin tasarladığı çeşitli adımlarla, bilgisayarların konuştuğu makine diline çevrilir. Programlama dilleri yalnızca köprüler kurar. Bazı diller makineye daha yakındır köprünün bir ucundan dertlerini anlatırlar, bazıları da bizim konuştuğumuz dillere, mesela İngilizceye daha yakındır, köprünün diğer ucunda çalışırlar.

Birkaç örnek vereceğim. Bu örneklerin hepsi aynı işlemi gerçekleştiriyor, yani aynı algoritmayı çalıştırıyor. Yalnızca ekranda İngilizcede “Merhaba dünya!” anlamına gelen “Hello, world!” sözünün belirmesini sağlıyorlar. Önce bize daha yakın, yani “üst seviye” bir dil olan Python’a bakalım:

print("Hello, world!")

Şimdi biraz daha aşağılara inelim ve C diline bakalım:

#include<stdio.h>int main() {
printf(“Hello, world!”);
return 0;
}

Bir de makineye oldukça yaklaşan, yazılım meraklılarının okurken çok eğleneceği, isminden de anlaşıldığı üzere yalnızca kafa karışıklığı yaratmak üzere tasarlanmış Brainfuck diline bakalım:

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

Gördüğünüz gibi üç dilde de aynı işi gören programlar farklı şekillerde yazılıyor. Aynı algoritmayı, insan ve makine arasındaki köprünün farklı noktalarından ifade ediyorlar.

Programlama dilini önemli kılan özelliğin algoritmalar olmasının bir sebebi daha var. Herhangi bir dilde (İngilizce, Almanca gibi) bu dili anadile yakın bir seviyede konuşabilmek için 10000 tane kelime bilmek gerekir. Buna karşı, en karmaşık yazılım dillerinden biri kabul edilen C++’da yalnızca 84 kelime vardır. Bu kadar az sözcük olmasına rağmen, bunların nasıl birleştirildiği o kadar önemlidir ki, bazen programlama öğrenmek insanların konuştuğu bir dil öğrenmekten daha zor olabilir. Bir dakika…insanların konuştuğu diller mi dedim? Bu yazının başlığını hatırlayalım. Programlama dilini bilgisayarların konuşmadığını, onların yalnızca basit elektrik akımlarından oluşan sinyallerle haberleştiklerini söylemiştim. Demek ki programlama dillerini makineler konuşmaz. Geriye ne kaldı? Biz kaldık. Programlama dilleri, insanlar makinelere ne söylemek istediklerini birbirine anlatabilsinler diye ortaya çıkmıştır. Bu yazıyı okuduğunuz bilgisayar ya da telefon, en fazla bir parça kütük kadar HTML, CSS ve JavaScript biliyor. Sorumuza sanırım bir yanıt bulduk. Tıpkı düşen bir elmanın yerçekimi yasasından haberdar olmadığı gibi, bilgisayarların içindeki devrelerdeki elektrik akımı da Python ya da JavaScript bilmez. Bu diller aslında bizim için, insanlar için “üretilmiştir”.

Harezmi bundan 1200 yıl önce matematikteki pek çok kuralın temelini atı. O bu kurallarla insanlara seslendi. Matematiğin dilini kullanarak insanlarla konuştu. Aslında değişim çok da büyük olmamış. Programlama dilini, yani algoritmanın dilini de, hala biz konuşuyoruz.

--

--