PROGRAMLAMANIN EVRİMİ

(İmkânsıza Kafa Tutuş)

Prof.Dr.Timur Karaçay

Başkent Üniversitesi, Ankara

tkaracay@baskent.edu.tr

Bilgisayar dünyası yalnızca 40 yıllık bir ömre sahiptir. Bu süre içinde oluşan gelişim baş döndürücüdür. Pin-boardIın telle bağlanmasından başlayarak, programcılık, bugün sofistike bir disiplin durumuna gelmiştir. Bu açıdan bakınca, programcının işi, şimdiye kadar görülen işler arasında en karmaşık olanıdır.

Bilgisayar teknolojisinin ve ona paralel olarak programcılığın gelişiminin övgüsü çok yapılmıştır. İnsanoğlunun sınırsız yaratma gücünün ürünü olan bu harika icat, ve o icadı kullanmak için üretilen programlar kuşkusuz her övgüyü haketmiştir. Ben burada övgüleri tekrarlamayacağım. Bunun yerine, daha az yapılan bir işi yapacağım: Programcılıktaki handikapları, bir matematikçi gözüyle eleştirmeye çalışacağım.

Hemen belirteyim ki, burada ortaya attığım görüşlerin çoğu orijinal değildir; başkaları tarafından ortaya konulmuştur. Ben okuduklarımın ve dinlediklerimin bir sentezini sunuyorum.

Bugün 1000 'i aşkın programlama dili olduğu söylenmektedir. Bu dillerin hepsini bilmek ve toplu bir değerlendirme yapmak olanağı yoktur. Tasarladığım amaç için genel amaçlı olan veyaygın kullanılan dilleri, programcılıkta aşama yaratmış dilleri ya da kendisinden sonra gelenlere yön veren dilleri örnekleyeceğim. Tabii her dil zamanla evrim geçirmekte, kendi kendisini aşmaktadır. Ortaya koymaya çalışacağım eleştiriler, ilgili dilin ilk versiyonları içindir. Programcılığın tarihi gelişimini görebilmek için böyle yapmak gerektiği kanısındayım.

Önce insan doğdu, sonra makina!

İnsanoğlu evrene önce korkuyla baktı. Gök gürlüyor, yağmur yağıyor, şimşek çakıyor, sel geliyor, ay-güneş tutuluyordu... Zavallı insanoğlu başedemediği doğa olaylarından korkuyordu... Sonra ayağa kalktı. Merak etti... Düşündü... Evreni tanımalı, korkuyu yenmeliydi... Korkuyu yenmek için doğaya egemen olması gerektiğini anladı. İşte o andan beri insanoğlu, doğa olaylarına egemen olacak araçları yaratmaya koyuldu. Konuşma dilini yarattı, sayıları yarattı, yazıyı yarattı, tekerleği yarattı, makinayı yarattı... Uygarlıklar kurdu, uygarlıklar yıktı.

En sonunda bilgisayarı yarattı...

Önce makina kodu vardı, sonra assembler çıktı…

Burada bilgisayarın gelişimini ele alacak değiliz. Bilgisayarın tarihini Çinlilerin abakus'u icadına kadar geriye götürmek mümkündür. 1822-1848 tarihleri arasında, Cambridge Üniversitesi matematikçilerinden Charles Babbage, Differential engine ve Analytical engine adıyla iki makina tasarladı. Bu makinalar teknoloji yetersizliği nedeniyle asla çalışmadı. Ama, özellikle, 1833 yılında tasarlanan Analytical engine bugünkü bilgisayarın atası veya atalarından birisi sayılır. Charles Babbage ve onun asistanı Ada Lowelace bazı problem sınıflarının Analytical engine ile çözümü için ortaya ardışık hesaplama yöntemleri koydular. Bu yöntemler programcılığın başlangıcıdır. Bunun anısına, çağdaş programlama dillerinden birisine ADA adı verilmiştir.

1944-1946 tarihleri arasında Pensilvanya Üniversitesinde Mauchly ve Eckert tarafından yaratılan ENIAC (Electronic Numeric Integrator and Computer) ilk bilgisayardır. Büyük enerji harcayıp büyük ısı yayan 30 ton ağırlığındaki bu heyula makinayı çalıştırmak için 18000 valfa kumanda edebilmek gerekiyordu.

