ข้าม​ไป​ยัง​เนื้อหา

Cunningham’s Law

วิธี​ได้​คำ​ตอบ​ที่​ถูก​บน​อินเทอร์เน็ต ไม่ใช่​การ​ถาม แต่​คือ​การ post คำ​ตอบ​ผิด ๆ

Cunningham’s Law (ตั้ง​ชื่อ​ตาม Ward Cunningham ผู้​คิดค้น wiki) กล่าว​ว่า:

“วิธี​ที่​ดี​ที่สุด​ใน​การ​ได้​คำ​ตอบ​ที่​ถูกต้อง​บน​อินเทอร์เน็ต ไม่ใช่​การ​ตั้ง​คำถาม แต่​คือ​การ post คำ​ตอบ​ที่​ผิด”

— เชื่อ​ว่า​มา​จาก Ward Cunningham

กฎ​นี้​ไม่​ได้​มา​จาก​บทความ​วิชาการ​หรือ​หนังสือ แต่​มา​จาก​คำ​ให้การ​กึ่ง​เกร็ด​ประวัติศาสตร์ Steven McGeady อดีต​ผู้​บริหาร​ของ Intel เล่า​ไว้​ใน​คอมเมนต์​บน block ภาษาศาสตร์​ของ New York Times เมื่อ​ปี 2010 ว่า Ward Cunningham เคย​แนะนำ​เทคนิค​นี้​ให้​เขา​ฟัง​ตอน​ทำงาน​ร่วม​กัน​ที่ Tektronix ใน​ช่วง​ต้น​ทศวรรษ 1980 สำหรับ​ใช้​ดึง​ข้อมูล​จาก​กระดาน​สนทนา USENET McGeady จึง​ตั้ง​ชื่อ​มัน​ว่า “Cunningham’s Law” เพื่อ​เป็น​เกียรติ

ที่​น่า​สนใจ​คือ Ward Cunningham เอง​ปฏิเสธ​ว่า​ไม่​เคย​พูด​แบบ​นั้น เขา​เรียก​กฎ​นี้​ว่า​เป็น “คำ​พูด​ที่​ถูก​ยก​ผิด ๆ ซึ่ง​พิสูจน์​ตัวเอง​ด้วย​การ​แพร่​กระจาย​ไป​ทั่ว​อินเทอร์เน็ต” (a misquote that disproves itself by propagating through the internet) และ​ย้ำ​ว่า “ผม​ไม่​เคย​แนะนำ​ให้​ถาม​คำถาม​ด้วย​การ post คำ​ตอบ​ผิด” กล่าว​คือ ตัว​กฎ​เอง​ก็​เป็น​ตัวอย่าง​ของ​ปรากฏการณ์​ที่​มัน​บรรยาย — เรื่อง​เล่า​ที่​ผิด​เพี้ยน​จาก​ปาก​ต่อ​ปาก (หรือ​กระดาน​ต่อ​กระดาน) จน​กลาย​เป็น “ความ​จริง” ที่​ทุก​คน​อ้างอิง ไม่​ต่าง​จาก​คำ​ตอบ​ผิด ๆ ที่​ถูก​แก้ไข​จน​กลาย​เป็น​คำ​ตอบ​ที่​ถูก

ไม่​ว่าที่​มา​จะ​กำกวม​แค่​ไหน ปรากฏการณ์​ที่​กฎ​นี้​บรรยาย​นั้น​สังเกต​ได้​จริง​และ​สังเกต​ซ้ำ​ได้​ใน​ชุมชน​ออนไลน์​แทบ​ทุก​แห่ง: คำถาม​ที่​เปิด​กว้าง​มัก​ถูก​เมิน เพราะ​การ​ตอบ​ต้อง​ใช้​ความ​พยายาม​และ​ความ​เมตตา​จาก​ผู้​อื่น แต่​ข้อความ​ที่​ยืนยัน​บาง​อย่าง “อย่าง​มั่นใจ​แต่​ผิด” มัก​กระตุ้น​อารมณ์​อยาก​แก้ไข​ของ​คน​ที่​รู้​จริง จน​พวก​เขา​อด​ไม่​ได้ที่​จะ​เข้า​มา​ชี้แจง​ทันที — Wikipedia เอง​ก็​ถูก​ยก​เป็น​ตัวอย่าง​พิสูจน์​กฎ​นี้​ที่​โด่งดัง​ที่สุด เพราะ​บทความ​จำนวน​มาก​เริ่ม​จาก​ฉบับ​ร่าง​ที่​ไม่​สมบูรณ์​หรือ​ผิดพลาด แล้ว​ถูก​ชุมชน​ช่วย​กัน​แก้​จน​แม่นยำ​ขึ้น​เรื่อย ๆ

