Programlama Nedir?

PROGRAMLAMA NEDİR?

Bilgisayarlar, kendilerine verilen komutlara uyarlar. Komutlar, hem komutu veren kişinin, hemde komutu uygulayacak olan bilgisayarin anlayabilmesi için özel bir şekilde verilmelidir. Komut setleri ve komutlarin uygulanmalari sirasinda esas alinacak kurallar birlikte bir programlama dilinin temelini oluştururlar.
İlk bilgisayarlar ikilik tabanda programlanıyorlardı. Diğer bir deyişle, her komut birler ve sıfırlar dizisi şeklinde veriliyordu ve kesin bir anlamı vardı. Örneğin :
00010000100
dizisi bilgisayara, yeni bir hesaplamaya hazırlanması için hesaplamaların yapıldığı çalışma alanını temizlemesi anlamına gelebilir.

Bir bilgisayar programı, bilgisayara verilen ve belli bir görevin gerçekleştirilmesi için verildiği sırayla uygulanan komutlar dizisidir. İlk bilgisayarlar için bir program, ikilik tabanda verilmiş komut dizilerinden oluşmaktaydı.
Açıkça görüldüğü gibi, bilgisayara ikilik tabanda komutları girmek son derece özel bir işti. Verilebilen komutlar, iki sayıyı toplamak veya sayıları bir yerden bir yere taşımak gibi basit görevleri yapabiliyorlardı ve akılda kalıcı değillerdi. Bilgisayar programı yazmak, bir bilgisayar uzmanı için bile uzun bir işti ki, bunun sebebi de, komutların yapacakları görevin gözle görülür şekilde belli olmamasından dolayı programdaki bir hatayı bulmanın saatleri almasıydı.

