Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Ngày xuất bản
Ngày xuất bản

COBOL là gì? Giới thiệu COBOL – Ngôn ngữ chủ lực của hệ thống tài chính và mainframe

COBOL là gì? Tại sao vẫn là “xương sống” của hệ thống tài chính toàn cầu

COBOL (Common Business-Oriented Language) ra đời năm 1959, là ngôn ngữ lập trình hướng nghiệp vụ, tập trung vào xử lý dữ liệu và business logic. Dù đã hơn 60 năm tuổi, COBOL vẫn vận hành 70% giao dịch tài chính toàn cầu, đặc biệt trong các hệ thống ngân hàng, bảo hiểm, chính phủ và các tổ chức lớn.

Lý do COBOL vẫn tồn tại

  • Độ ổn định cao: Hệ thống legacy COBOL cực kỳ ổn định, ít lỗi, vận hành liên tục hàng chục năm.
  • Chi phí chuyển đổi lớn: Việc migrate sang công nghệ mới rất tốn kém, rủi ro cao.
  • Khó thay thế: COBOL gắn liền với kiến trúc mainframe, xử lý khối lượng giao dịch khổng lồ.

Đối tượng nên học COBOL

  • Developer muốn hiểu hệ thống legacy (banking, insurance, government)
  • Backend engineer muốn làm việc với mainframe
  • Technical lead cần maintain hệ thống cũ
  • DevOps/Architect muốn hiểu kiến trúc enterprise lâu đời

Kiến trúc hệ thống COBOL trong thực tế

Một hệ thống enterprise điển hình sử dụng COBOL:

[Terminal] → [CICS] → [COBOL Program] → [DB2/VSAM]
  • CICS: Transaction Manager
  • DB2: Database
  • VSAM: File storage

COBOL thường chạy trên các nền tảng như IBM Mainframe (z/OS), Micro Focus Visual COBOL, GnuCOBOL (Open Source).


Hướng dẫn cài đặt môi trường học COBOL

Cài đặt GnuCOBOL trên macOS

brew install gnu-cobol
cobc -v

Cài đặt trên Ubuntu

sudo apt update
sudo apt install gnucobol

Viết chương trình COBOL đầu tiên

Tạo file hello.cbl:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.

       PROCEDURE DIVISION.
           DISPLAY "Hello, COBOL World!".
           STOP RUN.

Compile và chạy:

cobc -x hello.cbl
./hello

Cấu trúc chương trình COBOL

Mỗi chương trình COBOL được tổ chức theo cấu trúc cố định gồm 4 division (phân đoạn). Thứ tự này là bắt buộc; mỗi division đảm nhiệm một vai trò riêng trong việc xây dựng chương trình.

IDENTIFICATION DIVISION.   ← Metadata chương trình
ENVIRONMENT DIVISION.      ← Môi trường & thiết bị I/O
DATA DIVISION.             ← Khai báo dữ liệu
PROCEDURE DIVISION.        ← Logic nghiệp vụ

1️⃣ IDENTIFICATION DIVISION

Giới thiệu: Division đầu tiên, bắt buộc trong mọi chương trình COBOL.

Chức năng:

  • Định danh chương trình (PROGRAM-ID) – tên dùng khi gọi subprogram hoặc debug
  • Khai báo thông tin mô tả: AUTHOR, DATE-WRITTEN, INSTALLATION (tùy chọn)
  • Lưu trữ metadata giúp quản lý và bảo trì mã nguồn trong hệ thống enterprise
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE.
       AUTHOR. YOUR-NAME.
       DATE-WRITTEN. 2026-03-04.

2️⃣ ENVIRONMENT DIVISION

Giới thiệu: Mô tả môi trường phần cứng và ánh xạ file/thiết bị. Division này đảm bảo COBOL chạy đúng trên từng loại mainframe hoặc platform.

Chức năng:

  • CONFIGURATION SECTION: Khai báo SOURCE-COMPUTER (máy biên dịch) và OBJECT-COMPUTER (máy thực thi) – quan trọng khi port giữa các hệ thống
  • INPUT-OUTPUT SECTION: Gắn logical file name với physical device/file, định nghĩa tổ chức file (sequential, indexed, relative) và các đặc tả I/O
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SOURCE-COMPUTER. IBM-Z-SYSTEM.
      OBJECT-COMPUTER. IBM-Z-SYSTEM.

      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
         SELECT INPUT-FILE ASSIGN TO "data.txt"
            ORGANIZATION IS LINE SEQUENTIAL.

Nếu chương trình không dùng file, division này có thể bỏ qua (minimal program).


3️⃣ DATA DIVISION