1949 yılında Princeton Üniversitesi matematikçilerinden von Neuman tarafından EDVAC (Electronic Discrete Variable Computer) yaratıldı. Gerçek anlamda ilk bilgisayar bu oldu; çünkü program ve veri aynı anda bellekte saklanabiliyor, dolayısıyla, işlemleri istenen sırada kendiliğinden yapıyordu. Bellekte bilgi tutan birim BInary digiT (bit) idi. Bu birim elektronik sinyal var-yok (on-off veya 0-1) değerlerini alabilirdi. Bit'ler bir araya gelip byte'ları oluşturdu. Bellek, byte'ları içeren manyetik drumlardı. Her byte'ın belirli bir adresi vardı. Programın icra edilmesi demek, bellekte belirli adreslere byte değerleri yazmak ve okumak demekti. Bellekteki bir adreste bir veri kayıtlı olabileceği gibi bir komut da kayıtlı olabilirdi.

Adreslere yazma ve adreslerden okuma eylemi birer birer yapılabildiği için, bu işlemler bir şişe boynundan geçişe benzetilerek, makinaya von Neuman şişesi (şişe boynu) denilmiştir. O gün için çok büyük bir başarı olan bu makanizma, bugün bazı yazarlarca gerçek bir talihsizlik sayılmaktadır; çünkü çağdaş bilgisayarın gelişimi bu temele dayanmış, yani şişe boynuna sıkışıp kalmıştır.

Acaba, von Neuman olmasaydı, günümüz bilgisayarı şişe boynuna sıkışmaktan kurtulacak mıydı?

Valflı makinalar ilk kuşak bilgisayarlardır (IBM 600 serisi). İkinci kuşak bilgisayarlar transistör bilgisayarlardır. Beş yıl sonra bütünleşik devreli (integrated circuit technology) üçüncü kuşak bilgisayar yaratıldı. (Very) Large Scale Integration (VLSI) teknolojisinin yarattığı dördüncü kuşak bilgisayarlar günümüz bilgisayarlarıdır. Japonlar beşinci kuşak bilgisayarı yaratmaya uğraşmaktadırlar.

İyi bilindiği üzere, günümüz bilgisayarında, program ve veri belleğe binary digit olarak yüklenir. Bunu yapan bit dizilerine makina kodu denilir. Makina kodlarını kullanarak bilgisayara program yüklemek çok zor bir iştir. Kart okuyucu'ların ortaya çıkışı bu işlemi oldukça kolaylaştırdı. Tabii, makinaya, kart okuyucudan gelen sinyali algılayıp makina koduna çeviren bir program yerleştirildi. Bu program, günümüzün mükemmel işletim sistemleri'nin atasıdır.

Kart okuyucunun getirdiği kolaylıkla yetinmeyen programcılar biraz daha ileriye gidip assembler'i yarattılar. Assemblerin doğuşu program yazmayı oldukça kolaylaştırdı. Bunun kadar önemli olarak, assembler ile yazılan programlar okunabilir programlar oldu.

Bir Zamanlar FORTRAN

Assembler ile program yazmak kolaylaşmıştı ve assembler ile yazılan programlar okunabiliyordu. Peki ama assembler dili evrensel miydi? Yani makinadan makinaya değişmiyor muydu? Program okunabiliyordu, ama kimler anlayabiliyordu? Bu sorunları aşabilmek için yeni bir adım daha gerekiyordu. IBM bu adımı attı. Daha evrensel bir yöntem yaratmak için kolları sıvadı. Herkesin her makina için program yazabilmesine olanak sağlayacak bir dil geliştirdi: FORTRAN (Formula Translator). FORTRAN'ın programcılık kavramına getirdiği önemli yenilikler vardır: Değişken, adama deyimi (assignment statement), hesaplanabilir ifade (computable statement), array, veri işleme, kağıda döküm, GOTO, IF , iteration, subroutine...ve belki de en önemlisi taşınabilirlik...Yani kaynak programın makinadan bağımsızlığı ilkesi.

