Article:
Ruby vs. Java - Chuyện hoang đường #2: Tính năng X của Ruby làm code khó bảo trì
1136
phananhvu.myopenid.com 125Updated over 3 years ago |
Xem bài gốc ở đây. Xem chuyện hoang đường #1 về kích thước project ở đây.
Ruby có nhiều tính năng giúp mã ngắn gọn, dễ đọc hơn như open classes, dynamic evaluation, soft encapsulation, metaprogramming, và closures. Các tính năng này hay nhưng những lập trình viên chưa từng sử dụng lại sợ chúng sẽ khiến chương trình khó bảo trì.
Thực tế lại khác ...
Các tính năng mạnh mẽ của Ruby giúp cho code dễ bảo trì hơn, tất nhiên là nếu được sử dụng đúng cách. (Cách sử dụng cho đúng các tính năng này có thể là chủ đề của một chuyện hoang đường khác)
Điều gì làm code dễ bảo trì? Code dễ bảo trì là code mà có thể dễ dàng:
* Hiểu thiết kế tổng thể của chương trình, module
* Tìm thấy đoạn code mong muốn
* Đọc và hiểu
* Thay đổi
* Xác nhận các thay đổi đều hoạt động tốt
Với các tiêu chí trên, Java và Ruby đáp ứng ra sao? Cá nhân tôi tin rằng, việc code dễ bảo trì hay không phụ thuộc 80% vào lập trình viên, và chỉ 20% vào ngôn ngữ và công cụ. Bây giờ, hãy xem xét lần lượt từng tiêu chí.
Hiểu thiết kế tổng thể. Không ngôn ngữ nào chiếm ưu thế. Theo kinh nghiệm của tôi, cả 2 ngôn ngữ đều không giúp ích gì cho việc này. Trừu tuợng hoá tốt cũng hữu ích. Java và Ruby có nhiều điểm chung về trừu tượng hoá: implementation inheritance, classes, polymorphism, encapsulation, ... Java hỗ trợ trừu tượng hoá tốt hơn thông qua IDE như IntelliJ IDEA. Mặt khác, Ruby có các kiến trúc hữu ích mà Java thiếu. Mixin giúp tổ chức code tốt hơn. Ruby giúp dễ dàng tạo DSL phản ánh và lập tài liệu thiết kế chính xác.
Tìm thấy đoạn code mong muốn. Ưu thế: Java. Java có các IDE làm thay nhiều công việc của lập trình viên một cách hiệu quả. (Nhớ rằng nhiều lập trình viên bỏ đi khi Java chưa có IDE hỗ trợ)
Đọc và hiểu. Ưu thế: Ruby. Ở cấp độ các lớp và method riêng rẽ, Ruby code dễ đáp ứng DRY hơn và do đó, dễ đọc hơn. Nếu không tin Ruby code "khô" hơn thì đọc bài về Blub paradox.
Thay đổi. Ưu thế: Ruby. Thay đổi code là thay đổi ý đồ ban đầu của tác giả. Ở điểm này, trình dịch là một chướng ngại khi bắt buộc phải thay đổi hoặc phá vỡ các giả định của tác giả ban đầu. Thay đổi được thực hiện dễ dàng hơn ở ngôn ngữ động như Ruby.
Xác nhận các thay đổi đều hoạt động tốt. Không ngôn ngữ nào chiếm ưu thế. Nếu thực sự quan tâm đến chất lượng thì cần phải test. Không thể tin vào test bằng tay, do đó cần test tự động: unit tests, acceptance tests, continuous integration. Cả Ruby và Java đều hỗ trợ các kiểu test này rất tốt.
Không phải Ruby hay Java có thể giúp code dễ bảo trì hơn. Tôi đề nghị thay câu chuyện cũ (tính năng X khiến code khó bảo trì) bằng không có câu chuyện hoang đường nào hết. Nếu lí do để bạn chọn một ngôn ngữ là các căn cứ cho rằng ngôn ngữ X đó giúp ai đó viết code dễ bảo trì hơn thì hoặc là các căn cứ của bạn sai, hoặc là bạn đã hỏi nhầm người. Tốt hơn hết là chọn một ngôn ngữ bất kì rồi xem xét các căn cứ khác hoặc hỏi ai đó khác.
125