Neden COBOL? [kapalı]


52

İnsanlar COBOL'den bahsettiklerinde, genellikle ya horlama ya da inleme ile karşılanır. COBOL hakkında fazla bir şey bilmiyorum ama içinde yazılmış bazı programlar gördüm. Bunun endişe verici olduğunu ve benim gibi inisiyatif olmayan gözlerin anlaşılmaz olduğunu görebiliyorum. Ancak, aslında, tüm programlama dilleri uzman olmayan kişilere anlamsız değil mi?

İşe yaradığını, iyi çalıştığını ve tasarlandığı sektörlerde hala yaygın olarak kullanıldığını biliyorum. Bunlar iyi bir dilin işareti değil mi? COBOL'un nesi kötü?


8
COBOL, devasa bir nokta vuruşlu yazıcıdaki hiyerarşik veritabanlarını veya düz dosyaları yönetmek ve verileri yalnızca salt metin raporlarına pompalamak için TAMAM. Ancak günümüzde çoğu veri RDBMS'lerde ve çoğu yöneticiler güzel raporlar gibi. COBOL bunu çok iyi idare edemiyor.
pdr

1
@ Steve314: Evet! Bunlar! Bizimkiler hariç, Line Matrix'ti ve bu sabah bunu yazdığımda kahve içmemiştim. - en.wikipedia.org/wiki/Line_matrix_printer
pdr 7:11

3
COBOL’u bırakmadan, biraz arama yaparsanız, bir çok etki alanına özgü dilin burada çok popüler olmadığını göreceksiniz (en azından söylemek gerekirse); COBOL, Fortran, VB6, MATLAB ... hepsi çok iyi diller, sadece bilgisayar bilimleri ve soyutlamalarını öğretmek için iyi değil.
Kale

4
@Rook - bunların hepsi etki alanına özgü diller olarak sayılıyor mu? MATLAB bile, IIRC, hala genel amaçlı programlama yeteneğine sahiptir. DSL'nin çoğunlukla yacc, lex etc - sadece oldukça dar bir görevi yerine getirebilecek diller için geçerli olduğunu ve diğer ortak isimlere "küçük diller" inin yol açtığını sanıyordum. COBOL, Fortran veya VB'nin alana özgü olarak adlandırılabileceği hiç aklıma gelmedi. Tabii ki her biri belirli alanlarda kullanılmaya meyilli, ama yine de genel amaçlı diller olarak kabul edildiklerini düşündüm.
Steve314

1
@ Steve314 - Evet, iyi - iki taraf olduğunu söyleyebiliriz. Biri dom.spec diyor. sadece sizin bahsettiğiniz olanlar, diğeri daha genel bir bakış açısına sahip ve diğerlerinden de bahsettiğimde sayılırken, yine de onları genel amaçlı kategoride tutuyor. Ama pratikte, mühendislik ve bilimden bahsettiğiniz her yerde. comp. Fortran ya da MATLAB, business ... COBOL ... alacaksınız, size en mantıklı görünen terminolojiyi kullanın. Bunu kullanırım çünkü çoğu insanla uyduğunu biliyorum. Her durumda, genel olarak cs topluluğunun bir nedenden ötürü çökmenin adil bir payını alıyorlar.
Kale

Yanıtlar:


68

COBOL öğrendiğim ilk dillerden biriydi - Basic'in sayısız versiyonunu, üç veya dört assembler dilini ve bir Forth değişkenini görmezden gelirseniz, o zaman ilk beşimdeydi ve Pascal ile aynı anda öğrendi. Şimdi, dili kullanarak kişisel deneyimlerime cevap veriyorum.

EDIT Ben eski deneyim söylemeliyim . 80'lerin sonundan sonra dili hiç kullanmamıştım, ancak yeni bir kitap aldım (eski olanı değiştirmek için tiksindirmeden attığım için), böylece korku hikayelerimin çarpıtılmaması için bir şeyler yazdım. Ancak dilin en azından son 20 yılda nasıl geliştiği hakkında hiçbir fikrim yok.

Açıkçası, pek çok insan için, bu ise ve aynı zamanda çok daha üçüncü el pass-me-down tutumları şey - "eski kötü" Sadece o jonsca zaten tarif etmiştir görüntülemek. Ancak bunun altında yatan gerçek sorunlar var.

Çok endişelenmek gerçek bir sorundur - kodu anlamada çok fazla karışıklık var. Bu şimdiye kadar en büyük konudur. Bakmak İnsanlar MOVE, ADDve MULTIPLYdehşet içinde vb ifadeler, gerçek bunun biraz abartılı görünüme sahip - COMPUTEdeyim diğer dillerdeki atamaları yakındır. Ancak tüm bu bölümlerde ve bölümlerde hala çok fazla karışıklık var. COBOL'de öğrendiğim ilk şeylerden biri, her zaman standart bir A4 uzunluğunda SKELETON.COB sayfası kopyalayarak başlamaktı.

