Mengapa cemoohan untuk COBOL? [Tutup]

52

Ketika orang-orang menyebut COBOL, itu biasanya dipenuhi dengusan atau rintihan. Saya tidak tahu banyak tentang COBOL, tetapi saya telah melihat beberapa program tertulis di dalamnya. Saya bisa melihat bahwa itu bertele-tele, dan bagi mata yang tidak tahu seperti mata saya, tidak dapat dipahami. Tapi, sungguh, tidak semua bahasa pemrograman lengkap omong kosong untuk orang awam?

Saya mengerti bahwa itu bekerja, bekerja dengan baik, dan masih digunakan secara luas di industri yang dirancang untuknya. Bukankah itu ciri-ciri bahasa yang baik? Apa yang buruk dari COBOL?

Barry Brown
sumber
8
COBOL OK untuk memanipulasi database hierarkis atau file datar dan untuk memompa data ke dalam laporan besar teks saja pada printer dot-matrix raksasa. Tetapi sebagian besar data saat ini ada di RDBMS dan sebagian besar manajer menyukai laporan cantik. COBOL tidak bisa mengatasinya dengan baik.
pdr
1
@ Steve314: Ya! Itu! Kecuali kami adalah Line Matrix, dan pagi ini aku belum minum kopi ketika aku menulis itu. - en.wikipedia.org/wiki/Line_matrix_printer
pdr
3
Tanpa mengeluarkan COBOL, jika Anda mencari sedikit, saya pikir Anda akan melihat banyak bahasa spesifik domain tidak terlalu populer di sini (untuk sedikitnya); COBOL, Fortran, VB6, MATLAB ... semua bahasa yang sangat bagus, tidak bagus untuk mengajar ilmu komputer dan abstraksinya.
Benteng
4
@Rook - apakah semua itu benar-benar dihitung sebagai bahasa khusus domain? Bahkan MATLAB, IIRC, masih mampu pemrograman tujuan umum. Saya pikir DSL sebagian besar diterapkan pada hal-hal seperti yacc, lex dll - bahasa yang hanya benar-benar mampu melakukan tugas yang cukup sempit, yang mengarah ke nama umum lainnya "bahasa kecil". Tidak pernah terpikir oleh saya bahwa COBOL, Fortran atau VB dapat disebut khusus domain. Tentu saja mereka masing-masing cenderung digunakan dalam bidang tertentu, tetapi saya pikir mereka biasanya masih dianggap sebagai bahasa tujuan umum.
Steve314
1
@ Steve314 - Ya, baik - kita dapat mengatakan ada dua sisi. Satu kata dom.spec. yang hanya yang Anda sebutkan, yang lain mengambil pandangan yang lebih umum dan termasuk yang saya sebutkan juga, sambil tetap menyimpannya dalam kategori tujuan umum. Tapi praktis, di mana pun Anda menyebut teknik dan sci. comp. Anda akan mendapatkan Fortran atau MATLAB, bisnis ... COBOL ... gunakan terminologi yang menurut Anda paling logis. Saya menggunakan ini karena saya merasa cocok dengan kebanyakan orang. Bagaimanapun, mereka mendapatkan bagian yang adil dari bashing untuk beberapa alasan dari komunitas cs pada umumnya.
Benteng

Jawaban:

68

COBOL adalah salah satu bahasa pertama yang saya pelajari - jika Anda mengabaikan versi Basic yang tak terhitung jumlahnya, tiga atau empat bahasa assembler dan varian Forth, maka itu dalam lima bahasa pertama saya, dan belajar bersamaan dengan Pascal. TKI, saya menjawab dari pengalaman pribadi menggunakan bahasa.

EDIT Saya harus mengatakan pengalaman kuno . Saya tidak pernah menggunakan bahasa itu setelah akhir tahun 80-an, meskipun saya memang membeli buku baru (untuk menggantikan buku yang lama saya buang dengan jijik) sehingga saya memiliki sesuatu untuk dirujuk sehingga kisah-kisah horor saya tidak akan terlalu terdistorsi. Tapi saya tidak tahu bagaimana bahasa telah berkembang setidaknya dalam 20 tahun terakhir.

Jelas, bagi banyak orang, itu adalah hanya bahwa "tua buruk" pandangan bahwa jonsca telah dijelaskan - dan juga jauh lebih sepertiga tangan pass-me-down sikap hal. Tetapi ada masalah nyata yang mendasari hal itu.

Terlalu bertele-tele adalah masalah nyata - terlalu banyak kekacauan dalam memahami kode. Sejauh ini ini adalah masalah terbesar. Orang-orang yang melihat pernyataan MOVE, ADDdan MULTIPLYlain - lain dengan ngeri memiliki pandangan yang sedikit berlebihan tentang hal ini, benar - COMPUTEpernyataan itu lebih dekat dengan tugas dalam bahasa lain. Tetapi masih ada banyak kekacauan di semua divisi dan bagian itu. Salah satu hal pertama yang saya pelajari di COBOL adalah selalu memulai dengan menyalin halaman standar SKELETON.COB sepanjang A4.