กลไก​ทาง​จิตวิทยา​เบื้องหลัง​กฎ​นี้​อาศัย​ความ​ไม่​สมมาตร​ระหว่าง​สอง​พฤติกรรม​ทาง​สังคม:

  • การ​ตอบ​คำถาม เป็นการ​กระทำ​เชิง​รุก​ที่​ต้อง​ใช้​ความ​เสียสละ — ต้อง​คิด​เอง ไม่มี​อะไร​ผูกมัด​ให้​ต้อง​ตอบ และ​ถ้า​ตอบ​ผิด​ก็​เสี่ยง​ถูก​ตำหนิ คน​จำนวน​มาก​จึง​เลือก “เงียบ” มากกว่า​เสี่ยง
  • การ​แก้ไข​คำ​ตอบ​ที่​ผิด เป็นการ​กระทำ​เชิง​รับ​ที่​มี​ต้นทุน​ต่ำ​กว่า​มาก — มี​โจทย์​ตั้งต้น​ให้​ค้าน​อยู่​แล้ว ผู้​แก้​ไม่​ต้อง​เริ่ม​จาก​ศูนย์ แค่​ชี้​จุด​ผิด​ก็​พอ และ​การ​ชี้​ผิด​คน​อื่น​มัก​ให้​ความ​รู้สึก​พึงพอใจ​ทาง​อัตตา (ego) มากกว่า​การ​ตอบ​คำถาม​เฉย ๆ

พูด​อีก​แบบ กฎ​นี้​ไม่​ได้​บอกว่าการ​โกหก​เป็น​กลยุทธ์​ที่​ดี แต่​ชี้​ให้​เห็น​ว่า สิ่ง​กระตุ้น​ที่​เป็น​รูปธรรม (a concrete, falsifiable claim) มี​พลัง​ดึงดูด​การ​มี​ส่วนร่วม​มากกว่า​คำถาม​ที่​เปิด​กว้าง หลักการ​เดียวกัน​นี้​ถูก​นำ​ไป​เปรียบ​กับ​สำนวน​ฝรั่งเศส “prêcher le faux pour savoir le vrai” (เทศนา​ความ​เท็จ​เพื่อ​ให้​รู้ความ​จริง) และ​เทคนิค​การ​สืบสวน​สอบสวน​แบบ Sherlock Holmes ที่​บาง​ครั้ง​ตั้ง​สมมติฐาน​ผิด ๆ ขึ้น​มา​ล่อ​ให้​ผู้​ต้อง​สงสัย​เผย​ตัว