COBOL yapar bazı ilginç özelliklere sahip, ancak bu özellikler (örneğin PICşey) DBMS ziyade programlama dili artık daha parçası olan şeyleri olma eğilimindedir ve bu bana göre genellikle bu sorumlulukları ayırmak için daha iyi bir yol olabilir. Ayrıca, diğer dillerdeki bazı kütüphaneler karşılaştırılabilir bir şey kullanır PIC(örn. C standart kütüphanesinde printf ve scanf). Muhtemelen, en iyisi tutuldu, ama en kötüsü düştü.

Ayrıca, her hoş özellik için en az bir dayanılmazlık vardı. Örneğin, bir döngü ne kadar önemsiz olursa olsun, vücudu ayrı bir prosedüre taşımalısınız. PERFORM ... UNTIL ...Ve benzeri ifadeler vardır tek ifadeleri - yapılarını engellemez. Orada - Bir anlamda, COBOL önce yapısal programlamadan yapısal programlama bir tat icat oldu oldu bir GO TO, ama kullanım (ı COBOL kullanıldığında en azından), ancak özellikle döngü sadece iyi işlenmedi cesaretini var.

Aslında, COBOL'den sonra bana en çok hatırlattığım dil ... dBase idi. Ashton-Tate dBase III + 'te olduğu gibi. Bu günlerde, insanlar xBase jenerik ismine yol açan ölü ya da ölmekte olan klonların (Clipper, FoxPro vb.) Hatırlanması daha muhtemeldir - ve hala xHarbour'da yaşayan bir soyundan var. Mesele şu ki, bunlar veritabanı dilleriydi, fakat SQL gibisi yoktu.

O zaman bile, belirli bir veritabanında çalışan her COBOL programının, o veritabanının özelliklerinin bir kopyasını içermesi gerekir (ve kopyalar tutarsız olabilir), bu aslında veritabanının kendi yapısını bildiği xBase'deki durum değildir.

Bunu dikkate alarak, eğer öyleyse kabul ederseniz, COBOL o kadar da kötü değildir. Ancak , veri yapıları yazmak için bir dil değildir Bu yüzden COBOL, C ve Pascal kutsal savaşları sırasında çok fazla acı çekti - her iki taraf da COBOL'un ikili ağacı yeniden icat etmenin iyi olmadığı konusunda hemfikir olabilirdi.

Oh - ve asla unutamayacağım bir şey, ilk COBOL ders SORTkitabımın komutu tanımlamadığını , kitabın kapsamı dışında olduğunu söylemesidir - görünüşe göre, yazar, sıralama fikriyle başa çıkamıyordu ya da COBOL öğrencilerinin başa çıkabildikleri minik küçük zihinlerden daha fazlası olduğu düşünülüyordu . Bu tür bir şey COBOL'u ciddiye almayı çok zorlaştırdı.

Bunun garip bir yanı da, aynı zamanda yaklaşık olarak öğrenmeye zorlandığım ve özellikle COBOL ile kullanım için zorlandığım Jackson Structured Programming idi. Bunun bir kısmı giriş için bir yapı şeması, daha sonra çıktı için bir yapı şeması, ardından kod için yapı-içi şema çiziyordu. Sıralamada zaten çözülmüş bir problem olması açıkça bekleniyordu - bu şekilde bir sıralama algoritması elde edemezdiniz. Bu yüzden, önerilen kitap tarafından, bütün tasnif etme kavramının benim küçük minik aklımın ötesinde olduğu ve aynı zamanda bir düzine farklı sıralama algoritması gibi bir şey öğretildiği ve bunları Pascal'da nasıl uygulayacağı anlatılması garipti.

JSP'nin kaldırabileceği problemler muhtemelen COBOL'un nispeten iyi yapabileceği şeyler için iyi bir rehberdir. Ancak o zaman bile, bu mutlaka ya JSP'nin ya da COBOL'un bu sorunları çözmenin iyi yolları olduğu anlamına gelmez.


30 Temmuz 2014 tarihinde EDIT

Daha yeni bir ün kazandım, bana burada olduğunu hatırlatıyor. Olduğu gibi, bazı nostalji destekli antik kitap koleksiyonculuğu nedeniyle, artık WRT SORTkomutunun bir noktasını düzeltirim .

Başlangıçta COBOL öğrenirken önerilen metin olarak kullandığım kitap Ray Welland tarafından "COBOL'de Metodik Programlama" idi. Bu COBOL 85'i kapsamıyor (daha önce hiç görmediğim "COBOL-85'te Metodik Programlama" adlı bir sonraki sürüm olmasına rağmen).

Aşağıda, "OS ile birlikte gelen sıralama yardımcı programını kullanarak giriş dosyalarını okumadan önce sıralamanız ya da oluşturduktan sonra çıktı dosyasını sıralamanız gerekiyordu" şeklinde yorumlar. Buna cevabımdan "OS ile geldi" noktasını özledim. Kindall, Unix felsefesi AFAICT'e benzer bir şey önerdi, COBOL, bunun için iyi olan bitler için kullanıldı, diğer şeyler için kullanılan bir sıralama aracı gibi işletim sistemi programları ve muhtemelen bitleri yapıştırmak için bir toplu iş / komut dosyası / kabuk dili kullanıyordu. Bu, etkileşimli yazılımın var olmayanlara nadir olduğu eski bir dünyada çok daha mantıklıdır, bu yüzden yine de bir sürü iş (dolayısıyla "toplu iş dili") gönderecektiniz.

