3 điểm bởi GN⁺ 2023-09-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đoạn mã được sao chép nhiều nhất trên StackOverflow, do Andreas Lundblad viết vào năm 2010, có lỗi.
  • Đoạn mã này là lời giải cho bài toán hiển thị số byte theo định dạng con người dễ đọc. Ví dụ, biểu diễn 123.456.789 byte thành "123.5 MB".
  • Lời giải của Lundblad dùng log thay vì vòng lặp để tính hậu tố phù hợp (kB, MB, GB...).
  • Đoạn mã này trở thành đoạn mã bị sao chép nhiều nhất sau khi được xác nhận trong một nghiên cứu năm 2018 có tiêu đề "Usage and Attribution of Stack Overflow Code Snippets in GitHub Projects".
  • Nghiên cứu phát hiện rằng đa số mọi người khi sao chép mã từ Stack Overflow không kèm theo ghi nguồn phù hợp.
  • Lỗi trong đoạn mã của Lundblad là sai số làm tròn khi số byte tiến gần 1 MB. Ví dụ, đầu vào 999.999 byte cho kết quả "1000.0 kB" thay vì "1.0 MB" đúng ra phải có.
  • Lundblad đã cung cấp phiên bản mã đã sửa để xử lý vấn đề này cùng các trường hợp biên khác. Bao gồm đầu vào âm và giới hạn độ chính xác của double.
  • Bài viết này rút ra các bài học chính là tầm quan trọng của việc kiểm thử mọi trường hợp biên, sự phức tạp của phép toán số thực dấu chấm động, và nhu cầu ghi nguồn phù hợp khi sao chép mã.

1 bình luận

 
GN⁺ 2023-09-28
Ý kiến Hacker News
  • Theo các bình luận, đoạn snippet StackOverflow bị sao chép nhiều nhất mọi thời đại có lỗi.
  • Những người bình luận chỉ ra rằng đoạn mã có lỗi dùng các giá trị hard-code không cần thiết và câu lệnh if, trong khi có thể đơn giản hóa bằng tìm kiếm nhị phân.
  • Một số người bình luận đặt câu hỏi về hai lần gọi log(), một lần gọi pow(), và việc dùng ceil() trong mã, đồng thời cho rằng một cách tiếp cận đơn giản hơn có thể hiệu quả hơn.
  • Có các thư viện thay thế để định dạng kích thước theo kiểu con người dễ đọc, như thư viện PrettySize cho Rust và .NET.
  • Một số lập trình viên bày tỏ lo ngại về việc sao chép mã không đáng tin cậy từ StackOverflow rồi dán vào ứng dụng của mình.
  • Việc dùng phép toán log số thực và phép chia áp dụng cho số nguyên trong mã bị chỉ trích là quá phức tạp và dễ phát sinh lỗi.
  • Cuộc thảo luận nhấn mạnh tầm quan trọng của việc hiểu các nguyên tắc cơ bản của mã, thay vì phụ thuộc vào các snippet được sao chép.
  • Các bình luận cũng phản ánh vấn đề rộng hơn về việc chia sẻ tri thức trong các cộng đồng như StackOverflow và khả năng thông tin sai lệch bị lan truyền.