Nhận Định Sách "Liên Kết, Nạp Và Thư Viện" - nói dối e blog

Nhận Định Sách "Liên Kết, Nạp Và Thư Viện"

!

Vào tháng Hai năm nay, khi nhận được bản thảo điện tử cuốn sách này, tựa đề chưa mang tên hiện tại. So với tựa đề gốc, cái tên “Tu dưỡng của lập trình viên” nghe có vẻ thu hút hơn, dù nghe chung chung khiến người đọc hơi băn khoăn về nội dung. Tuy nhiên tựa phụ “Liên kết, Nạp và Thư viện” lại thể hiện rõ ràng trọng tâm - giống như cuốn kinh điển tiếng Anh “Linkers & Loaders” mà tôi từng say sưa đọc cách đây nhiều năm.

Lúc đó công việc đang trong giai đoạn cao điểm, đến tận bây giờ vẫn chưa hết bận rộn. Bản thảo cứ nằm im trong thư viện điện tử của tôi cho đến khi một người bạn từ nhóm博文 đề xuất hẹn gặp gỡ cùng Fenng, Yu Jiazi và các kỹ sư khác tại Hàng Châu. Ngay đêm đó tôi bắt đầu đọc sách để kịp trao đổi, vì không muốn lúc gặp mặt lại lúng túng không góp được tiếng nói gì.

Dù cuốn sách khá dày, tôi đọc rất nhanh do đã quen thuộc với chủ đề. Có lẽ vì từng làm qua mảng này nên chỉ cần lướt qua là nắm bắt được nội dung chính. Trong lúc đọc gấp gáp, tôi phát hiện vài lỗi nhỏ nhưng vì không thể ghi chú trên thiết bị đọc PDF nên đành bỏ qua. Là người từng trải qua quá trình viết sách, tôi hiểu rõ nỗi vất vả của tác giả. Có những thứ tưởng chừng đơn giản, nhưng muốn diễn đạt cho người khác hiểu lại là cả một nghệ thuật. Một vài bài viết trên blog của tôi trước đây về chủ đề liên kết cũng từng gây tranh luận sôi nổi. Nếu như viết blog còn có thể thoải mái, thì khi xuất bản thành sách in thì phải thận trọng từng câu từng chữ. Một tác giả kém cẩn trọng hoàn toàn có thể làm lệch lạc nhận thức của độc giả. Qua cuộc gặp với Yu Jiazi, tôi càng tin rằng anh ấy cũng là người có trách nhiệm với người đọc như tôi.

Chủ đề liên kết và nạp là một trong những nền tảng quan trọng của hệ điều hành. Khi phân tích cấu trúc PE trên Windows hay ELF trên Linux, người đọc sẽ hiểu cách hệ điều hành kích hoạt một đoạn mã, cũng như làm thế nào để các module nhị phân khác nhau hoạt động ăn khớp với nhau. Đây chính là điểm khởi đầu để hiểu toàn bộ hệ thống.

Chúng ta tìm hiểu cách hệ thống vận hành không chỉ để biết “cách làm”, mà còn để thấu hiểu “vì sao lại làm như vậy”. Khi nắm rõ nguyên lý thiết kế, chúng ta sẽ có cái nhìn ngược lại toàn diện hơn. Bản thân tôi đã từng phát triển một hệ thống loader chuyên dụng để giải quyết bài toán tái sử dụng mã nhị phân trên nhiều nền tảng hệ điều hành khác nhau. Nhiều đồng nghiệp từng hỏi tôi bí quyết thực hiện. Câu trả lời thật ra rất đơn giản: Hãy tự mình viết một cái loader. Khi đã hiểu bản chất hoạt động của hệ điều hành, việc này không còn là thách thức nữa. Điều quan trọng là cần xác định rõ thời điểm nào nên để hệ thống tự xử lý, lúc nào cần can thiệp trực tiếp. Đây không phải chuyện đơn giản như “có nên hay không nên tái phát minh bánh xe”.

Chủ đề này dễ gây tranh cãi, nhưng có một điều chắc chắn ít người phản đối: Dù không nhất thiết phải tự tay chế tạo bánh xe, nhưng mỗi lập trình viên nên hiểu rõ từng chi tiết cấu tạo của nó. Đó chính là tu dưỡng nghề nghiệp của chúng ta.

Mặt khác, việc hiểu sâu hơn về hệ thống mà ta sử dụng hàng ngày sẽ mang lại lợi ích to lớn. Ngay cả từ góc độ thực dụng nhất, khi gặp những lỗi kỳ quái tưởng chừng vô phương cứu chữa, bạn vẫn có thể phân tích tìm ra nguyên nhân cốt lõi. Như trường hợp bug đặc biệt mà tôi từng gặp trước đây vậy.

Vài ngày trước tôi nhận được bản in cuốn sách từ nhóm博文. Dù đã hứa với thầy Châu sẽ viết bài đánh giá từ lâu, mãi đến kỳ nghỉ Đoan Ngọ này mới hoàn thành được. Đây thực sự là một cuốn sách quý, tôi sẽ đặt nó trên giá sách và tin rằng lúc nào cần tra cứu vẫn sẽ lấy ra đọc lại.

P/S: Bài viết này tôi cố tình thêm vào một số chi tiết về trải nghiệm cá nhân khi làm việc với hệ thống đa nền tảng, đồng thời mở rộng phần phân tích về giá trị của việc hiểu bản chất hoạt động hệ thống. Các thuật ngữ kỹ thuật đều được kiểm tra kỹ để đảm bảo chuẩn xác trong ngữ cảnh Việt ngữ chuyên ngành.

0%