5 đặc tính của CUPID giúp dân lập trình code trong hân hoan

Đầu năm 2022, một tập nguyên lý mang tên CUPID xuất hiện, mô tả các đặc tính của source code mà hệ thống nên có. Áp dụng CUPID không chỉ giúp source code thân thiện, dễ tiếp cận, mà còn giúp việc nâng cấp, điều chỉnh dễ dàng và nhanh chóng.

This post is also available in English

Upload image

Lập trình viên sẽ luôn tìm tòi những phương pháp để code ngày càng tốt hơn. Vì vậy các nguyên lý, nguyên tắc trong thiết kế và lập trình đã ra đời như SOLID, GRASP, DRY… Đặc biệt, vào những năm 2000, khi lập trình hướng đối tượng lên ngôi, chúng ta đều được biết về SOLID principles. Ngắn gọn, SOLID principles gồm các nguyên tắc:

  • Single responsibility principle: mỗi class chỉ nên thực thi một nhiệm vụ
  • Open/Closed principle: class có thể dễ dàng mở rộng, nhưng không được sửa đổi
  • Liskov substitution principle: class con có thể thay thế được cho class cha
  • Interface segregation principle: interface nên được chia nhỏ và cụ thể
  • Dependency inversion principle: module cấp cao không nên import trực tiếp module cấp thấp mà nên sử dụng abstraction

Với các nguyên tắc trên, SOLID tập trung vào mô tả các quy tắc trong quá trình thiết kế và phát triển phần mềm. Áp dụng SOLID sẽ giúp các đoạn code của phần mềm rõ ràng, dễ hiểu, dễ bảo trì, linh hoạt hơn, và giảm thiểu độ phức tạp khi mở rộng.

Tuy nhiên ngày nay, có ý kiến cho rằng việc áp dụng các nguyên lý trong quá trình lập trình là có phần cứng nhắc, các lập trình viên có thể chỉ tuân thủ các luật được đặt ra một cách nguyên tắc. Chính vì thế, đầu năm 2022, một hướng tiếp cận mới mang tên CUPID đã ra đời. Daniel Terhorst-North - tác giả tạo ra principle này cho biết CUPID không tập trung vào việc đề ra những gì phải làm, mà gợi ý về 5 đặc tính nên có của phần mềm.

5 đặc tính của CUPID bao gồm:

  1. Composable - “plays well with others”: Các class và function vừa đủ nhỏ, dễ dàng kết hợp với nhau, giảm tối thiểu các phụ thuộc vào thư viện, module khác

Upload image

Các command trong Unix có thể kết hợp với nhau thông qua Pipe

  1. Unix philosophy – “does one thing well”: các component chỉ làm một việc và làm tốt việc đó (cũng như các command trong hệ điều hành Unix)

Upload image

Ví dụ: lệnh ls chỉ liệt kê thông tin về tập tin và thư mục, nhưng bản thân ls lại không nắm giữ thông tin đó. Thông tin tập tin và thư mục được cung cấp bởi câu lệnh stat, và ls chỉ là công cụ để hiển thị thông tin dưới dạng danh sách.

  1. Predictable – “does what you expect”: thực thi theo như kì vọng (nếu component trông có vẻ sẽ làm việc A, thì A là việc component đó nên làm), không tạo trường hợp bất ngờ, xác định được khả năng thực thi trong cả trường hợp đã định và bất thường, có thể quan sát được trạng thái vận hành hiện tại.

Upload image

findIndex() method chuẩn hóa input trước khi thực hiện tìm kiếm để kết quả luôn nằm trong kì vọng (from Excalidraw)

  1. Idiomatic – “feels natural”: định hình “phong cách code” chuẩn để người khác cũng có thể tiếp cận nhanh chóng (nếu ngôn ngữ lập trình chưa có chuẩn, hãy tìm hiểu thêm từ cộng đồng)

Upload image

“python –m this” hiển thị 19 "guiding principles"

  1. Domain-based – “in language and structure”: sử dụng ngôn ngữ của domain trong lập trình và tổ chức source code để tăng tính rõ ràng, dễ hiểu (thậm chí cả dân non-tech cũng có thể đọc hiểu source code!)

Upload image

Excalidraw định nghĩa elements và thuộc tính bằng ngôn ngữ trong lĩnh vực sketching

Đọc thêm bài viết về Excalidraw.

Để có được các đặc tính này trong hệ thống, người lập trình có thể tùy chọn phương pháp phù hợp với bản thân. Điểm đặc biệt của CUPID là không đưa ra rõ ràng các hành động cụ thể trong quá trình lập trình, mà là những đặc điểm ta cần suy tính cho sản phẩm sau cùng. So với những nguyên tắc, nguyên lý khác, CUPID sẽ có phần mơ hồ, nhưng lại giúp ta dễ tiếp thu và tự đề ra hành động phù hợp với bản thân mình.

Được đề ra vào đầu năm 2022, CUPID hiện đại hơn về khả năng dễ dàng ứng dụng hơn vào nhiều loại hệ thống. Áp dụng CUPID không chỉ giúp source code thân thiện, dễ tiếp cận, mà còn giúp việc nâng cấp, điều chỉnh dễ dàng, nhanh chóng. Các đặc tính CUPID đề ra giúp lập trình viên sau này phải chỉnh sửa source code của bạn sẽ bớt “stress”, mà biết đâu người đó cũng chính là bạn thì sao?

Hãy chọn phương pháp phù hợp với bản thân mình. Vì sau cùng, mục đích của lập trình viên chúng ta vẫn là tạo ra những dòng code “ngon lành” cho hệ thống.

Mời bạn tham khảo bài viết về CUPID của tác giả Daniel Terhorst-North.

Atekco - Home for Authentic Technical Consultants