3 คะแนน โดย GN⁺ 2023-09-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • สไนเป็ตจาก StackOverflow ที่ถูกคัดลอกมากที่สุด ซึ่ง Andreas Lundblad เขียนไว้ในปี 2010 มีข้อบกพร่อง
  • สไนเป็ตนี้เป็นคำตอบของปัญหาในการแสดงจำนวนไบต์ให้อยู่ในรูปแบบที่มนุษย์อ่านเข้าใจได้ เช่น แสดง 123,456,789 ไบต์เป็น "123.5 MB"
  • วิธีแก้ของ Lundblad ใช้ลอการิทึมแทนลูปเพื่อคำนวณคำต่อท้ายที่เหมาะสม (kB, MB, GB เป็นต้น)
  • สไนเป็ตนี้กลายเป็นสิ่งที่ถูกคัดลอกมากที่สุดหลังจากถูกระบุไว้ในงานวิจัยปี 2018 ชื่อ "การใช้และการอ้างที่มาของโค้ดสไนเป็ตจาก Stack Overflow ในโปรเจ็กต์ GitHub"
  • งานวิจัยพบว่า คนส่วนใหญ่เมื่อคัดลอกโค้ดจาก Stack Overflow มักไม่ได้ใส่การอ้างอิงที่มาอย่างเหมาะสม
  • ข้อบกพร่องของสไนเป็ตของ Lundblad คือมีข้อผิดพลาดในการปัดเศษเมื่อจำนวนไบต์เข้าใกล้ 1 MB ตัวอย่างเช่น อินพุต 999,999 ไบต์จะให้ผลลัพธ์เป็น "1000.0 kB" แทนที่จะเป็น "1.0 MB" ที่ถูกต้อง
  • Lundblad ได้เผยแพร่โค้ดเวอร์ชันแก้ไขที่รองรับปัญหานี้และกรณีสุดขั้วอื่น ๆ รวมถึงอินพุตติดลบและข้อจำกัดด้านความแม่นยำของ double
  • บทเรียนสำคัญจากบทความนี้คือความสำคัญของการทดสอบกรณีสุดขั้วทั้งหมด ความซับซ้อนของเลขคณิตแบบจุดลอยตัว และความจำเป็นของการอ้างอิงที่มาอย่างเหมาะสมเมื่อคัดลอกโค้ด

1 ความคิดเห็น

 
GN⁺ 2023-09-28
ความคิดเห็นจาก Hacker News
  • ตามความเห็นในคอมเมนต์ โค้ดสไนเป็ตจาก StackOverflow ที่ถูกคัดลอกมากที่สุดตลอดกาลมีข้อบกพร่อง
  • ผู้แสดงความคิดเห็นชี้ว่าโค้ดที่มีปัญหาใช้ค่าที่ฮาร์ดโค้ดโดยไม่จำเป็นและใช้คำสั่ง if ทั้งที่สามารถทำให้ง่ายลงด้วยการค้นหาแบบไบนารีได้
  • ผู้แสดงความคิดเห็นบางรายตั้งข้อสงสัยต่อการเรียก log() สองครั้ง การเรียก pow() หนึ่งครั้ง และการใช้ ceil() ในโค้ด พร้อมเสนอว่าแนวทางที่ง่ายกว่าน่าจะมีประสิทธิภาพกว่า
  • มีไลบรารีทางเลือกสำหรับจัดรูปแบบขนาดให้อยู่ในรูปแบบที่มนุษย์อ่านเข้าใจได้ เช่น PrettySize สำหรับ Rust และ .NET
  • นักพัฒนาบางส่วนแสดงความกังวลเกี่ยวกับการคัดลอกโค้ดที่ไม่น่าเชื่อถือจาก StackOverflow แล้วนำไปวางในแอปพลิเคชันของตน
  • การใช้การคำนวณ log แบบจำนวนจริงและการหารที่นำไปใช้กับจำนวนเต็มในโค้ดถูกวิจารณ์ว่าซับซ้อนเกินจำเป็นและเสี่ยงต่อบั๊ก
  • การสนทนานี้ย้ำถึงความสำคัญของการเข้าใจหลักการพื้นฐานของโค้ด มากกว่าการพึ่งพาสไนเป็ตที่คัดลอกมา
  • คอมเมนต์เหล่านี้ยังสะท้อนถึงประเด็นที่กว้างกว่านั้นเรื่องการแบ่งปันความรู้ในชุมชนอย่าง StackOverflow และความเป็นไปได้ที่ข้อมูลผิดจะเผยแพร่ต่อไป