Aşağıdaki "COBOL'de Metodik Programlama" nın 165-166. Sayfalarından alıntılanmıştır.

Sıralanmış seri dosyaların kullanılması, bir dosya içindeki kayıtları anahtarla belirtilen bir sıraya göre sıralamanın gerekli olduğu anlamına gelir. Daha büyük bilgisayar sistemlerinin çoğunda, anahtarı oluşturan her veri öğesinin konumu, türü ve boyutu verilen bir dosyayı sıralayan bir sıralama yardımcı programı bulunur.

Bir COBOL programındaki kayıtları sıralamak için bir tesis de bulunmaktadır, ancak bu iki nedenden dolayı bu kitabın kapsamı dışındadır:

(a) işletim sistemine olan arayüz genellikle oldukça karmaşıktır ve sistemden sisteme değişir,

(b) sıralama modülü, ANS '74 COBOL'un isteğe bağlı bir parçasıdır ve daha küçük bilgisayarlar için COBOL sistemlerinde uygulanamayabilir.

Bu nedenle, dosyaları belirli bir sıraya göre sıralamak için imkanların mevcut olduğu ve bu dosyaların güncellenmesi probleminin dikkate alınacağı varsayılacaktır.

Kısacası, tür doğru - varsayımlar genellikle COBOL dışında yapılacaktır. Küçük bilgisayarlar için 1974 yılındaki bir programlama dilden ayırmanın hariç tutulmasının gerçek bir gerekçesi bile olabilirdi.

Yukarıda söylediklerim temel olarak, kitabı atmadan dolayı gerçekleri kontrol edememekten yaklaşık 20 yıl sonra elde ettiğiniz şeydi.

Yine de 1988’de ve 1989’da 1974 standardını (1985 standardını değil) kapsayan bu önerilen kitaptan COBOL’ü resmen okuduğumu belirtmeliyim. “Öğrenciler İçin COBOL’nin üçüncü baskısı (Parkin, Yorke, Barnes) - COBOL 85'i kapsayan ilk baskı 1990'a kadar yayınlanmadı. Emin değilim, ancak "Metodik Programlama" nın COBOL 85 baskısının 1994'e kadar yayınlanmadığını düşünüyorum.

Fakat bu mutlaka ayağını sürükleyen COBOL dünyasını temsil etmiyor - pek de değil. Yeni standartların benimsenmesi, şimdi bile her dil için zaman alır.


5
+1 Aslında neden bahsettiğinizi bilmek için. Size JSP için bir +1 daha verebilmeyi diliyorum. Delta'yı hiç kullandın mı? JSP'nizi koda, hafıza tanımlarına (01 - 03 - 05) benzer bir tarzda yazıp Cobol'unuzu boşluklara yazabileceğiniz şekilde bir Cobol üreteciydi. Hem eğlenceli hem de cehennem gibi sinir bozucu.
pdr

3
JSP'deki Wikipedia sayfası - en.wikipedia.org/wiki/Jackson_Structured_Programming . Öğrendiğimde, her şey kağıt üzerinde yapıldı.
Steve314

1
Sıralama işleminin çözülmüş bir problem olarak değerlendirilmesinin nedeni de öyleydi. Benim hatırladığım kadarıyla, COBOL bir seferde bir ya da iki kayıtta birden fazla kayda sahip olmaktan (şimdiki kayıt ve belki de önceki kayıt) cesareti kırdı . İşletim sistemiyle birlikte gelen sıralama yardımcı programını kullanarak giriş dosyalarını okumadan önce sıralamanız veya oluşturduktan sonra çıktı dosyasını sıralamanız gerekiyordu.
çeşit

1
Birkaç yıl boyunca COBOL yaptım (referans için sadece 26 yaşındayım) ve sizin için bir şeyi netleştirebilirim. Artık şimdi bunu satır içine alabilirsiniz, her döngü için paragrafları tanımlamak gerekir PERFORM UNTILiçin END-PERFORMbloklar. Bunu bilmemden gerçekten nefret ediyorum.
AgentConundrum

1
@NealB COBOL standartlarına göre tecrübesinin modası geçmiş olduğunu kabul ettiği için onun için sadece noktayı açıklıyordum. COBOL85 ile ilgili fikrinizi anlıyorum, ancak orada ya ortaya çıkmadan önce başlamış ya da kafalarını önceki bir sürümde sıkıştıran insanlar tarafından yazılmış birçok eski kod var. Gerçekten bir kod temeli 85 standart olduğunu varsayamazsınız, ancak öyle olsa bile, bu hala rahatsız edici bir dildir. Eski programcılar, değiştirildiklerinden daha çabuk emekli oluyorlar ve çok az sayıda yeni programcı COBOL'de çalışmak istiyor. Eşyalara tekrar dokunmak istemeyeceğimi biliyorum.
AgentConundrum 17:11