COBOL memang memiliki beberapa fitur yang menarik, tetapi fitur-fitur itu (misalnya PIChal itu) cenderung menjadi hal-hal yang sekarang lebih merupakan bagian dari DBMS daripada bahasa pemrograman, dan yang menurut saya biasanya menjadi cara yang lebih baik untuk memisahkan tanggung jawab tersebut. Juga, beberapa perpustakaan dalam bahasa lain menggunakan sesuatu yang sebanding PIC(misalnya printf dan scanf di perpustakaan standar C). Boleh dibilang, yang terbaik telah disimpan, tetapi yang terburuk turun.

Juga, untuk setiap fitur bagus, setidaknya ada satu fitur yang tidak dapat ditoleransi. Misalnya, tidak peduli seberapa sepele loop, Anda harus memindahkan tubuh ke prosedur terpisah. The PERFORM ... UNTIL ...dan pernyataan serupa yang pernyataan tunggal - tidak struktur blok. Dalam arti, COBOL adalah rasa dari pemrograman terstruktur dari sebelum pemrograman terstruktur diciptakan - ada adalah sebuah GO TO, tapi itu digunakan berkecil (setidaknya ketika saya menggunakan COBOL), tapi looping pada khususnya hanya tidak ditangani dengan baik.

Bahkan, bahasa yang saya gunakan setelah COBOL yang paling mengingatkan saya pada itu adalah ... dBase. Seperti pada Ashton-Tate dBase III +. Saat ini, orang lebih cenderung mengingat semua klon yang sekarang mati atau sekarat (Clipper, FoxPro dll) yang mengarah ke nama generik xBase - dan masih ada keturunan yang tinggal di xHarbour. Intinya adalah bahwa ini adalah bahasa basis data, tetapi tidak seperti SQL.

Bahkan kemudian, ketika setiap program COBOL yang beroperasi pada basis data tertentu perlu menyertakan salinan spesifikasi dari basis data tersebut (dan salinannya bisa berakhir tidak konsisten), itu tidak benar-benar terjadi di xBase di mana basis data mengetahui strukturnya sendiri.

Mempertimbangkan itu, COBOL tidak begitu mengerikan jika Anda menerimanya apa adanya. Tapi yang bukan adalah bahasa untuk menulis struktur data. Yang mungkin mengapa COBOL sangat menderita pada masa perang suci C vs Pascal - kedua belah pihak dapat setuju bahwa COBOL tidak baik untuk menciptakan kembali pohon biner lagi.

Oh - dan satu hal yang saya tidak akan pernah lupa adalah bagaimana buku teks COBOL pertama saya tidak menggambarkan SORTperintah, mengatakan bahwa itu di luar ruang lingkup buku - tampaknya, baik penulis tidak dapat mengatasi gagasan menyortir, atau menganggap itu lebih dari pikiran kecil kecil siswa COBOL dapat mengatasi [lihat edit di akhir]. Hal semacam itu membuatnya sangat sulit untuk menganggap COBOL serius.

Aspek aneh dari hal ini adalah Pemrograman Terstruktur Jackson, yang saya juga dipaksa untuk belajar di sekitar waktu yang sama, dan khusus untuk digunakan dengan COBOL. Bagian dari ini adalah menggambar diagram struktur untuk input, kemudian diagram struktur untuk output, kemudian menggambar diagram struktur di antara kode. Penyortiran jelas diharapkan menjadi masalah yang sudah dipecahkan - Anda tidak bisa mendapatkan algoritme penyortiran dengan cara ini. Jadi aneh untuk diberitahu oleh buku teks yang direkomendasikan bahwa seluruh konsep penyortiran berada di luar pikiran kecil saya, sementara pada saat yang sama diajarkan sesuatu seperti selusin algoritma penyortiran yang berbeda dan bagaimana menerapkannya dalam Pascal.

Masalah-masalah yang dapat ditangani JSP mungkin adalah panduan yang baik untuk hal-hal yang dapat dilakukan COBOL dengan relatif baik. Tetapi meskipun begitu, itu tidak selalu berarti bahwa JSP atau COBOL adalah cara yang baik untuk menangani masalah tersebut.


EDIT pada 30 Juli 2014

Saya baru saja mendapat peningkatan reputasi dari ini, mengingatkan saya ada di sini. Seperti yang terjadi, karena beberapa koleksi buku kuno yang dipicu nostalgia, sekarang saya dapat memperbaiki titik WRT SORTperintah.

Buku yang awalnya saya gunakan sebagai teks yang direkomendasikan ketika belajar COBOL adalah "Pemrograman Metodis dalam COBOL" oleh Ray Welland. Ini tidak mencakup COBOL 85 (meskipun ada edisi berikutnya "Pemrograman Metodis dalam COBOL-85" yang belum pernah saya lihat).

