Đã bao giờ bạn rơi vào tình huống vừa code vừa la ó chửi bới vì thành quả của thanh niên đi trước để lại quá hiểm độc không, nào là cấu trúc nhìn vào quá nản, code thì 1 rừng không có đến một chú thích để biết chuyện gì đang xảy ra, thậm chí ngay cả tên method nhìn cũng thật nhảm nhí. Bạn điên tiết lên và Ctrl + F kiếm chữ Author để hi vọng chửi đúng người, chứ không muốn là một Chí phèo-er bắn lung tung, nhưng cái kết lại là Your name.

Sau khi đập bàn với sếp, trao đổi thắng thắn với mong muốn cùng tiến bộ, bạn đã đứng lên đề xuất một số Rule khi code cho anh em trong nhóm như sau. (bạn đã thức đến 3h sáng để đọc cuốn Clean Code, bây giờ là lúc trình diễn rồi đó) Music lên !!

  1. Cấu trúc dữ liệu và object
    – Ẩn cấu trúc nội bộ, dùng cấu trúc dữ liệu nếu có thể, tránh cấu trúc hỗn hợp, nửa này nữa kia.
    – Nhỏ, chỉ làm một việc, chỉ dùng một ít biến instance.
    – Lớp cha không được thấy lớp con. (Base class không nên biết các child class trông như thế nào)
    – Tạo nhiều hàm thay vì truyền đối số vào duy nhất một hàm rồi xử lý theo đối số đó.
    – Nên dùng non-static thay vì static method.
  2. Cấu trúc code
    – Phân chia code theo chiều dọc, những code liên quan nhau nên viết liền nhau (theo chiều dọc).
    – Khai báo biến gần chỗ nó được sử dụng.
    – Các hàm liên quan nhau nên đặt gần nhau, các hàm giống nhau nên đặt gần nhau, các hàm nên viết từ trên xuống dưới.
    – Mỗi dòng code nên ngắn, không cân chỉnh code theo chiều ngang.
    – Dùng khoảng trắng một cách hợp lý để liên kết những thứ liên quan và tách những thứ ít liên quan với nhau, đừng ngắt thụt đầu dòng.
  3. Quy tắc thiết kế
    – Dữ liệu tùy chỉnh/cấu hình thì nên đặt ở level cao.
    – Thay vì dùng if/else hoặc switch/case, nên vận dụng tính đa hình.
    – Tách code đa luồng.
    – Đừng lạm dụng configurability?
    – Sử dụng dependency injection.
    – Tuân theo Định luật Demeter
  4. Code dễ hiểu
    – Thống nhất cách làm. Nếu bạn quen với một cách nào đó thì hãy áp dụng cách đó cho những thứ tương tự.
    – Đặt tên biến có nghĩa.
    – Nếu có thể, chọn ‘value object’ thay vì kiểu dữ liệu nguyên thủy.
    – Tránh sự lệ thuộc về logic.
    – Tránh dùng điều kiện phủ định.
  5. Quy tắc đặt tên
    – Đặt tên rõ ràng, mô tả được công dụng.
    – Dễ phân biệt, dễ đọc, dễ tìm.
    – Không nên dùng số trực tiếp trong code mà phải đặt tên cho nó, không nên chèn tiền tố hay kiểu dữ liệu vào tên.
  6. Quy tắc của hàm
    – Nhỏ, chỉ làm một việc.
    – Tên dễ hiểu, chỉ nên có ít đối số.
    – Không có tác dụng phụ, không được dùng đối số dạng flag mà phải tách nhỏ hàm ra thành nhiều hàm độc lập để dễ gọi cũng như test.
  7. Quy tắc comment
    – Code nên dễ hiểu để không lệ thuộc nhiều vào comment.
    – Không comment dư thừa, không comment những điều quá rõ ràng, dễ nhận biết.
    – Không comment đoạn code không còn sử dụng, xóa nó luôn.
    – Comment lý do tại sao code được viết như vậy (code lạ, trường hợp bất khả kháng).
    – Comment để làm rõ ý nghĩa của code (logic phức tạp).
    – Comment cảnh báo hậu quả.
  8. Nói KHÔNG với Code smell (Code bốc mùi thúi)
    – Quá cứng nhắc, khó thay đổi. Một thay đổi nhỏ mà dẫn tới một loạt những thay đổi khác.
    – Mong manh, dễ vỡ. Chỉ sửa một chỗ mà gây ra lỗi một đống chỗ.
    – Bất động. Code không thể được tái sử dụng trong những dự án khác, vì quá nhiều rủi ro và tốn effort.
    – Phức tạp hóa không cần thiết,lLặp lại không cần thiết.
    – Code khó hiểu (chỉ có Chúa và bạn hiểu).