43

Bugün çoğunu COBOL yazarak geçirdim. Sanırım şu anki girdiyi verebilirim.

İlk önce kötü şeyler: -

  • İşlev çağrısı yok. Modern COBOL bazı yerleşik işlevlere sahiptir, ancak kendi yazmak için ciddi bir mühendislik işidir.
  • Alt rutin çağrılar üzerinde tip kontrolü yok. Bir alt rutin çağrısında herhangi bir şeyi iletebilir (ya da geçemezsiniz), çağrılan alt rutin, doğru parametrelere sahip olduğunu açıkça kabul eder ve eksik ya da geçersiz parametreleri saptamanın bir yolu yoktur.
  • Kütüphane yok. Sıfır sıfır yok. Standart kütüphaneler yok, yaygın olarak kullanılan kütüphaneler yok. Ortak işleri kodlamada tekrar tekrar elden bırakıyorsunuz.
  • Her şey bir anahtar kelime olarak uygulanır. Dil yazarları bir kütüphane kavramına sahip olmadıkları için her yeni özellik, örneğin PARSE ve RENDER for XML desteği gibi yeni anahtar kelimelerle hayata geçiriliyor.

Yanlış anlaşılma, yani bu eleştiriler yaygın olarak geçersiz veya ilgisiz olan sevgili eski dile karşı seviyelendi.

  • Ayrıntı. Böylece birkaç karakter daha yazabilirsiniz! Bu ciddi bir konu değil. Çoğu durumda, COBOL, Java'dan daha az ayrıntılıdır.

  • “COBOL FILES” Bu terimin bir hayli çevrelenmiş olduğunu görüyorsunuz. COBOL'un sadece herhangi bir dosya formatı ve hemen hemen herhangi bir dosya organizasyonu ile başa çıkabileceği böyle bir şey yoktur.

  • Çok iş parçacığı yok. COBOL'un geliştiği ortamlarda, çoklu iş parçacığı, genellikle kötü olma eğiliminde olan programcılardan ziyade, iyi olan CICS veya IMS gibi uygulama kaplarına bırakılır.

Ve iyi şeyler - COBOL'un bazı yönleri diğer dillerden daha üstündür: -

  • Veri yapıları COBOL, karmaşık veri yapılarını ve tek veri türlerini tanımlamak için kısa ve esnek bir sözdizimine sahiptir.
  • Ondalık Aritmetik. Ondalık aritmetik, yani muhasebeciler tarafından anlaşıldığı gibi aritmetik, uygun yuvarlama vb.
  • Times ile birlikte hareket etmek. COBOL'un bazı yönleri şaşırtıcı biçimde moderndir. XML desteği, OO programlama desteği, Java sınıflarını kullanma yeteneği vb.
  • DB2, CICS vb. İle entegrasyon Bu yalnızca IBM'in ana bilgisayarı COBOL (ancak şu ana kadar çalışan en büyük COBOL yığını) için geçerlidir, ancak DB2, CICS ve diğer ana bilgisayar ortamları ile entegrasyon, veri tabanı destekli veri kodlama gibi şeylerin kodlanmasını kolaylaştırır web hizmetleri diğer ortamlardan daha.
  • Ekran işleme. AS / 400 ve MicroFocus Cobol'da uygulanan standart ekran kullanımı mükemmel.
  • Verim. Uzun yıllardır COBOL derleyicileri çok yüksek performanslı çalıştırılabilir ürünler üretmektedir. Yalnızca yerel C ve yerel Assembler IBM ana bilgisayarında COBOL'u yener.

Sonuç olarak, 1950’lerde bir komite tarafından bir araya getirilen bir şey için gayet iyi yapıyor. Eğer mevcut bir uygulama COBOL'da uygulandıysa ve işi yaparsa, tekrar yazmak için bir neden yoktur. Ancak, gerçekten iyi bir neden olmadıkça, yeni projelerin COBOL kullanması için herhangi bir gerekçe görmüyorum.


2
Cevabımda COBOL'ün veri yapıları için kötü olduğunu söylüyorum. Bu "veri yapısının" ne anlama geldiğindeki bir fark mıdır? Belki de kayıt düzeni araçları mükemmeldir, ancak COBOL hala ikili ağaçlar vs. için yanlış dildir. Ya da belki COBOL deneyimim çok eski ya da başka bir şekilde sınırlı mıydı? Anahtar soru - COBOL'da imleç var mı? (Endişe verici bir şekilde, hızlı bir Google, eski kitabım hayır önermesine rağmen evet öneriyor). Benim için tüm bu güzel puanları kazandıran bir cevabı geri
almaktan

