3 Ağustos 2017 Perşembe

İLK BİLGİSAYARLAR VE PROGRAMLAMA




Bilgisayarlar elektronik ve dijital cihazlardır. Bir cihazın elektronik olmasının anlamı, elektrikle çalışan cihazın mantıksal hesaplamalar yapmasıdır. Bir cihazın dijital olmasının anlamı ise üzerinde hesaplamalar yapmaya yarayan digitlerin olmasıdır. Digit, en sade ifadesiyle rakam demektir. Bir doğal sayıyı temsil eden karakterdir. Ondalık sistemde 0’dan 9’a kadar olan rakamlardır. Hexadecimal sayıları kapsaması için A’dan F’ye kadar karakterler de eklenmiştir.

Kısaca digitler 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F karakterlerinden biridir. Bilgisayarlar, yanlızca 0 ve 1 digitleriyle çalıştırılabilir. İki digitle çalıştırılabildiği için bu sisteme binary sistemi (ikilik sistem) denir ve bilgisayarların dili (makine dili) binary dilidir.


Aslında bilgisayar 0 ve 1’in ne demek olduğunu anlamaz. Bir bilgisayarın anladığı tek şey kablo boyunca voltajın(gerilim) olup olmamasıdır. 0 ve 1 bizim koyduğumuz bir adlandırmadır. Voltaj yoksa bu durum bilgisayar için 0, voltaj varsa bilgisayar için 1 anlamına gelmektedir. 0 ve 1’lerin yanyana gelmesiyle bilgisayarlar belli hesaplamaları yapabilmektedir. Bilgisayara bir komut verilmek isteniyorsa ya da bir veri (bilgi) saklanmak isteniyorsa 0 ve 1 formunda sağlanmak durumundadır.


Günümüzde bilgisayarların programlanması, direkt olarak binary (ikilik) programlama şeklinden biraz farklılaşmış durumda. Dijital bilgisayarların ilk yıllarında bilgisayarlar, delikli kartlar (punched cards), fiş panoları (plup-boards), ve ön panel anahtarları (front panel swithces) kullanılarak programlanıyordu. Terminallerin (girdi-çıktı birimleri), klavye ve monitörlerin geliştirilmesi ile birlikte, programlar hexadecimal sayi dizileri şeklinde yazılmaya başlandı. Her bir hexadecimal digit (onaltılık rakam), dört binary digite(ikilik rakama) karşılık gelecek bir sistem geliştirildi. Bu sisteme geçilmesiyle birlikte makine dilinde (binary dilinde) zorlu ve karmaşık olan programlama görece kolaylaşmıştı. Makine dilinde programlar geliştirmek, zorlu ve karmaşık olmanın yanında sadece küçük programlar için mümkün oluyordu. Hexadecimal sisteme geçilmesiyle birlikte bu zorluklar aşılmaya başlanmıştı. Hexadecimal digit (onaltılık rakam) sistemi geliştirilmesiyle makinelerin programlanmasında büyük bir gelişme sağlandı.
ilk bilgisayarlar1.jpg


Makine dilinde programlamaya kısa bir bakış atmakta yarar var. 1940’lı yıllarda günümüz bilgisayarların öncülleri görülmeye başlandı. Elektrikli Hesaplama Makineleri (Electric Accounting Machines-EAM) hayatımıza girdi. İlk olarak IBM tarafından üretilen bu cihazda, giriş formu (input) olarak punched card, programlama aygıtı olarak plug-board kullanılmıştı. Bugün artık kullanılmayan bu teknolojiye o zamanlar sadece belirli şanslı insanlar sahipti. Punched card ve plug-board bulunmayan cihazlar ise sadece hesap makinesi olarak kullanılabiliyordu. Dönemim şanslı insanlarının sahip olduğu EAM makineleri üç temel makineden oluşuyordu. Birincisi; delikli kartlar üzerinde delik açmaya yarayan kart delme makinesi (punch machines), ikincisi; kart sıralayıcıları (card sorters), üçüncüsü; fiş panolarına (plug board) kabloyla bağlanmış programları yorumlayan hesaplama makineleri(accounting machines). İnput olarak bugünün  klavye ve disket sürücün yerine o yıllarda bilgisayarlarda delikli kartlar (punched card) kullanılıyordu. Monitörler yoktu ve bilgisayar belleğine 0 ve 1’lerin yüklenmesi için anahtarlar kullanılıyordu. Programın içine 0 ve 1 komutları yüklemek için ön panel anahtarları (front panel switches) kullanılıyordu. Anahtarların açılıp kapanması bir sayıyı temsil ediyordu ve bu bilgisayara verilen bir talimat idi. İkilik sistem genel olarak bu şekilde çalışmaktaydı. Bu dil, birinci nesil programlama dili olarak adlandırılmıştır.

