Minh họa cho Tối ưu quá sớm
Law #2 Lập kế hoạch

Tối ưu quá sớm

Premature Optimization (Knuth's Optimization Principle)

Tối ưu khi chưa có dữ liệu thực tế thường làm hệ thống phức tạp hơn trước khi mang lại giá trị rõ ràng.

Nguồn tham khảo: Laws of Software Engineering

Tổng quan

Tối ưu quá sớm là việc trả giá bằng độ phức tạp trước khi biết điểm nghẽn thật ở đâu. Trọng tâm của luật này là ưu tiên thiết kế rõ ràng, đúng chức năng, rồi dùng đo đạc thực tế để quyết định phần nào cần tối ưu.

Ý chính

  • Phần lớn code không nằm trên hot path, nên micro-optimization đại trà thường làm code khó đọc hơn mà không giúp hệ thống nhanh hơn rõ rệt.
  • Tối ưu nên dựa trên profiling, benchmark hoặc tín hiệu vận hành, không dựa trên trực giác mơ hồ.
  • Code đã tối ưu thường ít đơn giản hơn; nếu tối ưu sai chỗ, bạn gánh chi phí bảo trì mà không nhận lợi ích hiệu năng.

Ví dụ từ nguồn

Một routine C được viết bằng bit trick phức tạp có thể chỉ chạy một lần lúc khởi động, trong khi bottleneck thật nằm ở truy vấn dữ liệu lớn.

Một trang web được minify thủ công hoặc cache quá sớm có thể che lỗi thiết kế, trong khi vấn đề thật là N+1 query hoặc payload quá lớn.

Nguồn gốc

Donald Knuth phổ biến câu nói này trong bài "Structured Programming with Go To Statements" năm 1974, với ngữ cảnh là tránh các tối ưu nhỏ không đáng kể trong phần lớn trường hợp.

Lưu ý khi áp dụng

Đừng hiểu luật này là bỏ qua hiệu năng. Hãy giữ thiết kế đo được, rồi tối ưu đúng đoạn khi dữ liệu cho thấy nó đáng tối ưu.

← Quay lại danh sách 56 luật