John Backus dẫn dắt dự án FORTRAN tại IBM, chứng minh mã bậc cao vẫn có thể chạy nhanh—tăng năng suất và giúp phần mềm phát triển thành một ngành kinh doanh thực sự.

Đầu thập niên 1950, máy tính là thiết bị hiếm và đắt, thuộc về chính phủ, trường đại học và các công ty lớn. Chúng mạnh theo chuẩn thời đó—nhưng việc lập trình thì cực kỳ chậm. Nhiều chương trình được viết trực tiếp bằng mã máy hoặc hợp ngữ, nơi mỗi lệnh phải khớp với tập lệnh hạn chế của phần cứng. Một thay đổi nhỏ trong một công thức có thể khiến bạn phải viết lại cả những phần dài của chương trình, và một lỗi nhỏ có thể làm sập cả lần chạy sau hàng giờ chờ đợi.
John Backus là một kỹ sư tại IBM, người đã nhìn thấy bao nhiêu thời gian bị lãng phí cho việc lập trình cấp thấp. Ông lãnh đạo một nhóm nhỏ làm điều gì đó mang tính đột phá: cho phép lập trình viên viết các chỉ dẫn toán học gần hơn với cách họ nghĩ về vấn đề, và để một trình biên dịch dịch điều đó thành mã máy nhanh.
Dự án trở thành FORTRAN (viết tắt của “Formula Translation”), nhắm tới khách hàng khoa học của IBM—những người làm công việc số học, không phải xử lý hồ sơ. Lời hứa rất rõ ràng: viết ít mã hơn, ít lỗi hơn, và vẫn chạy hiệu quả trên các máy như IBM 704.
Lúc đó nhiều lập trình viên tin rằng ngôn ngữ bậc cao là một sự xa xỉ. Họ cho rằng bất cứ thứ gì "giống tiếng Anh" sẽ chạy chậm hơn hợp ngữ được tối ưu cẩn thận—chậm đến mức không bõ công. Khi máy tính đắt đỏ và thời gian CPU được phân bổ nghiêm ngặt, hiệu năng không phải là "một điều hay ho"—nó là toàn bộ vấn đề.
Vì vậy FORTRAN không chỉ là cú pháp mới. Đó là một canh bạc rằng tự động hoá có thể sánh với kỹ năng con người: rằng một trình biên dịch có thể sinh mã đủ tốt để các nhà khoa học và kỹ sư tin dùng.
Câu chuyện FORTRAN vừa là một đột phá kỹ thuật, vừa là một thay đổi văn hoá. Tiếp theo, chúng ta sẽ xem lập trình ra sao trước khi có ngôn ngữ bậc cao, cách nhóm của Backus xây một trình biên dịch có thể cạnh tranh với mã viết tay, và tại sao thành công đó thay đổi kinh tế của phần mềm—thiết lập nhiều mẫu mà các đội hiện đại vẫn dựa vào ngày nay.
Trước FORTRAN, "lập trình" thường có nghĩa là viết lệnh bằng ngôn ngữ của chính máy—hoặc thứ gì đó chỉ hơi thân thiện hơn.
Máy tính đầu tiên thực thi mã máy: opcode dạng số và địa chỉ bộ nhớ. Bởi vì điều đó gần như không thể quản lý ở quy mô lớn, lập trình viên dùng hợp ngữ, thay nhiều con số bằng các ký hiệu ngắn. Nhưng hợp ngữ vẫn là một lớp mỏng phủ lên phần cứng. Bạn không mô tả muốn gì theo dạng toán học—bạn mô tả làm thế nào để thực hiện, bước một, thanh ghi một.
Với một tính toán khoa học, điều đó có thể nghĩa là quản lý vòng lặp, bố trí bộ nhớ và các giá trị trung gian bằng tay. Một thay đổi nhỏ trong công thức có thể bắt buộc bạn viết lại nhiều phần chương trình vì mọi thứ được liên kết qua địa chỉ và nhảy.
Lập trình hợp ngữ chậm và mong manh. Các vấn đề phổ biến gồm:
Nhà khoa học và kỹ sư không chỉ chạy một phép tính—họ tinh chỉnh mô hình, chạy lại mô phỏng, và khám phá các kịch bản "nếu thì". Khi mỗi cập nhật phải mất hàng ngày hay hàng tuần để viết lại và thử nghiệm, việc thử nghiệm chậm lại đến mức gần như dừng.
Đó là lúc một loại chi phí mới trở nên rõ ràng: thời gian lập trình viên. Phần cứng thì đắt, nhưng con người có tay nghề cũng đắt không kém. Đến giữa những năm 1950, nút thắt không phải luôn là tốc độ máy—mà là thời gian con người để khiến máy làm việc hữu ích một cách đáng tin cậy.
John Backus không bắt đầu như một "người tiên phong máy tính" định mệnh. Sau một thời kỳ công việc bất ổn và phục vụ trong Quân đội Hoa Kỳ, ông vào IBM đầu thập niên 1950, khi máy tính còn hiếm và hầu hết được lập trình thủ công. Backus nhanh chóng nổi bật vì hai điều: sự bất nhẫn thực tế với công việc nhàm chán, và năng lực tổ chức các nỗ lực kỹ thuật tham vọng.
IBM có một vấn đề và một cơ hội gói gọn trong một máy: IBM 704. Máy mạnh theo chuẩn thời đó và được thiết kế với các tính năng quan trọng cho công việc số (như số dấu phẩy động). Nhưng khách hàng kỹ thuật và khoa học—kỹ sư, nhà nghiên cứu, phòng thí nghiệm chính phủ—đang bỏ rất nhiều thời gian viết và gỡ lỗi hợp ngữ. Nếu lập trình vẫn chậm như vậy, ngay cả một máy xuất sắc cũng sẽ bị sử dụng dưới mức.
Cược của IBM đơn giản để nói nhưng mạo hiểm để thực hiện: làm cho 704 dễ lập trình hơn mà không hy sinh tốc độ.
Backus lãnh đạo một nhóm xem FORTRAN như hai dự án không thể tách rời: một ngôn ngữ để con người viết, và một trình biên dịch dịch nó thành mã máy nhanh. Nửa sau mới là canh bạc thực sự. Nhiều chuyên gia tin rằng "lập trình tự động" sẽ luôn quá kém hiệu quả để thay hợp ngữ tay.
Ngôn ngữ bậc cao không chỉ là "cú pháp đẹp". Nó nghĩa là viết biểu thức, vòng lặp và chỉ dẫn có cấu trúc gần với toán học và logic của vấn đề—rồi tin tưởng trình biên dịch sinh mã cạnh tranh với mã tay của lập trình viên lành nghề. Sự tin tưởng này là điều IBM và Backus cố gắng giành được.
Lời hứa cốt lõi của FORTRAN đơn giản nhưng mang tính cách mạng: thay vì nói cho máy biết làm sao từng bước nhỏ, bạn có thể viết câu lệnh giống toán học hơn nhiều.
Một kỹ sư có thể viết "tính công thức này cho nhiều giá trị", chứ không phải gõ ra từng lệnh load, add, store và jump mà hợp ngữ yêu cầu. Hy vọng là lập trình sẽ giống việc diễn đạt ý tưởng hơn là đấu dây bảng điều khiển bằng từ ngữ.
FORTRAN không chạy trực tiếp trên máy. Một chương trình riêng—trình biên dịch—dịch mã nguồn FORTRAN thành các lệnh cấp thấp mà máy hiểu.
Bạn có thể nghĩ nó như một thông dịch viên thành thạo: bạn viết bằng ngôn ngữ con người; trình biên dịch viết lại thành ngôn ngữ máy để IBM 704 thực thi.
Nhóm của Backus nhắm tới sự kết hợp hiếm:
Điểm cuối cùng quan trọng. FORTRAN không cố gắng trở thành tất cả với mọi người—nó nhằm giải bài toán thực tế: làm tính toán thật với ít lỗi hơn.
Sự hoài nghi rất mạnh. Nhiều lập trình viên tin rằng hiệu năng đòi hỏi quyền kiểm soát tuyệt đối, và "dịch tự động" sẽ lãng phí. Người khác lo việc gỡ lỗi: nếu trình biên dịch sinh ra lệnh cuối cùng, làm sao biết máy thực sự làm gì?
Người dùng ban đầu của FORTRAN là kỹ sư và nhà khoa học—những người có phương trình phải chạy, mô hình phải kiểm tra và kết quả phải sinh ra. Với họ, lời hứa không phải là mới lạ; đó là tiết kiệm thời gian, ít lỗi sao chép, và chương trình có thể được chia sẻ, bảo trì bởi nhiều người hơn thay vì một nhóm nhỏ chuyên gia hợp ngữ.
FORTRAN quan trọng vì nó giảm chi phí nhân lực lập trình mà không gây ra chi phí chạy chương trình lớn.
Trình biên dịch là một chương trình dịch mã nguồn do con người viết thành các lệnh mức thấp mà máy cụ thể có thể thực thi.
Với FORTRAN, trình biên dịch phải làm tốt hai việc:
Vấn đề cốt yếu với ngôn ngữ bậc cao là tốc độ. Nếu mã FORTRAN biên dịch chạy chậm hơn hợp ngữ nhiều, các nhóm khoa học và kỹ thuật không thể chấp nhận tiện lợi đó.
Việc chấp nhận FORTRAN phụ thuộc vào trình biên dịch chứng minh rằng nó có thể tạo ra mã máy cạnh tranh, chứ không chỉ là mã "chạy được".
Các tối ưu tiêu biểu bao gồm các cải tiến thực tế như:
Đây là những mánh tương tự mà lập trình viên hợp ngữ thường làm thủ công—giờ được tự động hóa.
FORTRAN giúp biểu diễn các mẫu số học cốt lõi dễ hơn:
DO cho các phép lặp trên phạm vi.Kết hợp lại, những tính năng này giảm số "nhảy bí ẩn" và tính toán địa chỉ thủ công—hai nguồn lỗi phổ biến trong hợp ngữ.
Không ngay lập tức và không hoàn hảo. FORTRAN ban đầu giảm chi phí ghi lại bằng tay và cải thiện độ dễ đọc, nhưng tính di động vẫn bị giới hạn bởi:
Theo thời gian, áp lực chuyển mã khoa học giữa máy đã thúc đẩy tiêu chuẩn hoá ngôn ngữ.
Nó thay đổi kinh tế học:
Nói cách khác, FORTRAN giúp chuyển lập trình từ nghề thủ công cho từng máy sang ngành công nghiệp dựa trên phương pháp lặp lại và phần mềm tái sử dụng.
Một số nhược điểm xuất hiện:
Nó giải quyết nút thắt lớn, nhưng không xóa bỏ mọi sự phức tạp.
Bài học cốt lõi: đầu tư vào công cụ có thể mở rộng quy mô làm việc.
Gợi ý thực tế:
FORTRAN vẫn được dùng rộng rãi trong tính toán khoa học và số học, nhất là nơi tồn tại thư viện đã được kiểm chứng và mã lâu đời.
Nếu bạn học vì lý do lịch sử hoặc thực tế: