Bir Fincan Kahve ve Programlama

Bu yazı dizisinin konusu programlama dillerinin seviyeleri ve platformları hakkında olacak. Bu konuya daha çok C/C++ dili açısından bakıcam ve iyi bir C/C++ programcısının programlamaya başlamadan önce bilmesi gereken bazı küçük ama önemli şeylerden bahsedicem. Aslında bakarsanız, konu nasıl dalanıp budaklanıcak açıkcası ben de çok merak ediyorum. Hazırsanız, kahvenizden bir yudum daha alıp, arkanıza yaslanın ve bir yazılımın bir donanıma hayat verme serüvenine göz atmaya başlayalım.

Peki. Öncelikle Şu soruyla başlayalım; Bir donanımın nasıl olup da bir yazılım tarafından harekete geçirildiğini hiç derinlemesine düşündünüz mü? Yani demek istediğim şey; yazdığım kodlar nasıl fiziksel şeylere dönüşüyor? Sanırım “işlemci” diye bir ses yükseldi. Peki bir işlemci, yazdığım kodları nasıl fiziksel bir eyleme dönüştüyor? Aslında düşünüldüğünde yazılan her satır programın ve her işlemin danımsal olarak bir karşılığı vardır. Yani basit bir örnek vermek gerekirse, ekrana “Hello Wold” yazısının basılması işlemini yapan basit bir programın, dijital tasarım karşılığı vardır. Bu, şu demek; ekrana sadece “hello world” yazısını yazmak için bir entegre tasarlanabilir ve herhangi bir yazılıma ihtiyaç duyulmadan bu entegre ile ekrana bu yazı yazdırılabilir. Ya da aklınıza gelen herhangi bir programın işlemini yapan, bir dijital tasarım yapılıp, bir entegre haline getirilerek bu işlem, herhangi bir yazılıma ihtiyaç duyulmadan yaptırılabilir. Bilgiyasarınızdaki ya da telefonunuzdaki her bir uygulama için bir entegre tasarlandığını düşünün. Elektronik cihazlarımız ne kadar devasa ve büyük olurdu. Şükürler olsun ki bu entegreler, işlemci ve gömülü diğer bileşenler sayesinde yazdığımız yazılım vasıtası ile sanal ve dinamik olarak oluşturuluyor. Yani konuyu biraz daha açarsak, yazdığımız her satır kod, ikilik tabandaki “0” ve “1” lere dönüştürülüyor ve bu sayılar, işlemci içerisindeki milyonlarca transistörün(elektronik anahtar) referans gösterilen bölümlerini açıp kapatarak sanal bir tasarım oluşturuluyor. Bu yüzden yazılım denilen sektör, donanımla beraber gelişse bile bir çılgınlığa dönüşmüş ve uluslar arası çaptaki marketin en büyük pastasını yiyor.

Sanırım hızlı bir geçiş oldu. Kafası karışanlar internetten karıştığı noktaları araştırıp gelsinler. Burada bekliyoruz. Peki. Şimdi devam edelim. Yazdığımız kodların makina tarafından anlaşılması için ikilik tabandaki sayılara çevrilmesi gerektiğini söyledik. İşte bu olaya kaba anlamda programın derlenmesi olayı diyoruz. Dijital elektroniğin yeni icad edildiği ve geliştiği yıllarda programcılar, aslında sayılarla program yazıyorlarmış. Çünkü makina dili dediğimiz şey aslında matematiktir. Bu programcılar, çok iyi matematik bilmeyenler için yazdıkları programları özelleştirerek ve bazı komutlara dökerek programlama dillerini geliştirmişler. Bu diller de çok fazla program modüllerinin gelişmesiyle başka programlama dillerini oluşturmuş. Aslında lego gibi düşünebilirsiniz. Program yazmak lego yapmaktan çok farklı sayılmaz. Ve bu sayede programlama dillerinin seviyeleri oluşmuş. Yüksek seviye, orta seviye ve düşük seviye programlama dillerinden bahsedebiliriz. Yüksek seviyeli dillere yüksek denilmesinin sebebi, anlayacağınız üzere bu dillerin makina diline dönüşmesi için daha fazla işlemden geçmesi gerektiğindendir. Mesela, C# dilinde yazdığınız bir programın, çalışması için makina dilini çeviren bir derleme yapılması gerekmez. Çünkü yüksek seviyeli bir dil olduğundan derlendiğinde, onu çalıştıracak bir alt programın anlayacağı dile çevrilmesi yeterlidir. Bu sayede diller birbirini tercüme ede ede makina dilindeki saf haline ulaşırlar. Tabiki her düşük seviye programcısı gibi burada C# ve Java dillerine bok atmadan geçemem. Dillerin seviyeleri yükseldikçe mantıksal olarak yazım açısından daha sade ve kolay hale gelirler ancak operasyonel anlamda düşük seviye dillere oranla daha yavaş ve daha az kapsamlıdırlar. Bu yüzden programcılığa her zaman düşük seviyeli dillerden başlamak avantajlı olacaktır. Çünkü yüksek seviye programcıları düşük seviyelere inmekte zorlansalar da düşük seviye programcıları için bu aynı değildir. Yüksek seviyeli dillere çok daha kolay adapte olabilirler.

Eğer bir hacker olmak istiyorsanız, düşük seviye dilleri öğrenmenizi öneririm. Çünkü sistem güvenliğini sağlayan ve kötü amaçlar içeren yazılımlar düşük seviyeli dillerle yazılır. Bunun sebebi tabiki hız, derlenme durumu ve programın çalışabilmesi için bağımlılığının az olmasından kaynaklanıyor. Eğer yazdığınız programın daha az denetlenmesini istiyorsanız tabiki bu programın düşük seviye olması gerekir. Aynı bir helikopterin gizlenmek amacı ile alçaktan uçması gibi. Aslında zamanında kötü amaçlı programlar yazmış biri olarak yazdığım bu programların hiç bi işe yaramıyor olması üzücü. Çünkü artık yazılım güvenliğinin boyutu o kadar ilerlemiş durumda ki yazılım güvenliğini ve triklerini öğrenebilmek için bir ömür gerekiyor. Her neyse, konuyu çok dağıtmayayım. Şimdilik konuya giriş için küçük bir yazı oldu. Bir sonraki yazımda GNU C/C++ platform bağımlılığı ve C/C++ derleme sürecinden bahsetmeye çalışacağım. Şimdilik görüşmek üzere.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Copyright © Tüm Hakları Saklıdır.