3
Ondalık aritmetiğin dezavantajı var: tam olarak kaç basamak istediğinizi söylemek zorundasınız. Biz bir çok az varken hataları bulmakta hatırlıyorum 9içinde s PICbir grup içindeki bazı programda maddesi.
David Thornley

2
(Bilgi verilmemiş) izlenimim, COBOL'un sert, sabit boyutlu kayıtlardaki verilerle başa çıkmada özellikle iyi olduğu yönünde. Belki de dinamik veri yapılarında çok iyi değil. Yanlışsam düzelt.
Barry Brown

@ Steve314 - yep işaretçiler 1985'te ortaya çıktı, ancak onları sadece bağlantı bölümündeki şeylere ayarlayabildiğiniz için biraz topal oldu. Daha sonraki sürümler bir şeye işaret etmenize izin verdi.
James Anderson

1
@ Yapılar - karmaları ve ağaçları vs. açısından Python standartlarına kadar olmasa da C veya Java kadar iyidir - C ++ artı Boost veya Java artı koleksiyon Kütüphanesi kadar iyi değildir. Bir kez daha standart kütüphanelerin ve işlevlerin değerini anlamadaki başarısızlık, dili uzun ömrü boyunca sakat bıraktı.
James Anderson

27

Bu muhtemelen Djikstra'ya bağlı. Djikstra, "COBOL kullanımı, zihni zorluyor; öğretisinin bu nedenle bir suç olarak kabul edilmesi gerektiğini" belirtti. Kobol saf, yapılandırılmamış ve ayrıntılı olarak görülmüştür. Kodu kendi kendine değiştirme yeteneği ile (cobol programcıları arasında bile cesareti kırılmış bir uygulama), hata ayıklamak veya takip etmek de oldukça zordu.

O zaman, sürümler arasında da büyük bir uyumsuzluk meselesi var.

Vikipedi dilindeki eleştiri ve savunma bölümünü okumanızı tavsiye ederim - http://en.wikipedia.org/wiki/COBOL#Criticism_and_defense


20
Bir gün Dijkstra'nın kınadığı dillerde yazdığı kodla dolu bir kasa keşfedecekler.
jonsca

7
@jonsca - para için ne yapacağınıza şaşıracaksınız.
JeffO

3
Uyumsuz versiyonlar en azından 70'lere kadar oldukça yaygın olarak kullanılan IIRC idi ve 80'lerde bile Basic vardı. Dijkstra muhtemelen benim cevabımdan bahsettiğim bir konuya dayanarak dikkatini çekiyordu - COBOL veri yapısı kodlaması için iyi değil (veya iyi olması gerekiyordu). Bu nedenle, "programlama öğretimi" veya "bilgisayar bilimi öğretme" özel bir değeri için, COBOL gerçekten zehirdir. Tabii COBOL bunun için uygun değildir, çünkü bu oldukça haksız bir iddia - ama sonra tekrar IIRC, bağlam bazı insanlar olmasıydı edildi COBOL kullanarak bunları öğretmeye çalışıyorum.
Steve314

2
Dijkstra <- Çok fazla konuştum bir adam ...
Rook

3
@Danny: COBOL, Dijkstra'nın 1975'te bu satırı yazmasından çok önce aşağılandı.
John R. Strohm

9

Yaşı ve ayrıntılarıyla ilgili tipik olarak insanları bu konuda inatçı yapan şeylerdir.

COBOL'u tasarlarken IBM'in asıl amacının "bir banka yöneticisinin program yazmasına izin vermesi" olduğunu hatırlıyor gibiyim. Bu hedef açıkça dilin tasarlanma şeklini büyük ölçüde etkiledi ve şimdi gelişti.

Anlaşılan vahşi doğada diğer dillerden daha fazla COBOL var. Ancak, yaklaşık 20 yıl boyunca BT'de çalıştıktan sonra (15 bankacılıkta), içinde uygulanan tek bir sistemle hiç karşılaşmadım.


Birinin bankacılığa geçerken bahsettiğini duymuştum, bu da dahil etmemin tek nedeni, ancak kesinlikle bunun için başka birinin sözünü alacağım.
jonsca

4
20 yıl boyunca neredeyse tamamı COBOL'de Bankacılık'ta çalıştım. Farklı bankalar her şeyi sanırım farklı şekillerde yaptılar.
TrueDub