kindall berkomentar di bawah ini bahwa "Anda seharusnya mengurutkan file input sebelum membacanya, atau mengurutkan file output setelah membuatnya, menggunakan utilitas sortir yang menyertai OS". Dari jawaban saya untuk itu, saya merindukan titik "datang dengan OS". Kindall menyarankan sesuatu yang mirip dengan filosofi Unix AFAICT, dengan COBOL digunakan untuk bit yang baik untuknya, utilitas OS seperti utilitas sortir yang digunakan untuk beberapa hal lain, dan mungkin menggunakan bahasa batch / scripting / shell untuk merekatkan bit bersama-sama. Ini jauh lebih masuk akal di dunia kuno di mana perangkat lunak interaktif jarang ada, sehingga Anda akan mengirimkan kumpulan pekerjaan (karenanya "bahasa batch").

Berikut ini dikutip dari halaman 165-166 dari "Pemrograman Metodis dalam COBOL" ...

Penggunaan file serial yang diurutkan menyiratkan bahwa perlu memiliki alat untuk menyortir catatan dalam file ke dalam urutan tertentu dengan kunci. Sebagian besar sistem komputer yang lebih besar memiliki utilitas pengurutan yang akan mengurutkan file mengingat posisi, jenis, dan ukuran masing-masing data-item yang membentuk kunci.

Ada juga fasilitas untuk menyortir catatan dari dalam program COBOL tetapi ini di luar cakupan buku ini karena dua alasan:

(a) antarmuka ke sistem operasi seringkali cukup kompleks dan bervariasi dari satu sistem ke sistem lainnya,

(b) modul sortir merupakan bagian opsional dari ANS '74 COBOL dan mungkin tidak diimplementasikan dalam sistem COBOL untuk komputer yang lebih kecil.

Oleh karena itu akan diasumsikan bahwa ada fasilitas untuk menyortir file ke dalam urutan tertentu dan masalah memperbarui file tersebut akan dipertimbangkan.

Singkatnya, kebaikan itu benar - asumsinya adalah bahwa biasanya penyortiran akan dilakukan di luar COBOL. Bahkan mungkin ada justifikasi nyata untuk mengecualikan penyortiran dari bahasa pemrograman sekitar 1974 untuk komputer kecil.

Apa yang saya katakan di atas pada dasarnya adalah apa yang Anda dapatkan setelah sekitar 20 tahun tidak dapat memeriksa fakta karena membuang buku itu.

Saya tetap harus menunjukkan, bahwa saya secara formal mempelajari COBOL dari buku yang direkomendasikan ini yang mencakup standar 1974 (bukan standar 1985) pada tahun 1988 dan 1989. Edisi ketiga "COBOL untuk Siswa" (Parkin, Yorke, Barnes) - edisi pertama yang mencakup COBOL 85 - tidak diterbitkan sampai 1990. Saya tidak yakin, tapi saya pikir edisi COBOL 85 "Pemrograman Metodis" tidak diterbitkan sampai 1994.

Tapi itu tidak selalu mewakili dunia COBOL menyeret kakinya - yah, toh tidak terlalu banyak. Adopsi standar baru membutuhkan waktu untuk bahasa apa pun, bahkan sekarang.

Steve314
sumber
5
+1 Untuk benar-benar mengetahui apa yang Anda bicarakan. Seandainya saya bisa memberi Anda +1 lagi untuk JSP. Apakah Anda pernah menggunakan "Delta"? Itu adalah generator Cobol sehingga Anda bisa menulis JSP Anda ke dalam kode, dengan gaya yang mirip dengan definisi memori (01 - 03 - 05) dan kemudian menulis Cobol Anda ke dalam celah. Menyenangkan dan membuat frustasi.
pdr
3
Halaman Wikipedia di JSP - en.wikipedia.org/wiki/Jackson_Structured_Programming . Ketika saya mempelajarinya, semuanya dilakukan di atas kertas.
Steve314
1
Alasan penyortiran diperlakukan sebagai masalah yang diselesaikan adalah karena penyortiran itu. Dari ingatan saya, COBOL benar-benar berkecil hati memiliki lebih dari satu atau dua catatan dalam memori sekaligus (catatan saat ini dan mungkin yang sebelumnya). Anda seharusnya mengurutkan file input sebelum membacanya, atau mengurutkan file output setelah membuatnya, menggunakan utilitas sortir yang menyertai OS.
hati
1
Saya melakukan beberapa COBOL selama beberapa tahun (untuk referensi, saya hanya 26), dan saya dapat mengklarifikasi satu hal untuk Anda. Anda tidak perlu lagi menentukan paragraf untuk setiap loop, sekarang Anda bisa inline dengan PERFORM UNTILke END-PERFORMblok. Aku benar-benar benci kalau aku tahu itu.
AgentConundrum
1
@NealB Saya baru saja menjelaskan maksudnya, karena dia mengakui pengalamannya sudah ketinggalan zaman, bahkan oleh standar COBOL. Saya mengerti tentang COBOL85, tetapi ada banyak kode lama di luar sana yang dimulai sebelum ada, atau ditulis oleh orang-orang yang kepalanya terjebak dalam versi sebelumnya. Anda benar-benar tidak dapat mengasumsikan basis kode hingga 85 standar, tetapi bahkan jika itu, itu masih bahasa yang tidak nyaman. Pemrogram yang lebih lama pensiun lebih cepat daripada yang diganti, dan sangat sedikit pemrogram baru yang ingin bekerja di COBOL. Saya tahu saya tidak akan mau menyentuh barang itu lagi.
AgentConundrum
43