Bu yeniliklerle FORTRAN çok kolay kullanılır ve kolay okunur bir dil oldu. Daha sonra gelen ALGOL, PL1, PASCAL, C, ADA vb diller onun soyundan gelirler; dolayısıyla onun zayıflıklarını soyaçekim yoluyla taşır. FORTRAN başka türlü olsaydı, programcılığın evrimi de başka türlü olacaktı. LISP, PROLOG, APL vb diller FORTRAN soyundan değildir. Ama yazık ki bu diller FORTRAN ve onun soyu kadar yaygınlık kazanamadı. Böyle olmasında IBM'in ticari gücünün etkisi büyüktür. Birçok bilgisayar bilgini, bu olguyu gerçek bir talihsizlik sayar.

Macroprocessor Ferahlığı

FORTRAN programcıya rahatlık getirmekle birlikte, her soruna çare değildi. Gelişen bilgisayara ve çevre birimlerine egemen olabilmek için assembleri kullanmak zorunlu oluyordu. Sistem programlama işi FORTRAN ile yapılamıyordu. assembler dilini kullanarak teknoloji ile yarışa kalkan sistem programcıları giderek ya sinire ya ülsere yakalanıyorlardı. Tedavi için bulunan ilaç akış diyagramları ve macroprocessor'ler oldu.

SİSTEM ve COBOL Yılları

Gelişim durmuyordu. Her bir program için sistemi yönetecek macroprocessor yazmak yerine, bütün sistemi yönetecek bir program yazmak daha akıllıca olacaktı. Bu akıllıca işin ürünü işletim sistemi oldu. Büyük programlar modüllere ayrıldı; overlay kavramı geldi; arayüzler (interface) parçaları birleştirdi. Veri işleme (data processing) eylemi hızla gelişti. Yeni bir adım daha atma zamanı gelmişti. Ne yazık ki yanlış bir adım daha atıldı: COBOL.

Dijkstra der ki

"FORTRAN bir çocukluk hastalığı idi, COBOL bir afet oldu."

COBOL, tamamen ilkel (naive) bir dildir. Kolay okunabilmek uğruna, herkesin bildiği X = A + B aritmetik işlemini ADD A TO B GIVING X diye yazdıracak kadar genel kültürden sapan bu dil neden bütün zamanların en çok kullanılan dili olmuştur?

COBOL'un kolay bir dil olduğu iddia edilir. Gerçekte, FORTRAN soyundan gelen öteki dillerle karşılaştırıldığında, bazı işlemleri İngilizce ifade etmekten başka kolaylığı yoktur. Üstelik COBOL uzmanı olmak oldukça zordur. Bu nedenle, bilgisayar dünyasında "Çok yaşa COBOL !" diyen fanatikler türemiştir.

COBOL dili, atası FORTRAN'ın iyi yanlarını almıştır. Onun gibi değişken kavramına sahiptir. Koşullu deyimi kısıtlı olarak vardır. Iteration yapar. Yapısal programlama kavramını getirmiştir. Programı identification, environment, data ve procedure diye dört kısma ayırması iyidir. Ama her kısmın ayrı bir syntax kuralı vardır; aşırı derecede sözlüdür. Her kısım ancak bir kez yazılabildiği için bir programda bloklar ve alt bloklar yaratılamaz. Boolean deyimleri yoktur.

ALGOL ve PL1 Yılları

60'lı yıllarda programlama dillerinde şafak sökmeye başladı. Bilgisayarın gerçek bilginleri düşünmeye başladılar. Programcılığı yozlaşmaktan kurtaracak, onu bir sanat yapacaklardı. Uğraştılar ve başardılar: ALGOL60 (Algorithmic Language) yaratıldı. ALGOL60 dili COBOL'un yaptığı her şeyi yaptığı gibi; biraz sonra onun yapamayacağı her şeyi de yapıyordu. Algoritmik bir biçeme sahipti. Yapısal programlamayı kuruyor, blokları getiriyordu. Fonksiyon kavramını daha matematiksel biçimde tanımlıyordu. Iteration mükemmeldi.

Yazık ki ALGOL60 tutmadı. O sadece bilim adamlarının mükemmel bir eseriydi. Arkasında destekleyen büyük firmalar yoktu. Cobolistler onu okuyup anlayamadılar. Daha formal olması gereken sistemciler de, ALGOL60'ın yaptığı her şeyi assembler ile daha iyi yaptıkları havasına girdiler; ona soğuk davrandılar. Sonuçta ALGOL60 uygulamaya alınamadı. Yayınla öğrenilen bir dil oldu. Akademic çevrelerin gözde bir dili olarak ömrünü tamamladı.

