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?
Jawaban:
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
,ADD
danMULTIPLY
lain - lain dengan ngeri memiliki pandangan yang sedikit berlebihan tentang hal ini, benar -COMPUTE
pernyataan 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
PIC
hal 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 sebandingPIC
(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 sebuahGO 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
SORT
perintah, 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
SORT
perintah.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" ...
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.
sumber
PERFORM UNTIL
keEND-PERFORM
blok. Aku benar-benar benci kalau aku tahu itu.Setelah menghabiskan sebagian besar hari ini menulis COBOL, saya pikir saya dapat memberikan beberapa masukan saat ini.
Pertama hal-hal BURUK: -
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.
Dan hal-hal bagus - beberapa aspek COBOL lebih unggul daripada bahasa lain: -
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.
sumber
9
diPIC
klausa dalam beberapa program dalam suatu grup.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
sumber
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.
sumber
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.
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.
sumber
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
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
union
dalam 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.]
sumber
ALTER
jahat, tetapi fitur ini jarang jika pernah digunakan, jadi itu sebenarnya bukan alasan untuk membenci COBOL. Tapi saya tidak begitu yakinREDEFINES
. Membandingkannya denganunion
membuat 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.ALTER
adalah 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.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.
sumber
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!)
sumber