Đọc được, hiệu quả và bảo trì mã nguồn
Ngày cập nhật: 2023-10-29 | Số lần xem: 1930 | Số từ: 980 | Phân loại: Lập trình viên
Khi một đoạn mã phải liên tục được sửa đổi, bổ sung logic hoặc cập nhật lại mà vẫn giữ nguyên chức năng cũ thì việc đảm bảo tính rõ ràng cho mã là cực kỳ cần thiết. Nếu cấu trúc logic quá phức tạp, thời gian để hiểu nội dung đã có sẵn có thể gấp nhiều lần so với thời gian viết code trực tiếp. Việc nâng cao tính dễ đọc giúp giảm đáng kể chi phí về thời gian và công sức.
Ví dụ tiêu cực
Trong quá trình bảo trì các đoạn mã do mình viết trước đây, tôi nhận thấy rằng mỗi lần lười tuân thủ quy chuẩn đặt tên hay bố cục, đều gây ảnh hưởng nghiêm trọng đến hiệu suất sửa đổi sau này. Cụ thể như:
- Đặt tên biến, hàm không rõ ràng, dễ nhầm lẫn.
- Viết những hàm quá dài, khó theo dõi.
- Bỏ qua xử lý lỗi hoặc ngoại lệ.
- Tạo ra các tệp mã lớn chứa hàng loạt lớp và hàm không liên quan.
- Giữ lại những đoạn mã đã lỗi thời nhưng chưa dọn dẹp.
Nâng cao khả năng đọc mã, giảm sự phụ thuộc vào tài liệu bên ngoài
Một số cách hiệu quả bao gồm:
- Sắp xếp lại logic, thêm todo vào phần chú thích trong mã.
- Những yêu cầu kiểm tra nên được đưa vào các bài test đơn vị (unit tests).
Hiện tại, tôi thường lưu trữ tài liệu và phân tích logic trong các file markdown độc lập cùng với công cụ quản lý dự án như Trello. Cách làm này tuy tiện lợi khi viết code và theo dõi tiến độ, nhưng lại trở nên bất tiện khi muốn tìm kiếm thông tin để sửa đổi hay mở rộng chức năng. Vì vậy, giải pháp tối ưu nhất là đưa tất cả các giải thích chi tiết ngay trong phần chú thích của từng đoạn mã.
Hướng dẫn cấu trúc thư mục trong project scaffold
Một yếu tố lớn ảnh hưởng đến tốc độ sửa đổi mã là khả năng định vị nhanh chóng các tệp liên quan đến chức năng đang cần thay đổi. Đặc biệt đối với các dự án được xây dựng dựa trên mã nguồn người khác hoặc các framework mở rộng, cấu trúc thư mục đôi khi rất khó hiểu hoặc mang tên gọi mơ hồ, khiến bạn không biết bắt đầu từ đâu.
Ví dụ:
- Dự án React ngày càng phức tạp, khó xác định đâu là logic, đâu là component.
- Dự án Android Java được đóng gói quá kỹ, một lớp có thể kế thừa tới vài cấp bậc, khiến việc xác định điểm sửa đổi trở nên rối rắm.
Dù các IDE hiện đại như Android Studio cung cấp chức năng đánh dấu (bookmark), nhưng điều đó vẫn chưa đủ trực quan. Tôi cho rằng phương pháp hiệu quả nhất là ghi chú rõ ràng cấu trúc thư mục và chức năng từng tệp chính yếu trong file Readme.md
của dự án, nhằm hỗ trợ việc tìm kiếm và chỉnh sửa nhanh hơn.
Lấy ví dụ một dự án React frontend dành cho chatbot:
|
|
Nếu tôi muốn thêm một quy tắc xử lý tin nhắn mới, chỉ cần tìm đến đúng tệp tương ứng. Trong môi trường VIM, chỉ cần đặt con trỏ chuột lên tên tệp rồi nhấn gf
hoặc Ctrl + w + gf
, chương trình sẽ tự động mở tệp đó. Chi tiết thêm về cách mở tệp bằng lệnh tabnew
trong VIM có thể tham khảo ở tài liệu chuyên sâu.
!](
Hình ảnh: Thư viện ven biển Yantai
Ghi chú mã bằng AI
Tôi phát hiện rằng việc dùng ChatGPT để giải thích một đoạn mã phức tạp là vô cùng hữu ích. Một đoạn code khó hiểu nào đó, ChatGPT có thể phân tích rõ ràng từng dòng, giúp người đọc nắm bắt nhanh hơn. Đây là một công cụ tuyệt vời để hỗ trợ quá trình đọc và hiểu mã.
![
Hình ảnh: Thư viện ven biển Yantai
Sơ đồ luồng
Sử dụng các công cụ bên ngoài hoặc tự tạo script để vẽ sơ đồ luồng mã, sau đó in ra giấy sẽ giúp bạn hình dung rõ hơn về cách thức hoạt động. Ví dụ:
Liệu hệ thống Rasa có thể tự động vẽ sơ đồ luồng dựa trên một intent hoặc action utter, liệt kê toàn bộ logic liên quan hay không?
Đã kiểm tra và đảm bảo không sử dụng bất kỳ ký tự tiếng Trung nào.