Năm cuốn sách lập trình khó quên của James Hague

Công nghệ08 tháng 11, 2026·6 phút đọc

Cựu lập trình viên game James Hague chia sẻ năm cuốn sách ít phổ biến nhưng ảnh hưởng sâu sắc đến tư duy lập trình của ông, từ tối ưu hợp ngữ đến cách phân rã vấn đề. Bài viết nhấn mạnh giá trị của những cuốn sách dạy tư duy thay vì chỉ dạy cú pháp ngôn ngữ.

Năm cuốn sách lập trình khó quên của James Hague
Ảnh minh hoạ do AI tạo

Đối với James Hague, một cựu lập trình viên game gắn bó với nghề từ thập niên 1980, lập trình không phải là câu chuyện về công nghệ vì bản thân công nghệ, mà là về khả năng hiện thực hóa ý tưởng. Ông đã đọc những cuốn sách kinh điển như Structure and Interpretation of Computer Programs hay Paradigms of Artificial Intelligence Programming, nhưng trong bài viết mới đây, ông muốn điểm qua những cuốn sách ít phổ biến hơn nhưng đã định hình mạnh mẽ cách ông suy nghĩ.

Zen of Assembly Language — Michael Abrash, 1990

Hague dành phần lớn thập niên 1980 để viết game cho máy 8-bit. Dù nghe có vẻ lạ khi nhìn lại sức mạnh khiêm tốn của chip 6502 chạy dưới 2 MHz, ông không hề ám ảnh với việc tối ưu hiệu năng. Điều ông quan tâm hơn là làm cho mã nguồn nhỏ gọn — hệ quả của việc dùng trình soạn thảo theo dòng và viết những chương trình mà người khác sẽ phải gõ lại tỉ mỉ từ một trang tạp chí. Những trang lệnh DATA 0AFF6CA900004021… đúng là một cơn ác mộng.

Đúng lúc giai đoạn đó khép lại, cuốn Zen of Assembly Language của một tác giả mà Hague chưa từng nghe tên xuất hiện. Cuốn sách mổ xẻ, giải thích và mở rộng chính những thủ thuật tự học của ông trong nhiều năm mày mò hợp ngữ. Dù Abrash tập trung vào 8086 chứ không phải 6502, Hague cảm thấy như cuốn sách được viết riêng cho mình.

Đây cũng là một trong những cuốn sách kỹ thuật bị trễ thời điểm phát hành kỳ lạ nhất mà ông từng biết: phần lớn nội dung nói về tối ưu chi tiết cho 8088 và 8086, vậy mà nó lại ra mắt đúng lúc 80486 bắt đầu xuất hiện trên những chiếc PC cao cấp.

Scientific Forth và Fractals, Visualization, and J

Hai cuốn Scientific Forth (Julian Noble, 1992) và Fractals, Visualization, and J (Clifford Reiter, 2000) nói về hai chủ đề hoàn toàn khác nhau. Một cuốn về tính toán khoa học thuần túy, cuốn kia về tạo hình ảnh. Mỗi cuốn dùng một ngôn ngữ lập trình khác nhau và đều rất "lệch chuẩn" trong phần mã minh họa.

Thế nhưng cả hai lại theo cùng một cách tiếp cận mà Hague ước gì được dùng phổ biến hơn. Bề ngoài, các tác giả viết phần giới thiệu cho một ngôn ngữ cụ thể — đó là lý do tên ngôn ngữ nằm trong tiêu đề. Nhưng thực chất, mỗi tác giả là chuyên gia sâu trong lĩnh vực của mình và đã tìm được một ngôn ngữ cho phép thử nghiệm và viết mã để giải quyết vấn đề trong lĩnh vực đó. Nhờ vậy, sách không có những ví dụ gượng ép hay bài tập đồ chơi, mà là những chương trình nghiêm túc, không tầm thường, cho thấy ngôn ngữ được dùng trong thực tế.

Tiến sĩ Noble trình diễn cách ông dùng Forth cho các phép toán ma trận nặng, và khi nhận ra ký pháp RPN (Reverse Polish Notation — ký pháp hậu tố) không lý tưởng trong mọi tình huống, ông tự phát triển một bộ chuyển đổi từ biểu thức trung tố sang Forth. Clifford Reiter thì lao vào các thuật toán xử lý ảnh, rồi rẽ sang những chủ đề nhẹ nhàng hơn với các tiêu đề như "R/S Analysis, the Hurst Exponent, and Sunspots."

