COBOL là một trong những ngôn ngữ đầu tiên tôi học - nếu bạn bỏ qua vô số phiên bản Cơ bản, ba hoặc bốn ngôn ngữ trình biên dịch và một biến thể của Forth, thì đó là trong năm ngôn ngữ đầu tiên của tôi và học đồng thời với Pascal. IOW, tôi đang trả lời từ kinh nghiệm cá nhân bằng ngôn ngữ.
EDIT Tôi nên nói kinh nghiệm cổ xưa . Tôi không bao giờ sử dụng ngôn ngữ này sau khi kết thúc thập niên 80, mặc dù tôi đã mua một cuốn sách mới (để thay thế cuốn sách cũ mà tôi đã vứt đi trong sự ghê tởm) để tôi có một cái gì đó để đề cập để những câu chuyện kinh dị của tôi sẽ không bị biến dạng. Nhưng tôi không biết ngôn ngữ đã phát triển như thế nào trong ít nhất 20 năm qua.
Rõ ràng, đối với nhiều người, nó là chỉ là "cũ là xấu" quan điểm cho rằng jonsca đã mô tả - và cũng nhiều hơn một tay thứ ba vượt qua-me-down thái độ điều. Nhưng có những vấn đề thực sự tiềm ẩn bên dưới đó.
Quá dài dòng là một vấn đề thực sự - có quá nhiều sự lộn xộn trong cách hiểu mã. Đây là vấn đề lớn nhất. Những người nhìn vào MOVE
, ADD
và MULTIPLY
báo cáo vv trong kinh dị có một cái nhìn hơi phóng đại này, sự thật - sự COMPUTE
tuyên bố là gần gũi hơn với các bài tập trong các ngôn ngữ khác. Nhưng vẫn còn rất nhiều lộn xộn trong tất cả các bộ phận và các bộ phận. Một trong những điều đầu tiên tôi học được ở COBOL là luôn luôn bắt đầu bằng cách sao chép một trang SKELETON.COB tiêu chuẩn dài A4.
COBOL không có một số tính năng thú vị, nhưng những tính năng (ví dụ như PIC
điều) có xu hướng có những điều mà hiện nay nhiều phần của DBMS chứ không phải là ngôn ngữ lập trình, và điều đó dường như tôi thường có một cách tốt hơn để tách những trách nhiệm. Ngoài ra, một số thư viện trong các ngôn ngữ khác sử dụng một cái gì đó có thể so sánh với PIC
(ví dụ printf và scanf trong thư viện chuẩn C). Có thể cho rằng, tốt nhất đã được giữ, nhưng tồi tệ nhất đã giảm.
Ngoài ra, đối với mỗi tính năng hay, có ít nhất một tính năng không thể chịu đựng được. Ví dụ, cho dù vòng lặp có tầm thường đến đâu, bạn phải di chuyển cơ thể vào một quy trình riêng. Các PERFORM ... UNTIL ...
và các tuyên bố tương tự là câu lệnh đơn - không cấu trúc khối. Trong một nghĩa nào đó, COBOL là một hương vị của lập trình cấu trúc từ trước khi lập trình có cấu trúc được phát minh - có là một GO TO
, nhưng nó sử dụng được nản chí (ít nhất là khi tôi đã sử dụng COBOL), nhưng vòng lặp nói riêng chỉ là không xử lý mà tốt.
Trên thực tế, ngôn ngữ mà tôi đã sử dụng sau COBOL khiến tôi nhớ nhất là ... dBase. Như trong Ashton-Tate dBase III +. Ngày nay, mọi người có nhiều khả năng nhớ tất cả các bản sao đã chết hoặc sắp chết (Clipper, FoxPro, v.v.) dẫn đến tên chung xBase - và vẫn còn một hậu duệ còn sống ở xHarbour. Vấn đề là đây là những ngôn ngữ cơ sở dữ liệu, nhưng không có gì giống như SQL.
Ngay cả khi đó, nơi mọi chương trình COBOL hoạt động trên một cơ sở dữ liệu cụ thể cần bao gồm một bản sao đặc tả của cơ sở dữ liệu đó (và các bản sao có thể không nhất quán), đó thực sự không phải là trường hợp trong xBase khi cơ sở dữ liệu biết cấu trúc của chính nó.
Sau đó, tính đến điều đó, COBOL không quá khủng khiếp nếu bạn chấp nhận nó cho những gì nó là. Nhưng những gì nó không phải là một ngôn ngữ để viết cấu trúc dữ liệu. Đó có thể là lý do tại sao COBOL phải chịu đựng rất nhiều trong thời kỳ chiến tranh thần thánh C vs Pascal - cả hai bên có thể đồng ý rằng COBOL không tốt cho việc phát minh lại cây nhị phân một lần nữa.
Ồ - và một điều tôi sẽ không bao giờ quên là cuốn sách giáo khoa COBOL đầu tiên của tôi đã không mô tả SORT
lệnh như thế nào , nói rằng nó nằm ngoài phạm vi của cuốn sách - rõ ràng, tác giả không thể đối phó với ý tưởng sắp xếp, hoặc coi nó là nhiều hơn những bộ óc nhỏ bé của các sinh viên COBOL có thể đối phó với [xem chỉnh sửa ở cuối]. Điều đó làm cho rất khó để thực hiện nghiêm túc COBOL.
Một khía cạnh kỳ lạ của điều này là Lập trình cấu trúc Jackson, mà tôi cũng bị buộc phải học cùng một lúc, và đặc biệt để sử dụng với COBOL. Một phần của việc này là vẽ sơ đồ cấu trúc cho đầu vào, sau đó là sơ đồ cấu trúc cho đầu ra, sau đó vẽ sơ đồ cấu trúc ở giữa cho mã. Sắp xếp rõ ràng là một vấn đề đã được giải quyết - bạn không thể rút ra được thuật toán sắp xếp theo cách này. Vì vậy, thật kỳ lạ khi được cuốn sách văn bản khuyến nghị nói rằng toàn bộ khái niệm sắp xếp nằm ngoài tâm trí nhỏ bé của tôi, đồng thời được dạy một cái gì đó giống như hàng tá thuật toán sắp xếp khác nhau và cách thực hiện chúng trong Pascal.
Các vấn đề mà JSP có thể xử lý có lẽ là một hướng dẫn tốt cho những điều mà COBOL có thể làm tương đối tốt. Nhưng ngay cả khi đó, điều đó không nhất thiết có nghĩa là cả JSP và COBOL đều là những cách tốt để xử lý những vấn đề đó.
EDIT vào ngày 30 tháng 7 năm 2014
Tôi vừa được tăng cường danh tiếng từ việc này, nhắc nhở tôi rằng nó ở đây. Khi điều đó xảy ra, do một số bộ sưu tập sách cổ mang đầy hoài niệm, giờ đây tôi có thể sửa một SORT
lệnh WRT .
Cuốn sách ban đầu tôi sử dụng làm văn bản được đề xuất khi học COBOL là "Lập trình phương pháp trong COBOL" của Ray Welland. Điều này không bao gồm COBOL 85 (mặc dù đã có phiên bản "Lập trình phương pháp trong COBOL-85" sau này mà tôi chưa từng thấy).
loại bình luận bên dưới rằng "Bạn phải sắp xếp các tệp đầu vào trước khi đọc chúng hoặc sắp xếp tệp đầu ra sau khi tạo nó, sử dụng tiện ích sắp xếp đi kèm với HĐH". Từ câu trả lời của tôi, tôi đã bỏ lỡ điểm "đi kèm với hệ điều hành". Kindall đã gợi ý một cái gì đó giống với triết lý Unix AFAICT, với COBOL được sử dụng cho các bit, nó tốt cho các tiện ích hệ điều hành như một tiện ích sắp xếp được sử dụng cho một số thứ khác, và có lẽ sử dụng ngôn ngữ bó / script / shell để dán các bit lại với nhau. Điều này có ý nghĩa hơn nhiều trong một thế giới cổ đại, nơi phần mềm tương tác hiếm khi không tồn tại, do đó, dù sao bạn cũng sẽ gửi một loạt công việc (do đó là "ngôn ngữ lô").
Sau đây được trích dẫn từ trang 165-166 của "Lập trình phương pháp trong COBOL" ...
Việc sử dụng các tệp nối tiếp có thứ tự ngụ ý rằng cần phải có một phương tiện sắp xếp các bản ghi trong một tệp thành một số thứ tự được chỉ định theo khóa. Hầu hết các hệ thống máy tính lớn hơn đều có tiện ích sắp xếp sẽ sắp xếp một tệp theo vị trí, loại và kích thước của từng mục dữ liệu tạo thành khóa.
Ngoài ra còn có một cơ sở để sắp xếp các hồ sơ từ trong một chương trình COBOL nhưng điều này nằm ngoài phạm vi của cuốn sách này vì hai lý do:
(a) giao diện cho hệ điều hành thường khá phức tạp và thay đổi tùy theo hệ thống,
(b) mô-đun sắp xếp là một phần tùy chọn của ANS '74 COBOL và có thể không được triển khai trong các hệ thống COBOL cho các máy tính nhỏ hơn.
Do đó, sẽ có giả định rằng các cơ sở tồn tại để sắp xếp các tệp theo một thứ tự được chỉ định và vấn đề cập nhật các tệp đó sẽ được xem xét.
Nói tóm lại, kindall là chính xác - giả định là thông thường việc sắp xếp sẽ được thực hiện bên ngoài COBOL. Thậm chí có thể có một lý do thực sự để loại trừ việc sắp xếp từ một ngôn ngữ lập trình vào khoảng năm 1974 cho các máy tính nhỏ.
Những gì tôi nói ở trên về cơ bản là những gì bạn nhận được sau khoảng 20 năm không thể kiểm tra sự thật do vứt cuốn sách đi.
Tuy nhiên, tôi vẫn nên chỉ ra rằng tôi đã chính thức nghiên cứu về COBOL từ cuốn sách được đề xuất này bao gồm tiêu chuẩn năm 1974 (không phải tiêu chuẩn 1985) vào năm 1988 và 1989. Phiên bản thứ ba của "COBOL dành cho sinh viên" (Parkin, Yorke, Barnes) - phiên bản đầu tiên bao gồm COBOL 85 - không được xuất bản cho đến năm 1990. Tôi không chắc chắn, nhưng tôi nghĩ rằng phiên bản "Lập trình phương pháp" của COBOL 85 đã không được xuất bản cho đến năm 1994.
Nhưng điều đó không nhất thiết đại diện cho thế giới COBOL kéo lê đôi chân của mình - tốt, dù sao thì nó cũng không nhiều. Việc áp dụng tiêu chuẩn mới cần có thời gian cho bất kỳ ngôn ngữ nào, ngay cả bây giờ.