Chiếc máy tính xách tay mới mua chạy rất nhanh trong vài tháng đầu. Nhưng sau vài lần cập nhật hệ điều hành và chương trình, chẳng mấy chốc nó bắt đầu giật, lag như chiếc máy tính cũ. Chip nhanh hơn qua từng năm, nhưng tốc độ người dùng cảm nhận lại hiếm khi được cải thiện. Có một câu nói đã chỉ ra hiện tượng kỳ lạ này một cách sắc sảo. Đó chính là “Định luật Wirth (Wirth's Law)”.
Nói đơn giản, định luật Wirth là một quy luật kinh nghiệm cho rằng “tốc độ phần mềm chậm đi nhanh hơn tốc độ phần cứng tăng tốc”. Điều này có nghĩa là dù phần cứng có tốt lên đến đâu, phần mềm cũng tiêu tốn trước phần hiệu năng tăng thêm ấy, khiến tốc độ người dùng cảm nhận vẫn giậm chân tại chỗ, thậm chí còn thụt lùi.
Trong tài liệu này, chúng ta sẽ lần lượt tìm hiểu nguồn gốc của định luật Wirth, lý do phần mềm ngày càng nặng, những ví dụ hiện diện quanh ta ngày nay và các cách xây dựng phần mềm gọn nhẹ.

Phần mềm nặng nề đuổi kịp những con chip ngày càng nhanh
Định luật Wirth bắt nguồn từ đâu?

Tên gọi của định luật này bắt nguồn từ nhà khoa học máy tính người Thụy Sĩ Niklaus Wirth. Wirth công bố ngôn ngữ lập trình Pascal vào năm 1970 và nhận giải Turing, được gọi là giải Nobel của ngành khoa học máy tính, vào năm 1984.
(1) “Lời kêu gọi xây dựng phần mềm gọn nhẹ”
Năm 1995, Wirth đăng bài viết “Lời kêu gọi xây dựng phần mềm gọn nhẹ (A Plea for Lean Software)” trên tạp chí Computer. Trong bài, ông dẫn lời đồng nghiệp Martin Reiser rằng “phần mềm đang chậm đi nhanh hơn tốc độ phần cứng tăng tốc”, và câu nói này về sau được gọi là định luật Wirth.
(2) Sự phình to của phần mềm qua những con số
Wirth viết rằng chỉ khoảng 25 năm trước đó, người ta có thể tạo một trình soạn thảo văn bản tương tác với 8,000 byte, còn một trình biên dịch phải nằm gọn trong 32 kilobyte. Thế nhưng, ông phê phán rằng các thế hệ kế tiếp của chúng lại đòi hỏi bộ nhớ tính bằng megabyte và thậm chí sẽ không thể sử dụng được nếu phần cứng không nhanh hơn khoảng một nghìn lần.
(3) Một quan sát song hành với định luật Moore
Nếu định luật Moore (Moore's Law) dự đoán rằng số lượng transistor trong chất bán dẫn sẽ liên tục tăng gấp đôi, thì định luật Wirth là quan sát ở chiều ngược lại: hiệu năng thu được nhờ đó không được chuyển trọn vẹn đến người dùng. Wirth viết rằng hiệu năng của các bộ xử lý thuộc dòng Intel 80x86 đã tăng 335 lần từ năm 1978 đến năm 1993, nhưng ông cũng nói thêm rằng sự tham lam vô tận của phần mềm vẫn chưa có dấu hiệu giảm bớt.
Vì sao phần mềm ngày càng nặng?

Wirth nêu ra hai lý do khiến mọi người dễ dàng chấp nhận hiện tượng phần mềm ngày càng lớn. Một là hiệu năng phần cứng được cải thiện quá nhanh; hai là thái độ của người tiêu dùng khi không phân biệt được chức năng thực sự cần thiết với chức năng có thì tốt.
(1) Gia tăng tính năng (Feature Creep)
Khi mỗi phiên bản mới lại được bổ sung thêm một vài tính năng, ngay cả những tính năng mà phần lớn mọi người hiếm khi dùng cũng tích tụ lại, khiến chương trình trở nên nặng nề. Wirth chỉ ra rằng mọi người nhầm lẫn sự phức tạp với sự tinh tế.
(2) Các lớp chồng chất (Layers of Abstraction)
Khi xếp chồng nhiều lớp công cụ và thư viện giúp việc phát triển dễ dàng hơn, quá trình xây dựng sẽ nhanh hơn, nhưng số bước phải đi qua khi thực thi cũng tăng tương ứng.
(3) Niềm tin vào phần cứng nhanh
Khi suy nghĩ “dù sao máy tính rồi cũng sẽ nhanh hơn, nên tối ưu hóa sau cũng được” lan rộng, công việc cải thiện hiệu quả bị đẩy lùi lại. Như một câu nói khác mà Wirth trích dẫn, phần mềm sẽ tiếp tục lớn lên cho đến khi lấp đầy bộ nhớ có thể sử dụng.
Định luật Wirth quanh ta ngày nay

Định luật Wirth đã nhiều lần được nhắc lại dưới những tên gọi khác nhau qua từng thời kỳ. Vào thập niên 1990, câu nói đùa “Microsoft lấy đi những gì Intel mang lại” từng rất phổ biến; tại sự kiện dành cho nhà phát triển của Google năm 2009, Sergey Brin cũng gọi hiện tượng này là “định luật Page”, theo tên người đồng sáng lập Larry Page.
- Ứng dụng nhắn tin (Messenger Apps): Việc trao đổi tin nhắn bằng chữ vẫn như trước đây, nhưng một ứng dụng chiếm hàng trăm megabyte bộ nhớ đã trở thành chuyện thường gặp.
- Trang web (Web Pages): Chỉ để đọc vài đoạn bài viết, người dùng phải tải xuống cả quảng cáo, mã theo dõi và trình phát video, khiến nội dung trên màn hình xuất hiện chậm.
- Trình soạn thảo văn bản (Word Processors): Những công việc cơ bản như thêm, xóa và di chuyển văn bản vẫn vậy, nhưng dung lượng cài đặt và thời gian khởi động lại tăng lên qua từng phiên bản. Wirth chỉ ra rằng sự xuất hiện của cửa sổ và biểu tượng không làm thay đổi nhiệm vụ ban đầu của trình soạn thảo.
- Cập nhật điện thoại (OS Updates): Khi hệ điều hành mới được xây dựng cho những thiết bị mới nhất, các thiết bị đã dùng vài năm sẽ chậm đi rõ rệt dù vẫn thực hiện cùng những công việc ấy.
Cách xây dựng phần mềm gọn nhẹ

Wirth không dừng ở việc phê phán mà còn tự mình tạo ra một hình mẫu. Từ năm 1986 đến năm 1989, ông cùng đồng nghiệp Jürg Gutknecht xây dựng hệ điều hành Oberon chỉ bằng sức của hai người, đồng thời thiết kế cả ngôn ngữ lập trình cùng tên. Phần cốt lõi của Oberon, bao gồm trình soạn thảo và trình biên dịch, còn chưa đến 200 kilobyte.
(1) Tập trung vào điều cốt yếu
Trước hết, xác định những chức năng thực sự cần thiết, rồi tách riêng phần còn lại để chỉ những ai cần mới bổ sung và sử dụng.
(2) Đo hiệu năng thường xuyên
Mỗi khi thêm tính năng mới, hãy đo tốc độ thực thi và mức sử dụng bộ nhớ để sớm nhận ra xu hướng phần mềm nặng dần lên.
(3) Can đảm lược bỏ
Wirth nói rằng sự thỏa mãn lớn nhất trong lập trình đến khi ta thành công trong việc loại bỏ một thứ gì đó. Xóa mã không được sử dụng cũng quan trọng như thêm tính năng.
Định luật Wirth nhắc chúng ta về những chi phí dễ bị bỏ qua khi sự tiến bộ của phần cứng còn che lấp phần dư thừa của phần mềm. Để người dùng có trải nghiệm nhanh hơn tương xứng với mức tăng tốc của chip, người phát triển cần lấy hiệu quả và sự đơn giản làm tiêu chí ngay từ đầu. Điều này cũng gắn liền với việc giảm điện năng tiêu thụ và chi phí thay thiết bị.
Cân nhắc lược bỏ trước khi thêm vào chính là bước đầu tiên để phát triển phần mềm chạy nhanh và bền lâu.