ALGOL60'ın başarısız olduğunu söylemek belki de haksızlık olacaktır. Her şeyden önce, öğretimde büyük bir ağırlığa sahip olmuştur. Kendisinden sonra çıkan PL1, PASCAL, C, ADA dillerine ve hatta biraz yozlaşmış biçimiyle BASIC diline temel olmuştur. ALGOL68 adıyla geliştirilen yeni versiyonu ilginç yeni özeliklere sahiptir. SIMULA, SMALLTALK gibi object-oriented dillere öncülük etmiştir.

Bu dönemde adından söz edilmesi gereken PL1 dili, kuşkusuz COBOL'a göre çok üstündür. Getirdiği yenilikler arasında procedure, pointer ve depo sınıfı (storage classes) kavramları vardır.

MULTI ve PASCAL Yılları

Sisteme giriş/çıkış işlemlerinin sırayla yapılması, özellikle printerin yavaşlığı nedeniyle CPU'nun bazan boş durmasına neden olmaya başlamıştır. Bu boş zamanı değerlendirmek için, ilkönce printer yerine bir kayıt ortamına yazma ve iş bitiminden sonra kayıt ortamından kağıda döküme yöntemi düşünülmüştür. Daha sonraları, printer çalışırken CPU'nun başka bir iş yapması sağlanmıştır. Giderek bu düşünce çoklu(multi) işlemlere ve multitasking kavramına götürmüştür. Bu alanda macroprocessor'lar yeniden hizmete girmiştir.

60'lı yılların ortalarında çoklu-tasarım (multitasking) problemine yönelik araştırmalar büyük önem ve yoğunluk kazandı. Böylece, bilgisayar dünyasındaki aşamalardan birisi daha gerçekleşmiş oldu. Bugün büyük bilgisayar ağları yardımıyla eşanlı ve çoklu tasarım işlemleri, 20 yıl önce imkansız sayılan aşamalara varmıştır.

1971 yılında İsviçre Alplerinde yeni bir dil doğdu: PASCAL. Niklaus Wirth ve Kathleen Jensen tarafından öğretim amacıyla yaratılan bu dil ALGOL60'dan ferahlatıcı esintiler almıştır. PASCAL sabit ve değişken arasında keskin bir ayrım yapmıştır. Veri türlerine aydınlık bir bakış açısı getirmiş ve kullanıcı tarafından tür yaratılmasına izin vermiştir. Değişkenleri statik ve dinamik diye ikiye ayırmıştır. Pointer kavramını kullanmıştır.

PASCAL kendi soyunda mükemmel bir dildir; açık ve basittir. ALGOL'dan daha güçlüdür. Ama talihsizdir. Herkes PASCAL'ı konuşur, ama bilgisayarlar COBOL'u kullanmaya devam eder. Assembler ise sistem dünyasındaki tacını kaptırma niyetinde değildir. Böylece PASCAL dili de ALGOL gibi akademic çevrelerde kaldı, ticari hayata inemedi. MODULA, C, ADA dillerini etkiledi. Son zamanlarda, özellikle PC 'lerde ve okullarda önem kazanmaya devam etmektedir.

Yapısal Programlama Yılları

1968 yılının güneşli bir Mart gününde programcılık dünyası yaklaşan baharın tadını çıkarmak istiyordu. Bilgisayar dünyasında herşey o kadar güzeldi ki... Sistem analistler, programcılar ve hatta kullanıcılar memnundu. Tam bu havada iken Dijkstra, Communications of the Association for Computing Machinery adlı dergiye bir mektup yazdı. O güneşli güzel hava birden karardı. Dijkstra, o tarihi mektubunda, yazılan programların çoğunun kötü olduğunu söylüyordu. GOTO'suz program istiyor, yapısal programlamayı gerçek anlamda kurmak gerektiğini savunuyordu.

Bu noktadan sonra, baharın tadını çıkarmayı düşleyenler, yeniden programlama sanatının ne olduğunu, yapısal programlamanın temel taşlarının nasıl konulması gerektiğini tartışmaya başladılar. GOTO'yu dışlayan örnek programlar üretildi. Bütün bunlar programlama sanatını geliştirdi, iyi sonuçlar doğurdu. Peki ama GOTO deyimi gerçekten dışlanmayı haketti mi? Yoksa biraz insafsızca mı davranıldı?

