Code Smell là gì Tại sao mọi người lại sử dụng

Code Smell là gì? Tại sao mọi người lại sử dụng?

Nếu bạn đã lập trình dù chỉ một chút, có thể bạn đã bắt gặp thuật ngữ ‘Code Smell’. Bạn có thể biết rõ ý nghĩa của nó. Và bạn có thể đã sử dụng nó trong nhiều lần. Nhưng tôi ở đây để nói với bạn rằng nó không hoàn toàn đúng như những gì bạn nghĩ. Hoặc, ít nhất, những gì tôi nghe thấy khi ai đó nói ‘Code Smell’ có lẽ khá khác so với những gì bạn nghe khi cùng một từ được thốt ra.

Hôm nay, tôi sẽ giúp bạn tìm hiểu về Code Smell là gì? Tại sao mọi người lại sử dụng nó?

Định nghĩa chính thức

Là một thuật ngữ hơi thô tục, thực sự không có định nghĩa chính thức nào cho ‘Code Smell’. Vì vậy, chúng ta sẽ bắt đầu với những điều cơ bản nhất – theo Wikipedia:

In computer programming, a code smell is any characteristic in the source code of a program that possibly indicates a deeper problem.

Tạm dịch: Trong lập trình, Code Smell là bất kỳ đặc điểm nào trong mã nguồn của một chương trình có thể chỉ ra một vấn đề sâu hơn.

Code Smell là gì Tại sao mọi người lại sử dụng

VÂNG. Càng xa càng tốt. Định nghĩa này có lẽ hữu ích như bất kỳ định nghĩa nào khác. Nhưng Wikipedia không dừng lại ở đó. Câu tiếp theo nói:

Determining what is and is not a code smell is subjective, and varies by language, developer, and development methodology.

Tạm dịch: Việc xác định Code Smell là gì hay không là gì là suy nghĩ chủ quan và thay đổi theo ngôn ngữ lập trình, lập trình viên và phương pháp phát triển.

Hmm… Thật thú vị. Hãy chú ý đến từ ‘chủ quan’, vì đó là điều tôi sắp đi sâu vào.

Định nghĩa thực tế

Code Smell là gì Tại sao mọi người lại sử dụng

Theo kinh nghiệm của tôi, ‘Code Smell’ có nghĩa là:

Tôi không thể định lượng chính xác những gì tôi không thích về đoạn mã của bạn. Và tôi không thể bận tâm khi giải thích điều này với một người thích nói chuyện như bạn. Nhưng tôi không thích nó. Vì vậy, tôi sẽ loại bỏ nó bằng cách gán nhãn “Code Smell”.

Hiểu đợn giản là “Đoạn mã bạn viết không được, hãy viết lại hoặc đập đi xây mới đi!”.

Rõ ràng, tôi không nghĩ rằng đây là ‘định nghĩa’ trong suy nghĩ của mọi người mỗi khi họ sử dụng cụm từ. Có rất nhiều công dụng lành tính của ‘Code Smell’. Bản thân tôi đã sử dụng cụm từ này. Mọi người đều có. Nhưng tôi đã thấy quá nhiều trường hợp trong đó việc sử dụng cụm từ nằm trong định nghĩa mà tôi đã liệt kê ở trên.

Nó bắt nguồn từ đâu?

Tôi không nhớ có ai đã từng nói về ‘Code Smell’ khi tôi bắt đầu sự nghiệp lập trình của mình. Khi tôi đọc thêm trên Wikipedia, điều này có lý:

The term was popularised by Kent Beck on WardsWiki in the late 1990s. Usage of the term increased after it was featured in the 1999 book Refactoring: Improving the Design of Existing Code by Martin Fowler.

Tạm dịch: Thuật ngữ này đã được phổ biến bởi Kent Beck trên WardsWiki vào cuối những năm 1990. Việc sử dụng thuật ngữ này đã tăng lên sau khi nó được giới thiệu trong cuốn sách “Refactoring: Improving the Design of Existing Code” của Martin Fowler năm 1999.

Xem thêm: Clean Code là gì?

Một số lầm tưởng về Code Smell