Setelah menghabiskan sebagian besar hari ini menulis COBOL, saya pikir saya dapat memberikan beberapa masukan saat ini.

Pertama hal-hal BURUK: -

  • Tidak ada panggilan fungsi. COBOL modern memiliki beberapa fungsi bawaan tetapi merupakan pekerjaan teknik serius untuk menulis milik Anda sendiri.
  • Tidak ada jenis yang memeriksa panggilan subrutin. Anda dapat melewatkan (atau tidak meneruskan) apa pun pada panggilan subrutin, subrutin yang dipanggil akan dengan senang hati menganggapnya memiliki parameter yang benar, dan, tidak ada cara untuk mendeteksi parameter yang hilang atau tidak valid.
  • Tidak ada perpustakaan. Tidak ada nol nol. Tidak ada perpustakaan standar, tidak ada perpustakaan yang mudah digunakan dan banyak digunakan. Anda akhirnya mengkode tugas-tugas yang saling melengkapi dengan menyerahkan berulang-ulang.
  • Semuanya diimplementasikan sebagai kata kunci. Karena penulis bahasa tidak memiliki konsep perpustakaan, setiap fitur baru pada akhirnya diimplementasikan dengan kata kunci baru misalnya PARSE dan RENDER untuk dukungan XML.

Kesalahpahaman, yaitu kritik-kritik itu biasanya ditujukan terhadap bahasa lama yang tidak valid atau tidak relevan.

  • Verbositas. Jadi, Anda mengetik beberapa karakter tambahan! Ini bukan masalah serius. Dalam banyak kasus, COBOL lebih sedikit verbose dari pada yang dikatakan Java.

  • "COBOL FILES" Anda melihat istilah ini banyak dibicarakan. Tidak ada yang namanya COBOL dapat menangani hampir semua format file dan hampir semua organisasi file.

  • Tidak ada multi-threading. Dalam lingkungan di mana COBOL tumbuh subur, multi-threading biasanya diserahkan pada wadah aplikasi seperti CICS atau IMS yang lebih baik daripada programmer yang cenderung buruk dalam hal itu.

Dan hal-hal bagus - beberapa aspek COBOL lebih unggul daripada bahasa lain: -

  • Struktur data. COBOL memiliki sintaksis yang ringkas dan fleksibel untuk mendefinisikan struktur data yang kompleks dan tipe data ganjil.
  • Aritmatika Desimal. Ini memiliki dukungan asli untuk aritmatika desimal yaitu aritmatika sebagaimana dipahami oleh akuntan, dengan pembulatan yang tepat dll.
  • Bergerak dengan Times. Beberapa aspek COBOL sangat modern. Dibangun dalam dukungan XML, dukungan untuk pemrograman OO, kemampuan untuk menggunakan kelas Java dll.
  • Integrasi dengan DB2, CICS, dll. Ini hanya berlaku untuk mainframe COBOL IBM (tetapi sejauh ini bongkahan COBOL terbesar masih berjalan) tetapi integrasi dengan DB2, CICS, dan lingkungan mainframe lainnya membuatnya lebih mudah untuk membuat kode hal-hal seperti basis data yang didukung layanan web daripada di lingkungan lain mana pun.
  • Penanganan layar. Penanganan layar standar seperti yang diterapkan pada AS / 400 dan MicroFocus Cobol sangat baik.
  • Performa. Selama bertahun-tahun, kompiler COBOL telah menghasilkan executable dengan kinerja sangat tinggi. Hanya C asli dan Assembler asli yang mengalahkan COBOL pada mainframe IBM.

Jadi semuanya bekerja dengan sangat baik untuk sesuatu yang disatukan oleh sebuah komite pada 1950-an. Jika aplikasi yang ada diimplementasikan dalam COBOL dan melakukan pekerjaan, tidak ada alasan untuk menulis ulang. Namun kecuali ada alasan yang sangat bagus saya tidak melihat ada pembenaran untuk proyek-proyek baru untuk menggunakan COBOL.

