COBOL’un Uzun Süredir “Ölü” Olduğuna Dair Büyükbabanın Kaydı
(wumpus-cave.net)- Haziran 1992’de Technical Support dergisinde yayımlanan bir yazı zaten COBOL’un ölümünü ilan etmişti; ancak asıl nokta, aradan 30 yıl geçmesine rağmen bu dilin tamamen ortadan kalkmamış olması
- O dönemin 4GL gibi moda terimlerinin çoğu uzun ömürlü olmadı, ancak COBOL birçok daha geç ortaya çıkan alternatife göre daha uzun dayanan bir örnek olarak kaldı
- COBOL’u çalışır halde tutan belirleyici etken Y2K sorunu oldu ve fiilî müdahale için yeni bir COBOL programcı kuşağının eğitilmesi gerekti
- Bir dönem kurulu tabanı büyük olan diller, bir anda yok olmaktan ziyade yeni öğrenenlerin azalmasıyla birlikte uzun bir kuyruk bırakarak varlığını sürdürebilir
- Yazarın büyükbabası 1 Eylül 2024’te 91 yaşında hayatını kaybetti; bu yazı, kişisel bir anıyla eski teknoloji öngörülerinin iç içe geçtiği bir metin
1992’de gelen “ölü COBOL” ilanı
- Yazarın büyükbabası, Haziran 1992’de Technical Support dergisinde COBOL’un ölümünü ilan eden bir yazı yayımladı
- O dönemki yazıda 4GL gibi dönemin terimleri geçiyor; yazar da Wikipedia’daki 4GL örnek listesindekilerin önemli bir kısmından COBOL’un daha uzun yaşadığını ekliyor
- Orijinal metin NaSPA arşivinde duruyor: http://www.naspa.net/magazine/1992/t9206003.txt
- 1992 tarihli yazı, “dead” sözcüğünün anlamını ayırarak COBOL’u ölmüş ama ortadan kaybolmamış, Zombie benzeri bir varlık olarak ele alıyor
- Autocoder da COBOL’un öncülü olarak tanıtılıyor; ölü bir dil sayılmasına rağmen bazı izler bırakmış olabilecek bir örnek olarak karşılaştırılıyor
Y2K’nin COBOL’a kazandırdığı uzun ömür
- COBOL zombiğini hareket halinde tutan en büyük etkenlerden biri Y2K sorunu oldu
- O dönemde haberlerde büyük yer buldu ve sonrasında sanki hiçbir şey olmamış gibi göründü, ama gerçekte devasa bir sorundu
- Müdahale sürecinde yeni bir COBOL programcı neslinin eğitilmesi gerekti
- Bu sürecin, COBOL’un daha uzun süre ayakta kalmasına katkıda bulunmuş olabileceği belirtiliyor
- Yazar artık programlama dilleri için dead ifadesini pek kullanmıyor
- Bir zamanlar büyük bir kurulu tabana sahip olan dillerin tamamen ölmesi zor
- Bunun yerine, yeni programcılar tarafından öğrenilmemeye başlayarak giderek silikleşen uzun bir kuyruk bırakıyorlar
Kişisel bir anıya uzanan teknoloji tarihi sahnesi
- Yazarın büyükbabası 1 Eylül 2024’te 91 yaşında hayatını kaybetti
- Resmî ölüm nedeni zatürreydi
- Büyükannesi aynı yılın Nisan ayında vefat etmişti ve büyükbabası tedavi görmek istemediğini belirtmişti
1 yorum
Hacker News yorumları
Yazı 4GL'den bahsediyor; gerçekten çok uzun zamandır duymadığım bir terim
COBOL da “insanların okuduğu cümlelere benzediği için artık programcılara gerek kalmayacağı” vaadinde bulunmuştu; bu da günümüzün low-code platformlarına ya da LLM tarafından üretilen koda benziyor
Sorun şu ki sıradan insanlar genelde, çalışan bir çözüm çıkacak kadar problemi yeterince ayrıntılı biçimde açıklayıp parçalara ayıramıyor. Bu süreci yapabildiğinizde sonuçta programcı olmuş oluyorsunuz; COBOL'un temel dersi de programcılara ihtiyaç duyulmasının nedeninin yalnızca bilgisayar arayüzleri ya da diller olmadığı
İş süreçlerini iyi bilen birinin, bilgisayarların nasıl çalıştığını fazla öğrenmeden bunları COBOL'a aktarabilmesini hedeflemeye daha yakındı; veritabanıyla SQL üzerinden konuşan analistler ya da veri sorumlularıyla benzer bir yönü var
COBOL ve 4GL'in başlıca amacı maaş bordrosu, bankacılık, insan kaynakları, envanter gibi iş uygulamaları kurmaktı; özellikle mutabakat gibi tekrarlayan büyük hacimli işleri azaltan toplu işleme odaklanıyordu
Özel DBMS'lerin olmadığı dönemin bir ürünü olduğu için dosya organizasyonu ve dosyayla ilgili fiiller çok gelişmişti; bugünün SQL'iyle benzer yanları da var
LLM sihirli biçimde çözüm üretse bile, problemi kısa ve doğru ifade etme sorumluluğu yalnızca daha yukarı taşınıyor
Sonuçta prompt ile “programlama” yapıyor ve LLM'in önerdiği biçimselleştirilmiş çıktı olan kodu gözden geçiriyoruz. Programlamanın niteliği prompt engineering'e dönüşebilir, ama biçimsel bir dil olan kodu anlama işi ortadan kalkmıyor
Yazıda 1990'ların başında 4GL'in çok popüler olduğu söyleniyor, ama bunun mainframe dışı dünyada da böyle olup olmadığından şüpheliyim. 4GL hareketi baştan itibaren güçlü biçimde mainframe odaklıydı; Vikipedi de ilk hedeflerden biri olarak programlar için gereken delikli kart sayısını azaltmayı anıyor
1992'ye gelindiğinde Linux zaten çıkmıştı, Python üzerinde çalışma sürüyordu, Perl popülerlik kazanmıştı ve Haskell'in de ilk sürümü ortaya çıkmıştı. Teknolojinin ön cephesi pahalı workstation'lardan tüketici PC'lerine kayıyordu; dil tasarımcılarının dBase, HyperTalk, AppleScript gibi sonradan 4GL sayılabilecek şeyler üretirken bile 4GL kavramını pek önemsemediklerini düşünüyorum
Doğal dile benzeyen metnin çoğu programlama kullanımı için kötü bir fikir olduğuna katılıyorum, ancak 4GL hareketinin başarısız olmasının tek nedeni bunun olduğunu sanmıyorum. Çoğu 4GL, bir 3GL olan COBOL'dan daha doğal dile benzer de değildi
Daha büyük sorun, 4GL hareketinin yeni neslin ne olduğunu ve neyin faydalı olduğunu doğru dürüst tanımlayamamasıydı. 2GL assembly'den makine koduna çeviri, 3GL ise derleme gibi devrimsel değişimler getirdi; 4GL'de az çok tanımlanabilir değişim ise “dış rutinlerde ya da kütüphanelerde bulunan işlevleri dilin içine daha fazla koyalım”dan ibaretti
Bu yaklaşım alan-özel dillerde iyi işledi; bu yüzden SQL, R, MATLAB gibi başarılı 4GL'ler ortaya çıktı. Buna karşılık genel amaçlı 4GL kavramının eninde sonunda aşırı şişkin dillere varmaya mahkûm olduğunu düşünüyorum
Bugün böyle bir şeyi yapabilen ya da yapması gereken neredeyse kimse yok
Bu bağlamda akla Scala geliyor. Yazıda COBOL’un tarif ediliş biçimine bakınca Scala’nın da fiilen ölü bir duruma yakın olduğunu düşünüyorum
Hâlâ Scala ile yazılmış çekirdek bileşenlere sahip çok sayıda şirket ve servis var, ancak yeni projelerdeki ilgi büyük ölçüde sönmüş durumda
2012-2014 arasında HN’de sürekli “Scala ile X yapmak” yazıları gördüğümü hatırlıyorum; artık neredeyse hiç görünmüyor. Bu doğal ve kaçınılmaz bir durum olabilir, ama Scala’nın diğer ana akım dillerin hâlâ yakalayamadığı iyi yanlara sahip olması açısından üzücü
Test sistemleri gibi şirket ekosistemi için oldukça önemli projeler de var; eskiden bu sistemleri yapan mühendislerin çoğu şu anda üst düzey yönetici oldu
O dönemdeki teknoloji seçimini hâlâ savunanlar da var, geriye dönüp bakma fırsatı verilince daha açık fikirli davrananlar da. Genel hava, o zaman Kotlin var olsaydı ya da Swift backend servislerinde kullanılabilir durumda olsaydı Scala’yı seçmeyecekleri yönünde
https://redmonk.com/sogrady/2024/09/12/language-rankings-6-2...
İlk dönemki aşırı heyecan yatıştı ama sorun değil. Her dilin bir hype döngüsü vardır ve tahminler de çoğu zaman boşa çıkar. Ana akım programlama dillerinin artık COBOL gibi ölmesi zor
Java’nın 2001’den beri öleceği söyleniyordu ama dot-com balonunu, .NET’i, LAMP’in P’sini, Ruby’yi, JS’i ve Go’yu atlattı. Python için de 3 sürümüne geçiş sırasında insanlar Ruby’ye kayarken ölecek denmişti
Scala’nın dünyadaki en popüler fonksiyonel programlama dili olduğunu, araçlarının ve kütüphanelerinin iyi olduğunu, Scala 3’ün de harika bir yükseltme olduğunu düşünüyorum
Bir zamanlar inanılmaz büyüktü ve her yerde varmış gibi hissediliyordu, ama şimdi giderek nişe itiliyor. COBOL gibi sahada hâlâ çok sayıda Perl kodu var
Jack Henry, SiriusXM, Starbucks, Disney streaming servisleri ve Capital One da son 5 yıldan bugüne veri bilimi dışındaki servis tarafında yeni Scala projeleri geliştiriyor
Elbette daha çok ekip var, ama aklıma hemen gelen tanınmış yerler bile bu kadar olduğuna göre öldüğünü söylemek zor
Ancak Play ve Akka merkezli framework işleri ile Airflow olmayan saf Spark işleri azalıyor gibi görünüyor. Bunlar Scala ekosisteminden çıkan framework işleri idi; çoğu durumda Scala’nın kendisi ikincil konumdaydı diye düşünüyorum
Scala’yı seviyorum ama hep kenar mahalle dili oldu; COBOL ise gerçekten her yerdeydi
Bir gün Fortran, COBOL, Ada, APL gibi legacy dilleri oturup bizzat kurcalamam gerektiğini düşünüyorum
Popülerlikleri kesinlikle düştü ama hâlâ önemli yerlerde kullanılan diller
Aynı zamanda aklıma muazzam miktardaki Java kodu da geliyor. Java, iyi ya da kötü, kurumsal alanı neredeyse yuttu; 30-40 yıl sonra yalnızca emeklilerin eski banka sistemlerini ayakta tutmak için Java kullandığı bir tabloya dönüşmemesi için bir sebep var mı, merak ediyorum
Devasa tekil codebase’ler ya da platformlar olması da etkili olabilir. Dil anlaşılmaz ve zor değil; sadece yapısı iyi görünmeyen çok fazla kod var
Önümüzdeki 100 yıl boyunca pazarın yaklaşık %0,05’ini kaplayacak gibi geliyor
Ancak son birkaç yılda yeni kodun çoğu Kotlin ile yazılıyor
Kişisel olarak da ona bağlılığım var; 90’larda şirkette PC üzerinde gerçekten kullanıyordum. Mesele, veriyi nasıl içeri alacağımızı bulmaktı; sonunda kayan noktalı sayıları 1 ve 0 vektörü gibi ele alıp bitleri değiştirerek Microsoft biçiminden IEEE biçimine dönüştüren bir rutin yazdım
Tabii bu, kemerime soğan bağladığım zamanlardan bir hikâye
Saf sayısal simülasyon yapacak olsam C++ veya Python yerine Fortran’ı tercih ederdim. NumPy hariç tabii; NumPy’nin kendisi de sonuçta Fortran ve C++’a dayanıyor
2025 Carolina Code Conference için hâlâ COBOL konuşmacısı arıyoruz
Özellikle GnuCOBOL yakın zamanda güncellendiği için bir süredir programa COBOL konuşması koymak istiyordum
https://gnucobol.sourceforge.io/
https://carolina.codes
“2000 yılının dilinin nasıl görüneceğini bilmiyorum ama adının Fortran olacağını biliyorum.” —Tony Hoare
COBOL her dönemde değişmeye devam ettiği için canlı sayılabilir. Modern COBOL, insanların adını duyunca içgüdüsel olarak aklına gelen 1950’ler COBOL’undan epey farklı
Bu biraz Java’nın Algol-94 gibi bir adla anılması ve bu yüzden hâlâ Algol ile programlama yaptığımızı söylememize benziyor
MULTIPLY A BY B GIVING C ON SIZE ERROR STOP RUN.gibi yazmıyor<https://dtss.dartmouth.edu/sciencearticle/index.html>
COBOL ölmedi, ama erişmesi zor. Çünkü Linux’ta kullanılabilecek açık kaynak araç neredeyse yok
OCamlPro’da, GnuCOBOL açık kaynak derleyicisini merkeze alarak bir açık kaynak ortamı oluşturmak için SuperBOL adlı bir proje başlatıldı. GnuCOBOL zaten olgunlaşmış durumda ve şirketlerde de kullanılıyor
COBOL için LSP içeren bir VSCode eklentisini yayımlayarak modern bir IDE deneyimi sunuyorlar; müşteri taleplerine göre başka araçlar üzerinde de çalışıyorlar
COBOL bir iki günde öğrenilebilir ve “sıkıcı” COBOL işlerini denemek istiyorum, ama mainframe deneyimim yok
https://gnucobol.sourceforge.io/
https://cobolworx.com/pages/cobforgcc.html
Her zamanki gibi bu tür tartışmalar “ölü” ve “yaşıyor”u nasıl tanımladığınıza bağlı
Bir teknolojinin üzerinde artık yeni iş kurulmuyorsa ona ölü denebiliyorsa, COBOL’a ölü demek pek yanlış olmaz. COBOL’un genelde vekil ifadesi gibi kullanılan IBM 390x, yani Z/OS platformu için de aynı şey geçerli
Tersine, üretim ortamlarında hâlâ kullanılıyorsa yaşıyor sayarsak COBOL elbette yaşıyor; hatta kendisinden daha genç birçok teknolojiden çok daha canlı
Ancak bunu COBOL’un ya da mainframe ekosisteminin bir avantajı olarak görmek gerekmez. Kurumlar ilk başta iyi çalışan şeyi bırakmama eğilimindedir; erken dijitalleşmenin başını çeken devlet kurumları, bankalar ve havayolları gibi yerlerde de o ilk tercih çoğunlukla IBM mainframe’leri ve onların üzerindeki yazılımlardı
Bizim mainframe’imiz saatte 100 milyon işlemi rahatça işliyor. Üstelik bunların çoğu senkron ve her işlem birden fazla SQL işlemine dönüşüyor
Nihai tutarlılık da bir yöntem, ama finans alanına hiç uygun değil; askeriye, sigorta, tıp ve sağlıkta da büyük olasılıkla öyle. İşi partition’lara bölebilirsiniz, ama shard sınırlarını geçtiğinizde tutarlılık sorunları ortaya çıkar
COBOL henüz ölmedi, ama yavaş yavaş o yöne gidiyor. Mainframe’den çıkmak için aktif olarak çalışmayan tek bir banka bile bilmiyorum. Yine de gördüğüm tahminler mainframe ve COBOL’un en az 2050’ye kadar kalacağını söylüyor
Yani önümüzdeki 26 yıl boyunca COBOL kodu yazılacak demek. COBOL programcılarına talep yüksek ve ücretleri de iyi sayılır; dolayısıyla bugün COBOL programcısı olarak kariyere başlasanız bile neredeyse bir ömürlük çalışma süresini doldurabilirsiniz
Giriş engeli her zaman aşırı yüksekti ve o dönemdeki başlıca müşteriler de köklü sigorta şirketleri, bankalar ve devlet kurumlarıydı. Yeni bir şirketin bilişim yapmasının mümkün hâle gelmesi daha çok mini bilgisayarlardan sonra oldu
Bu anlamda pek bir şey değişmedi; ürünün hedef pazarını düşününce, bir platformun yaşayıp yaşamadığını belirlemek için “yeni işletmeler kullanıyor mu” ölçütünü uygun görmüyorum
Yeni bir iş birimi ya da kurum içi startup ekibi, örneğin yeni bir sigorta ürünü kategorisi bile bankanın geri kalan sistemleriyle entegre olacaksa bazı kısımları COBOL ile yazabilir
En azından doğrudan COBOL ile yazmasalar bile, yeni bir x86 rack’i ve onu yönetecek insanları alacak bütçe olmadığından mevcut COBOL çalıştırma altyapısının, yani Z/OS’un üzerine koyabilirler
Bulut yeni mainframe’dir, ama daha kötü bir sürümü. Dezavantajlarının hepsine sahip, en büyük avantajı ise yok
Eskiden CICS ile çok kararlı ve yüksek performanslı servisler oluşturabilir, aynı transaction içinde başka servisleri çağırabilirdiniz. Platform, veri bütünlüğünü korumak gibi karmaşık işleri hallederdi
Aynı transaction içinde birbirini çağıran AWS Lambda’ları bir kez yazmayı deneyin; fark ortaya çıkar
Ayrıca karşılaştırma neden “aynı transaction içinde birbirini çağıran AWS Lambda” anlamıyorum. Mainframe’e dağıtım yapmak da geliştiriciye erişim yetkisi verilmiş bir API’ye kod içeren bir
.zipatmak kadar basit miydi?Bazıları bunu, modern diller yerine COBOL’u seçtiğim ya da tercih ettiğim şeklinde anlayıp eleştiriyor; kastım bu değil. Yalnızca kutunun dışından bakan şeytanın avukatı tarzı bir gözlem yaptım.
İronik biçimde, Rust’tan daha kolay okunup anlaşılabilen, bellek güvenli ve kararlı bir dil olarak COBOL zaten vardı. Ama kimse kullanmak istemediği için “ölü” bir dil oldu; buna karşılık modern dünyayı mümkün kılan sistemler onun üzerinde çalışıyor.
Örnek olarak bir sayı alıp çift mi tek mi olduğunu yazdıran Rust kodu ile COBOL kodunu karşılaştırınca, COBOL tarafı daha doğrudan okunuyor.
Aynı düzeyde performans verip vermediğini, başka dillerin yerel kodlarıyla aynı şekilde entegre olup olmadığını, bileşimi ve geriye dönük uyumluluğu kolaylaştıran bir modül sistemi üzerinde kullanılabilir bir paket yöneticisi olup olmadığını, Rust’ın cebirsel veri tipleri gibi veri ve hata biçimlerini rahatça ifade edip edemediğini bilmiyorum.
COBOL’un hâlâ kullanılmasının nedenleri olduğu gibi, yeni dillerin yaratılmasının da iyi nedenleri var.
Gerçekte gerekli boilerplate eklenip çalıştırılabilir bir COBOL programı yapıldığında,
abcgirdisine “even”,12girdisine ise “odd” yazdırıyor.Rust sözdizimini özellikle sorun etmek de ilginç. Günümüzdeki çoğu dil gibi Rust da genel olarak C ailesi sözdizimine sahip; biraz da OCaml öğeleri karışmış durumda. Sözdiziminden bağımsız olarak Rust ile COBOL’un hedefleri çok farklı olduğu için, “o zaman sadece COBOL kullanalım” demek Rust’ın varlık nedenini ortadan kaldırmıyor.
https://www.ibm.com/docs/en/cobol-zos/6.2?topic=statement-ex...
ALLOCATE, pointer adresi ayarlama,FREEgibi kodlar geçiyor.Bu tweet garip biçimde hoşuma gidiyor.
https://x.com/grauhut/status/1000017084435312642
Çevirisi kabaca şöyle: “Müşteride COBOL buldum. Sorun değil. Mainframe. Özel bir şey yok. Son yorum 1985 tarihliydi. Yazarı annemdi.”