Lập trình viên nên thuộc lòng triết lý KISS và YAGNI

Bài viết được dịch từ blog Coding Horror

Những quan điểm của kỹ sư Rico (hiện đang làm việc cho Microsoft) về một chủ đề gần như rất thân thuộc đối với tôi:

Tôi không nghĩ rằng có ai đó lại có thể đưa bất kỳ kết luận nào về tốc độ thực thi của phần mềm trong bài viết của tôi trên blog Performance Tidbits. Nếu tôi có thể tóm tắt lại lời khuyên của mình trong bài viết đó trong chỉ một vài từ thì nó sẽ là “đừng sử dụng các đặc trưng OOP mà bạn không cần đến.”

Điều này không phải nói rằng bạn nên tránh xa các hàm ảo, kế thừa, hoặc những đặc trưng khác của các ngôn ngữ lập trình hiện đại. Mà thực ra chúng không những chỉ mang lại sự rõ ràng và khả năng bảo trì mà chúng cũng cải thiện cả về tốc độ thực thi nữa. Nhưng, cũng rất thường xuyên, tôi quan sát thấy rằng người ta viết code của họ theo một cách rối rắm trong khi có một mô hình đơn giản hơn rất nhiều mà vẫn mang lại hiệu quả tương đương và tốc độ thực thi còn nhanh hơn. Dù cho bạn có sùng bái phong cách lập trình nào đi chăng nữa thì tôi nghĩ bạn sẽ đồng ý rằng ngôn ngữ càng trừu tượng và phức tạp thì không giúp ích gì cho thiết kế của bạn – thay vì mỗi đặc trưng phức tạp sẽ tạo ra rất nhiều tiêu cực thì nên bằng một cách nào đó chuyển thành tích cực hơn với những lợi ích như là sự rõ ràng, dễ bảo trì, tốc độ thực thi nhanh, và nhiều vấn đề khác.

Vì vậy khi tôi nói những câu kiểu như “đừng sử dụng một delegate nếu tính đa hình thông thường đã có thể làm được” thì ý tôi không phải là bạn nên tránh xa các delegate, mà ý tôi là bạn nên không sử dụng chúng nếu không thấy cần thiết.

Khi bạn viết code thì hãy viết theo cách đơn giản nhất có thể.Khi bạn viết code thì hãy viết theo cách đơn giản nhất có thể.


Đừng sử dụng các đặc trưng OOP một cách vô tội vạ chỉ bởi vì bạn có thể. Chỉ sử dụng những tính năng OOP bởi vì chúng có những lợi ích rõ ràng và có thể thấy được đối với vấn đề mà bạn đang cố gắng giải quyết. Đọc đến đây thì bạn có thể bật cười, nhưng cũng giống như Rico, tôi thấy chuyện này diễn ra như chuyện thường ngày ở huyện. Hầu hết các lập trình viên chẳng bao giờ gặp một đối tượng (object) mà họ không thích cả. Tôi nghĩ rằng nên xem những kỹ thuật này là có tội cho tới khi chúng được chứng minh là vô tội trong tòa án KISS (“Keep it simple, stupid” – Giữ cho nó đơn giản, đồ ngốc ạ).

các nhà phát triển phần mềm, tôi nghĩ rằng chúng ta thường có khuynh hướng quá lạc quan vào việc định giá nói chung trong các giải pháp của riêng mình, và do đó chúng ta thường kết thúc bằng cách xây dựng ra các framework OOP rất rối rắm xung quanh những thứ mà chẳng cần phải trở nên phức tạp đến mức đó. Để chống lại sự cám dỗ này, tôi gợi ý rằng bạn nên tuân theo học thuyết YAGNI (You Aren’t Gonna Need It – Bạn sẽ không cần nó). Hãy xây dựng cái bạn cần khi mà bạn thực sự cần đến nó, hãy xông xáo tái cấu trúc nó khi cần thiết; đừng dành quá nhiều thời gian để lên kế hoạch cho những thứ lớn lao, và những kịch bản tương lai không biết trước. Phần mềm tốt là cái mà có thể tiến hóa thành sản phẩm hoàn thiện theo thời gian.

Các bài viết liên quan:

Về tác giả bài viết:

Jeff_atwood_coding_horrorJeff Atwood là một chuyên gia công nghệ tại Mỹ, hiện đang sinh sống và làm việc tại Berkeley, CA. Anh là một kỹ sư phần mềm chuyên về công nghệ Microsoft .NET, và là một blogger nổi tiếng trong cộng đồng công nghệ với blog Coding Horror, anh là người sáng lập và kiêm Giám đốc điều hành (CEO) của trang web hỏi đáp uy tín Stack Overflow và cũng là đồng sáng lập của Stack ExchangeDiscourse.

Advertisements

4 comments on “Lập trình viên nên thuộc lòng triết lý KISS và YAGNI

  1. Keep it simple, đơn giản để đến người lập trình viên gà mờ nhất cũng có thể hiểu dc bạn đang viết cái gì. Đây là cái mà mình đã và đang theo đuổi. 😀

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s