James Anderson
sumber
2
Dalam jawaban saya, saya katakan COBOL buruk untuk struktur data. Apakah ini perbedaan dalam arti "struktur data"? Mungkin alat tata letak catatan sangat bagus, tetapi COBOL masih bahasa yang salah untuk pohon biner dll? Atau mungkin pengalaman saya tentang COBOL terlalu tua atau terbatas? Pertanyaan kunci - apakah COBOL memiliki pointer? (Yang mengkhawatirkan, Google cepat menyarankan ya, meskipun buku lama saya menyarankan tidak). Saya benci untuk menarik kembali jawaban yang menghasilkan semua poin-rep yang indah bagi saya, tetapi jika saya salah ...
Steve314
3
Ada kerugian pada aritmatika desimal: Anda harus mengatakan dengan tepat berapa banyak digit yang Anda inginkan. Saya ingat menemukan bug ketika kami memiliki satu 9di PICklausa dalam beberapa program dalam suatu grup.
David Thornley
2
Kesan saya (tanpa informasi) adalah bahwa COBOL sangat baik dalam menangani data dalam catatan ukuran tetap yang kaku. Mungkin tidak begitu bagus di struktur data dinamis. Koreksi saya jika saya salah.
Barry Brown
@ Steve314 - pointer ya datang sekitar tahun 1985 tetapi agak timpang karena Anda hanya bisa mengatur mereka untuk hal-hal di bagian tautan. Versi yang lebih baru memungkinkan Anda untuk menunjuk ke apa saja.
James Anderson
1
@ Struktur - sementara itu tidak sampai dengan standar Python dalam hal hash dan pohon dll. Ini sebagus C atau Java - kecuali yang tidak sebaik C ++ plus Boost atau Java plus koleksi perpustakaan. Sekali lagi kegagalan untuk menghargai nilai perpustakaan dan fungsi standar telah melumpuhkan bahasa sepanjang umurnya.
James Anderson
27

Ini mungkin ke Djikstra. Djikstra menyatakan bahwa "Penggunaan COBOL melumpuhkan pikiran; oleh karena itu pengajarannya harus dianggap sebagai tindak pidana." Cobol dipandang sebagai naif, tidak terstruktur dan bertele-tele. Dengan kemampuan untuk mengubah kode sendiri (praktik yang tidak dianjurkan bahkan di antara programmer cobol), itu dianggap cukup sulit untuk di-debug atau diikuti.

Lalu ada masalah ketidakcocokan yang besar antara versi juga.

Saya sarankan membaca bagian kritik dan pertahanan di Wikipedia untuk bahasanya - http://en.wikipedia.org/wiki/COBOL#Criticism_and_defense

Danny Staple
sumber
20
Suatu hari mereka akan menemukan lemari besi yang diisi dengan kode yang ditulis oleh Dijkstra dalam bahasa yang dikecamnya.
jonsca
7
@ jonsca - Anda akan terkejut dengan apa yang akan Anda lakukan untuk mendapatkan uang.
JeffO
3
Versi yang tidak kompatibel adalah IIRC cukup umum sampai setidaknya tahun 70-an, dan bahkan di tahun 80-an ada Basic. Dijkstra mungkin membuat poinnya berdasarkan masalah yang saya sebutkan dalam jawaban saya - COBOL tidak baik untuk (atau dimaksudkan untuk menjadi baik untuk) pengkodean struktur data. Oleh karena itu, untuk nilai khusus "pengajaran pemrograman" atau "mengajar ilmu komputer", COBOL benar-benar beracun. Tentu saja karena COBOL tidak dimaksudkan untuk itu, itu adalah klaim yang cukup adil - tetapi sekali lagi, IIRC, konteksnya adalah bahwa beberapa orang yang mencoba untuk mengajarkan hal-hal ini menggunakan COBOL.
Steve314
2
Dijkstra <- seorang pria yang terlalu banyak bicara ...
Rook
3
@Danny: COBOL dihina jauh sebelum Dijkstra menulis kalimat itu pada tahun 1975.
John R. Strohm
9

Ini usia dan kata kerja biasanya hal-hal yang membuat orang mengeluh tentang hal itu.

Saya ingat bahwa tujuan utama IBM ketika mendesain COBOL adalah "harus memungkinkan seorang manajer bank untuk menulis sebuah program". Tujuan ini jelas memiliki pengaruh besar pada cara bahasa dirancang, dan sekarang berkembang.

Tampaknya ada lebih banyak COBOL di alam bebas daripada bahasa lainnya. Namun, setelah bekerja di bidang TI selama hampir 20 tahun (15 di bidang perbankan), saya belum pernah menemukan satu pun sistem yang diterapkan di dalamnya.

Sean
sumber
Saya pernah mendengar seseorang menyebut perbankan lewat, yang merupakan satu-satunya alasan saya memasukkannya, tetapi saya pasti akan mengambil kata-kata Anda untuk itu daripada milik orang lain.
jonsca
4
Saya bekerja selama 20 tahun di Perbankan, hampir semuanya di COBOL. Bank yang berbeda telah melakukan berbagai hal dengan cara yang berbeda.
TrueDub
Saya tahu setidaknya satu sistem ERP utama yang memiliki (atau memiliki sekitar 2007) banyak COBOL di dalamnya.
Alan B
2
Bukan IBM yang mendesain COBOL. Penghasut utama adalah Angkatan Laut AS dan UNIVAC.
James Anderson
8
"tujuan utama IBM ketika mendesain COBOL adalah" harus memungkinkan seorang manajer bank untuk menulis sebuah program "." Tujuan yang mulia, meskipun sebagian besar manajer yang saya tahu bahkan tidak bisa menulis literatur sederhana untuk saya di situs web, apalagi menulis COBOL.
maple_shaft
8

