Otomatik Programlama Geliştirme
Remington Rand Univac Bölümü
Sperry Rand Corporation
Philadelphia, Pa.
(Bu bildiri, 24 Ekim 1957 tarihinde Chicago’da Armour Research Foundation Sempozyumu’nda sunulmuş ve izin alınarak yeniden basılmıştır.)
Sanayi devrimini ileriye taşıyan unsurlardan biri iş bölümü ilkesiydi. Bu ilke, zanaatkârın işini bileşen görevlere ayırmayı ve malların seri üretimi için bu işlemleri yerine getirecek teknikler ve makineler tasarlamayı içeriyordu. Yüksek düzeyde eğitimli kişilerin yalnızca bu eğitimin gerekli olduğu görevlerde kullanılmasını ve basit, tekrarlayan işlerin daha az nitelikli çalışanlara ya da makinelere verilmesini öngörüyordu.
İş verisi işleme problemlerinin programlama maliyetlerine ilişkin çalışmalar, bu maliyetlerin; bir sistemi ilk kez bilgisayara yerleştirme işi, programların normal bakımında gereken değişiklikler ve sorunsuz çalışan bir sistemin evriminin önerdiği düzenlemeler açısından çok yüksek olduğunu göstermektedir. Kodlama yükünün bir kısmını ya da tamamını üstlenmesi için bilgisayarın kendisinin kullanılması fikri, matematiksel ve mühendislik problemleri için otomatik kodlama deneyimleriyle ortaya çıkmıştır. Programlama görevinin bir bölümünü yerine getirmek üzere makinenin devreye sokulması, tüm görevin yeniden incelenmesi ve bileşen parçalarının değerlendirilmesi gereksinimini göstermiştir.
Programlamanın tanımının belirsiz olduğu görülmüştür. Bazıları için bu, yalnızca bilgisayar kodunun yazılması ve hatalarının ayıklanması anlamına geliyordu; diğerleri için ise sistem analizi ve problem tanımını da kapsıyordu. Geleneksel olarak—böylesine genç bir endüstride gelenekten söz edilebilirse—programcının görevi sayısal analiz ve yaklaşım tekniğinin seçimi, akış şeması hazırlama, bilgisayar kodunu yazma, hata ayıklama ve son olarak problemin üretim çalışmasını denetlemeyi içermiştir. Programcılar, matematik ve kesin bilimlerdeki dereceleri ya da geçmişleri temel alınarak eğitime seçilmişlerdir. Başka bir sembolizmi—bilgisayar kodunu—öğrenmek, bir matematikçinin çalışma yaşamındaki doğal bir gelişme olmuştur. Ele aldıkları problemler, aşina oldukları kavramlar ve sembollerle ifade edilmekteydi.
Başlangıçta profesyonel matematikçi, depolama gereksinimlerini en aza indirme ve hesaplama hızlarını artırma gibi yeni problemlerle ilgilenmiştir; ancak bu matematikçi programcı, daha güçlü sembollerle ifade edilebilecek olan komut gruplarının sürekli yeniden yazılması ve kopyalanmasından kısa sürede sıkılmıştır. Bu düşünce çizgisi, depolama alanını korumak amacıyla bu tür “alt yordamları” bir programa yalnızca bir kez yazma isteğiyle birleşerek yorumlayıcı yordamların geliştirilmesine yol açmıştır. Bu sistemler, eğitim süresini azaltmış, bilgisayarı bilimsel personele daha doğrudan erişilebilir kılmış ve hata ayıklama süresini kısaltmıştır.
Ancak yorumlayıcı yordam, sözde ya da makro komutların yorumlanması için gereken süre kadar hesaplama süresini artırmıştır. Derleyici yordamlar bu sorunu, sözde kodu yalnızca bir kez yorumlayarak ve problemi çalıştırmaya hazır, bilgisayar kodlu bir program yazarak çözmüştür. 1952’den başlayarak, matematiksel problemler için derleyici yordamlar, hem sözde kodların kapsamı hem de üretilen çalışma programının verimliliği açısından giderek daha yüksek bir olgunluk düzeyine ulaşmıştır.
Yorumlayıcı ve derleyici yordamların geliştirilmesiyle eşzamanlı olarak, göreli gösterimle kodlama teknikleri geliştirilmiştir. Bunlar, programların alt bölümlere ayrılmasına ve bölümlerin birden fazla kişiye atanmasına olanak tanımıştır. Montaj yordamları, bu bölümleri birleştirmek, depolama alanını tahsis etmek ve gerekirse gecikme süresini azaltmak için kullanılır. Yorumlayıcı ve derleyici yordamlar, kod yazmayan kişilere yardımcı olmayı amaçlamıştır. Bazıları derleyicilerin yeteneklerini paylaşan montaj sistemleri ise öncelikle programcılara ve kodlayıcılara yardımcı olmak üzere tasarlanmıştır.
Otomatik kodlama tekniklerini veri işleme alanına taşımaya yönelik ilk girişimler neredeyse tamamen reddedilmiştir.
"Programlar en üst düzeyde verimli değildi."
"Sözde kodlar anlaşılmazdı."
"Sistemler hantaldı."
Muhafazakâr programcılar, bir bilgisayarın el ile özenle yazılmış kodlarla etkili biçimde rekabet edebilecek bir yordam üretebileceğine inanamadılar.
Bu aşamada, bir “problemin” ya da iş sisteminin bir elektronik bilgisayara aktarılmasıyla sonuçlanan tüm olaylar dizisini yeniden incelemek hayati derecede gerekli hâle gelmiştir. Açıkça görüldüğü üzere, bu süreçte birkaç adım vardı ve her adım, sürece dâhil olan personelin farklı bir geçmişe ve eğitime sahip olmasını gerektiriyordu. Kısaca özetlemek gerekirse, ayırt edilebilir unsurlar şunlardır:
| Görev Türü | Gerekli Personel Türü |
|---|---|
| Analiz ve tanım | Sistemler, yöntemler ve prosedürler personeli; iş eğitimi almış |
| Programlama | Mantıksal düşünebilen personel; olası olarak matematik eğitimi almış |
| Kodlama | Bilgisayar kodunun ayrıntılarını işleme konusunda eğitilmiş personel |
| İşletim | Yalnızca bilgisayarın işletimi konusunda değil, aynı zamanda kodlama, servis yordamları ve hata ayıklama yardımcıları konusunda bilgili personel |
Bilimsel problemlerin programlanmasındaki önceki deneyimlere dayanarak, ilk olası müdahale noktasının kodlayıcının makine ile değiştirilmesi olduğu açıktı; nihai olarak programcılara ve sonunda sistem analistlerine de yardımcı olma umudu akılda tutularak. Böylece problem, yaklaşık iki yıl önce şu şekilde ifade edilebilirdi: bir tür blok diyagramı ya da akış şeması verildiğinde, üretim çalışması için bilgisayar kodu üreten bir programın gerekliliği. Bu, bir çizim tekniği, bir sözde kod, veri tanımlama yöntemi, bir derleyici ve onun kütüphanesi, servis yordamları ve işletim ile hata ayıklama yardımcılarını içeren bir sistem tasarlamayı gerektiriyordu.
Bunun üzerine birkaç temel hedef hemen ifade edilebilirdi:
- Kullanılacak çizim tekniği ve sözde kod, bir bilgisayar programını değil, sistemi—problemi—tanımlamalıdır. Bu koşul, sözde kodun belirli bir bilgisayar donanımından bağımsız olması, analistler tarafından en az eğitimle ve öğrenilecek en az yeni sembolizmle kolayca kullanılabilmesi gerektiği sonucunu doğurmuştur.
- Geliştirilen sistem, bilgisayar donanımının ve olanaklarının tümünden tam olarak yararlanan, son derece verimli bir üretim programı ortaya koymalıdır.
- Ortaya çıkan programın hata ayıklanmasının yalnızca basit bir süreç olması değil, aynı zamanda bilgisayarlar için geliştirildiği gibi, hata ayıklamayı kolaylaştırmak ve derleme sisteminin bakımını yapmak üzere servis yordamlarının sağlanması gerekmektedir.
Her programlama grubunun görevi programlama çabasını korumak ve mümkün olduğunca çok uygulama için yordamlar tasarlamak olduğundan, böyle bir sistemin genel amaçlı bir sistem olması gerektiği açıktı. Mevcut kurulumlarda kullanılan yordamlar ve programlar dikkatle incelendiğinde büyük bir engelle karşılaşıldı. Hemen hemen hiçbir durumda iki kurulumdaki alt yordamlar birbirine benzemiyordu. Matematiksel alt yordamların bir kurulumdan diğerine serbestçe aktarılabildiği durumların aksine, veri işleme alt yordamlarının değiş tokuş edilmesi mümkün görünmüyordu.
Kayan ondalık bir sayının karekökünün hesaplanması Pittsburgh, Los Angeles ve New York’ta aynı kalırken, brüt ücretten net ücrete geçiş hesabı, aynı şehirdeki iki kurulumda bile açıkça aynı kalmamaktaydı. Yalnızca aritmetik adımlar farklı olmakla kalmıyor, aynı zamanda çeşitli dosyalardaki giriş verilerinin konumları ve ilişkileri de büyük ölçüde değişiyor, bu da karşılık gelen alt yordamların birbirlerine yalnızca iskelet düzeyinde benzemesine yol açıyordu. FICA ve gelir vergisi kesintileri gibi ortak hesaplama dizilerinde bile, veri biçimindeki farklılıklar farklı alt yordamların ortaya çıkmasına neden oluyordu. Açıkça, iş kuruluşlarını ortak bir veri biçimi kullanmaya ikna etmek, Internal Revenue Service tarafından zorunlu tutulan formlar gibi durumlar dışında, Herkül’ün gücünü aşan bir emekti.
Böylece iki gereksinim açıkça ortaya çıkmıştır:
- İş verilerinin tanımlanması için bir yöntem sağlamak; yani dosyalar, öğeler, kayıtlar, mesajlar, alanlar vb.
2) Belirli bir işlem için, bu işlemi karşılık gelen veriler üzerinde gerçekleştirecek alt yordamı yazmaya yönelik bir araç sağlamak.
İş problemlerinin kodlanmasına yönelik bir sistem tasavvur edildiğinde, kavram; ilişkili bir “üreteçler” kütüphanesi, servis ve veri tanımlamaları olan bir derleme sistemi biçiminde şekillenmektedir. Sistemler ve yöntemler personelinin problemleri alışılmış dilleriyle ifade edebilmelerine izin verilmesi koşulundan, sözde kodun kapsamlı—geçici olarak yapay da olsa—cümleler oluşturan İngilizce sözcüklerden oluşması gerektiği sonucu çıkmıştır. Bu düşünce çizgisi sürdürüldüğünde, her cümlenin bilgisayar tarafından gerçekleştirilecek bir işleme karşılık gelmesi gerekir. Böylece cümleler, bilgisayara verilen emir kipindeki talimatlar hâline gelir. Ayrıca, bu cümleler herhangi bir bilgisayar için geçerli olacağından, bu işlemleri başlatan fiiller, bilgisayar donanımını aşacak kadar geniş kapsamlı olmalıdır.
“Stoktaki miktarı stok sınırı ile karşılaştır, eğer büyükse işlem 19’a git; aksi hâlde işlem 13’e git” ve “düzeltilmiş ücretten grup sigortası tutarını düş, birikmiş grup sigortasını artır ve toplam diğer kesintileri artır” gibi talimatlar, kullanılan bilgisayarın tambur ya da manyetik çekirdekli depolamaya sahip olduğuna dair hiçbir ima taşımaz. “Zaman-verisi dosyası A’yı, bordro dosyası B’yi al” ifadesi de verilerin delikli kart, kâğıt şerit ya da manyetik bant üzerine kaydedilmiş olduğuna dair hiçbir gösterge içermez. (Bu tür bir sözde koddan örnek bir sayfa Ek A’da verilmiştir.)
Bu tür cümlelerin fiilleri, derleyicinin kütüphanesindeki “üreteçlere” karşılık gelir; isimler ise kütüphanede saklanan ya da çalıştırma tanımına eşlik eden “veri tanımlarına” karşılık gelir. Her iki terim de daha ayrıntılı bir tanım gerektirir. Matematiksel hesaplama durumunda, “iki sözcüklü kayan ondalık alt yordamlar” kütüphanesinin kullanılması yeterliydi. Bu durumda, niceliklerin iki bilgisayar sözcüğüyle kaydedileceği, birincisinin normalize edilmiş mantisayı, ikincisinin ise gerekli onluk kuvvetini içereceği tanımlanmış ve tamamen belirlenmişti.
Veri işlemede ele alınan nicelikler, zorunlu olarak tek bir türden sayılar değildir; adlar ve adresler, kesinti kodları, stok numaraları ve yedek parça stok numaralarını da içerir. Bu nedenle veri tanımlamaları daha karmaşık hâle gelir. Örneğin, her dosya için çok makaralı olup olmadığı, blok ya da kayıt sayımının istenip istenmediği, makara etiketlerinin biçimi ve dosyada kullanılan herhangi bir bekçi işaretinin adı belirtilmelidir. Her öğe ya da kayıt için, isim adı, (standart ise) boyutu ve öğelerin sıralanması ya da birleştirilmesinde kullanılan anahtarların adları verilmelidir. Bir alan tanımlayıcısı en azından alanın boyutunu, öğe içindeki konumunu, işaretinin ve ondalık noktasının konumlarını ve adını içermelidir.
Bu tür tanımlar bir kez yazıldıktan sonra, ana bordro dosyası, stok sınırı, stok girişi ya da vardiya kodu gibi isimlere anlam kazandırılmış olur. Böylece her kurulum, yapılacak işe göre kendi isim sözcük dağarcığını tanımlayabilir ve kendi alışılmış referanslarını koruyabilir.
Fiillere gelindiğinde, bunlar derleyicinin bant kütüphanesinde saklanan “üreteçlere” karşılık gelir. “Stoktaki miktarı stok sınırı ile karşılaştır” ifadesi karşılaştırma üretecine iletildiğinde, bu başvuru iki ismin tanımlayıcılarıyla birlikte yapılır. Üreteç, daha sonra bu özel karşılaştırmayı gerçekleştirmek için gereken tam ve sıkıştırılmış kodlama bölümünü yazabilir.
Bir giriş-çıkış üreteci, girdinin “zaman-verisi dosyası A ve bordro dosyası B”den oluşacağını belirten ifadeyi aldığında, bordro dosyasının çok makaralı olduğunu ve servo değişimlerinin gerekeceğini, etiketinin PAYNNN YYMMDD biçiminde olduğunu (bordroyu, NNN makarayı ve yıl, ay, gün biçimindeki tarihi gösterir) vb. bilgileri keşfetmek için dosya tanımlarına başvurur. Karmaşık giriş-çıkış kodlamasını yazmak için gerekli tüm bilgiler üretecinin elindedir. Bu kadar güçlü üretici yordamların oluşturulabilmesi şaşırtıcı olmamalıdır; tek bir üreteç, binlerce olası özgül statik alt yordamdan herhangi birini üretebilecek kapasitede olabilir.
Program derleme süreci bir veri işleme sürecidir. İki bilgi dosyası sağlanır: gerçekleştirilecek işlemlerin sırasını belirten İngilizce cümleler (sözde kod) ve işlemlerin konularını tanımlayan veri tanımlamaları. Bu iki bilgi dosyası, derleyici ve üretici yordamlar tarafından işlenerek üçüncü bir dosya, yani üretim programı olan bilgisayar komutları dosyası ortaya çıkarılır.
Bu teknikler, günümüzde iş sistemleri için kodlama üreten otomatik kodlama sistemlerinin merkezinde yer almaktadır. Farklı düzeylerde gelişmişliğe sahip birkaç böyle kodlama sistemi mevcuttur. Bu yordamlar, yalnızca bir başka hayalci otomatik sistem olarak bir kenara atılmamalıdır. Programlama süresi ve maliyetlerindeki tasarruf, beklenenden çok daha büyüktür. Doğal olarak, bu yordamlar sorgulanmış ve sınamadan geçirilmiştir.
Bu tür sınamalardan biri, iki Flow-Matic programcısına brütten nete bordro çalışmasını sunmuştur. Kendilerine ücret düzenlemeleri, bordro kayıtları için formlar ve boş çekler verilmiştir. Süreç şemasını hazırlamak, sözde kodu yazmak, programı derlemek ve 4.000 kişilik bir örneği doğru biçimde çalıştırmak yalnızca iki hafta sürmüştür.
İkinci bir sınama, bir sistemler uzmanının “İngilizce” cümleleri yazma konusunda eğitilmesini gerektirmiştir. Araştırma faaliyeti için bordroyu ve iş gücü dağıtımını şemalaştırmıştır. Bir çalışma defteri geliştirmiş ve süreç şemasından sözde kod yazma işini, geçen Haziran ayında liseden mezun olmuş bir daktilografa devredebilmiştir. Daktilograf, veri biçimlerinden yola çıkarak veri tanımlamalarını da hazırlamıştır. Her iki bilgi kümesini de banda yazmış ve bir bilgisayar operatörüne teslim etmiştir. Operatör bunları derleyici yordamdan geçirmiş ve elde edilen programdan test verilerini çalıştırmıştır. Test sonuçları kontrol edilmek üzere sistemler uzmanına geri gönderilmiştir. Sonuçlar doğruydu. Bu arada sistemler uzmanı, başka bir çalışmanın şemalandırılmasına devam etmek üzere serbest kalmıştır.
Bu iki örnek, birkaç hedefe ulaşılmış olmasını gösterdikleri için seçilmiştir. Kodlama maliyeti önemli ölçüde azaltılabilir, geçen süre kısaltılabilir ve hata ayıklama neredeyse ortadan kaldırılabilir. Problemi en iyi bilen kişiler, veri işleme sistemini tanımlayabilir ve gelişmiş programcıların deneyiminin sağladığı en iyi kodlamadan yararlanabilir.
Bunun genel problem üzerindeki etkisi nedir? Bir aşama ortadan kaldırılmıştır: kodlama. İkinci bir aşama, yani sistemin bilgisayar için programlanması, desteklenmiştir. En karmaşık ve zorlu kodlamaların bir kısmı—giriş-çıkış, eşleştirme ve sonlandırma yordamları ile tüm veri işleme çalıştırmalarının en az %70’ini oluşturan mantıksal işlemler—yalnızca iki ya da üç cümlenin yönlendirmesiyle üreteçler tarafından sunulmak üzere düzenli paketler hâline getirilmiştir. Sistem analisti ve programcı, zamanlarını makine programlama ve kodlama yerine sistemin tanımlanması ve iyileştirilmesine ayırmak üzere serbest bırakılmaktadır.
Bir sonraki adım vardır—aslında iki tane. Bunlardan biri, derleyiciler yapmak için bir derleyici üretmektir; diğeri ise programlamanın kendisi alanına ilerlemektir. Mevcut otomatik kodlama sistemleri üzerine inşa edilerek otomatik bir programlama sistemi oluşturulacaktır. Bu tür yordamların uygulanabilir olduğu kanıtlanmıştır.
Bu adımlar nereye götürür? Bu ülkenin endüstriyel büyümesi, bugün endüstri devrimi olarak adlandırılan sürece yol açan kavramsal ve teknik atılımlar olmasaydı ciddi biçimde sınırlanmış olurdu. Aynı şekilde, veri işleme bilgisayarlarının iş ortamındaki gelecekteki ve nihai uygulaması, ekipmanın yeni iş problemlerine uygulanma sürecini hem kolaylaştıracak hem de ekonomik hâle getirecek otomatik tekniklerin geliştirilmesine bağlı olacaktır. İş dünyasında hesaplama sistemlerinin potansiyel kullanım alanlarından yararlanmada yüzeyin bile henüz çizilmediği giderek daha açık hâle gelmektedir. Bununla birlikte, elektronik veri işleme iş yönetimi için gerçekten otomatik ve anlık bir bilgi kaynağı hâline gelecekse, otomatik programlama ve otomatik bilgi denetimi yöntemleri bugün neredeyse hayal edilemeyecek bir düzeye kadar geliştirilmelidir.
Örnek Sözde Kod
(30) EDUCATION (A)’yı 4 ile TEST ET; DAHA BÜYÜKSE İŞLEM 33’e GİT; EŞİTSE İŞLEM 31’e GİT; 0 ile KARŞILAŞTIR; DAHA BÜYÜKSE İŞLEM 37’ye GİT; EŞİTSE İŞLEM 5’e GİT; EŞİTSE İŞLEM 36’ya GİT; AKSİ HÂLDE İŞLEM 5’e GİT.
(31) EDUCATION (A)’ya 2 EKLE.
(32) İŞLEM 39’a SIÇRA.
(33) EDUCATION (A)’yı 8 ile TEST ET; DAHA BÜYÜKSE İŞLEM 5’e GİT; EŞİTSE İŞLEM 36’ya GİT; AKSİ HÂLDE İŞLEM 34’e GİT.
(34) EDUCATION (A)’ya 3 EKLE.
(35) İŞLEM 39’a SIÇRA.
(36) EDUCATION (A)’ya 4 EKLE.
(37) İŞLEM 39’a SIÇRA.
(38) EDUCATION (A)’ya 1 EKLE.
(39) EMPLOYMENT (A)’yı 4 ile TEST ET; DAHA BÜYÜKSE İŞLEM 42’ye GİT; EŞİTSE İŞLEM 40’a GİT; 0 ile KARŞILAŞTIR; DAHA BÜYÜKSE İŞLEM 45’e GİT; EŞİTSE İŞLEM 5’e GİT; EŞİTSE İŞLEM 43’e GİT; AKSİ HÂLDE İŞLEM 5’e GİT.
(40) EMPLOYMENT (A)’ya 2 EKLE.
(41) İŞLEM 46’ya SIÇRA.
(42) EMPLOYMENT (A)’yı 5 ile TEST ET; EŞİTSE İŞLEM 43’e GİT; AKSİ HÂLDE İŞLEM 5’e GİT.
(43) EMPLOYMENT (A)’ya 3 EKLE.
(44) İŞLEM 46’ya SIÇRA.
(45) EMPLOYMENT (A)’ya 1 EKLE.
(46) FF (A)’yı 5 ile TEST ET; DAHA BÜYÜKSE İŞLEM 5’e GİT; EŞİTSE İŞLEM 51’e GİT; 1 ile KARŞILAŞTIR; DAHA BÜYÜKSE İŞLEM 49’a GİT; EŞİTSE İŞLEM 47’ye GİT; 0 ile KARŞILAŞTIR; EŞİTSE İŞLEM 47’ye GİT; AKSİ HÂLDE İŞLEM 5’e GİT.