PLUG BOARD-FEDİRDD.jpg
PLUG BOARD
                                                                         


PUNCH CARD-FEDİRDD.JPG
PUNCHED CARD


Altair_Computer_Front_Panel.jpg
FRONT PANEL SWİTCHES
Programlamanın insan hayatını nasıl değiştirebileceğinin farkına varılmıştı. Programlamadaki gelişmeler digital devrime işaret ediyordu ve programlamanın gelişmesi için makine dilinde programlamanın getirdiği büyük kısıtlamaların aşılması gerekiyordu. Programlamayı daha kolay gerçekleştirebilmek için işlemleri daha soyut bir şekilde ifade edilmeliydi. Bu amaçla Asssembly dilleri geliştirildi. Bu diller, bir dizi makine dili kodlarını doğrudan eşleştirilerek oluşturulan basit mnemonic kod ifadelerinden ibarettir. Örneğin MOV komutu bir registerin içine bir veriyi taşıyan bir komut işlevi görürken, ADD komutu iki registerda bulunan veriyi toplamaya yarayan bir işlev görmektedir. Assembly dilinde yazılan programlar bir assembler program kullanılarak makine koduna çevrilmektedir. Binary temelde geliştirilen Assembly dilleri programlamada dikkate değer bir gelişme olsa da, yine de düşük seviye programlama dili olması nedeniyle bu dillerde büyük ölçekli programlama yapılamaz. Ayrıca assemby dilleri her bir işlemci için ayrı tasarlanması gerektiğinden taşınabilirliği olmayan dillerdir ve farklı makinelerde yeniden yazılması gereklidir. Bu dil türüne ikinci nesil programlama dili de denilmektedir.


1950’li ve sonrası yıllar, Fortran, Cobol, lisp ve Algol gibi yüksek seviyeli dillerin ortaya çıktığı yıllar oldu. Üçüncü nesil diller olarak adlandırılan bu dillerde programlama yapmak artık çok daha kolaydı. Bu diller yazılan programın yapısını büyük ölçüde arttıran şartlı döngüler, alt programlar gibi mekanizmalar sağlayan dillerdi. Bu mekanizmalar, program akışını görselleştirmeye kolaylık sağlıyorlardı ve temel makine komutlarının bir soyutlamasıydı. Assemblerin aksine belli bir donanıma bağlı değildi. Bu yüzden doğal olarak yüksek seviyeli bir dilde yazılan bir program farklı bir makineye taşınabilir ve çalıştırılabilirdi.


Bir program için çalıştırılabilir bir kod üretmek için, kodu makineye özel assembler diline çeviren bir compiler (derleyici) program kullanıldı. Derleyici ikinci ve üçüncü nesil dillerde kullanıldı. Derleyici, kullanıcı tarafından yazılan program kodunu -kaynak kodunu- makine koduna dönüştüren programdır. Programcı yazdığı kaynak kodunu derlemeden-makine diline dönüştürmeden- direkt olarak çalıştıramaz. Programda yazılan kodlar, farklı kaynak kodlarından oluşuyorsa tek bir programa bağlanması için bağ düzenleyicileri adı verilen program derleyici üzerinde çalışır. Bağ düzenleyiciler, derleyici tarafından üretilen makine kodu üzerinde çalışarak tek bir program üretir. Derleyicilerin olumsuz yanı, sadece belli özel makine türlerinde ve işletim sistemlerinde çalışmasıdır. Örneğin Windows’ta derlenen bir program Linux’ta çalışmayabilir. Bazı programlama dilleri derleyici yerine yorumlayıcı adı verilen programlar kullanmayı tercih eder. Bu programlar kaynak koduna bakar ve makine koduna yorumlarlar. Windows, Linux ve diğer platformlarda çalışmasını sağlarlar. Asıl makine yerine sanal makinede(virtual machine) kaynak kodlarını makine koduna derleyen programlar da bulunmaktadır. Java dili Java Virtual Machine (JVM) üzerinde çalışan bir dildir. C# dili de sanal makine üzerinde çalışan Virtual Execution System (VES) üzerinde çalışan bir bir sistemi benimsemiştir.