Apa yang buruk dari COBOL?

Tidak ada.

Saya pikir orang memiliki anggapan sebelumnya bahwa tua itu buruk, "terbaru adalah yang terbaik". Ini masih sangat banyak digunakan, dan saya yakin akan ada cukup banyak pekerjaan pemeliharaan kode yang bisa didapat untuk setengah abad lagi.

Pada tahun 1997, Grup Gartner melaporkan bahwa 80% dari bisnis dunia berjalan pada COBOL dengan lebih dari 200 miliar baris kode yang ada dan dengan perkiraan 5 miliar baris kode baru setiap tahunnya. (via wikipedia )

Dalam pengkodean, seseorang harus selalu memilih alat terbaik untuk pekerjaan itu, dan dengan industri tertentu yang menikah dengan perangkat keras tertentu, bahasanya optimal. Saya tidak pernah bekerja di perbankan, di mana saya mendengar itu populer, tetapi jawaban Sean menunjukkan ini bukan masalahnya.

Jika ada masalah dengan kode lawas yang tampak tua, selama Anda bisa menampar antarmuka UI atau web di depannya, sebagian besar pengguna bahkan tidak akan tahu bedanya.

jonsca
sumber
1
Bahasa untuk pengguna?
JeffO
16
"Baris kode" bukan ukuran lintas-bahasa yang baik. COBOL terkenal bertele-tele. 5 miliar baris kode tersebut secara tahunan mungkin setara dengan tujuh belas regex;)
MSalters
3
Terkadang COBOL adalah alat yang tepat untuk pekerjaan itu - seringkali tidak. Bagian yang sulit adalah membuat orang mengenali perbedaannya.
TrueDub
1
Benar sekali, @TrueDub. Kalimat saya terdengar agak penjualan, tetapi itu tidak dimaksudkan.
jonsca
3
@ TrueDub: Jika COBOL adalah alat yang tepat untuk pekerjaan, saya tidak ingin melakukan pekerjaan itu, selama saya punya alternatif. Ada pekerjaan yang jauh lebih menarik yang bisa saya terima dengan baik.
David Thornley
5

Orang tidak suka COBOL karena aplikasi terbatas. Itu dirancang untuk bisnis, keuangan, dan sistem administrasi untuk perusahaan dan pemerintah.

Apa kesamaan semua ini? Data. Banyak dan banyak data.

Tebak siapa yang dirancang untuk mengolah data dan memiliki banyak file untuk sarapan? Bisakah Anda mengatakan Bahasa Berorientasi Bisnis COmmon ?

50 tahun yang lalu COBOL adalah hal terbaik untuk organisasi besar dengan banyak data untuk dikelola. Saat ini ada cara yang lebih baik untuk mengelola volume data yang besar sehingga COBOL tidak lagi relevan. Atau itu?

Mari kita pertimbangkan pemerintah. Data apa yang perlu dilacak oleh pemerintah? Id orang, akta kelahiran, catatan medis, pajak (oh ... ya ... pajak) dll. Dan mereka harus memegang informasi ini tanpa batas, hari ini dan 50 tahun yang lalu juga.

Orang-orang juga membuat bank dalam beberapa jawaban dan memang bank adalah pengguna COBOL yang berat. Mengapa? karena tidak seperti jenis perusahaan lain bank biasanya memiliki sejarah. Beberapa ada selama ratusan tahun ( seperti ini misalnya ).

Itu berarti bahwa beberapa data dari 50 tahun masih harus di sini bersama kami, hari ini, 7 Oktober 2011. Sekarang kami memiliki SQL Server dan C # atau Oracle dan Java, tetapi 50 tahun yang lalu ada COBOL dan file.

Seiring berlalunya waktu, data untuk pemerintah dan bank semakin besar dan semakin besar dan semakin mahal untuk melakukan migrasi sistem. Yang berarti mereka harus tetap dalam COBOL dan terus dipertahankan dan berkembang seiring bisnis berkembang. Beberapa bank secara perlahan bermigrasi sementara yang lain hanya menempelkan antarmuka Web2.0 yang bagus di depan mainframe (c # dan Java yang paling banyak digunakan). Bisakah Anda mengatakan kode warisan? (COBOL berjalan beriringan dengan kode warisan (ekstrem), beberapa yang tersentuh oleh banyak orang selama beberapa dekade keberadaannya - hal lain yang tidak disukai oleh programmer: D).

Dan sekarang Anda memiliki ceruk kegiatan. COBOL sekarang memiliki aplikasi terbatas dan pengalaman Anda terpengaruh .

Dan orang-orang yang masuk ke COBOL akhirnya menemukan bahwa Anda melakukan hal yang sama berulang-ulang, tahun demi tahun dan pada saat mereka bangun mereka tidak lagi kompetitif di pasar karena orang sekarang menginginkan PHP, Java, C # , REST, jQuery dan hanya bank yang mencari orang COBOL.

Pada titik ini permintaan lebih rendah daripada penawaran dan mereka yang tidak melakukan pemotongan harus pindah ke hal lain. Dan mereka harus mulai sebagai junior karena COBOL benar-benar melumpuhkan pikiran (percaya itu bukan Copy-Paste adalah gaya utama pengembangan COBOL dan menyumbang besar produktivitasnya yang besar) dan sekarang mereka mengutuk hari mereka mengambil COBOL dan tidak t tidak kehilangan kesempatan untuk menceritakan kisah horor mereka tentang hal itu :). Tetapi Anda dapat menceritakan kisah-kisah itu tentang bahasa kentut lama yang tidak lagi diminati akhir-akhir ini, tetapi Anda adalah orang yang malang. O baiklah ...