O soylu, Uğursuz Recursion

Recursion'ın ne olduğunu liseyi okuyan herkes bilir. Bir önermenin sayılabilirsonsuz bir küme üzerinde doğru olup olmadığını denetleyen önemli ispat yöntemlerinden birisidir. Türkçe'de tüme varım yöntemi adıyla anılır. Acaba bilgisayarda bu yöntemi kullanma olanağı var mıdır? Kullanılırsa, sonsuz döngüye düşme tehlikesi yok mudur? Bu nedenle, çoğu programcı recursion kullanmaktan sakınır. Hiç bir dilde recursion yapısının gerçek tüme varım yöntemini temsil edebildiğini sanmıyorum.

C: Taht Kavgası

Dördüncü kuşak programlama dünyaya gelirken, üçüncü kuşak programlama yeni bir çıkış yaptı. Programlama dili üzerindeki bütün tartışmaları sona erdirmek amacıyla C ve ADA'yı yarattı.

1973 yılında Denis Ritche ve Kernighan, C yi ortaya koydular. C dili daha önce yazılan BCPL, B ve ALGOL68 dillerinin iyi yanlarını almıştır.

C dili doğuşunda bir sistem programı olduğunu iddia etmiştir; bugün hala bu iddiası yürürlüktedir. Hatırlanacağı üzere, sistem programcılığı assembler'in tekelinde kalagelmiştir. Her ne kadar bazı sistem üreticileri Pascal ya da PL1 yapısına benzeyen ve sistem programlama amacına yönelik diller geliştirmeyi denedilerse de, bu denemeler hiçbir zaman ticari boyut kazanamadı. Dolayısıyla, C dili ortaya çıkana kadar, sistem programlama dünyasında assemblerin tahtı hiç sallanmadı.

C dili genel amaçlı evrensel bir dildir; yani her makinada çalışabilir (Bu iddia son yıllardaki bazı C derleyicileri tarafından çürütülmektedir). Yapısaldır. Syntax için kesin kuralları vardır, ama semantic kuralları oldukça serbesttir. Temel yapısı PL1 dilinde olduğu gibi procedur'lerden (fonksiyon) oluşur. Procedur'ler iç içe yuvalanamaz. Böyle oluşu, global ve local scope kurallarını tehlikeli olmaktan çıkarır. Blok dışında tanımlı değişkenleri görmek içinexternal olarak tanımlama yeteneği vardır.

Pascal dilindeki record ve variant kavramları C dilinde struct ve UNION adlarıyla vardır. Pointer kavramını kuvvetle kullanmış ve pointer aritmetiği yaratmıştır. Adama deyimlerini şaşırtıcı olabilecek kadar kısaltmıştır. Iteration (döngü) deyimleri yalın ve etkilidir. Dallanma için if-else ve switch-case yapılarına sahiptir. Boolean deyimlere sahiptir.

C dili başarılı bir dildir. Özellikle UNIX dünyasında assemblerin yerini büyük ölçüde alabilmiştir. Kesinlikle assemblerden daha iyidir ve program üretimini artırmaktadır.

Belki en büyük kusuru, istenirse assembler dilinde olduğu gibi disiplinsiz program yazmaya izin vermesidir. Tıkız yapısı, çok kısa kodlar yaratılmasına olanak sağlar. O kadar ki, bazan yaratılan kodları değil başkasının, bizzat programı yazanın bile anlaması olanaksız olabilir. Ama, C dilinde rahat okunur ve kolay anlaşılır programlar yazmak her zaman mümkündür.

BASIC: Dil mi? Oyuncak mı?

1963 yılında doğan ve 70'li yıllarda yenilenen BASIC (Beginners All Purpose Symbolic Instruction Code) dilinden sözetmemek belki de bir eksiklik olacaktır. BASIC dilinin yaratılış amacı PC kullanıcılarına yüksek düzeyli bir dilin yeteneklerini sunmaktı.