ใน​บริบท​วิศวกรรม​ซอฟต์แวร์ กฎ​นี้​อธิบาย​ว่า​ทำไม pull request ฉบับ​ร่าง​ที่​ยัง​ไม่​สมบูรณ์​ถึง​มักได้ feedback เร็ว​และ​ละเอียด​กว่า​การ​ไป post ถาม​ใน​แชนแนล​ทีม​ว่า “ควร​ออกแบบ​ยังไง​ดี” — เพราะ code ที่​จับ​ต้อง​ได้​คือ “คำ​ตอบ​ที่​ตรวจสอบ​ได้” ให้​คน​อื่น​เข้า​มา​แก้ ใน​ขณะ​ที่​คำถาม​ลอย ๆ ไม่มี​อะไร​ให้​ค้าน

  • Stack Overflow / กระดาน​สนทนา​เทคนิค ผู้​ใช้​จำนวน​ไม่​น้อย​พบ​ว่าการ post “ผม​ลอง​ทำ​แบบ​นี้ ผลลัพธ์​คือ X” (แม้​จะ​ยัง​ไม่​ถูก​ทั้งหมด) ได้​รับ​ความคิด​เห็น​แก้ไข​เร็ว​กว่า​การ post คำถาม​เปล่า ๆ ว่า “ทำ​ยังไง”
  • Wikipedia เป็น​ตัวอย่าง​ที่ McGeady เอง​ยกไว้​อย่าง​ชัดเจน​ว่า​เป็นการ​พิสูจน์​กฎ​นี้​ใน​ระดับ​สถาบัน — บทความ​ฉบับ​ร่าง​ที่​ไม่​สมบูรณ์​กระตุ้น​ให้​อาสา​สมัคร​เข้า​มา​แก้ไข​ต่อ​เนื่อง จน​ระบบ​ทั้ง​ระบบ​ทำงาน​เหมือน “เครื่องจักร​แก้ไข​คำ​ตอบ​ผิด” ขนาด​ใหญ่
  • การ code review ใน​ทีม วิศวกร​รุ่น​น้อง​ที่​ส่ง draft PR ที่​ยัง​ไม่​สมบูรณ์ มักได้​ข้อ​เสนอ​แนะ​ที่​เจาะจง​และ​นำ​ไป​ใช้ได้​จริง​จากรุ่น​พี่ มากกว่า​การ​ไป​ถาม​คำถาม​กว้าง ๆ ว่า “ควร​ออกแบบ module นี้​ยังไง” เพราะ code ที่​เขียน​ไว้​แล้ว​ให้ “เป้า” ที่​จับ​ต้อง​ได้​ให้​คน​อื่น​วิจารณ์
  • RFC / design doc ภายใน​ทีม วิศวกร​อาวุโส​หลาย​คน​ตั้งใจ​เขียน​ข้อ​เสนอ​ฉบับ​แรก​ให้​มี​จุด​ที่​ยัง​ถกเถียง​ได้ (แทนที่​จะ​ทิ้ง​เป็น​คำถาม​เปิด) เพราะ​รู้​ว่า​ข้อ​เสนอ​ที่​เป็น​รูปธรรม​จะ​ดึง​ความเห็น​แย้ง​ที่​มี​คุณภาพ​ออก​มา​ได้​เร็ว​กว่า
  • การ debug ต่อ​หน้า​เพื่อน​ร่วม​ทีม เวลา​บอก​เพื่อน​ว่า “bug นี้​เกิด​จาก race condition ใน queue แน่ ๆ” (ทั้ง​ที่​ยัง​ไม่​แน่ใจ) มัก​กระตุ้น​ให้​เพื่อน​รีบ​ชี้​ว่า “ไม่ใช่ ดู​ตรง​นี้​สิ” เร็ว​กว่า​การ​ถาม​ลอย ๆ ว่า “ทำไม​มัน​พัง​นะ”
  • ใช้​แบบ​มี​จริยธรรม ไม่ใช่​ใช้​เพื่อ​หลอกลวง เจตนา​ของ​เทคนิค​นี้​ไม่ใช่​การ​จงใจ post ข้อมูล​เท็จ​เพื่อ​บงการ​คน​อื่น แต่​คือ​การนำ​เสนอ​สมมติฐาน​หรือ​คำ​ตอบ​ที่​ดี​ที่สุด​เท่า​ที่​ทำได้ ณ ตอน​นั้น (best-effort answer) แล้ว​เปิด​ให้​แก้ไข ความ​แตก​ต่าง​สำคัญ​คือ “ความ​ตั้งใจ” — สื่อสาร​ตรง ๆ ว่า​นี่​คือ​ความ​เข้าใจ​ปัจจุบัน ไม่ใช่​คำ​ตอบ​ที่​ยืนยัน​แน่นอน
  • เมื่อ​ทีม​เงียบ​ใส่​คำถาม​เปิด ให้​ลอง​เสนอ​ทาง​แก้​แบบ​ร่าง แทนที่​จะ​ถาม​ใน​ที่​ประชุม​ว่า “ควร​ใช้ pattern ไหน​ดี” ให้​ลอง​เขียน draft PR หรือ diagram คร่าว ๆ มา​ก่อน แล้ว​ถาม​ว่า “แบบ​นี้​พอ​ไป​ได้​ไหม” คำ​ตอบ​ที่​ได้​มัก​เจาะจง​และ​เร็ว​กว่า
  • สร้าง​วัฒนธรรม​ที่​การ​แก้ไข​คำ​ตอบ​ผิด​ไม่ใช่​เรื่อง​น่า​อาย กฎ​นี้​ทำงาน​ได้​ก็​ต่อ​เมื่อ​คน​กล้า post สิ่ง​ที่​อาจ​ผิด ถ้า​ทีม​มี​วัฒนธรรม​ตำหนิ​คน​ที่​ผิด (blame culture) แรง​จูงใจ​ที่​จะ​เสนอ draft ก็​จะ​หาย​ไป และ​กฎ​นี้​จะ​ไม่​ทำงาน
  • ระวัง​การ​ใช้​ผิด​จุด​ประสงค์ อย่า​ใช้​กฎ​นี้​เป็น​ข้อ​อ้าง​ใน​การ post ข้อมูล​ผิด​โดย​เจตนา​เพื่อ​ยั่วยุ (troll) หรือ​ดึง​ความ​สนใจ เพราะ​นอกจาก​จะ​ทำลาย​ความ​น่า​เชื่อถือ​แล้ว ยัง​สร้าง​ความ​เสียหาย​ใน​กรณี​ที่​ไม่มี​ใคร​มา​แก้ไข​ทัน​เวลา (เช่น คำ​แนะนำ​ด้าน​ความ​ปลอดภัย​ที่​ผิด)
  • ใน​การ​เขียน​เอกสาร ให้ favour ตัวอย่าง​เป็น​รูปธรรม​มากกว่า​คำถาม​ลอย ๆ เมื่อ​ขอ feedback บน​เอกสาร​หรือ Architecture Decision Record (ADR) การ​เขียน​ข้อ​เสนอ​ที่​ชัดเจน แม้​จะ​ยัง​ไม่​สมบูรณ์​แบบ มักได้​ความเห็น​ที่​ตรง​ประเด็น​กว่า​เอกสาร​ที่​ทิ้ง​คำถาม​เปิด​ไว้​เฉย ๆ