Bu sorunlara çözüm olarak, assembly dili olarak bilinen, geliştirilmiş program yazim sistemi ortaya çikarildi. Assembly dili, programciya, daha önce ikilik kodlarla yaptigi işlemleri, daha akilda kalici makine koduyla yapma olanagini sunuyordu. Bu durumda, A ve B olan iki sayiyi toplamak için gereken;
TOPLA A, B
komutu oluyordu. Bununla birlikte, assembly dili ile programlamada bir sorun vardı. Assembly dilinde hazırlanmış bir programı insanların yazması, anlaması ve düzeltmesi daha kolaysada, ne yazık ki bilgisayar bunu anlamıyordu. O halde, bilgisayarın anlayamadığı bir dilde program yazmanın ne anlamı vardı ?
Assembly dili ile birlikte, assembler ortaya atılmıştı. assembler, makine dilinde yazılmış ve assembly komutlarının her birini makine dilindeki eşleniklerine çeviren bir programdır. Her bir assembly dili komutu, bir makine dili komutunun hemen hemen eşdeğeridir. Assembler programı, genelde assembly dili programının okunması ve buna karşılık gelen makine kodu komutlarının üretilmesinden oluşur.
1950'lerde assembly dilinin ortaya sürülmesindeki asıl amaç, bilgisayar programlamayı insanlar için daha kolay hale getirmekti. Fakat assembly dili, makine dilinde zaten varolan olanaklardan biraz fazlasını sağladığı için kısıtlıydı. Assembly dili programcısı, makine dili komutları ve makroları kullanabiliyordu. Bir makro ile birden çok makine dili komutu ve çok kullanılan değerleri tek bir komuta verebilir. Programcı için daha geniş olanaklar sağlayan bir dille çalışmak daha kolaydır. Bu komutların her birinin makine diline çevrilmesinin gerekli olması ilk "üst düzey" bilgisayar dillerinin doğmasına yol açmıştır.
Üst-düzey dil terimi, insanların öğrenip kullanmalarının kolay olması için tasarlanmış bir bilgisayar dili anlamındadır. Bazen bu dillere "insana yönelik diller" de denir. Karşıtı olarak "alt-düzey" bir programlama dili de, makine diline yakın, dolayısıyla kullanımı insanlar için genelde daha zor olan dilleri belirtir. Tipik olarak assembly ve makine dillerini "alt-düzey", veya makineye yönelik diller, ele alacağımız diğer dilleri de "üst-düzey" diller olarak inceleyeceğiz.
Bazı dilleri diğerlerinden "daha üst-düzey" olarak belirtmemiz doğaldır. Bunlar programlamayı insanlar için daha kolay hale getirmek amacıyla özel hazırlanmış program sistemleridir. Örneğin görsel diller bu "daha üst-düzey" diller gubuna girer.
Makine kodu dışında tüm diller, bilgisayarın işlemcisi tarafından uygulanmadan önce çevrilmek zorundadır. Assembly dili, yukarıda anlatıldığı gibi assembler ile çevrilir. Üst-düzey programlama dilleri bir "derleyici" veya "yorumlayıcı" ile çevrilir.
Buraya kadar programlama dillerini, bilgisayarın işlemcisine komut gönermenin bir yolu olarak tanımladık, ancak programlama dillerinin tek işlevi bu değildir. Bir ikinci ve çok önemli bir işlevleri de, dilin belleği işleyebilme ve programlar için kullanabilme yeteneğidir.
Yine, makine dili kullanan programcının yapması gerekenleri düşünürsek olanları daha iyi anlayabiliriz. Bilgisayar belleği, her birinin belli bir adresi olan kutular şeklinde düşünülebilir. Makine kodu kullanan programcının, her kutunun yapacağı işi kesin olarak belirlemesi ve belirtmesi gereklidir. Programcı, hangi kutulara komutların, hangi kutulara verilerin depolanacağına karar vermelidir. Hafızadaki her depolama birimi, önceden belirlenmiş uzunlukta bir ikil sayı tutabilir. Bu ikilik sayıların her biri program komutu veya veri olabilir. Makine dilinde program yazan programcı, verinin komutla aynı yerde olmasına dikkat etmek zorundadır. Bunun sebebi, işlemcinin herhangi bir bellek birimindeki ikilik sayıyı tipine bakmaksızın işlemesidir. Hafıza birimlerinin bu çift amaçlı kullanımının avantajı, aynı bellek alanının daha çok fazla veri isteyen küçük bir program veya çok az veri isteyen büyük bir program için kullanılabilmesidir. Bu düşünceye "Von Neuman'ın Depolanmış Program Kavramı" adı verilir.
Assembly dili programcıya, belli bir programın ve bu programa ait verilerin belleğin neresinden itibaren başladığını (yani kullanılan ilk bellek biriminin adresini) belirtme olanağı tanır. Bundan sora verilen her komut ve verinin belleğe yerleştirilmesi ile assembler ilgilenir. Programcı herhangi bir veri veya komutu, assembler tarafından gerçek adrese çeviren bir sembol ile verebilir. Bu, programcıyı, bellek üzerinde sürekli sıkı bir kontrol yapma zorluğundan kurtarır.
Üst düzey diller genelde programcıyı, bellekdeki veri ve komutların yerlerini takip etme zahmetinden kurtarır. Değişken isimlerinin kullanılması belirli verilere çabuk ulaşabilmeyi sağlar. Etiketler, isimli işlem dizileri, alt dögüler ve satır numaraları programın istenen kısımlarına erişimi kolaylaştırır. Erişim istemi derleyici veya yorumlayıcı tarafından veri veya komutun tutulduğu bellek adreslerine çevrilir. Üst düzey programlama dilleri ile daha karmaşık veri tipleri de kullanılabilir. Örneğin, benzer tipte verilerin liste veya dizilerini, veya yüksek hassasiyet gerektiren sayıları depolayabilir.
Programlama dilinin üçüncü fonksiyonu, programcıla bilgisayar sisteminin bir parçası olan donanım birimlerine erişim olanağı sağlamasıdır. Bir makine dili programcısı, belirli donanım birimlerini çalıştırabilmek için bu birimleri makine düzeyinde adreslemek zorundadır. Bu durumda, örneğin, ekrana bir mesaj yazdırmak için programcı, hangi bellek biriminin hangi ekran konumuna karşılık geldiğini bilmek zorunda kalacak ve bu konumlara gereken kodları girecekti. Benzer şekilde, yazıcıya çıktı göndermek için programcı, yazıcıyı donanım düzeyinde nasıl adresleyeceğini bilmek zornda kalacaktı. Bu işlem genelde "işletim sistemi" tarafından yazıcının bağlı olduğu kapıya veri göndermek ten ibarettir.
Üst düzey dil programcısı için, pek çok programlama dili yazıcı ve ekrana bilgi gönderme ve hatta bir kapıdan veri almak için özel komutlar sağladıklarından, bu konular pek tanıdık değildir. Bununla birlikte, dillerle birlikte gelen komutların bazıları yeterince esnek olmamakla ve alt düzey komutlarını doğrudan uygulamanın yolunu bulma işi yine programcıya kalmaktadır. Bazı programlar, programcıya bu alt düzey olanaklarını kullanma fırsatı sağlamaktadır. Bazı üst düzey diller ise kullanıcılarını bu zor alanlardan korumaktadırlar.

 

0 yorum: