3 điểm bởi GN⁺ 2024-02-11 | 1 bình luận | Chia sẻ qua WhatsApp

Lời kêu gọi về phần mềm súc tích cho năm 2024

  • Hiện tượng phần mềm ngày càng phình to, tức bloat, vẫn là điểm yếu lớn nhất của phần mềm.
  • Phát triển phần mềm tinh gọn rất quan trọng để cải thiện trải nghiệm người dùng, giảm rủi ro bảo mật và nâng cao hiệu quả của hệ thống.
  • Các nhà phát triển nên thiết kế phần mềm theo hướng cung cấp nhiều tính năng hơn với ít mã nguồn hơn.

Ý kiến của GN⁺

  • Hiện tượng bloat của phần mềm có thể gây suy giảm hiệu năng hệ thống và tạo ra lỗ hổng bảo mật, vì vậy các nhà phát triển cần tập trung vào tối ưu hóa mã nguồn và thiết kế hiệu quả.
  • Người dùng mong muốn trải nghiệm phần mềm nhanh hơn và an toàn hơn, vì vậy phần mềm tinh gọn có thể có năng lực cạnh tranh trên thị trường.
  • Bài viết này có thể giúp các nhà phát triển nhìn lại xu hướng phát triển phần mềm hiện nay và tạo động lực để làm ra phần mềm tốt hơn.