Cả hai cuốn là lựa chọn tuyệt vời thay cho những giáo trình "học ngôn ngữ lập trình hot nhất tháng này". Đáng buồn là Julian Noble qua đời năm 2007.

Programmers At Work

Hague từng say mê đọc các bài phỏng vấn lập trình viên và nhà thiết kế game trên báo in — và thường thì nhà thiết kế game cũng chính là lập trình viên. Ông bị cuốn hút bởi Hackers của Levy, đặc biệt là chương về phát triển game hơn phần còn lại. Programmers At Work cùng chí hướng: triết lý, ý tưởng và kinh nghiệm trực tiếp từ một tập hợp lập trình viên nổi tiếng lẫn kỳ dị.

Nhưng cuốn sách không chủ yếu nói về kỹ thuật. Nó nói về sự sáng tạo. Phần lớn người được phỏng vấn không có bằng khoa học máy tính. Không có sự nhấn mạnh vào toán học, chứng minh tính đúng đắn của chương trình hay lambda calculus — chỉ là những con người nảy ra ý tưởng và hiện thực hóa chúng. Mối liên hệ với game cũng hiện diện: Jaron Lanier nói về Moon Dust đầy chất ảo giác cho Commodore 64, còn Bill Budge trình bày kế hoạch táo bạo (và đến nay vẫn chưa thành hiện thực) để xây dựng một "Construction Set Construction Set".

Cuốn sách của Lammers chính là hình mẫu Hague dùng khi ông biên soạn Halcyon Days. Ông cũng kéo Hackers vào cuộc bằng cách phỏng vấn John Harris về sự không hài lòng của Harris với cách Levy trình bày về mình. Trong một bước ngoặt kỳ lạ, Programmers at Work và Halcyon Days được đóng gói chung trên một đĩa CD bán qua thư viện của Dr. Dobb's Journal. Sự kết hợp đó đã tồn tại mười năm và vẫn còn bán được, khiến chính Hague bất ngờ.

Thinking Forth: A Language and Philosophy for Solving Problems — Leo Brodie, 1984

Theo Hague, cuốn này đáng đọc ít vì Forth và nhiều hơn vì đây là một trong số ít sách dạy cách phân rã vấn đề và cấu trúc mã nguồn. Người đọc dễ tưởng cuốn sách được viết bởi Fowler và đồng nghiệp, cho đến khi nhận ra nó ra đời từ giữa thập niên 1980. Việc Brodie dùng từ "factor" (bắt nguồn từ cộng đồng Forth) thay vì "refactor" cũng là một dấu hiệu nhận biết. Điều ấn tượng là sách không có OOP (lập trình hướng đối tượng), không bàn về design pattern, không nặng thuật ngữ. Đó là cuốn sách về hiểu rõ điều mình muốn đạt được, tránh dư thừa và viết mã cực kỳ đơn giản.

Phần Forth trong sách cũng đáng giá, đặc biệt là những mẩu trí tuệ đan xen từ các chuyên gia, trong đó có Chuck Moore — người sáng tạo ra Forth.

Góc nhìn

Với lập trình viên Việt Nam, bài viết này gợi ý rằng giá trị lâu dài của việc đọc sách kỹ thuật nằm ở tư duy hơn là cú pháp. Những cuốn sách như Thinking Forth cho thấy các nguyên tắc phân rã vấn đề và viết mã đơn giản đã có từ rất lâu trước khi khái niệm refactor hay design pattern trở nên phổ biến — nghĩa là việc nắm vững nền tảng có thể bền vững hơn việc chạy theo framework mới mỗi năm.

Cách tiếp cận của Scientific Forth và Fractals, Visualization, and J cũng đáng để các nhóm kỹ thuật tham khảo: học một ngôn ngữ thông qua việc giải quyết bài toán thực trong lĩnh vực chuyên môn, thay vì làm bài tập mẫu. Điều này đặc biệt hữu ích khi một ngôn ngữ chuyên biệt, dù ít phổ biến, lại giúp hiện thực hóa ý tưởng nhanh và rõ ràng hơn.

Nguồn: prog21.dadgum.com · Quy trình biên tập

Chia sẻ:FacebookX