İçinde çok fazla COBOL bulunan (veya 2007'ye kadar olan) en az bir büyük ERP sistemi olduğunu biliyorum.
Alan B

2
COBOL'u tasarlayan IBM değildi. Başlıca kışkırtıcılar ABD Donanması ve UNIVAC idi.
James Anderson,

8
"IBM'in COBOL'u tasarlarken asıl amacı" bir banka yöneticisinin program yazmasına izin vermesi gerektiği "idi.” Asil bir hedef, bildiğim yöneticilerin çoğu çoğunluğu bana bir web sitesi için basit literatür bile yazamasa da, COBOL yazsın.
maple_shaft

8

COBOL'un nesi kötü?

Hiçbir şey değil.

Bence insanlar eskiden kötü, "en yeniler en iyiler" diye önyargılı bir fikre sahipler. Hala kullanımda ve kodun üzerinde yarım asırlık bir bakım çalışması olacak.

1997'de Gartner Grubu, dünyadaki işlerin% 80'inin 200 milyardan fazla kod satırı bulunduğunu ve yılda yaklaşık 5 milyar yeni kod satırının kobille olduğunu bildirdi. ( wikipedia üzerinden )

Kodlamada, kişi her zaman iş için en iyi aracı seçmelidir ve belirli donanımlarla evli olan belirli endüstrilerde dil en uygunudur. Bankacılıkta hiç çalışmadım, popüler olduğunu duydum, ancak Sean'ın cevabı böyle olmadığını gösteriyor.

Eski kodun eski görünmesi ile ilgili bir sorun varsa, bir UI veya önündeki bir web arayüzünü tokatlayabildiğiniz sürece, çoğu kullanıcı farkı bile bilmez.


1
Diller kullanıcılar içindir?
JeffO

16
"Kod satırları" iyi bir dil ölçüsü değildir. COBOL ünlü bir şekilde ayrıntılıdır. Bu 5 milyar kodluk kod her zaman muhtemelen onyedi regex'le eşdeğerdir;)
MSalters

3
Bazen COBOL iş için doğru araçtır - çoğu zaman değildir. Zor olan kısım, insanları farkı tanımaktır.
TrueDub

1
Oldukça doğru, @TrueDub. Cezam biraz satılıyormuş gibi gözüküyordu ama öyle olması gerekmedi.
jonsca

3
@TrueDub: COBOL bir iş için doğru araçsa, alternatiflerim olduğu sürece bu işi yapmak istemiyorum. Parasını alabileceğim çok daha ilginç işler var.
David Thornley

5

İnsanlar COBOL'dan hoşlanmıyor çünkü sınırlı bir uygulamaya sahip. Şirketler ve hükümetler için iş, finans ve idari sistemler için tasarlanmıştır.

Bütün bunların ortak noktası ne? Veri. Çok fazla veri var.

Tahmin et kim veriyi ezmek için tasarlandı ve kahvaltıda bir sürü dosya olacak? Ortak İş Odaklı Dil diyebilir misiniz ?

50 yıl önce COBOL, yönetilmesi gereken çok sayıda veriye sahip büyük kuruluşlar için en iyi şeydi. Bugün, büyük miktarda veriyi yönetmenin daha iyi yolları vardır, böylece COBOL artık konuyla ilgili değildir. Yoksa öyle mi?

Hükümetleri düşünelim. Bir hükümetin hangi verileri izlemesi gerekir? Halk kimlikleri, doğum belgeleri, sağlık kayıtları, vergiler (oh ... evet ... vergiler) vb. Ve bu bilgileri bugün ve 50 yıl önce de süresiz tutmak zorundalar.

İnsanlar aynı zamanda bazı cevaplardaki bankaları da etkilediler ve gerçekten de bankalar COBOL'un ağır kullanıcısı. Neden? Çünkü diğer şirketlerden farklı olarak bankaların genelde bir geçmişi vardır. Bazıları yüzlerce yıldır var ( örneğin bunun gibi ).

Bu, 50 yıldan bu yana bazı verilerin hala burada, bugün, 7 Ekim 2011'de burada olması gerektiği anlamına geliyor. Artık SQL Server ve C # veya Oracle ve Java'ya sahibiz, ancak 50 yıl önce COBOL ve dosyalar vardı.

Zaman geçtikçe, veriler ve bankalar için veriler büyüdükçe büyüdükçe, sistemleri göç etmek gittikçe daha pahalı hale geldi. Bu, onların COBOL'de kalmaları gerektiği ve iş geliştikçe titizlikle korunmaları ve geliĢmeleri anlamına gelir. Bazı bankalar yavaşça göç ederken, bazıları sadece ana bilgisayarın önüne güzel bir Web2.0 arayüzü yapıştırıyor (c # ve Java çoğunlukla kullanılıyor). Eski kod söyleyebilir misiniz? (COBOL (aşırı) eski kodla elele gider, bazıları onlarca yıl boyunca birçok insan tarafından dokundu - programcıların sevmediği başka bir şey: D).

Ve şimdi bir faaliyet alanınız var. COBOL şimdi sınırlı bir uygulamaya sahiptir ve deneyiminiz etkilenir .

Ve COBOL'e giren insanlar sonunda aynı şeyi tekrar tekrar yaptığınızı keşfederler, tekrar tekrar, tekrar tekrar ve tekrar uyandıklarında , piyasada rekabet edebilecekleri bir şey değil çünkü insanlar artık PHP, Java, C # istiyorlar , REST, jQuery ve sadece bankalar COBOL insanlarını arıyor.

Bu noktada talep, arzdan daha düşüktür ve kesim yapamayanlar başka bir şeye geçmelidir. (Kopyala-Yapıştır değil COBOL gelişmenin ana tarzıdır ve büyük geniş verimlilik hesapları buna inanmak) ve şimdi COBOL gerçekten zihin sakat yok çünkü Ve gençler olarak başlamalıdır onlar gün onlar COBOL aldı küfür 've don korku hikayelerini anlatmaları için herhangi bir fırsatını kaybetme :). Ancak bu günlerde artık talep edilmeyen herhangi bir eski osuruk dili hakkındaki öyküleri anlatabilirsiniz, ancak onunla kalmış talihsiz bir insansınız. O iyi ...

PS ve COBOL, diğerleri tarafından belirtilen diğer tüm nedenlerden dolayı kötüdür :)