Code Smell là gì Tại sao mọi người lại sử dụng

Dưới đây là một số ví dụ mà một số người lầm tưởng đó là “Code Smell”:

  • Ngôn ngữ lập trình cũ – Nhìn này, tôi hiểu rằng nhiều người ghét PHP. Nhưng nó không thể được gọi là “Code Smell” chỉ vì nó cũ cả, bạn nên xem lại cách bạn viết code và sử dụng PHP hay những ngôn ngữ lập trình khác một cách hợp lý.
  • Framework cũ – Ngày nay có hàng tỷ Framework ra đời mạnh hơn jQuery đời đầu chẳng hạn. Và tất nhiên, jQuery cũng chẳng thể biến mất nếu bạn gọi nó là “Code Smell”. Rất nhiều trang web cũ họ vẫn đã và đang dùng jQuery nhé.
  • Một cái gì đó khác với mô hình yêu thích của bạn – So sánh giữa các Framework JavaScript, bạn thích React.js bởi vì nó là function component, bạn lười viết class giống như các Angular hay Vue.js. Đừng cố gắng bảo vệ một điều gì đó bởi từ trước React.js vẫn là Class component, theo thời gian nó cập nhật mới hơn mà thôi.
  • Phong cách viết code – À thì ra JavaScript ra nhiều phiên bản ES+ để giúp bạn viết code nhanh và chuẩn hơn. Tuy nhiên, nhiều người vẫn nghĩ nếu không cập nhật và vẫn tiếp tục viết theo phong cách cũ là “Code Smell”. Họ đang có nhầm, liệu họ có bao giờ nghĩ những tính năng mới trong JavaScript vẫn dựa trên những thứ cũ không?

Tôi chỉ đang nói về thực tế là tôi đã thấy cụm từ ‘Code Smell’ được sử dụng như một câu nói tóm tắt cho: “Mã mà tôi không thích và tôi muốn đồng nghiệp đập đi xây lại nó”.

Code Smell thực sự là một điều gì đó gây khó hiểu cho người đọc. Những đoạn code được gán nhãn “Code Smell” khi đọc rất khó chịu, ngoài ra còn khó bảo trì, fix bug hay thêm tính năng vào cho chúng. Điều đó xuất phát từ những thứ nhỏ nhất mà lập trình viên hay mắc phải.

Phải có người review code thường xuyên hoặc theo thời gian, kinh nghiệm thì lập trình viên mới có thể cải thiện khả năng code của bản thân và tránh mắc phải những lỗi để người khác không đánh giá đoạn code của họ viết ra là khó hiểu, là “Code Smell”.

Refactor là gì?

Code Smell là gì Tại sao mọi người lại sử dụng

Refactor là quá trình tối ưu những dòng code mà bạn viết ra để tránh việc người khác gọi đó là “Code Smell”. Có rất nhiều kỹ thuật để refactor code, khi đã có kinh nghiệm trong việc lập trình và sử dụng trí thông minh của các IDE hiện đại ngày nay, công việc refactor code sẽ cực kỳ đơn giản. Tuy nhiên, bạn phải hiểu và nắm rõ mục đích của refactor code để tránh việc sử dụng sai, gây ảnh hưởng đến chương trình của bạn.

Xem thêm các bài viết về Clean Code & Refactoring TẠI ĐÂY.

Kết luận

Cho đến nay, cụm từ “Code Smell” đã dần trở nên phổ biến và được áp dụng rất nhiều trong khi review code, đánh giá code bởi đồng nghiệp, tech leader,… Khi mới bắt đầu học lập trình, bạn cũng nên tiếp cận đến những khái niệm như Code Smell để hiểu rõ chúng và tìm ra các giải pháp để tránh mắc phải. Chúc bạn thành công!

Cảm ơn bạn đã theo dõi bài viết!

Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

TỔNG HỢP TÀI LIỆU HỌC LẬP TRÌNH CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦU

KHOÁ HỌC BOOTCAMP JAVA/PHP/.NET TRỞ THÀNH LẬP TRÌNH VIÊN TRONG 5-6 THÁNG

Bình luận