PS dan COBOL buruk untuk semua alasan lain yang disebutkan oleh yang lain :)

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.Benarkah? Dan bagaimana hari mengukur itu? Apakah mereka pergi melakukan setiap perusahaan dalam kata dan bertanya kepada mereka berapa banyak baris COBOL yang mereka miliki atau apa?


sumber
4

Dua fitur.

  • Pernyataan ALTER adalah kejahatan murni. Meskipun jarang digunakan dalam aplikasi COBOL yang lebih modern, itu banyak digunakan dalam "masa lalu" karena lebih efisien daripada struktur setara "IF-GOTO". Ketika komputer hanya memiliki 32K RAM, setiap instruksi penting. Itu memodifikasi pernyataan GOTO untuk memiliki tujuan yang berbeda.

    Ini membuat beberapa kode buram karena kode itu sendiri stateful.

  • Klausa REDEFINES dalam struktur data (seperti uniondalam C) adalah masalah abadi. Istilah "serikat bebas" - yaitu, struktur data overlay tanpa pembeda - adalah cara untuk meringkas masalah. Dua alias redefinisi tidak dapat dibedakan secara sepele oleh data; hanya pembacaan yang luas dari logika program yang dapat menentukan arti dari dua interpretasi alternatif dari byte.

    Ini membuat banyak struktur data buram karena data tidak dapat dipahami tanpa kode.

Keterbacaan dari sintaks seperti bahasa Inggris dikalahkan oleh dua konstruksi ini.

[Saya telah diperingatkan oleh moderator bahwa jawaban singkat mengabaikan pertanyaan penting dan menarik Anda. Jika Anda mendapati penolakan ini, Anda dapat meminta detailnya. Atau tandai agar moderator dapat menghapusnya.]

S.Lott
sumber
Saya tidak ingat salah satu dari itu - baik represi, atau saya tidak pernah mempelajarinya. Pencarian cepat memberi tahu saya bahwa saya setuju itu ALTERjahat, tetapi fitur ini jarang jika pernah digunakan, jadi itu sebenarnya bukan alasan untuk membenci COBOL. Tapi saya tidak begitu yakin REDEFINES. Membandingkannya dengan unionmembuat saya berpikir sedikit lebih baik ke arah itu - tapi mungkin apa yang OK dalam bahasa penanganan bit-level kecil dan struktur data yang sedikit mungkin bukan ide bagus dalam pemrosesan data.
Steve314
Kadang-kadang jawaban Anda menganggap saya meremehkan, tetapi jawaban ini tidak berguna. Saya tidak tahu apakah Anda mencoba membantu di sini, tetapi melakukannya dengan buruk, atau jika Anda hanya berbicara kepada diri sendiri. Saya bisa bertanya kepada Anda apa yang Anda maksud dengan 'kejahatan murni', tetapi keindahan dari jawaban yang baik di atas adalah bahwa saya tidak perlu memulai percakapan untuk mempelajari sesuatu.
Eric Wilson
@EricWilson: Terima kasih telah mengabaikan jawaban saya sepenuhnya. Itu membantu saya memahami apa yang perlu ditambahkan.
S.Lott
1
@ Eric - masalahnya ALTERadalah pengalihan goto. Pertama, itu berarti Anda menggunakan gotos - dalam dirinya sendiri saya tidak berpikir itu jahat, tetapi dalam kebanyakan bahasa itu adalah hal yang tidak biasa. Kedua, itu berarti para goto pergi ke suatu tempat selain dari tempat yang mereka katakan akan mereka kunjungi - dan itu hanya menakutkan. Saya tidak benar-benar yakin ini adalah kode modifikasi diri, tapi itu digambarkan sebagai tempat saya melihat, dan menganggapnya sebagai memodifikasi target instruksi melompat di assembler menjelaskan alasannya.
Steve314
@ S.Lott Terima kasih atas tambahan Anda (Anda juga @ Steve314), saya belajar sesuatu yang menarik, dan membalikkan suara saya.
Eric Wilson
3

