2 điểm bởi GN⁺ 2025-01-14 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đánh giá của David A. Wheeler

    • "Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems" của David J. Agans được đánh giá là một cuốn sách gỡ lỗi thiết yếu dành cho các nhà phát triển phần mềm và phần cứng.
    • Cuốn sách này giải thích các nguyên tắc cơ bản để tìm và sửa lỗi, thay vì tập trung vào một công nghệ cụ thể, và đặc biệt hữu ích cho các nhà phát triển mới vào nghề hoặc ở trình độ trung cấp.
    • Sách được xây dựng xoay quanh "chín quy tắc", đồng thời trình bày phần giải thích và cách áp dụng cho từng quy tắc.
  • Chín quy tắc

    • Hiểu hệ thống: Điều quan trọng là đọc tài liệu hướng dẫn, nắm vững kiến thức cơ bản và tận dụng tốt các công cụ.
    • Tái tạo lỗi: Điều quan trọng là tái hiện lại lỗi và tìm ra nguyên nhân của các bug xuất hiện không thường xuyên.
    • Ngừng suy đoán và quan sát: Trước hết hãy thu thập dữ liệu, không dựa vào phỏng đoán.
    • Chia để trị: Thu hẹp vấn đề để giải quyết và sử dụng các mẫu kiểm thử dễ nhận biết.
    • Chỉ thay đổi từng thứ một: Cô lập các yếu tố cốt lõi và thay đổi từng kiểm thử một.
    • Duy trì nhật ký theo dõi: Ghi lại những gì đã làm và kết quả, đồng thời hiểu rằng mọi chi tiết đều có thể quan trọng.
    • Kiểm tra phích cắm: Nghi ngờ những điều đã mặc định và kiểm thử các công cụ.
    • Có được góc nhìn mới: Điều quan trọng là có thêm hiểu biết mới và lắng nghe tiếng nói của kinh nghiệm.
    • Nếu chưa được sửa thì chưa thực sự được giải quyết: Xác nhận xem vấn đề đã thật sự được giải quyết chưa và sửa nguyên nhân gốc rễ.
  • Ưu và nhược điểm của cuốn sách

    • Cuốn sách tập trung vào các nguyên tắc cơ bản của gỡ lỗi, tạo sự khác biệt so với những sách công nghệ khác.
    • Sách có bao gồm những lời khuyên thực tế về cách xử lý các vấn đề xảy ra không thường xuyên.
    • Phụ lục của sách có các liên kết đến website liên quan và liên kết tải poster.
    • Điểm đáng tiếc là không có danh sách tóm tắt toàn bộ các quy tắc và quy tắc con trên một trang, đồng thời còn thiếu những lời khuyên cụ thể cho từng công nghệ.
  • Kết luận

    • Cuốn sách này hữu ích để học hoặc ôn lại các nguyên tắc cơ bản của gỡ lỗi, và có ích cho cả người mới bắt đầu lẫn chuyên gia.
    • David A. Wheeler đặc biệt khuyến nghị cuốn sách này và nhấn mạnh tầm quan trọng của các nguyên tắc nền tảng.

1 bình luận

 
GN⁺ 2025-01-14
Ý kiến trên Hacker News
  • Dù rất dễ bị cám dỗ sửa đoạn mã có lỗi, nhưng làm hỏng mã đang chạy còn dễ hơn sửa mã bị hỏng. Giống như ví dụ đèn Giáng sinh, bắt đầu từ một ví dụ hoạt động tối thiểu để tìm ra vấn đề là cách hiệu quả

  • Điều quan trọng khi giải quyết vấn đề là không hoảng loạn. Cần suy nghĩ rõ ràng, và một người quản lý tốt sẽ hỗ trợ để bạn có thể tập trung vào việc xử lý vấn đề

  • git bisect hữu ích để tìm commit gây ra vấn đề trong số nhiều commit. Đặc biệt, nó giúp tìm lỗi nhanh trong các codebase lớn

  • Hiểu hệ thống là điều quan trọng, nhưng đọc hết mọi tài liệu hướng dẫn là không thực tế. Cần một cách tiếp cận thực dụng

  • Chỉnh sửa đúng tệp trên đúng máy là điều quan trọng

  • Những cuốn sách được khuyến nghị để rèn luyện tư duy giải quyết vấn đề:

    • "The Martian" của Andy Weir
    • "Zen and the Art of Motorcycle Maintenance"
    • "The Three-Body Problem"
    • "To Engineer Is Human" của Henry Petroski
    • "Surely You're Joking, Mr. Feynman!"
  • Các quy tắc bổ sung:

    • "Hãy nghi ngờ rằng lỗi nằm ở phía mình". Nên nghi ngờ thay đổi trong mã trước tiên
    • "Khi tìm thấy một lỗi, hãy tìm thêm những vấn đề liên quan". Cùng một loại vấn đề có thể xuất hiện ở nơi khác
    • "Tối ưu hóa trước hết cho người dùng và lập trình viên bảo trì"
  • Cần thêm lỗi vào CI dưới dạng test để ngăn hồi quy. Nên xác nhận CI thất bại trước khi sửa và thành công sau khi sửa

  • Sau khi debug xong thì công việc vẫn chưa kết thúc. Với mỗi lỗi, cần đặt ra ba câu hỏi:

    1. Sai sót này có tồn tại ở nơi khác không?
    2. Lỗi tiếp theo đang ẩn sau lỗi này là gì?
    3. Cần làm gì để ngăn loại lỗi này xảy ra?
  • Việc tái hiện vấn đề với cấu hình tối thiểu là rất quan trọng. Trong hầu hết trường hợp, làm vậy sẽ giúp tìm ra bug. Chia đôi mã để xác định chính xác phần nào có vấn đề là một cách hiệu quả