3P by neo 2023-09-28 | favorite | 댓글 1개
  • 2010년에 Andreas Lundblad가 작성한 가장 많이 복사된 StackOverflow 스니펫에는 결함이 있다.
  • 이 스니펫은 바이트 수를 사람이 읽을 수 있는 형식으로 출력하는 문제의 해결책이다. 예를 들어, 123,456,789 바이트를 "123.5 MB"로 표현하는 것이다.
  • Lundblad의 해결책은 루프 대신 로그를 사용하여 적절한 접미사(kB, MB, GB 등)를 계산한다.
  • 이 스니펫은 "GitHub 프로젝트에서의 Stack Overflow 코드 스니펫의 사용과 출처 표시"라는 제목의 2018년 연구에서 확인된 후 가장 많이 복사되었다.
  • 연구에서는 대부분의 사람들이 Stack Overflow에서 코드를 복사할 때 적절한 출처 표시를 포함하지 않는다는 것을 발견했다.
  • Lundblad의 스니펫의 결함은 바이트 수가 1 MB에 가까워질 때 반올림 오류가 있다. 예를 들어, 999,999 바이트의 입력은 올바른 "1.0 MB" 대신 "1000.0 kB"를 결과로 낸다.
  • Lundblad는 이와 같은 문제와 다른 극단적인 경우를 처리하는 수정된 코드 버전을 제공한다. 이에는 음수 입력과 double의 정밀도 제한이 포함된다.
  • 이 기사에서 얻을 수 있는 주요 교훈은 모든 극단적인 경우를 테스트하는 것의 중요성, 부동소수점 산술의 복잡성, 그리고 코드를 복사할 때 적절한 출처 표시의 필요성이다.
Hacker News 의견
  • 모든 시간 동안 가장 많이 복사된 StackOverflow 스니펫에 결함이 있다는 것이 댓글에 따르면.
  • 댓글 작성자들은 결함이 있는 코드가 불필요한 하드코딩된 값과 if 문을 사용하며, 이분 검색으로 단순화할 수 있다고 지적합니다.
  • 일부 댓글 작성자들은 코드에서 두 개의 log() 호출, 하나의 pow() 호출, 그리고 ceil()의 사용에 의문을 제기하며, 더 단순한 접근법이 더 효과적일 수 있다고 제안합니다.
  • Rust와 .NET을 위한 PrettySize 라이브러리와 같은 사람이 읽을 수 있는 형식으로 크기를 포맷하는 대체 라이브러리가 있습니다.
  • 일부 개발자들은 StackOverflow에서 믿을 수 없는 코드를 복사하여 자신들의 애플리케이션에 붙여넣는 행위에 대해 우려를 표현합니다.
  • 코드에서 실수형 log 연산과 정수에 적용된 나눗셈의 사용은 과도하게 복잡하고 버그에 취약하다는 비판을 받습니다.
  • 이 논의는 코드의 기본 원칙을 이해하는 것의 중요성을 강조하며, 복사된 스니펫에 의존하는 것보다는 이를 강조합니다.
  • 댓글들은 또한 StackOverflow와 같은 커뮤니티에서 지식 공유의 더 넓은 문제와 잘못된 정보가 퍼질 가능성에 대해 반영합니다.