Genel çizgisiyle, BASIC dili FORTRAN'ın izlerini taşır: adama, GOTO, IF...THEN, IF...THEN GOTO, FOR yapıları vardır. Son versiyonlarında IF...THEN...ELSE yapısı da vardır. Makina düzeyinde sistem kontrol komutlarına sahip oluşu önemli bir avantajdır. Kolay kullanılır oluşu, profesyonel olmayan kullanıcılar arasında çekiciliğini artırmıştır. Bu açıdan çok yaygındır.

BASIC ile yapısal programlama yapılamaz. Veri türlerine sahip değildir. Procedure, scope kavramları yoktur. Bu nedenle günümüz programcısının gereksemelerine vevap veremez. Daha kötüsü, BASIC kullanmaya alışan bir kişiyi, çağdaş bir dilin gerektirdiği disipline sokmanın çok zor olduğu kanısı yaygındır.

ADA: Soyunun en üstünü mü?

1979 yılında CII'de Jean Ichbiah ve araştırma ekibi tarafından yaratılan ADA dili, kendi soyunun en gelişkin dili olduğu iddiasıyla ortaya çıktı. Genel olarak PASCAL'ın izindedir; ama onun eksiklerini gidermiştir. Soyut veri yapılarına sahiptir. Eşanlı (concurrent) programlama niteliği vardır.

Bilgisayar bilginlerinin çoğu, ADA dilini, FORTRAN soyunun ulaştığı son aşama olarak görürler. Bazıları, ADA dilinin çok karmaşık ya da çok büyük olduğu görüşündedir. Öğrenilmesi, öteki dillere göre daha zor olmasa bile daha çok zaman alıcıdır.

Deneyler dil öğrenimi için aşağıdaki zamanların gerekli olduğunu göstermiştir:

FORTRAN IV ( ya da FORTRAN 77) 6-12 ay

COBOL 6-18 ay

PL1 6-18 ay

ADA 6-24 ay

Kuşaklar Çatışması

60'lı yıllar programlama dillerinin harmanlandığı bereket dolu yıllardı. 70'li yıllar programcılığın kriz yıllarıdır. Kriz özeleştiriyi getirmiş, ortaya çıkan hastalıklar yayılmasın diye koruyucu aşılar yapılmıştır. Yapılan aşılar genellikle tutmuştur. Günümüzde olgunlaşan meyveler toplanmaktadır.

Programcılığın ortaya çıkışından bu yana aşılan yol büyüktür.

Bilgisayar donanımının gelişimini belirtmek için iyi bir sınıflama yapılmıştır. Benzer sınıflandırmayı yazılımın gelişimi için de yapmak olanağı vardır:

Birinci kuşak : Makina kodu

İkinci kuşak : Assembler ve autocode

Üçüncü kuşak : Procedural diller (FORTRAN, Algol, Cobol, Pascal, C, ADA vb).

Dördüncü kuşak : Non-procedural diller (LISP,SNOBOL, FORTH)

Bir başka sınıflandırma biçimi de şöyledir:

Birinci kuşak dil makina dilidir.

İkinci kuşaktaki assembler dili komut yöneltilidir (command-oriented).

Üçüncü kuşaktaki diller"Nasıl yapılmalı?" sorusuna yanıt arar.

Dördüncü kuşaktaki diller"Ne yapılmalı?" sorusuna yanıt ararlar.

String işleme, Formal Diller, Belirsizlik, Türing'in Makinası ve AUTOMATA, Liste İşleyen LISP, Yapay us, Uzman Sistemlere geçiş kavramları, klasik programcılığı aşan önemli gelişmelerdir. Burada bu kavramların ayrıntısına girmek için zamanımız elvermeyecektir. Ancak, geleceğin programcılığının bu yöne kaymak zorunda olduğunu belirtmeden geçemeyeceğim.

İnsanoğlu, belki, doğru programları yaratmayı başaramadı. Eğer programcılık insanoğlunun işi olarak kalacaksa, düşünen ve bilgi üreten programı yapmak zorundadır. Herhalde bu iş beşinci kuşak yazılımların asıl görevi olacaktır.

Veri Dünyası

Bir Zamanlar I/O Yoktu

Veri işlemenin korkulu rüyası giriş/çıkış (I/O) dır. Bugün harikulade bir tekniğe sahip olan I/O başlangıçta hiç yoktu. Pin-board'dan başlayıp typewriter, kart okuyucu, line printer, kayıt ortamları, kütük, console, kanal, buffer, interrupt, terminal, ağ vb araçları kullanan I/O işlemlerini tekrarlamanın yararını görmüyorum.