Bài học rút ra từ sách Clean Code:

  • Tầm quan trọng của việc viết mã sạch.
  • Cách đặt tên biến, tên hàm. Tên biến, tên hàm phải nói rõ tác dụng của hàm và biến.
  • Độ dài của hàm, các parameter truyền vào.
  • Tại sao không nên lạm dụng dùng comment.
  • Một số ví dụ cụ thể về việc refactor code.
  • Hướng dẫn cách viết và dùng unit test.
  • Giải quyết 1 số vấn đề liên quan tới concurrency.
  • Một số dấu hiệu nhận biết code smell.

Bạn có thể download ebook Clean Code tại đây.

Bad codes ở khắp nơi trong dự án, nhưng cái quan trọng là Hệ thống vẫn chạy vù vù, khách hàng trả tiền ngon ơ không một lời phàn nàn, tuy nhiên chắc hẳn bạn không dám nghĩ tới việc nâng cấp hay thêm tính năng từ source code đó nữa. Vẫn biết code vậy là nát, tại sao đôi lúc chúng ta vẫn viết nó ra.

  • Thứ nhất: Có thể bạn đã chán dự án tới tận cổ, chỉ làm cho xong việc, bạn cũng ko hề luyện tập mài dũa thêm kỹ năng, bạn quá lười, chỉ code như một cái máy, ngày qua ngày vậy thôi chứ không suy nghĩ tại sao lại code như vậy.
  • Thứ hai: Có thể do áp lực công việc quá lớn, deadline dí sát, thở thôi cũng không nổi, khiến bạn làm việc liên tục trong cường độ cao, OT liên miên, khiến cho việc tối ưu code và code chuẩn không còn quan trọng bằng việc giao code đúng deadline của sếp nếu không muốn ăn hành no.
  • Thứ ba: Hệ thống quá nát, sửa nhanh cho nó chạy được đã là phước trời ban rồi (code đang yên ổn, xin đừng đụng vào). Chi phí đập đi xây lại quá lớn, khiến đội nhóm của bạn chỉ có thể gồng tiếp mà thôi.

Vì vậy lúc chúng ta làm việc, hãy cố gắng nhiều thấy bức tranh toán cảnh và phân biệt, đánh giá, nhận xét trên tinh thần phát triển tích cực. Cố gắng cùng nhau code sao cho sạch, ít nhất là đảm bảo:

  • Phải có logic rõ ràng, phải đạt performance tốt, tốt nhất là gần với mức tối đa (so với thuật toán).
  • Người khác có thể đọc, cải tiến, bảo trì được dễ dàng, dễ đọc và sữa chữa.
  • Chạy tốt các test.
  • Không có các phần trùng lặp về chức năng, nội dung code giống với những gì bạn dự kiến, tránh lan man.
  • Giảm bớt số lượng tất cả: class, function, variable,…

Hắn vừa code vừa chửi. Bao giờ cũng thế, cứ code không chạy là hắn chửi. Đầu tiên hắn chửi cả công ty Rồi hắn chửi Visual Studio. Có hề gì, công ty có của riêng ai đâu. Xong hắn chửi team, ai cũng nghĩ chắc nó chừa mình ra. Không ai lên tiếng cả. Tức thật! Ồ! Thế này thì tức thật! Tức chết đi được mất!! Thế là hắn chửi cái máy, chửi thằng làm ra framework, chửi thằng Sysadmin. Không ai nghe cả, thế có phí code không chứ. AAA Thế là hắn chửi đứa chết mẹ nào đã viết code, mà chính hắn chứ ai. Cuối cùng thì vẫn không biết code lỗi chỗ nào cả. Trước kia thì có hắn và trời biết, giờ thì chỉ có trời biết…

Chí Phèo phiên bản Coder

Vui lòng ghi nguồn https://susudev.com khi đăng tải lại bài viết này