flowchart LR
    Ask[ตั้งคำถามเปิดกว้าง] --> Silence[มักถูกเงียบใส่]
    Draft[เสนอคำตอบแบบร่างที่อาจผิด] --> Trigger[กระตุ้นสัญชาตญาณอยากแก้ไข]
    Trigger --> Fix[มีคนรีบเข้ามาแก้ไขให้ถูก]
    Fix --> Better[ได้คำตอบที่ดีขึ้นเร็วกว่า]
  • Rubber Duck Debugging — อีก​เทคนิค​ที่​ใช้ “การ​อธิบาย​ให้​ใคร​สัก​คน​ฟัง” (แม้​เป็น​เป็ด​ยาง) เพื่อ​ดึง​คำ​ตอบ​ออก​มา​จาก​ตัวเอง
  • Read the Manual — คู่​ตรง​ข้าม​เชิง​พฤติกรรม: บาง​ครั้ง​คำ​ตอบ​ที่​ถูก​ที่สุด​หา​ได้​จาก​การ​อ่าน​เอกสาร​เอง ไม่​ต้อง​รอ​ให้​ใคร​มา​แก้
  • Linus’s Law — หลักการ​ที่​ใกล้​เคียง​กัน​ใน​บริบท open source: ยิ่ง​มี​คน​ตรวจสอบ​มาก bug ก็​ยิ่ง​ถูก​จับ​ได้​ง่าย เช่น​เดียว​กับ​ที่​คำ​ตอบ​ผิด​ถูก​แก้ไข​เร็ว
  • Pair Programming — การ​มี​คู่คิด​ตลอด​เวลา​ช่วย​ลด​การ​เงียบ​ใส่​คำถาม เพราะ​มี​คน​พร้อม​โต้แย้ง​ทันที​ที่​เห็น​แนวทาง​ที่​น่า​สงสัย
  • Collective Code Ownership — วัฒนธรรม​ที่​ทุก​คน​กล้า​แก้ code ของ​กัน​และ​กัน เป็น​เงื่อนไข​ที่​ทำให้​ปรากฏการณ์​แบบ Cunningham’s Law เกิด​ขึ้น​ได้​ใน​ทีม​พัฒนา