Giới thiệu: Chứa toàn bộ khai báo dữ liệu – biến, record file, record DB, và cấu trúc dữ liệu phức tạp.

Chức năng:

  • FILE SECTION: Mô tả layout record của các file đã SELECT trong ENVIRONMENT DIVISION (FD – File Descriptor)
  • WORKING-STORAGE SECTION: Biến dùng trong suốt thời gian chạy chương trình (khác với biến local trong một đoạn logic)
  • LINKAGE SECTION: Định nghĩa tham số truyền vào/ra cho subprogram (CALL... USING)
  • LOCAL-STORAGE SECTION: Biến local có scope theo một đoạn PERFORM (tùy COBOL version)
       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-NAME      PIC A(20).
       01 WS-AGE       PIC 99.

Giải thích PIC

PIC Ý nghĩa
9 Số
A Chữ
X Ký tự bất kỳ

4️⃣ PROCEDURE DIVISION

Giới thiệu: Chứa toàn bộ logic nghiệp vụ – câu lệnh thực thi theo thứ tự, tương đương thân hàm main trong các ngôn ngữ khác.

Chức năng:

  • Thực thi các thao tác: MOVE, COMPUTE, DISPLAY, ACCEPT, READ, WRITE,...
  • Điều khiển luồng: IF/ELSE, PERFORM (vòng lặp, gọi paragraph), GOBACK/STOP RUN
  • Gọi subprogram: CALL
  • Xử lý file, DB, giao dịch CICS (tùy môi trường)
       PROCEDURE DIVISION.
           MOVE "John" TO WS-NAME.
           MOVE 25 TO WS-AGE.
           DISPLAY WS-NAME.
           DISPLAY WS-AGE.
           STOP RUN.

Biến & kiểu dữ liệu trong COBOL

Numeric

01 WS-SALARY PIC 9(7)V99.
  • V: vị trí dấu thập phân ẩn

String

01 WS-NAME PIC X(30).

Group Variable (giống struct trong C)

01 CUSTOMER.
   05 CUST-ID PIC 9(5).
   05 CUST-NAME PIC X(20).

Cấu trúc điều kiện và vòng lặp

IF ELSE

IF WS-AGE > 18
   DISPLAY "Adult"
ELSE
   DISPLAY "Minor"
END-IF.

LOOP – PERFORM

PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
    DISPLAY WS-I
END-PERFORM.

Xử lý file trong COBOL

COBOL rất mạnh về file:

SELECT INPUT-FILE ASSIGN TO "data.txt"
   ORGANIZATION IS LINE SEQUENTIAL.

COBOL + Database (DB2 Concept)

Embedded SQL trong COBOL:

EXEC SQL
   SELECT NAME INTO :WS-NAME
   FROM CUSTOMER
   WHERE ID = :WS-ID
END-EXEC.

COBOL trong doanh nghiệp

Hệ thống banking thường có:

  • Batch Job
  • Online Transaction (CICS)
  • JCL (Job Control Language)
  • VSAM file
  • DB2

So sánh COBOL với các ngôn ngữ khác

Tính năng COBOL Java Python
Xử lý nghiệp vụ Rất mạnh Tốt Tốt
Mainframe support Native Thông qua API Thông qua API
Legacy system Chủ lực Phụ trợ Phụ trợ
Modernization Khó Dễ Dễ
Performance Cao Cao Trung bình
Học liệu Ít Nhiều Nhiều
Cộng đồng Nhỏ Rộng Rộng

Example Implementation: Hiển thị thông tin khách hàng

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CUSTOMER-INFO.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 CUSTOMER.
           05 CUST-ID    PIC 9(5).
           05 CUST-NAME  PIC X(20).

       PROCEDURE DIVISION.
           MOVE 12345 TO CUST-ID.
           MOVE "Nguyen Van A" TO CUST-NAME.
           DISPLAY "ID: " CUST-ID.
           DISPLAY "Name: " CUST-NAME.
           STOP RUN.

Giải thích:

  • Khai báo biến nhóm CUSTOMER gồm ID và NAME
  • Gán giá trị cho từng biến
  • Hiển thị thông tin ra màn hình

Kết luận

COBOL không chỉ là “ngôn ngữ cũ” mà còn là nền tảng vận hành hàng tỷ giao dịch tài chính mỗi ngày. Việc hiểu và làm chủ COBOL giúp developer mở rộng cơ hội nghề nghiệp trong các lĩnh vực ngân hàng, bảo hiểm, chính phủ, và các hệ thống enterprise lớn. Nếu bạn muốn trở thành chuyên gia về hệ thống legacy, COBOL là lựa chọn không thể bỏ qua.