Saya telah memprogram COBOL selama beberapa tahun yang baik. Sintaksnya sederhana dibandingkan dengan bahasa saat ini dan Anda tidak perlu banyak teori untuk belajar melanjutkan. COBOL bekerja sangat baik dengan CICS IBM (sistem manajemen transaksi on-line) dan programmer perlu mencatat dalam kode untuk skala jumlah aplikasi pengguna dari 1 hingga beberapa ribu. CICS menyediakan GUI berbasis karakter yang berfungsi dengan layar sebagai unit tampilan (tanpa jendela). Anda dapat menampilkan grafik menggunakan (GDDM IBM) pada mainframe. COBOL dapat berbicara dengan file yang diindeks (VSAM dan ISAM) serta DB2 (relasional berbasis SQL) dan juga IMS. COBOL / CICS adalah lingkungan yang sangat kuat dan Anda dapat mempelajarinya dalam beberapa minggu. Itu berarti Anda fokus pada bisnis bukan pada teknologi, jadi Anda bekerja 7 dari 8 jam pada pengkodean bukan pada pembelajaran MVM, JavaScript dan sejenisnya.

Masalah dengan COBOL adalah pemasaran yang buruk yang menyebabkan kurangnya minat dari pihak ketiga untuk mengembangkan alat dan lingkungan pemrograman untuk itu. Juga, kurangnya dukungan untuk antarmuka seperti Windows menyebabkan popularitasnya menurun setelah tahun 1993. Biaya mainframe mengarahkan pelanggan untuk mencari alternatif dan kompiler untuk COBOL tersedia dalam UNIX dan DOS. Bahasa C menarik banyak cahaya karena bisa lebih portabel dan memiliki akses langsung ke fungsi OS yang merupakan sesuatu yang COBOL miliki sangat sedikit.

Bahasa seperti VB, DBase, FoxPro dan Clipper memiliki cara yang lebih baik untuk mengakses 'database' pada PC daripada COBOL yang sebanding pada DOS sehingga COBOL hilang. CICS tidak dibuat murah di DOS atau UNIX untuk waktu yang lama, jadi nilainya tidak ada pada lingkungan ini.

Hari ini, COBOL didukung dengan .NET tapi saya kira itu telah kehilangan pertempuran di semua platform kecuali mainframe (dan mungkin AS / 400) di mana ia masih ada karena sejumlah besar aplikasi mission-critical yang sepenuhnya bergantung pada saya t.

Tidak mungkin
sumber
"kurangnya dukungan untuk Windows seperti antarmuka" .... bagaimana dengan netcobol.com/products/Fujitsu-NetCOBOL-for-.NET/overview
JoelFan
@ JoelFan terima kasih atas komentar Anda. Anda benar bahwa hari ini, ada alat yang lebih baik untuk COBOL tapi saya pikir mereka semua sudah terlambat. Maksud saya tentang kurangnya dukungan jika untuk antarmuka Windows adalah tentang awal tahun 90-an di mana hanya Micro Focus adalah satu-satunya pemain di pasar.
NoChance
2

Heh, saya kuliah di awal 80-an, dan orang-orang mencemooh COBOL bahkan saat itu. Saya pikir masalah terbesar adalah verbositasnya - "Halo, dunia!" di COBOL mungkin lebih dari lima puluh baris, 95% darinya diperlukan boilerplate. Hanya saja bukan bahasa yang sangat elegan atau menarik. Itu juga dirancang untuk menangani masalah kemarin, dan tidak benar-benar cocok dengan paradigma pengembangan yang dikembangkan setelah sekitar tahun 1970. Ini adalah bahasa pembuatan laporan yang cukup bagus - selama laporan Anda adalah kolom angka tanpa akhir dengan header dan footer. Jika Anda ingin menempel pada grafik atau logo di suatu tempat, lupakan saja. Saya pikir itu masih bahasa tercepat untuk tugas-tugas "pengolahan data" (mengambil file format tetap dengan transaksi 5M ATM dan melakukan penyesuaian saldo sederhana untuk masing-masing), tetapi berapa banyak pengembang yang melakukan hal-hal itu lagi? Dan banyak sistem menggunakan XML atau JSON saat ini, saya tidak suka berpikir tentang mencoba mengurai hal-hal seperti itu dengan COBOL (sebenarnya, saya benci untuk berpikir tentang penguraian secara umum dalam COBOL!)

TMN
sumber
1
"Hello World" membutuhkan berapa baris? Parsing / menghasilkan XML - sekarang dibangun ke dalam bahasa. Mungkin Anda harus meningkatkan basis pengetahuan Anda. Jawaban ini milik COBOL era 1960-an.
NealB
Menarik. Saya belum pernah bekerja dengan COBOL selama hampir satu dekade, tetapi yang terakhir kali saya melihatnya ditulis seperti yang saya ingat, DIVISI IDENTIFIKASI, BAGIAN PENYIMPANAN KERJA dan semua. Saya kira semua "komentar yang diperlukan" (PENULIS, TANGGAL-TERTULIS, KOMPUTER SUMBER, KOMPUTER OBYEK) adalah opsional sekarang. Penguraian XML tidak terlihat mengesankan - Anda harus menyusun divisi data untuk mencerminkan struktur file, tidak ada pemrosesan gaya SAX atau DOM. Senang mengetahui bahwa itu ada di sana.
TMN