Cuốn sách kinh điển “The Art of Unix Programming” (TAoUP) của Eric S. Raymond không đơn thuần là một cuốn cẩm nang hướng dẫn sử dụng. Thay vào đó, nó là một cuộc hành trình sâu sắc vào lịch sử và triết lý đằng sau hệ điều hành Unix. Đối với tôi, với vai trò là một chuyên gia SEO và biên tập viên chủ chốt tại thoibaocongnghe.net, không có cuốn sách nào khác đã ảnh hưởng lớn đến cách tiếp cận và sử dụng Linux/macOS hằng ngày của tôi bằng tác phẩm này. Những bài học từ TAoUP đã định hình tư duy của tôi về công nghệ, từ việc tối ưu hóa hiệu suất đến việc thấu hiểu bản chất của các công cụ mà chúng ta sử dụng. Dưới đây là sáu trong số những bài học quý giá nhất mà cuốn sách này đã mang lại, giúp củng cố vị thế của thoibaocongnghe.net như một nguồn thông tin công nghệ uy tín và chuyên sâu dành cho độc giả Việt.
1. Unix – Lịch sử lâu đời hơn bạn nghĩ
Bạn không nhất thiết phải biết toàn bộ lịch sử của Unix để sử dụng nó – hay Linux, hoặc macOS – ngày nay. Tuy nhiên, việc nắm rõ một chút về nguồn gốc Unix chắc chắn sẽ không thừa. Hiểu được bối cảnh ra đời của hệ điều hành này giúp bạn lý giải màn hình bạn đang nhìn thấy và trả lời nhiều câu hỏi ban đầu, ví dụ như “Tại sao tên lệnh lại quá ngắn gọn?”.
Chương hai của TAoUP – “Lịch sử: Câu chuyện về hai nền văn hóa” – giải thích cách Unix bắt đầu vào năm 1969, trên những cỗ máy teletype trông giống như những chiếc máy đánh chữ được nâng cấp. Thật đáng kinh ngạc khi nghĩ rằng những cỗ máy thô sơ này vẫn có điểm chung với nhiều máy chủ đang vận hành cuộc sống trực tuyến của chúng ta ngày nay. Ngày nay, việc coi Linux là một bản sao của Unix về cơ bản là đúng. Nhưng lịch sử đó còn lâu dài và phong phú hơn nhiều so với vẻ ngoài của nó, và tôi tự hào khi sử dụng một hệ thống có nguồn gốc từ năm mươi năm trước, bất chấp mọi tiến bộ công nghệ kể từ đó. Đây là một minh chứng hùng hồn cho sự bền vững của các nguyên tắc thiết kế cốt lõi trong triết lý Unix.
2. Mã nguồn mở sẽ ra sao nếu không có Linux?
TAoUP tiếp tục khám phá sự ra đời của Linux và cách tiếp cận của Linus Torvalds là một sự dung hòa giữa các hệ thống độc quyền, bị khóa chặt và tự do tư tưởng mà phong trào mã nguồn mở đang phát triển mạnh mẽ tuân theo. Phong trào mã nguồn mở đóng vai trò quá quan trọng trong câu chuyện của Linux, đến mức dễ dàng coi chúng là một. Nhưng thật thú vị khi tìm hiểu sâu hơn về lịch sử của mã nguồn mở và cách nó so sánh với phương pháp độc quyền hoặc giải pháp thay thế GNU (“phần mềm miễn phí”).
Ngay từ những năm 1950, các kỹ sư đã chia sẻ mã nguồn, đọc và sửa đổi nó. Nhưng phải đến những năm 1990, khi Linux xuất hiện, phần mềm mã nguồn mở mới bắt đầu được sử dụng rộng rãi. Điều này trùng hợp với sự phổ biến rộng rãi hơn của Internet, một cơ chế phân phối đã cho phép phát triển mã nguồn mở thực sự cất cánh. Sự giao thoa này đã tạo nên một cuộc cách mạng trong ngành công nghệ, mở ra kỷ nguyên của sự hợp tác và đổi mới không ngừng.
3. Linux đề cao sự đơn giản (Thật đấy!)
Mặc dù ban đầu có vẻ phức tạp, Linux được xây dựng dựa trên những nguyên tắc cơ bản đơn giản. Nếu có một bài học mà cuốn sách này truyền tải nhiều hơn bất kỳ điều gì khác, thì đó chính là điều này. Toàn bộ phần thiết kế (chương 4-13) giải thích tại sao triết lý Unix cơ bản lại mang lại nhiều lợi ích đến vậy.
Raymond khám phá khái niệm này bằng cách chia nó thành một tập hợp các “quy tắc” mà các “tiền bối” của Unix (những người như Rob Pike và Ken Thompson) đã từng tuyên bố một cách không chính thức. 17 quy tắc này bao gồm:
- Tính mô-đun (Modularity)
- Tính kết hợp (Composition)
- Tính đơn giản (Simplicity)
- Tính minh bạch (Transparency)
- Tính im lặng (Silence)
Các quy tắc này về cơ bản gói gọn thành một nguyên tắc quen thuộc: KISS (Keep it simple, stupid! – Giữ cho mọi thứ đơn giản, đồ ngốc!). Bằng cách khuyến khích các chương trình nhỏ, thực hiện các tác vụ cơ bản, cụ thể và giao tiếp bằng một giao thức văn bản đơn giản, triết lý lập trình Unix tạo ra các công cụ có thể tái sử dụng và đáng tin cậy.
4. Chương trình chính xác, mô-đun tạo nên sức mạnh
Quy tắc đầu tiên của Raymond là “Tính mô-đun”, được mô tả là “Viết các phần đơn giản được kết nối bằng các giao diện rõ ràng”. Giống như nhiều quy tắc khác, trọng tâm ở đây là kiểm soát sự phức tạp. Nhiều vấn đề trong việc sử dụng máy tính phát sinh từ các hệ thống phức tạp khó hiểu. Bằng cách đề cao sự đơn giản, quy tắc này nhằm mục đích giảm thiểu lỗi và cải thiện sự hiểu biết tổng thể.
Khi bạn lần đầu tiên gặp các công cụ Linux như ls
hoặc grep
, có thể khó coi chúng là những chương trình đầy đủ theo đúng nghĩa của chúng. Chúng làm ít hơn nhiều so với trình duyệt web hoặc trình xử lý văn bản của bạn, vì vậy chúng có thể có vẻ tầm thường hoặc không quan trọng. Nhưng điều đó đã bỏ qua sức mạnh nội tại của tính mô-đun: kết hợp các chương trình nhỏ để đạt được nhiều hơn tổng các phần của chúng.
Một trong những ví dụ thực tế nhất về sức mạnh của tính mô-đun là pipe (ống dẫn):
ls | grep "foo"
Đây là một ví dụ về một mẫu rất phổ biến mà tôi thường xuyên sử dụng:
du -sk * | sort -rn | head
Dòng lệnh này chạy ba chương trình: du
để báo cáo tổng kích thước của các tệp/thư mục phù hợp, sort
để sắp xếp chúng theo số, và head
để trả về mười kết quả đầu tiên. Kết quả là một tập hợp nhỏ các thư mục chiếm nhiều dung lượng nhất trên đĩa, mà tôi có thể tiếp tục xử lý để dọn dẹp. Nếu không có pipe, giải pháp thay thế sẽ là một chương trình duy nhất có tên đại loại như “get-biggest-ten-folders”. Một chương trình như vậy thậm chí có thể tiện lợi hơn, nhưng nó bị hạn chế hơn nhiều so với các công cụ tổng quát có sẵn ở đây. Bạn sẽ cần một số lượng lớn các chương trình có tên gọi khó hiểu để làm việc mà không có pipe, và sự phức tạp của chúng chắc chắn sẽ rất khủng khiếp khi sử dụng.
5. Văn bản là nền tảng của mọi thứ
Chương 5 của cuốn sách đề cập đến tính văn bản, cả về định dạng tệp và cách các chương trình Unix giao tiếp. Đây là một trong những điều đã gây ấn tượng mạnh nhất đối với tôi về Unix, đặc biệt là khi nói đến cấu hình. Đến từ Windows, tôi đã quen với Registry, cơ sở dữ liệu khét tiếng, khó hiểu, nguyên khối chứa cài đặt chương trình.
Giao diện Windows Registry Editor hiển thị giá trị chuỗi DhcpIPAdrdress, minh họa cho cấu hình phức tạp của Windows.
Ngược lại, các công cụ Linux có xu hướng có các tệp cấu hình dựa trên văn bản, nằm rải rác khắp hệ thống tệp của bạn (ở những vị trí tiêu chuẩn, nếu bạn muốn). Bạn có thể chỉnh sửa các tệp này bằng một trình soạn thảo văn bản tiêu chuẩn và truy vấn chúng bằng các công cụ dòng lệnh có sẵn. Điều này có nghĩa là không cần các công cụ GUI tùy chỉnh để thay đổi cài đặt, mặc dù chúng vẫn có thể được xây dựng dựa trên định dạng tệp văn bản truyền thống.
File cấu hình văn bản của Linux với các cài đặt và chú thích giải thích biến MANPATH, thể hiện sự đơn giản và minh bạch trong cấu hình hệ thống.
Triết lý này cũng mở rộng đến cách các chương trình giao tiếp. Khi bạn sử dụng một pipe, bạn đang truyền văn bản từ chương trình này sang chương trình khác. Tại bất kỳ thời điểm nào, bạn có thể ngắt pipe để gỡ lỗi. Lấy ví dụ pipe này:
ls | grep "txt"
Bằng cách chèn lệnh tee
, bạn có thể thu giữ đầu ra tại một điểm cụ thể và lưu nó vào một tệp để gỡ lỗi:
ls | tee debug-ls-output.txt | grep "txt"
Điều này gắn liền với Quy tắc Minh bạch của Raymond:
“Thiết kế để dễ nhìn thấy nhằm giúp việc kiểm tra và gỡ lỗi dễ dàng hơn”
Sử dụng văn bản làm định dạng giao tiếp và dữ liệu có nghĩa là các chương trình hoạt động một cách công khai, với ít phần ẩn hơn. Điều này giúp sửa lỗi chương trình, học hỏi từ chúng và sử dụng chúng dễ dàng hơn.
6. Linux: Bảo thủ nhưng bền vững, tại sao không?
Linux – và hơn thế nữa là Unix – thường bị coi là “lỗi thời”, một hệ thống được những người “già đầu” và những người cuồng tín yêu thích. Mặc dù có thể có một phần sự thật trong đó, nhưng điều đó đã bỏ qua thực tế rằng các công nghệ trưởng thành, đã phát triển không nhất thiết là xấu.
Trong chương 14, Raymond thảo luận về việc sử dụng ngôn ngữ C, một ngôn ngữ đã đóng vai trò quan trọng trong sự phát triển của Linux. Mặc dù tình hình đang thay đổi, nhiều công cụ dòng lệnh tiêu chuẩn vẫn được viết bằng C ngày nay. Cuốn sách lưu ý rằng C đã phổ biến, một phần, nhờ vào sự hỗ trợ công cụ xuất sắc đã tồn tại theo thời gian.
Raymond không phải là người theo chủ nghĩa tuyệt đối; ông giải thích cách Python, một ngôn ngữ tương đối hiện đại, là một lựa chọn vượt trội cho các dự án mới. Nhưng ông cũng khám phá những lợi ích và hạn chế của lập trình shell và lập luận rằng lập trình hướng đối tượng không phải là hoàn hảo. Giống như phần lớn cuốn sách, phần này lập luận chống lại các giải pháp “một kích cỡ cho tất cả” và nhấn mạnh tầm quan trọng của ngữ cảnh trong mọi trường hợp. Các nguyên tắc thiết kế hệ điều hành không bao giờ là cứng nhắc mà luôn cần sự linh hoạt.
Bìa cuốn sách "The Art of Unix Programming" của Eric S. Raymond, một tài liệu kinh điển về triết lý và lịch sử của hệ điều hành Unix.
Kết lại, “The Art of Unix Programming” không chỉ là một cuốn sách về lịch sử hay kỹ thuật, mà còn là một bản tuyên ngôn về triết lý thiết kế bền vững. Những bài học về sự đơn giản, tính mô-đun, minh bạch và khả năng tái sử dụng không chỉ áp dụng cho Unix hay Linux, mà còn là kim chỉ nam cho bất kỳ nhà phát triển hay người dùng công nghệ nào muốn xây dựng hoặc tận dụng tối đa các hệ thống phức tạp. Việc hiểu sâu những nguyên tắc này sẽ giúp bạn không chỉ làm việc hiệu quả hơn với các công cụ hiện có mà còn có cái nhìn sắc bén hơn về xu hướng và tương lai của công nghệ.
Hãy chia sẻ suy nghĩ của bạn về những bài học này và cách chúng đã ảnh hưởng đến cách bạn làm việc với Linux/macOS trong phần bình luận bên dưới!
Tài liệu tham khảo
The Art of Unix Programming
- Tên sách: The Art of Unix Programming
- Tác giả: Eric Raymond
Cuốn sách này khám phá nguồn gốc và triết lý đằng sau UNIX, cũng như cách nó đã phát triển qua nhiều thập kỷ thành các hệ điều hành hiện đại.
“The Art of Unix Programming” có sẵn trực tuyến miễn phí và dưới dạng bản in. Tôi rất thích cả hai vì bản trực tuyến rất tuyệt để tham khảo, nhưng cuốn sách cũng là một tài liệu đáng đọc để nghiền ngẫm từ đầu đến cuối.