PS2. In 1997, the Gartner Group reported that 80% of the world's business ran on COBOL with over 200 billion lines of code in existence and with an estimated 5 billion lines of new code annually.Gerçekten mi? Peki gün bunu nasıl ölçtü? Her şirkete sözlerini yaparak gittiler mi ve kaç COBOL hattına sahip olduklarını sordular mı?


4

İki özellik.

  • ALTER deyimi saf kötülüktür. Daha modern COBOL uygulamalarında nadiren kullanılırken, "eski günlerde" yoğun olarak kullanılmıştır çünkü eşdeğer "IF-GOTO" yapısından daha verimlidir. Bilgisayarların yalnızca 32K RAM'ı varsa, her komut önemlidir. GOTO ifadesini farklı bir hedefe sahip olacak şekilde değiştirdi.

    Bu, bazı kod opaklığı yaptı çünkü kodun kendisi durumluydu.

  • Bir veri yapısındaki REDEFINES cümlesi ( unionC'deki gibi ) kalıcı bir sorundur. "Özgür sendika" terimi - yani ayrımcı olmayan üst üste binmiş veri yapıları - sorunu özetlemenin bir yoludur. İki REDEFINES diğer adı veriler tarafından önemsiz bir şekilde ayırt edilemez; sadece programın geniş bir mantık okuması , baytların iki alternatif yorumunun anlamını belirleyebilir .

    Bu, birçok veri yapısını opak yaptı çünkü veriler kod olmadan anlaşılamıyor.

İngilizceye benzer sözdiziminin okunabilirliği bu iki yapı tarafından yenildi.

[Moderatörler tarafından, kısa cevapların önemli ve ilginç sorunuzu küçümsemediği konusunda uyarıldım. Bunu küçümseyen bulursanız, detaylar isteyebilirsiniz. Veya denetleyicilerin silebilmesi için işaretleyin.]


İkisini de hatırlamıyorum - her iki baskıda, ya da hiç öğrenmedim. Hızlı bir arama bana bunun ALTERkötü olduğu konusunda hemfikir olduğumu söylüyor , ancak bu özellik nadiren kullanılıyorsa, bu yüzden COBOL'dan nefret etmek için bir neden değil. REDEFINESYine de pek emin değilim . Bununla karşılaştırmak union, bana biraz daha kibarca düşünmemi sağlıyor - ama düşük seviyeli bir bit taklitçiliği ve veri yapısı işleme dilinde sorun yok, veri işlemede bu kadar iyi bir fikir olmayabilir.
Steve314

Bazen cevapların beni küçümseyen, ama bu sadece işe yaramaz. Burada yardım etmeye çalışıp çalışmadığını bilmiyorum, ama bunu çok mu yapıyorsun, yoksa sadece kendinle mi konuşuyorsun. 'Saf kötülük' ile neyi kastettiğinizi sorabilirim, ancak yukarıdaki iyi cevapların güzelliği, bir şeyler öğrenmek için bir konuşmaya başlamak zorunda olmadığımdır.
Eric Wilson

@EricWilson: Cevabımı iyice reddettiğin için teşekkürler. Bu daha ne eklenmesi gerektiğini anlamama yardımcı oldu.
S.Lott

1
@Eric - Sorun ALTERşu ki, gotoları yönlendirmesi. Birincisi, gotos kullandığınız anlamına gelir - kendi içinde bunun kötü olduğunu düşünmüyorum, ancak çoğu dilde olağandışı bir özel durum söz konusudur. İkincisi, bu demektir ki gotolar gideceklerini söyledikleri yerlerden başka bir yere gidiyorlar - ve bu sadece korkunç. Bunun kendi kendini değiştiren bir kod olduğu konusunda gerçekten ikna olmadım, ancak baktığım yer olarak tanımlandı ve assembler içindeki atlama talimatı hedeflerini değiştirdiğini düşünmek nedenini açıklıyor.
Steve314

@ S.Lott Eklemeleriniz için teşekkürler (siz de @ Steve314), ilginç bir şey öğrendim ve oyumu tersine çevirdim.
Eric Wilson

3

COBOL'da birkaç yıl boyunca programladım. Sözdizimi günümüz dillerine göre basittir ve devam etmeyi öğrenmek için fazla teori gerekmez. COBOL, IBM'in CICS (çevrimiçi bir işlem yönetimi sistemi) ile çok iyi çalıştı ve programcının, kullanıcıların uygulama sayısını 1 ila birkaç bin arasında ölçeklendirmesi için kodda belirtilmesi gerekiyor. CICS, ekran bir ekran birimi olarak çalışan (penceresiz) bir karakter tabanlı GUI sağlamıştır. Ana bilgisayarda (IBM GDDM) kullanarak çizelgeleri görüntüleyebilirsiniz. COBOL, indekslenmiş dosyalarla (VSAM ve ISAM) ve ayrıca DB2 (SQL tabanlı ilişkisel) ve ayrıca IMS ile konuşabilir. COBOL / CICS çok sağlam bir ortamdır ve birkaç hafta içinde öğrenebilirsiniz. Bu, teknolojiye değil, işinize odaklandığınız anlamına gelir, bu nedenle MVM, JavaScript ve benzeri öğrenmede kodlama konusunda 8 saatten 7'sinde çalışırsınız.

COBOL ile ilgili sorun, 3. tarafların araç ve programlama ortamları geliştirmek için ilgisiz kalmasına yol açan kötü pazarlama konusudur. Ayrıca, Windows benzeri arayüze destek vermemesi 1993'ten sonra popülaritesinin düşmesine neden olmuştur. C dili, daha taşınabilir olması ve COBOL'un çok az sahip olduğu işletim sistemi işlevlerine doğrudan erişebilmesi nedeniyle ışığın çoğunu çekti.

VB, DBase, FoxPro ve Clipper gibi dillerin PC'deki 'veritabanlarına' erişmenin DOS üzerindeki karşılaştırılabilir COBOL'den daha iyi yolları vardı, bu yüzden COBOL kayboldu. CICS, DOS veya UNIX'te uzun süre ucuz yapılmadığından, bu ortamlarda değeri yoktu.

Bugün COBOL, .NET ile desteklenmektedir, ancak, tamamen bağımlı olan çok sayıda kritik uygulama nedeniyle hala orada olduğu ana bilgisayar (ve muhtemelen AS / 400) dışındaki tüm platformlarda savaşı kaybettiğini tahmin ediyorum. o.


"arayüzü gibi Windows desteği eksikliği" .... ne hakkında netcobol.com/products/Fujitsu-NetCOBOL-for-.NET/overview
JoelFan

@JoelFan yorumunuz için teşekkürler. Bugün doğru, COBOL için daha iyi araçlar var, ancak hepsinin çok geç geldiğini düşünüyorum. Windows arabirimine destek olmama konusundaki eksikliğim, 90'lı yılların başında pazardaki tek oyuncu olan Sadece Mikro Odak noktasıydı.
NoChance

2

Heh, 80'li yılların başlarında üniversiteye gittim ve insanlar o zaman bile COBOL'u küfretti. Bence en büyük sorun ayrıntılarıyla ilgili - basit bir "Merhaba dünya!" COBOL'de muhtemelen% 95'i kazan plakası gerektiren elli hattan fazladır. Çok zarif ya da çekici bir dil değil. Ayrıca, dünün sorunlarını ele almak için tasarlandı ve 1970'lerden sonra geliştirilen geliştirme paradigmalarına gerçekten borç vermedi. Raporlarınız üstbilgi ve altbilgilerle sonsuz sayıdaki sütunlar olduğu sürece oldukça iyi bir rapor oluşturma dilidir. Bir grafiğe veya bir logoya bir yerde yapıştırmak istiyorsanız, unut gitsin. Bence hala "veri işleme" tipi görevler için en hızlı dil (5M ATM işlemleriyle sabit formatlı bir dosya alın ve her biri için basit bir bakiye ayarlaması yapın), ama bu tür şeyleri artık kaç geliştirici yapıyor? Ve birçok sistem bugünlerde XML veya JSON kullanıyor, COBOL ile böyle bir şeyi ayrıştırmaya çalışmayı düşünmekten nefret ediyorum (aslında, COBOL'de genel olarak ayrıştırmayı düşünmekten nefret ediyorum!)


1
"Merhaba Dünya" kaç satır alır? XML ayrıştırma / oluşturma - şimdi dilin içine yerleştirilmiştir. Belki de bilgi tabanını yükseltmelisin. Bu cevap 1960’lı yılların COBOL dönemine aittir.
NealB

İlginç. COBOL ile 10 yıla yakın bir zamandır çalışmak zorunda kalmamıştım, ancak son gördüğümde hatırladığım gibi yazılmıştı, TANIMLAMA BÖLÜMÜ, ÇALIŞMA - DEPOLAMA BÖLÜMÜ ve diğerleri. Sanırım şu "gerekli yorumlar" (YAZAR, TARİH-YAZILI, KAYNAK-BİLGİSAYAR, AMAÇ-BİLGİSAYAR) artık isteğe bağlı. XML ayrıştırması o kadar etkileyici görünmüyor - dosya yapısını yansıtacak şekilde veri bölümünü yapılandırmanız gerekiyor, SAX veya DOM tarzı işlem yok. Orada olduğunu bilmek güzel.
TMN
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.