1 bình luận

 
GN⁺ 2024-02-11
Ý kiến Hacker News
  • Trong tiểu thuyết "A Deepness in the Sky" của Vernor Vinge, loài người đã lan rộng giữa các vì sao dù vẫn chưa có công nghệ vượt tốc độ ánh sáng. Các tàu vũ trụ rất cổ xưa và là sự pha trộn giữa công nghệ của nhiều hệ thống và nền văn minh khác nhau.

    • Các hệ thống máy tính đã tiến hóa trong thời gian rất dài đến mức hầu như không còn ai thực sự hiểu rõ phần lớn mã nguồn. Mọi người chỉ đơn giản là sử dụng mã đó và xây dựng thêm những thứ mới lên trên.
    • Một nhân vật đã du hành trong thời gian dài và ở trong trạng thái đình trệ, nên có lẽ là một trong những con người già nhất. Ông từng là kỹ sư hệ thống trong quá khứ, hiểu cách các hệ thống thời đó vận hành và điểm yếu của chúng, nên trong tương lai có lợi thế rất lớn khi người khác đã chồng thêm nhiều lớp lên trên mà không còn biết chính xác mình đang làm gì.
    • Có vẻ Vernor đã nêu ra một điểm rất quan trọng.
  • Phần lớn thư viện trên npm có quá nhiều tính năng không cần thiết. Tác giả không biết thiết kế tốt là gì, và thư viện nào cũng muốn làm mọi thứ.

    • Ví dụ, một thư viện chuyển đổi mã hóa chuỗi lại bao gồm luôn khả năng tải tệp, lưu tệp, tải qua internet, cung cấp công cụ dòng lệnh, v.v. Thư viện chỉ nên làm đúng một việc.
    • Ngay cả với Rust, tình hình dường như cũng không khá hơn. Nếu muốn chỉnh sửa tài liệu Rust, bạn có thể phải cài khoảng 1000 crate.
    • Vấn đề không nằm ở ngôn ngữ, mà ở chỗ ai cũng có thể phát hành thư viện và thực tế là họ đều làm vậy. Những người chỉ "muốn hoàn thành công việc" sẽ chọn thư viện có nhiều tính năng nhất, rồi lại đòi thêm tính năng vì lười viết vài dòng mã vốn có thể xử lý bên ngoài thư viện.
    • Không rõ phải giải quyết chuyện này thế nào. Một ý tưởng là lập ra một nhóm theo đuổi "ít phụ thuộc", khuyến khích mọi người gắn huy hiệu đó cho thư viện của mình, và khiến người dùng tìm huy hiệu ấy khi chọn thư viện.
  • Trong "Terre des Hommes" của Antoine de Saint-Exupéry, có một đoạn hỏi rằng khi ngắm những chiếc máy bay hiện đại, nhìn theo đường tiến hóa của chúng qua từng năm, liệu ta có từng nghĩ về mọi thứ con người tạo ra hay chưa.

    • Mọi nỗ lực công nghiệp, tính toán, thiết kế và những đêm thức trắng bên bản vẽ cuối cùng đều tập trung vào việc tạo ra những vật thể mang nguyên lý tối thượng của sự đơn giản.
    • Để đường cong của đồ nội thất, sống tàu hay thân máy bay dần trở nên giống những đường cong cơ bản, tinh khiết của ngực hay vai người, cần có nhiều thế hệ nghệ nhân thử nghiệm.
    • Sự hoàn hảo đạt được không phải khi không còn gì để thêm vào, mà là khi không còn gì để bỏ đi.
  • Lượng mã mà chúng ta đang dùng hiện nay là khổng lồ. Ví dụ, để mở cửa gara có thể cần hơn 50 triệu dòng mã đang hoạt động.

    • Ta đang chạy một lượng mã lớn như vậy, nhưng phần lớn trong số đó có lẽ chưa từng được rà soát kỹ lưỡng.
    • Dẫu vậy, đời sống thường ngày vẫn quay về với việc cài thêm các dependency npm.
  • Phần mềm bị xem là nguy hiểm, nên người ta khuyên đừng tự chạy mà hãy giao cho nhà cung cấp "X as a Service" hoặc "cloud".

    • Điều này giống như nói rằng vì ô tô rất dễ bốc cháy nên hãy giao việc lái xe cho một chuyên gia luôn đi kèm các lính cứu hỏa chuyên nghiệp.
  • Lý do phần mềm không trở nên gọn nhẹ hơn là vì điều đó đòi hỏi thời gian, kỹ năng và nhân lực đắt đỏ.

    • Với tư cách một lập trình viên độc lập, một người mới học node.js năm ngoái cũng có thể ghép node.js, container, nhiều dịch vụ DB hosting của AWS, dịch vụ lambda, object storage, Cloudflare, yaml, react, vite... để tạo ra một web app mong manh chỉ trong một ngày.
    • Phần mềm nhanh và có chi phí bảo trì thấp rất khó để viết theo cách vẫn tạo ra lợi nhuận.
  • Trước đây, người ta từng chuẩn hóa các hook do hệ thống cung cấp để mọi lập trình viên dùng cho giao diện và nhiều thứ khác, còn công việc chính của lập trình viên là viết logic chương trình.

    • Những system call này sẽ tiếp tục thực hiện cùng một công việc ngay cả khi mã thay đổi, đồng thời cho phép phần mềm mới có thêm tính năng mà mã cũ vẫn có thể biên dịch và chạy mà không gặp vấn đề.
    • Giấc mơ đó nhanh chóng sụp đổ (ví dụ: vấn đề DLL), và phần lớn việc quản lý package tập trung vào chuyện làm sao dùng đúng thư viện.
    • Giờ đây đã có rất nhiều kinh nghiệm được tích lũy, nhưng câu hỏi được đặt ra là liệu giấc mơ đó có khả thi hay không, hay chúng ta thực sự đang tiến tới phần mềm nhanh hơn, gọn hơn, ổn định hơn và an toàn hơn trong tình trạng hỗn loạn hiện nay.
  • Về Rust, có ý kiến rằng dù Rust có thể ít lỗ hổng trên mỗi dòng hơn C++ tới 70%, nếu trong Rust bạn kéo vào hàng trăm package và số dòng mã nhiều gấp 10 lần, thì tổng số lỗ hổng tuyệt đối vẫn có thể cao hơn.

  • Nếu biết phần mềm sau 20 năm sẽ trở thành như ngày nay, có lẽ họ đã không chọn trở thành lập trình viên. Mọi thứ đều khổng lồ, phần cứng và phần mềm lao vào một cuộc đua bất tận, và tình hình không hề tốt hơn, dễ hơn hay đơn giản hơn.

  • Ngay khi bấm vào liên kết là hiện ra banner CTA, quảng cáo Google và banner cookie. Vừa đóng banner cookie xong thì lại có thêm một quảng cáo Google khác xuất hiện, rồi khi cuộn xuống nó vẫn bám theo. Trong lúc đọc bài còn phải xem thêm ít nhất ba quảng cáo nữa.

    • Trong hoàn cảnh như vậy, thật khó để nghiêm túc tiếp nhận nội dung đó.