NEDİR BU — PROGRAMCILIK DENEN OLAY?
“Bilgisayar dünyanın en iyi oyuncağıdır. İnsan bununla harika şeyler keşfedebilir, hatta bunları gerçekleştirebilir...”
Bu söz, Amerika Birleşik Devletleri Kaliforniya Üniversitesi informatik profesörlerinden Butler Lawson'a ait. Peki, siz programcılık yapabiliyor musunuz? Haydi, sizi bu büyüleyici dünyaya götürelim. Commodore dergisinin daha önceki sayılarındaki birtakım yazılardan AMIGA'nın yazılım ve donanım bakımından ne gibi olanaklara sahip olduğu hakkında genel bir fikir edinmiş olmanız gerekiyor. Bu yazıda ise bu bilgisayarın programlanması konusu işleniyor. Öncelikle programlamanın bazı temellerini öğrenecek ve bu öğrendiklerinizi tamamen denemenizi sağlayacak bazı küçük örnekler göreceksiniz. Bir bilgisayar programı nedir? Eğer Commodore dergisinde AMIGA hakkında yayınlanan yazıları dikkatli bir biçimde takip ediyorsanız, 33. sayıda AMIGA'nın genel yapısını tanıtan “Bilgisayarı Tanıyor musunuz?(2)” başlıklı yazıda bu sorunun bir kez daha sorulmuş ve yanıtının da hemen ardından verilmiş olduğunu hatırlayacaksınız: Bir bil-
A. Ziya BAYMAN bilgisayar programı, bilgisayarın merkezi işlem biriminin anlayabileceği komut ve yönergelerden oluşan bir dizidir. Bir programın mikroişlemci tarafından yerine getirilebilmesi için, onun, bilgisayarın çalışma belleğinde bulunması gerekir. Merkezi işlem birimi buradan programın ilk komutunu okur, gereğini yerine getirir, bir sonraki komutu alır, onu da yerine getirir ve bu süreç böylece devam eder. BASIC programlama dilinden basit bir örnek verelim:
FIYAT- 200*1.14
PRINT
PRINT “SON”
Bir bilgisayarın mikroişlemcisi BASIC programlarını çalıştıramaz. AMIGA'nın BASIC programlarını buna rağmen nasıl anlayabildiğini ileride açıklayacağız. Öncelikle tek tek program satırlarını inceleyelim: İlk program satırı bir değişken içermektedir. Değişkenler, içlerinde belirli değerler saklayan sembolik adlardır. Bu programda FIYAT değişkeni 228 (200*1.14) değerini almış durumdadır. FIYAT adı programın ileriki aşamalarında yine kullanılacak olursa, daima 228 değerini içerecektir. Aslında bilgisayar açısından bir değişken, içine değerler saklanan bir bellek alanları grubudur. Programcının bu bellek hücrelerinin numaralarıyla (adresleriyle) uğraşmak zorunda kalmaması için, çoğu programlama dillerinde bellek hücrelerinin kendine özgü adları vardır. Programın ikinci satırındaki PRINT komutu, FIYAT değişkeninin değerinin ekranda görüntülenmesini sağlar. “PRINT”, yazmak fiilinin emir kipidir. Yani ikinci satırın anlamı “değeri yaz”'dır. İçerilen değer 228 olduğundan, ekranda “yazılı” olarak 228 sayısı görünür. Son satır ise “SON” yazısının görüntülenmesini sağlar. Bilgisayarın değişken isimlerini yazılacak metinlerden ayırt edebilmesi için, metinler programcı tarafından tırnak içinde verilir. Yukarıda verilen program, ilk komutundan başlayarak sona kadar tüm komutları yerine getirir ve sona erer. Bu çalışma tarzı ise birçok kullanımda yetersiz kalır. Programlar, makineler için hazırlanmış iş akış listeleridir. İş ve tamir akış listeleri bilgisayar dışındaki alanlarda da kullanılır. Örneğin: Eğer akım 9 Volt'u aşarsa, ... ya da: ... olana kadar kolu çevirin vb.
Programın başı/sonu
Veri işleme (operation)
Program dallanması (tercih)
Akış yönü
Akış diyagramlarının yapılmasında kullanılan önemli semboller
Bu komut tür, birbirini katı bir şekilde takip eden komutları yerine getiren bilgisayar programlarıyla gerçekleştirilemez. Bu nedenle programlarda dallanma (... eğer, öyleyse ...) ve tekrarlanan faaliyetler (... olana kadar) olanağı vardır. Her iki komut türü (dallanma ve tekrar) için de önemli olan, BASIC'te GOTO komutuyla gerçekleştirilen program atlamalarıdır. Bu konuya ilişkin olarak bir örnek program görelim:
START
PRINT “MERHABA”
GOTO START
PRINT “SON”
Bu programı başlattığınızda ekranda “MERHABA” sözcüklerinden oluşan sonsuz satırlar zinciri görünecektir. Programın başlaması bir öncekinin aynısıdır. Birinci satır herhangi bir etki yaratmaz. Bu satır yalnızca programın içinde önemli bir yeri belirten bir program işaretidir (İngilizce'de Label). İkinci satır ekrana “MERHABA” ifadesini yazar. Ardından GOTO'nun anlamı “git”'tir. Bu komutun görevi, daha önce gördüğümüz alışılmış mekanizmanın, yani bir komutun ardından mutlaka bir sonrakinin yerine getirilmesinin, kesintiye uğratılmasıdır. GOTO START'tan sonra hemen ardından gelen PRINT “SON” değil, ilk “START”ı takip eden komut yerine getiriliyor. Yani pratikte program baştan başlamış oluyor. Programın son komutu olan PRINT “SON” bir türlü yerine getirilemiyor, çünkü program daha önce START'a geri dönüyor. Bu programın normal bir sonu yoktur. Bu tür programlara sonsuz döngü adı verilir. Bu programı AMIGA BASIC'le girmişseniz, RUN menüsündeki STOP komutunu kullanmanız gerekecektir. Geriye doğru atlayış içeren programların sonsuz döngü oluşturma eğilimleri oldukça yüksektir.
Programcı durum tercihi yardımıyla bir sonsuz döngünün normal düzenli bir döngüye dönüşmesini sağlayabilir. Düzgün bir döngünün en basit biçimi, belirli sabit bir sayıda dönüşü gerçekleştiren ve ardından sona eren sayı döngüsüdür. Bunu sağlamak için örnek programımızda küçük bir değişiklik yapmak yeterli:
SAYAC- O
START
PRINT “MERHABA”
SAYAC- SAYAC*41I
IF SAYAC 10 THEN GOTO
START
PRINT “SON”
Bu program, ekranda yalnızca on kez “MERHABA” yazacak ve SON ifadesiyle sona erecektir. Eskisindekine göre farklı davranmasının nedeni, sondan bir evvelki satırda bulunan durum tercihidir (koşul). Bu satırın sonundaki atlama komutu yalnızca eğer (İngilizcesi: IF) SAYAC değişkenindeki değer 10'dan küçükse yerine getirilecektir. Bu değişken programın başında sıfırlanır. Bilgisayar dördüncü satırda değişkenin değerini 1 artırır. Yani program akışı içinde IF komutuna ilk kez erişildiğinde değişkenin değeri 1'dir. Bu değer 10'dan küçüktür ve bu nedenle başlangıca geri atlama gerçekleşir. IF komutuna ikinci kez erişildiğinde, SAYAC'ın değeri 2'dir. Bu da 10'dan küçük olduğundan, yine başa dönülür. Bu oyun, SAYAC'ın 10 değerini almasına kadar devam eder. Bu durumda IF komutuna erişildiğinde, “SAYAC 10” koşulu artık yerine getirilmemekte olduğundan, GOTO komutu göz ardı edilmektedir. Şimdi program bir sonraki (yani son) komutu yerine getirecek ve sona erecektir.
Akış Diyagramları
Size örnek programımızın işlevini dökümü yardımıyla kolayca açıkladık. Daha büyük programları açıklamak ise pek bu kadar kolay olmayabilir. Program akış diyagramı (şeması) adı verilen bir tür grafik çizim, programlara genel bakışı kolaylaştırabilir. Profesyonel programcılar, kapsamlı ya da karmaşık projelerde öncelikle bir akış planı yapar ve bunu istenen bilgisayar diline daha sonra uygularlar. Akış diyagramları dilinden bağımsızdır.
Bu yolla problemin çözümüne yönelik mantık akışı, program tekniğine ilişkin gerçekleştirme sorunlarına dalınmadan bulunabilir.
IF komutu yardımıyla bir program döngüsü oluşturduk. Bu komut başka amaçlar için de kullanılır. Önceleri programcılar döngüleri oluşturabilmek için, IF komutunu daima bir atlama komutuyla birlikte kullanmak zorundaydılar. Modern programlama dillerinin çoğunda döngü oluşturmak için daha şık bir çözüm var artık: WHILE komutu.
SAYAC- 0
WHILE SAYAC 10
PRINT “MERHABA”
SAYAC-
WEND
PRINT “SON”
Bu program bir önceki programla aynı işi yapıyor, ama ikincisi programcının olayı çok daha kolay görebilmesine olanak veriyor. Bu programda da başlangıçtaki sayaç sıfırlanıyor (initialize ediliyor). Ardından WHILE komutu geliyor. Bu komutu şöyle açıklamak mümkün: “SAYAC 10'dan küçük olduğu müddetçe, WEND'e kadarki bütün komutları yerine getir.” Yani pratikte WHILE ve WEND, döngünün başını ve sonunu işaretleyen parantezi oluşturuyorlar. Döngünün içinde bu iki komut arasında her akış sayacı 1 artıyor. SAYAC nihayet 10'a eşit olduğunda, WHILE'ın ardından gelen koşul geçerli olmuyor ve program WEND'in ardından gelen komutla devam ediyor. WHILE-WEND kombinasyonunun varlığının amacı, yalnızca bir döngünün komutlarının belirli bir sayıda yinelenmesini sağlamak değil elbette. Programcı, bu kombinasyonu, henüz döngünün kaç kez işlemesi gerektiğini bilmediği durumlarda kullanır. Döngünün sona ermesi belirli bir olayın gerçekleşmesine bağlıdır. Örnek:
INPUT SAYI
S-— SAYI
WHİLE S
WEND
SAYI-S
PRINT S
PRINT “SON”
-1
Bu program virgülden sonra hanesi olmayan bir sayı verir. INPUT komutu klavyeden bir giriş bekler. Bu komutun verilmesiyle ekranda bir kursor belirir. Şimdi, (RETURN) tuşuna basıldığında sayının adının bulunduğu bellek alanına yerleşecek olan herhangi bir değer klavyeden girilebilir. Sayı, S'ye geçici olarak yerleşir. Program, virgülden önce bir sıfır kalana kadar S'den 1 değerini eksiltir. Bu durumda S'de yalnızca sayının virgülden sonraki kısmı kalır. Bu, sayıdan çıkarılır ve sonuç ekrana yazılır. WHILE döngü akışlarının adedi bu sayıya bağlıdır. Peki, programın yerine getirmesi gereken döngü sayısının önceden bilinebildiği durumlarda ne olacak? Bu durum için de tabii hemen her programda bulunabilen özel bir yapı söz konusu. BASIC dilinde bu görevi FOR... NEXT döngüsü yerine getirir. Ama burada bu döngünün açıklamasına pek girmek istemiyoruz. Virgülden sonraki hanelerin ortadan kaldırılması çoğunlukla gerekli olmaktadır. Varsayalım ki, büyükçe bir programın üç yerinde bir değerin yalnızca virgülden önceki hanelerinin basılması gerekiyor olsun. Bu durumda son örneğin satırlarının bu programın içinde üç kez yinelenmesi gerekecek. Bu da oldukça gereksiz bir yer kaybına neden oluyor. Sorunu daha basit biçimde çözebilmek için BASIC ve diğer birçok programlama dilinde prosedür adı verilen bir yöntemden yararlanılabiliyor. Örnek:
PROC VIRGULDENSONRASIZ
(SAYI) STATIC
S- SAYI
WHILES - 1
WEND
SAYI - SAYI — S
PRINT S
END PROC
Her iki örnekte de aslında aynı program adımları sözkonusu. Ama ilk ve son satırlar bu komutlardan özel bir durum yaratıyorlar: Bir prosedür. Prosedürler genellikle büyük programların sonlarında bulunurlar. Eğer bir programın belirli üç yerinde bir sayının yalnızca virgülden önceki kısımlarının verilmesi gerekiyorsa,
Başla
PRINT “MERHABA”
SAYAC- 1
IFSAYAC 10
PRİNT “SON”
Sayacı sıfıra getir
Sayacı bir artır
Sona erdir
Akış diyagramı ve BASIC'e çevirisi
VIRGULDENSONRASIZ 123,4567 ya da DEGER — 123,4567 VIRGULDENSONRASIZ komutları yeterlidir. Ekranda 123 değeri görünecektir. Eğer BASIC bir komutu tanımıyorsa, bu isimde bir prosedürü arayacaktır. Bu, prosedü Tün ilk satırında PROC sözcü; hemen ardında yer alıyor. Eğer bu tanınmayan komutun ardında bazı veriler de varsa, bunlar prosedür adının ardından gelen parantez içindeki değişkende saklanır. Verilerin bu şekilde bir prosedüre aktyarılması işlemi, “parametrelerin aktarımı” olarak da adlandırılır. Prosedürün yerine getirilmesinden sonra daha önceki bilinmeyen komuttan hemen sonra gelen komut yerine getirilir. Son verilen komutla program akışı içine prosedürlerin alınması da “prosedürlerin çağrılması” olarak adlandırılır.
Ama kural olarak programcı vi gülden önceki haneleri basmak deği daha ileride kullanılmak üzere bir değişkene atamak ister. Bu işlem fonksiyonlarla yapılabilir, ama AMIGA BASIC'te buna olanak yoktur. Bu bağlamda AMIGA BASIC biraz zayıf kalmaktadır. Şimdi vereceğimiz örneği denemeye kalkışmayın, çünkü zaten çalışmayacaktır.
Bu örneğin farklı olduğu noktalar, FUNC tanımlaması ve sondan bir evvelki satırdır. Fonksiyona da bir de-
“ğer aktarılmaktadır. Prosedürden farklı olarak bir fonksiyon RETURN ile bir değeri geri verir. Ama çağıran komut bu değerin ne yapılması gerektiğini belirtmek zorunda olduğundan, bir fonksiyon çağrısı bir prosedür çağrısından farklı bir görünümdedir.
Örnek:
YALNIZVIRGULDENONCE —
VIRGULDENSONRASIZ(123,4567)
ya da
PRINT VIRGULDENSONRASIZ
(123,4567)
Bir fonksiyona aktyarılacak olan değerler (parametreler) kural olarak parantez içinde yazılır. Son komut ayrıca prosedürle aynı sahiptir. Fonksiyonlar ve prosedürler, çok pratik olmaları nedeniyle, tüm programlama dilleri bunlardan bir sürü oluşturmuş durumdadır. Örneğin BASIC dilinde INT fonksiyonu vardır. Bu fonksiyon bir sayının virgülden sonraki hanelerini keser:
PRINT INT (765,4321)
Prensip olarak BASIC'te her oluşturulmuş komut bir prosedürdür. Bu cümle biraz kaba olabilir, ama AMImutu teşhis eder ve tanıdıktan sonra gerekli adımları yerine getirecek olan bir iç prosedürü çağırır. Bu iç prosedürler ve fonksiyonlar ve hatta BA-SIC'in kendisi, bellekte makine dili komutları halinde bulunurlar. Mikroişlemci bunları anlayabilir ve yet ne getirebilir. Bu iş bu kadar basit. BASIC'te her komut için karşılık gelen bir iç prosedür yoktur. Prosedürlerin birçoğu AMIGA'nın ROM'- unda (Read Only Memory- Salt Okunur Bellek) bulunur. Bunlar fonksiyonlarına göre kitaplıklarda (İngilizce: Library) biraraya toplanmış durumdadırlar. Örneğin çizgiler, dikdörtgenler ve çemberler çizmek için grafik komutlar “graphics.library”'de bulunur. Ekran ve pencere yönetimini ise “intuition.library”'nin prosedürleri üstlenmiştir.
Mondrian
BASIC programını terketmeden önce, yeteneklerinden son bir örnek verelim. Aşağıdaki döküm, “az emek harcayarak, çok verim elde etmek” sloganına oldukça uygundur:
WHILE INKEY$- “ ”
xl - RND * 630
x2 — RND * 630
yl — RND * 200
y2 — RND * 200
f #RND*3 4 0.4
LİNE (x1,y1)-(x2,y2),f,bf
FUNC VIRGULDENSONRASIZ GA'da BASIC'i anlayabilmenin WEND (SAYI) anahtarı da bu cümlededir. S — SAYI BASIC'in kendisi de bir — AMIGA BASIC'in en basit ve ay- WHILES <- 1 dır. BASIC'in bir kısmı (büyükçe bir — nı zamanda en çokyönlü grafik ko- S - prosedür), kullanıcıya BASIC dö- — mutlarından biri LINE'dır. LINE ile WEND kümleri alma olanağı verir. Bu kıs- — hem çizgiler hem de dikdörtgenler çi- SAYI — SAYI—S ma editör adı verilir. Kullanıcı prog- zilebilir. Bu iş için LINE'ın 1. köşe, RETURN S ramının başlangıcında BASIC prog- — 2. köşe ve renk parametrelerine ihti- END FÜNC ramı, tek tek her satırı “görür”, ko- — yacı vardır. Örneğin; 001100141 11111001 (MOVE) 00000000 00000000 (707) MOVE 707,4711 ÇEVİRMEN 00000010 11000011 00000000. 00000000 (4711) 00010010 01100111 Assembler ASSEMBLER Makine dili
Assembler komutları işlemci komutları için kolayca anlaşılabilecek ifadelerdir.
00100
input — 190110100
İNE
ATLAMA ne
1001
WHLE
1010...
İNTERPRETER
PRİNT “BAŞLANGIÇ”
- savı
VİRGÜLDEN SONRASIZ SAYI
PRİNT “SON”
LE
PRİNT VİRGÜLDEN.
END PROC
BASIC Programı
ona 151080032 COMPİLER Makine Programı
Çevrilmiş bir programın çalışmasında artık program metni kullanılmaz.
LİNE (x1,y1)-(x2,y2),1 ifadesi (x1,y1)'den (x2,y2)'ye 1 renginde bir çizgi çeker. Bu ifadenin ardından bir de “,bf” eklenecek olursa, diyagonalini bu çizginin oluşturduğu dikdörtgen | rengiyle doldurulur. (BASIC'te kullanıma hazır tüm renkler numaralanmıştır). Program O ile | arasındaki bir raslansal sayıyı üreten RND fonksiyonunu kullanır ve böylece Hollandalı sanatçı Mondrian'ın yapıtlarını andıran resimler üretir. BASIC resimleri raslansal olarak üretilmiş ve kullanıcı herhangi bir tuşa basana kadar değişen dikdörtgenler içerirler. Bu programda da gördüğünüz gibi, program kitaplıklarının prosedürlerinin tam olarak kullanılabilmesi durumunda, çok basit araçlarla şaşırtıcı efektler elde edilebilmektedir. Ama BASIC komutları yardımıyla AMIGA sistem yazılımından kitaplık prosedürlerinin yalnızca bir kısmı kullanılabilir (bunlar bu iş için oldukça kolay). Ama tecrübeli bir programcı olarak her programlama dilinden işletim sisteminin tüm prosedrürlerini kullanabilirsiniz. Bunun için yalnızca programınıza prosedürün nerede ve hangi kitaplıkta bulunacağını ve hangi parametrelere gereksinimi olduğunu bildirmiş olmanız yeterli. Bu bağlantıların daha derinlemesine açıklanması, bu yazının konusunu aşar. Eğer bu konuda daha çok bilgi edinmek istiyorsanız, programlama kitabınızdan Libraries (Kütüphaneler) bölümünü okuyun.
Yüksek olarak adlandırılan tüm programlama dillerinde temel fikir, bir programı önce harflerin biraraya getirilmesiyle oluşan “doğru” kelimelerinin oluşturduğu belirli ölçülerde okunabilir bir dilde formüle etmektir. Bu yolla oluşturulan bir programlama dilinin insan diline ne denli yakınlaştığı ise dilden dile değişmektedir. Ancak uzmanlar tarafından anlaşılabilen çok karmaşık dillerin yanısıra, gündelik yaşamda bir kullanım kılavuzu okur gibi kolayca anlaşılabilen programlar da vardır.
Eğer bugüne kadar herhangi bir programlamadilini öğrenmemiş du- Tumdaysanız, bu eksikliği telafi etmeye kalkıştığınızda, programcıların kasılmaları sizi ürkütmesin. Programlama dillerinin herbiri en basit insan dilinden çok daha basittir ve çok daha kolay öğrenilebilir. Programlama dillerinin kendi aralarındaki tüm farklılıklara rağmen ortak olan bir noktaları vardır: Programcının komutları için eşanlamlı bit dizileri makine dilinde yerine getirilmek durumundadır. Burada eşanlamlının anlamı, bit dizisinin programının düşündüğünü sanki yüksek dilde yazılmış gibi yapmasıdır. Bir pro: ramın makine koduna çevrilmesi yöntemi oldukça basittir. En azından
© kadar basittir ki, bu iş de bir bilgisayar programına bırakılabilmektedir. Kullanılacak iki yöntem vardır: Interpreter (çevirici) ve Compiler (derleyici). Interpreter, yüksek programlama dillerinin makine koduna çevrilmesinde yararlanılan en basit ve en çok tercih edilen metoddur. AMIGA BA-SIC bir çeviricidir. Bunun nasıl çalıştığını daha önce açıklamıştık. Çevirici bir programı çalıştırabilmek için satır satır okur, komutlara karşılık gelen makine dili parçalarını arar ve yerine getirmesi için bunları bilgisayara aktarır. Bu sürece programin çevrilmesi adı verilir. Buna karşılık derleyici, yüksek programlama dilindeki program metnini alır ve bundan makine dilinde aynı işi yapacak eşanlamlı bir program üretir. Tüm bu sürece, derlemek (compile etmek) adı verilir. Bu sırada makine kodunu olabildiğince derli toplu ve çabuk oluşturabilmek için mükemmelleşmiş teknikler kullanılır. İnsan dilleriyle bir karşılaştırma yapacak olursak, bir çeviriciyi (Interpreter) yabancı dildeki bir kitabı okurken simultane tercüme yapan bir çevirmene benzetebiliriz. Buna karşın bir derleyici, bir kitabın bir dahaki okunmasında çevirmeni gerektirmeyecek şekilde yazılı çevirisini yapan bir çevirmene benzer. Derleyici prensibinin avantajları çok açıktır: Elde edilen makine kodu kendi başına bir olgudur ve çalışmak için çeviriciyle ek bir programa
63 gerek duymaz. Ayrıca derlenmiş programlar çoğu zaman daha da hızlıdırlar, çünkü çeviricinin program satır satır taraması, analiz etmesi ve çevirmesi gerekmemektedir. Diğer yandan derleyicilerin tüm dillerde genel olarak kullanılmalarını engelleyen ağırlaştırıcı dezavantajları da vardır. Derleme işlemi küçük bellek yapılarında çoğunlukla çok uzun süre almaktadır. Aslında bu sırada elde edilen programın çok hızlı olmasına rağmen, oluşturulması ve denenmesi sırasında uzun bekleme süreleri göze alınmak durumundadır. Yapılan her yeni ufak değişiklikten sonra program yeniden çevrilmek zorundadır Ve insanın çalışmakta olan programda yapılan değişiklikleri denemesi için dakikalar boyu beklemesi gerekebilir. Bir çeviricinin kullanılması durumunda ise program, yapılan her değişiklikten sonra anında işlemeye hazır durumdadır. Çoğu derleyicilerin kullanımları çeviricilerinkinden çok daha zordur. Çeviricilerde kural olarak bir programın çalışmaya başlaması için bir başlama komutunun (örneğin RUN) verilmesi yeterliyken, derleyiciler bu noktaya erişene kadar birden fazla çalışma adımı gerektirirler (tabii bunların herbirinde hata yapılması olasılığı da vardır). Bu nedenle günümüzde bir programlama dilini öğrenmek veya bir programı gerçekten öğrenerek oluşturmak ve denemek için çeviriciler vazgeçilmez unsurlardır. Programlamanın her iki türü de (çevirici ve derleyici) kendi açılarından haklı varlık nedenlerine sahipler ve mutlaka birinden biri de herhangi bir programlama dili için ideal olma özelliğine sahiptir. Bu nedenle şimdi size birkaç önemli programlama dilini tanıtmak istiyoruz: Makine koduna en yakın olan programlama dili Assembler'dir. Assembler'de programın her satırı makine kodundaki bir yönergeye tümüyle karşılık gelir. Assembler olarak da adlandırılabilen derleyicinin bu dille işi oldukça kolaydır. Programcının burada programlamanın oldukça alçak bir düzeyinden işe başlaması gerekecektir. Çünkü ufacık bir metnin ekranda görüntülenmesi gibi son derece basit bir şey bile Assembler dilinde oldukça büyük programları gerektirir.
Makine Kodu
Assembler dilinin diğer bir sorunu ise, bir program içerisinde bir sürü mantıksal hatanın yapılabilmesinin kolaylığıdır. Assembler bu hataların farkına varmaz. Yüksek programlama dilleri kendi hatalarından büyük ölçüde korunmuş durumdadırlar ve programcıyı çok sıkıntılı bir iş olan hata aramadan bir ölçüde kurtarırlar. Bugün Assembler dilinde çok az sayıda program geliştirilmektedir, çünkü bu arada oluşturulmuş bir sürü yeni programlama dili aynı işi aynı düzeyde yapabilmektedirler. Ancak eğer hız ve derli topluluk önemli bir rol oynuyorsa ya da programcı tek tek bitlerle uğraşmaktan özel bir zevk alıyorsa, Assembler dili gündeme gelebilmektedir. Günümüzde dünyada en yaygın kullanılan bilgisayar progdili BASIC. Artık standart olarak birçok bilgisayarın, bu arada AMIGA”- 'nın da ambalajında makineyle birlikte veriliyor ya da doğrudan makineye yerleştiriliyor. BASIC sözcüğü, İngilizce “Beginners All Purpose Symbolic Instruction Code” (yeni başlayanlar için çok amaçlı yönerge kodu) sözcüklerinin başharflerinden oluşan bir kısaltma. Bu adla da Dartmouth Koleji'nde geliştirildiği sırada kendisiyle amaçlananı açıklamış oluyor: Bilgisayar programcılığına yeni başlayanların eğitilm Günümüzde de BASIC çoğunlukla bu amaç için kullanılıyor. Eskiden olduğu gibi bugün de BASIC'in en önemli avantajı çabuk öğrenilebilmesi. Bunun da yararı, her amatörün oldukça kısa bir sürede kendi programlarını yapabilir ve dolayısıyla bilgisayar alanında ilk başarılarını elde edebilir hale gelmesi. Mikro bilgisayarlar için geliştirilen ilk BASIC denemeleri, o sıralar çok kısıtlı olan bellek alanları nedeniyle oldukça verimsizdi. Mikro bilgisayarlardaki BASIC diyalektleri uzun süre boyunca programlama için ancak gerçekten çok gerekli ögeleri içeren ilkel diller olarak kaldılar. Bu durum daha sonraki dönemlerde bilgisayar bilimi çevrelerinde BASIC'in kötü bir üne sahip olmasına neden oldu. Bu ilkel BASIC biçimleriyle aslında kolay incelenemeyen ve bir müddet sonra kimsenin anlayamadığı ve dolayısıyla gerekli değişiklikleri yapamadığı programlar yazmak kolaydı. Ama programcıların temel görevlerinden biri, eski programların anlaşılması ve değiştirilmesidir. Bu nedenle de program üreticileri için bu aşama zaman maliyeti bakımından ilk versiyonun oluşturulmasından çok daha pahalıdır.
Zaman içinde BASIC giderek daha verimli hale geldi. Bunu sağlayan, belleklerin giderek ucuzlaması ve BA-SIC çevirici ve derleyicilerinin giderek daha çok fonksiyon içerecek şekilde büyümeleriydi. Örneğin, bir mikro bilgisayardaki ilk BASIC 4 KByte büyüklüğündeydi. Buna karşılık AMİGA BASIC çeviricisi 80 KByte'tir ve mikro bilgisayarlarda raslanan en büyük BASIC de değildir. Gelişkin BASIC diyalektleri modern bilgisayar programlama dillerinin tüm önemli özelliklerine sahiptirler. Örneğin herhangi bir zorlukla karşılaşılmaksızın yapılandırılmış programlama yönteminin kullanılmasına olanak verirler. Bu yöntem yardımıyla oluşturulan programlar o denli kolay incelenebilir ki, yıllar sonra bile başkaları tarafından anlaşılıp değiştirilebilirler. Örneğin, bu yapının bir bölümü, program döngülerinin işletilmesidir. Başta gelen BASIC çeviricilerinden AMIGA BASIC, satış sırasında makine ile birlikte veriliyor. Bu BASIC ile yetinmeyenler için piyasada farkh avantajları (ve dezavantajları) olan alternatifler var. AMIGA BASIC'i hazırlayan firma Microsoft. Bu yazılım evi hemen tüm mikro bilgisayar üreticileri için BASIC dili alanında ana üretici durumunda. Bir mikro bilgisayar için hazırlanmış ilk BASIC Mikrosoft tarafından üretilmişti ve bugüne kadar piyasada kendisi için Microsoft BASIC (MS-BASIC) hazırlanmamış herhangi bir mikro bilgisayar yok. MS-BASIC'in en önemli avantajı çok yaygın olması ve bu nedenle hakkında çok iyi öğretici kitaplar hazırlanmış olması. AMIGA BASIC'e göre diğer BA-SIC diyalektlerinin sağladığı en önemli avantaj ise büyük ölçüde hız olayında yatıyor. Bunlar ya daha hızl (örneğin bir derleyici gibi çalışabilen) programlar üretebiliyorlar ya da program geliştirme işlemini daha hızlı hale getirebiliyorlar. AMIGA için en çok tutulan BASIC dilleri, (hızlı bir derleyici olan) AC-BASIC, (BASIC'i geliştiren profesörlerin yeni ürünü olan) True-BASIC ve özellikle Atari ST'de çok başarılı çalışan bir derleyici/çevirici olan GFA-BASIC.
B'den €'ye
Son yıllarda mikro bilgisayarlarda giderek yaygın bir kullanıma erişen bir diğer bilgisayar programlama dili ise C. Bu yeni dil -çoğu uzmanın başarılı olduğuna inandığı- Assemblervari bir biçimde makineye yakınlık ve programlama konforu arasında en iyi uyumu sağlamış durumda. AMIGA için hazırlanmış iki verimli derleyici, Aztec-C ve Lattice-C, programcılar tarafından büyük kabul görüyorlar. C dili büyük ölçüde yalnızca derleyicilerle bağlantılı çalışıyor ve bu nedenle de bilgisayara yeni başlayanlar için pek uygun olmayan bir dil.
Bilgisayara yeni başlayanlar açısından C'nin bir diğer dezavantajı ise, aynen Assembler'da olduğu gibi, programcı hatalarına karşı herhangi bir korunma önleminin olmaması. *“Aptalca”' olarak nitelenebilecek ve böylesine kapsamlı bir programın aslında bulabilmesi gereken hataları yapanlar yalnızca bilgisayara yeni başlayanlar değil. Ama C maalesef bu hataları aramıyor bile. Buna karşılık C derleyicileri çoğunlukla Assembler'ın hızına ve derli topluluğuna erişebilen çok iyi makine kodu üretebiliyorlar. Ayrıca birçok üreticinin C derleyicileri o kadar kaliteli hazırlanmış durumda ki, yeni bir bilgisayara kolayca uyarlanabiliyor. Bu durum o makinenin çok farklı bir makine kodunu anlayabiliyor olması halinde bile geçerli. Bu nedenle yeni bilgisayarlar için çoğunlukla çok hızlı C derleyicileri var, halbuki diğer diller için hazırlanan derleyiciler ve çeviriciler uzun bekleme sürelerini gerektirebiliyorlar. Bu durum AMIGA için de geçerli. İki disket sürücülü bir AMIGA için ilk zamanlardan beri piyasada Lattice-C derleyicisi var. Bunun geliştirilmiş versiyonu ise bugün piyasada yaygın olarak satılıyor ve AMI-GA dünyasında bir tür standart oluşturmuş durumda. Manx firmasının ürettiği Aztec-C derleyicisi de oldukça iyi bir program. Bu program, program geliştirmede ve hata aramada büyük yarar sağlayan Source- Level-Debugger ile birlikte satılıyor.
Pascal ve Modula
BASIC gibi Pascal da eğitim amacıyla geliştirildi. Ama bu eğitimin hedefi Zürih Elektronik Teknik Yüksek
Okulu'ndaki bilgisayarcılardı. Pascal'ın öğrenilmesi BASIC'teki kadar kolay değil, ama programcıyı az ya da çok yapılandırılmış programlar üretmeye zorluyor. Ayrıca Pascal'ın içinde, diğer dillerin derleyicilerinin rahatça gözardı edebildikleri hataları çok erken farkedebilen bazı ögeler de var. Pascal, yeni bir bilgisayar ailesinin ilk ferdiydi. Pascal'ın bir süre kullanılmasından sonra tüm avantajlara rağmen- bu programda belirli program grupları için bazı önemli yeteneklerin eksik olduğu kendini göstermeye başladı. Pascal'ı geliştirenler bu durumu yeni bir dil üretmek için bir motivasyon olarak kabul ettiler.
Modula (ya da Modula-2), Pascal'- ın giderek ağırlaşan eksikliklerini gidermekte oldukça başarılı bir dil oldu. Ama Pascal ile benzer yönleri o kadar çok ki, programcıların fazladan öğrenmek zorunda kaldıkları şeyler oldukça az. Çok kısa sürede yalnızca bir programlama dilini değil de, genel olarak programcılığı öğrenmek isteyen bir kullanıcı için Pascal'ın halefi Modula-2 hararetle tavsiye edilebilecek bir dil. Modula ile programlamayı öğrenen bir kişi için ardından bir diğer dili öğrenmek kural olarak pek zor değil. Halbuki bu sürecin tersi oldukça zor. Peki, bilgisayar programcılığına yeni başlayan biri için en uygun dil hangisi? Programcılığı bir meslek olarak sürdürmek isteyen bir kişi için Modula ve C gibi profesyonel diller tavsiye edilebilir. Boş zamanlarında bilgisayarıyla uğraşan ve bilgisayarın olanaklarıyla oyun oynar gibi daha yakından tanışmak isteyen kullanıcılar için en iyi seçim ise BASIC. Bu dil insanı'pek verimli olmayan bir programlamaya sürüklüyor olsa bile, sonuç ekranda görünecektir. Çok verimli olmayan bir çözüm ise hiçbir çözüm olmamasından iyidir. Ayrıca AMIGA BASIC, büyüleyici bilgisayar programcılığı dünyasına en ucuz girişi sağlamaktadır. Bu yazıya Butler Lawson'un bir sözüyle başlamıştık. Bir başka sözüyle bitirelim. Kendisine güzel bir programı tasvir edip edemeyeceği sorulduğunda, Mr. Lawson şu cevabı vermişti: “Güzel bir program güzel bir teorem gibidir. Görevini şık bir biçimde yapar. Basit ve net bir yapısı vardır. Görenlerin şunu diyebilmesi gerekir: İşte bu iş böyle yapılır.” 65