ในโลกเทคโนโลยี การเปรียบเทียบเปรียบสามารถทำให้แนวคิดที่ซับซ้อนชัดเจนขึ้น หรือกลับกัน—ทำให้คลุมเครือมากขึ้นทั้งหมด บล็อกโพสต์ล่าสุดที่เปรียบเทียบกระบวนทัศน์การเขียนโปรแกรมกับวัวทรงกลมได้จุดประกายการถกเถียงอย่างหนักทั่วชุมชนนักพัฒนา โดยผู้วิจารณ์เรียกการเปรียบเทียบนี้ว่ามีข้อบกพร่องขั้นพื้นฐานและข้อโต้แย้งขาดการค้นคว้าที่ดี การอภิปรายเผยให้เห็นความแตกแยกลึกๆ เกี่ยวกับวิธีที่เรามโนภาพแบบจำลองการเขียนโปรแกรมและความสัมพันธ์ของมันกับข้อจำกัดการคำนวณในโลกจริง
การเปรียบเทียบวัวทรงกลมภายใต้การโจมตี
บทความต้นฉบับใช้มุกฟิสิกส์เกี่ยวกับการจำลองวัวเป็นทรงกลมสมบูรณ์เพื่ออธิบายแนวทางการเขียนโปรแกรมต่างๆ ว่าเป็นความเรียบง่ายโดยเจตนาที่ไม่สนใจความซับซ้อนของโลกจริง การเขียนโปรแกรมเชิงฟังก์ชันถูกอธิบายว่าเป็นวัวทรงกลมอย่างหนึ่งที่ทำให้ความเป็นห่วงเรื่องการจัดการหน่วยความจำเป็นนามธรรม อย่างไรก็ตาม ผู้แสดงความคิดเห็นชี้ให้เห็นปัญหาหลายประการกับกรอบความคิดนี้อย่างรวดเร็ว หลายคนแย้งว่าผู้เขียนเข้าใจผิดทั้งในการเขียนโปรแกรมเชิงฟังก์ชันและแนวคิดวัวทรงกลมเอง ผู้วิจารณ์หนึ่งคนตั้งข้อสังเกตว่าวัวทรงกลมในฟิสิกส์แสดงถึงความเรียบง่ายที่นำไปสู่ข้อสรุปที่ absurd ไม่ใช่แค่แบบจำลองที่ทำให้ง่ายขึ้นเท่านั้น การเปรียบเทียบดูเหมือนจะถูกยืดออกไปเกินกว่าจะจดจำได้เมื่อนำไปใช้กับแนวคิดที่หลากหลาย เช่น การแทรกสตริงและ HTML ในฐานะวัวทรงกลมเพิ่มเติม
วัวทรงกลมเป็นเรื่องเกี่ยวกับสมมติฐานที่ทำให้ง่ายซึ่งนำไปสู่ข้อสรุปที่ absurd ไม่ใช่แบบจำลองที่ทำให้ง่ายขึ้นหรือสัญกรณ์ที่ทำให้ง่ายขึ้นโดยทั่วไป การเรียกการเขียนโปรแกรมเชิงฟังก์ชันว่าเป็นวัวทรงกลมเมื่อคุณหมายความว่าการจัดการหน่วยความจำอัตโนมัติเป็นสมมติฐานที่ทำให้ง่าย เป็นสัญญาณของความไม่สามารถที่รุนแรงจนไม่มีใครควรอ่านบล็อกที่เหลือต่อ
"Spherical Cows" ที่ถูกอ้างถึงบ่อยในวงการคอมพิวติ้ง การทำงานแบบลำดับของคำสั่ง CPU สมมติฐานการเข้าถึงหน่วยความจำแบบ O(1) สมมติฐานเครือข่ายที่รวดเร็วและเชื่อถือได้ โมเดล Functional programming
- UNIX pipelines ในฐานะสัญกรณ์การประมวลผลแบบ concurrent
ตั้งคำถามกับพื้นฐานทางเทคนิค
ความถูกต้องทางเทคนิคกลายเป็นประเด็นโต้แย้งหลัก ผู้แสดงความคิดเห็นท้าทายข้อกล่าวอ้างในบทความที่ว่าเราใช้เวลาหลายทศวรรษบิดเบือนฮาร์ดแวร์เพื่อทำให้วัวทรงกลม FP ทำงาน 'เร็วขึ้น' โดยชี้ให้เห็นว่า CPU สมัยใหม่แทบไม่มีส่วนรองรับเฉพาะสำหรับรูปแบบการเขียนโปรแกรมเชิงฟังก์ชันเลย ผู้ใช้หลายคนระบุว่าฮาร์ดแวร์ได้รับการปรับให้เหมาะสมสำหรับโค้ดแบบ imperative แบบ C ผ่านคุณสมบัติต่างๆ เช่น speculative และ out-of-order execution ตัวอย่าง Mars Pathfinder ที่อ้างถึงในบทความต้นฉบับได้รับคำวิจารณ์เป็นพิเศษ—ผู้แสดงความคิดเห็นอธิบายว่าปัญหาจริงคือ priority inversion บน mutex ซึ่งไม่เกี่ยวข้องกับการเขียนโปรแกรมเชิงฟังก์ชันหรือการจำลองวัวทรงกลมเลย การระบุสาเหตุผิดพลาดนี้ชี้ให้เห็นว่าผู้เขียนอาจกำลังสับสนระหว่างการเขียนโปรแกรมแบบ imperative มีโครงสร้างกับการเขียนโปรแกรมเชิงฟังก์ชันแท้ๆ
คำวิจารณ์ต่อการเปรียบเทียบแบบ Spherical Cow ความเข้าใจผิดเกี่ยวกับพื้นฐานของ functional programming ตัวอย่างทางเทคนิคที่ไม่ถูกต้อง (กรณี Mars Pathfinder) การขยายการเปรียบเทียบไปยังแนวคิดที่ไม่เกี่ยวข้องมากเกินไป ขาดความตระหนักรู้เกี่ยวกับสถาปัตยกรรมฮาร์ดแวร์
- การสับสนระหว่าง structured imperative programming กับ functional programming
มุมมองทางเลือกเกี่ยวกับแบบจำลองการเขียนโปรแกรม
แม้จะมีการวิจารณ์ ผู้แสดงความคิดเห็นบางคนพบคุณค่าในการอภิปรายข้อจำกัดของกระบวนทัศน์การเขียนโปรแกรมที่โดดเด่น การสังเกตเกี่ยวกับ UNIX pipelines ที่แสดงถึงแบบจำลอง asynchronous dataflow ที่ไม่ได้ถูกใช้อย่างเต็มที่เกิดการสะท้อนในหมู่นักพัฒนาหลายคน ผู้แสดงความคิดเห็นหนึ่งคนระบุว่างานวิจัย UNIX หยุดลงก่อนที่จะแบ่ง แยกส่วน และรวม concurrent streams แนะให้เห็นถึงศักยภาพที่ยังไม่ได้สำรวจในพื้นที่นี้ แนวคิดที่ว่าเราควรรักษาแบบจำลองทางจิตหรือมุมมองหลายอย่างของปัญหาการเขียนโปรแกรม—เทียบได้กับวิศวกรเครื่องกลที่สร้าง projection ต่างๆ ของวัตถุทางกายภาพ—ได้รับเสียงสนับสนุนว่าเป็นแนวคิดที่มีค่า แม้ว่าการนำเสนอแบบวัวทรงกลมจะพลาดเป้าไป
คำตัดสินของชุมชนเกี่ยวกับการสื่อสาร
เหนือกว่าข้อโต้แย้งทางเทคนิค ผู้แสดงความคิดเห็นตั้งคำถามว่าการเปรียบเทียบวัวทรงกลมมีประโยชน์ใดๆ ในการสนทนาในระดับมืออาชีพหรือไม่ บางคนอธิบายบทความดังกล่าวว่าเป็น shitposting ในรูปแบบบล็อกที่ขัดขวางมากกว่าช่วยให้การสื่อสารชัดเจน ฉันทมติเสนอว่าในขณะที่การสำรวจกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกันมีค่า การทำเช่นนั้นต้องการคำศัพท์ที่แม่นยำและตัวอย่างที่ผ่านการค้นคว้ามาอย่างดี ตามที่นักพัฒนาหนึ่งคนสรุป บทความนี้อาจแสดงถึงการประมาณทรงกลมของหัวข้อเอง—แบบจำลองที่ทำให้ง่ายเกินไปซึ่งไม่สามารถจับภาพความซับซ้อนของหัวข้อที่มันพยายามจะอธิบายได้
การตอบรับอย่างแข็งขันต่อบทความนี้แสดงให้เห็นถึงความอดทนต่ำของชุมชนการเขียนโปรแกรมต่อสิ่งที่พวกเขาเห็นว่าเป็นการเขียนทางเทคนิคที่ขาดการค้นคว้าที่ดี แม้นักพัฒนายังคงสนใจในการอภิปรายเกี่ยวกับการแลกเปลี่ยนระหว่างกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกัน พวกเขาต้องการความถูกต้อง ความชัดเจน และความเข้าใจที่เหมาะสมของทั้งบริบททางประวัติศาสตร์และพื้นฐานทางเทคนิค การเปรียบเทียบวัวทรงกลม แทนที่จะทำให้การอภิปรายเหล่านี้ชัดเจน กลับกลายเป็นการเบี่ยงเบนความสนใจจากประเด็นสำคัญเกี่ยวกับวิธีที่เราจำลองระบบที่ซับซ้อนในโค้ด
อ้างอิง: The Spherical Cows of Programming