Kütük yılları ve veri-tabanları

Bilgi işlenmiş veridir. Veri işleme iş dünyasının temel problemidir. Veriyi işlemek için onu toplayıp depo etmek gerekir.

60'lı yılların sonunda veri kütüğe depo edildi ve donduruldu. İstenildiği an oradan istenen veri alınıp işlenebilecekti. Herşey burada noktalandı sanılırken, buzlar erimeye başladı. Kütüğün işlevi değişmeye başladı. Neydi kütük? Verilerin saklandığı depo mu? Programın kendi kendisini sakladığı yer mi? Programın dış dünya ile iletişim kurmasını sağlayan ortam mı? Yetmeyen ana belleği büyüten bir aygıt mı?

Bir kütük onu yaratan programa ne denli bağlı kalmalıdır? Programdaki değişiklik kütüğe nasıl yansıyacaktır? Kütüğün yapısı, programın geliştirilmesine (maintanence) ne ölçüde engeldir? Kütükteki kayıtlara erişim nasıl olmalıdır? Programın ve kütüğün iyileştirilmesi nasıl olur? Veri tekrarı (duplication) nasıl önlenir? Kütükten kütüğe aktarılan ve güncellenen verilerin güvenirliği nedir?

Bu ve benzeri binlerce sorun karşısında kalan veri işleyiciler uçtaki kullanıcıyı tatmin edebilmek için gece gündüz çalışmaya koyuldular. 10 yıl kadar süren bu kargaşa ortamında kimisi mide, kimisi kalp hastası oldu... Sonra bazı akıllı adamlar oturup düşünmeye başladılar: Veri nedir? Böylece ortaya veri-tabanı kavramı çıktı.

Üçüncü kuşak dillerle bile veri-tabanı yönetim sistemlerinde harikalar yaratılmıştır. Ama, olaya mantıksal açıdan bakıldığında, veri yapıları konusunun dördüncü kuşak dillerinin işi olduğu hemen anlaşılmaktadır.

70'li yılların sonunda IBM, veri-tabanı dünyasını sarsan bir ürünü açıkladı: SQL (Structured Query Language). İlişkisel (relational) dilin varabileceği son aşama olarak nitelendi. Ama, arayış hiç bir zaman durmadı; durmayacak. Recursive veri yapıları, verinin normallenmesi, object-oriented programlama vb kavramlar durmaksızın araştırıldı, geliştirildi.

Bilgi Dünyası

Bitmeyen Kuşak: Beşinci kuşak bilgisayar, beşinci kuşak programlama dili

İnsanlığın temel uğraşı doğaya egemen olmaktır. Bunun için gerekseme duyacağı bilginin sınırı yoktur. Bilgi uçsuz bucaksız bir göldür. Erişebildiklerimiz bu gölden alınmış bir avuç su gibidir. Hiç bir zaman bu gölü bitiremeyeceğiz; ama o bilgi gölünden ne kadar çok içersek insanlığa hizmetimiz o kadar çok olacaktır.

Yeni dönemler yeni programlar, yeni makinalar demektir. Her yenilik bilgi kaynaklarımızı artıracaktır...

İnsanoğlunun aklı, korkusu, merakı, yaratma gücü hep var olacaktır. Bunlar var oldukça, ümkansıza kafa tutmaya devam edecektir.

Programlama , imkansıza kafa tutuşun güzel bir örneğidir.

 

KAYNAKLAR

[1] Date,C.J. An Introduct ion to data base systems, Addison Wesley, 1981.

[2] Dijkstra, E.W. A short Introduction to the art of Programming, University of Eindhoven, 1971.

[3] Higmann,B. A Comparative study of Programming Languages, Elsevier, 1967.

[4] Pyle I.C. The ADA Programming Language, Prentice Hall, 1985.

[5] Rich,E. Artificial Intelligence, McGraw Hill, 1983.

[6] Sammet,J.E. Programming Languages: History and Fundamentals, Prentice Hall, 1969.

[7] Walraet, B. Programming, North Holland, 1989.

[8] Wexelblat (Ed) History of Programming Languages, Academic Press, 1981.