กรณี Gettier ในวิศวกรรมซอฟต์แวร์ (2019)
(jsomers.net)- บทความ 3 หน้าในปี 1963 ของ Edmund Gettier สั่นคลอนฉันทามติที่มองว่าความรู้คือ ความเชื่อที่เป็นจริงและมีเหตุผลรองรับ และบทความนี้เชื่อมโยงปัญหานั้นเข้ากับความเข้าใจผิดในการดีบักซอฟต์แวร์
- กรณี Gettier หมายถึง สถานการณ์ที่ยากจะพูดได้ว่ารู้จริง แม้ความเชื่อนั้นจะมีเหตุผลจากหลักฐานและเป็นจริงในทางข้อเท็จจริง แต่เหตุผลที่ทำให้มันเป็นจริงกลับต่างจากหลักฐานที่ใช้รองรับ
- ในเว็บแอป หลัง deploy pull request เกี่ยวกับโฟกัสของช่องค้นหาไม่นาน autofocus ก็เสีย ทำให้ดูเหมือนการเปลี่ยนแปลงนั้นเป็นสาเหตุ แต่สาเหตุจริงคือการเปลี่ยนวิธี bind อีเวนต์ DOM ระดับ root ของเฟรมเวิร์ก
- ปัญหาแจ้งเตือนอีเมลก็เช่นกัน การเปลี่ยนโค้ดดูเหมือนเป็นบั๊ก แต่สาเหตุโดยตรงคือ อีเมลเซอร์วิสล่ม ที่เกิดขึ้นเกือบพร้อมกัน
- การตั้งชื่อให้สถานการณ์แบบนี้ช่วยให้สงสัยสมมติฐานอย่าง cache, branch, และ code path มากขึ้น และตัดสินสาเหตุของปัญหาซอฟต์แวร์ที่ซับซ้อนและเกิดชั่วคราวได้อย่างระมัดระวังขึ้น
ปัญหา Gettier และเงื่อนไขของความรู้
- Edmund Gettier ตีพิมพ์ บทความ ความยาว 3 หน้าในวารสาร Analysis เมื่อปี 1963 และบทความนี้กลายเป็นงานคลาสสิกในสาขาปรัชญา
- หลังยุคเรืองปัญญา ความรู้มักถูกนิยามว่าเป็น ความเชื่อที่เป็นจริงและมีเหตุผลรองรับ
- มีเหตุผลรองรับ: มาจากหลักฐาน
- เป็นจริง: เราไม่สามารถพูดได้ว่า “รู้” สิ่งที่เป็นเท็จ
- ความเชื่อ: ประพจน์ในหัว
- Gettier ตั้งคำถามว่า “ความเชื่อที่เป็นจริงและมีเหตุผลรองรับคือความรู้หรือไม่?” และนำเสนอตัวอย่างที่ไม่เป็นเช่นนั้น
- ตัวอย่างเหล่านี้ภายหลังถูกเรียกว่า Gettier cases และก่อให้เกิดวรรณกรรมถกเถียงเฉพาะทางขึ้นมา
ตัวอย่างวัวในทุ่ง
- คนหนึ่งคิดว่าเห็นวัวอยู่ไกล ๆ ในทุ่ง แต่สิ่งที่เห็นจริงคือ หุ่นจำลองวัว ที่ทำจากเปเปอร์มาเช่
- แต่ด้านหลังหุ่นจำลองวัวนั้นมีวัวจริงอยู่
- ในกรณีนี้ ความเชื่อว่า “มีวัวอยู่ในทุ่ง” ตรงตามเงื่อนไขทั้งสามข้อ
- เชื่อว่ามีวัวอยู่ในทุ่ง
- มีเหตุผลรองรับความเชื่อ เพราะเห็นบางสิ่งที่ดูเหมือนวัว
- มีวัวอยู่ในทุ่งจริง ๆ
- ถึงอย่างนั้นก็ยังพูดยากว่าคนนั้นรู้ข้อเท็จจริงว่ามีวัวอยู่ในทุ่ง
- เพราะเหตุผลที่ทำให้ความเชื่อนั้นเป็นจริงไม่ใช่วัตถุที่คนนั้นเห็น แต่เป็นวัวจริงที่บังเอิญอยู่ข้างหลัง
“gettier” ที่ใช้ใน Genius
- CTO ของ Genius เรียนปรัชญาตอนปริญญาตรี และสนใจกรณี Gettier มาก
- ที่ Genius สถานการณ์แบบนี้ถูกเรียกสั้น ๆ ว่า gettier และใช้เป็นคำอธิบายความเข้าใจผิดที่เจอบ่อยระหว่างเขียนโปรแกรม
- เมื่อมีชื่อเรียกแล้ว ก็จะเริ่มเห็นสถานการณ์คล้าย ๆ กันบ่อยขึ้น
กรณีเว็บแอปที่ autofocus เสีย
- เว็บแอปพลิเคชันหนึ่งใช้ เฟรมเวิร์กฝั่งไคลเอนต์ ที่พัฒนาภายในบริษัท
- ในแอปเสิร์ชเอนจินขนาดเล็ก มีการทำ pull request ให้เมื่อกด Enter ในช่องค้นหาแล้ว input field จะเสียโฟกัส
- เป็นการเปลี่ยนแปลงเพื่อให้ผู้ใช้ที่นำทางเว็บด้วยคีย์บอร์ดไม่ต้องออกจากกล่อง input ด้วยตนเอง
- หลัง deploy เวอร์ชันใหม่ พบว่าพฤติกรรมที่ช่องค้นหาควรถูกโฟกัสอัตโนมัติเมื่อโหลดหน้าเว็บเสียไป
- แม้จะแก้โค้ดหลายจุด คอมเมนต์บางบรรทัดออก และ hard refresh เบราว์เซอร์ พฤติกรรม autofocus ก็ยังไม่กลับมา
- สาเหตุจริงคือเพื่อนร่วมงานเปลี่ยนเฟรมเวิร์กเอง ทำให้วิธีที่อีเวนต์บางตัวถูก bind กับ องค์ประกอบ DOM ระดับ root เปลี่ยนไป
- ผลคือ attribute
"autofocus"เสีย - ระหว่างกระบวนการ routine rebase มีการเปลี่ยนแปลงอื่นที่ไม่เกี่ยวข้องติดเข้ามาด้วย
- เมื่อตอน deploy pull request เล็ก ๆ บั๊กที่ไม่เกี่ยวข้องกับการเปลี่ยนของตนเองจึงถูก deploy ไปพร้อมกัน
- ผลคือ attribute
- เพราะมีการแก้โค้ดเกี่ยวกับโฟกัสของช่องค้นหา จึงดูเหมือนว่า pull request นั้นเป็นต้นเหตุของปัญหา
- ความเชื่อที่ว่า “pull request ที่เพิ่ง deploy ทำให้ autofocus ของ production site เสีย” มีเหตุผลรองรับ และหลัง deploy มันก็เสียจริง แต่สาเหตุที่ทำให้เสียจริง ๆ เป็นการเปลี่ยนแปลงคนละอย่างโดยสิ้นเชิง
- สิ่งนี้ควรถูกจับได้ด้วยการทดสอบ และมีพฤติกรรมแปลก ๆ ให้เห็นอยู่แล้ว แต่ข้อเท็จจริงที่ว่าการสร้างซอฟต์แวร์เป็นเรื่องยากก็ยังคงอยู่
กรณีแจ้งเตือนอีเมลหยุดทำงาน
- ผู้ใช้คนหนึ่งรายงานว่าข้อความภายในไซต์ไม่สร้างการแจ้งเตือนทางอีเมลอีกต่อไป
- โค้ดประมวลผลอีเมลของเว็บแอปเพิ่งมีการเปลี่ยนแปลง และการเปลี่ยนแปลงนั้นดูเหมือนบั๊กที่ทำให้เกิดพฤติกรรมผิดพลาด
- แต่เกือบในเวลาเดียวกัน อีเมลเซอร์วิส ที่โค้ดนั้นพึ่งพาอยู่ก็ล่มลง
- ความเชื่อว่าการเปลี่ยนโค้ดเป็นสาเหตุให้การส่งอีเมลหยุดชะงักมีเหตุผลรองรับ และผลลัพธ์ก็เป็นจริง แต่สาเหตุโดยตรงคือ service outage
คำศัพท์ที่มีประโยชน์สำหรับโปรแกรมเมอร์
- นักปรัชญาอาจมองว่าตัวอย่างเหล่านี้ไม่ใช่กรณี Gettier อย่างเคร่งครัด และ gettier ของแท้พบได้ยาก
- ถึงอย่างนั้น แนวคิดนี้ก็ถูกใช้ที่ Genius เหมือนเป็นคำศัพท์ และยังคงมีประโยชน์ต่อมา
- หนึ่งในสถานการณ์ยุ่งยากที่โปรแกรมเมอร์พบคือปัญหามีสาเหตุที่เป็นไปได้หลายอย่าง และแม้จะมีเหตุผลเพียงพอให้เชื่อหนึ่งในนั้น แต่สาเหตุจริงกลับซ่อนอยู่ที่อื่น
- การตั้งชื่อให้สถานการณ์แบบนี้ทำให้ระมัดระวังมากขึ้น
- ตรวจสอบว่ายังไม่ได้ล้าง cache หรือไม่
- สงสัยว่ากำลังทำงานอยู่บน branch ผิดหรือเปล่า
- ตรวจดูว่าจริง ๆ แล้วกำลังวิ่งผ่าน code path นั้นอยู่หรือไม่
- ซอฟต์แวร์เป็นสิ่งที่ซับซ้อนและมีเหตุการณ์ชั่วคราวมากมาย นักพัฒนาจึงเจอ ปัญหาเชิงญาณวิทยา แปลก ๆ บ่อยกว่าคนอื่น
- หากแยกความแตกต่างระหว่างวัวในทุ่งกับ gettier ได้ ก็อาจเข้าใกล้การตัดสินใจที่ดีขึ้นในฐานะนักพัฒนา
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เป็นทวีตที่เกี่ยวข้องกัน แต่ตอนนี้ดูเหมือนจะถูกลบไปแล้ว:
กรณีในบทความจริง ๆ แล้วแทบไม่ได้สร้างประเด็นที่น่าสนใจเท่าไร ผู้สังเกตการณ์ที่เห็นเมฆดำแล้ว “รู้” ว่าเกิดไฟไหม้นั้นก็แค่ผิด เมฆนั้นอาจเป็นฝูงแมลงหรืออาจเป็นไฟไหม้ก็ได้ จึงยังขาดหลักฐานเพิ่มเติมที่จะคลี่คลายความกำกวม
แสงระยิบระยับที่นักเดินทางในทะเลทรายมองเห็นไกล ๆ ก็อาจเป็นโอเอซิสหรืออาจเป็นภาพลวงตาก็ได้ ดังนั้นถ้าจะเรียกว่าเป็นความรู้ที่มีเหตุผลรองรับ ก็ต้องมีหลักฐานมากกว่านี้
ผมสงสัยว่าการใส่ พลังในการทำนาย เข้าไปในเงื่อนไขของ “ความรู้ที่เป็นจริงและมีเหตุผลรองรับ” จะสมเหตุสมผลไหม ถ้าเป็นเช่นนั้น ทั้งสองตัวอย่างนี้รวมถึงตัวอย่างนาฬิกาหยุดเดินของ Russell ก็จะรับมือได้ หากคุณคิดว่ารู้บางสิ่ง แต่ใช้ความรู้นั้นทำนายสิ่งที่ถูกต้องไม่ได้ ก็แปลว่าไม่ได้รู้จริง ตัวอย่างฉากหลัง Zoom อาจผ่านเกณฑ์นี้ได้ หากไม่มีการหลอกลวงโดยเจตนา
a) ไม่มีใครคิดว่าฉากหลัง Zoom จำเป็นต้องแทนฉากหลังจริง ดังนั้นจึงไม่เห็นว่ามีเหตุผลรองรับพอที่จะยืนยันข้อสรุปนั้น
b) ถ้าฉากหลังสอดคล้องกับฉากหลังจริงแบบ 1:1 ต่อให้คิดว่ามันเป็นฉากหลังจริงด้วยเหตุผลอื่น ประพจน์นั้นก็ยังเป็นจริง จึงทำให้มี ความเชื่อที่เป็นจริงและมีเหตุผลรองรับ
ตัวอย่างเช่น ผู้ชมคิดว่าตนไม่รู้ แต่ความรู้ของผมที่ตัดสินว่าในความเป็นจริงเขารู้นั้นก็มีเหตุผลรองรับอยู่ ในที่นี้ ความรู้ที่ว่าผมเปิดฉากหลังปลอมไว้คือเหตุผลรองรับนั้น
ในทางกลับกัน ก็สร้างสถานการณ์ที่ผมแอบปิดฉากหลังของคุณได้ง่าย ๆ เช่นกัน แบบนั้นคู่สนทนาบน Zoom ก็จะมีความรู้ แต่คุณจะไม่มี ถึงอย่างนั้น คราวนี้คุณก็จะคิดว่าอีกฝ่ายไม่รู้อยู่ดี
ตอนเรียนมหาวิทยาลัย ผมเรียนเอกปรัชญา และตอนนั้นการจับผิดเชิงอรรถศาสตร์เกี่ยวกับ ปัญหา Gettier กำลังเป็นที่นิยม
ผมเชื่อมาตลอดว่าเหตุผลที่ Gettier โด่งดังขึ้นมาได้ก็เพราะบทความของเขามีแค่สามหน้า จึงเป็นบทความเดียวที่นักวิชาการอ่านจนจบจริง ๆ
ผมไม่เคยคิดว่าปัญหานี้มีอะไรลึกซึ้งหรือโดดเด่นเป็นพิเศษ โดยแก่นแล้วมันคือการถกเถียงเรื่องนิยามของความรู้ และเรื่องแบบนั้นถกกันได้ตลอดกาล อันที่จริงพวกเขาก็ยังคงเขียนบทความยาว 30 หน้ากันคนละชิ้น แล้วต่อสู้กันต่อไปเรื่อง นิยามของความรู้
ผมคิดว่านักปรัชญาระดับสูงสุดโดยทั่วไปเข้าใจเรื่องนี้ แต่พวกนักปรัชญาแบบนั่งคิดจากเก้าอี้ หรือแม้แต่บางคนที่ผ่านการฝึกเชิงรูปแบบและมีคุณวุฒิด้วยซ้ำ กลับเข้าใจผิดว่ามีนิยามของคำว่า “ความรู้” อยู่หนึ่งเดียว และการถกเถียงเรื่องนิยามนั้นเป็นกิจกรรมที่มีความหมาย
ราวกับว่าถ้าเราเพียงตกลงกันได้ว่า “ความรู้” คืออะไร ก็จะเกิดผลดีบางอย่างต่อจักรวาล พวกเขามองเหมือนคำคำนั้นสำคัญในตัวเองและมีตัวตนเชิงภววิทยาจริง ๆ และคิดว่าถ้าค้นพบได้ว่า “ความรู้คืออะไรกันแน่” ก็ถือว่าบรรลุอะไรบางอย่างแล้ว
แต่ความจริงไม่ใช่อย่างนั้น โดยเฉพาะส่วนที่ว่าการกำหนดนิยามนั้นให้แน่ชัดจะก่อให้เกิดผลกระทบที่มีความหมาย ยิ่งไม่ใช่เข้าไปใหญ่ ส่วนจะเป็นประโยชน์หรือไม่ก็เป็นอีกเรื่องหนึ่ง
ความรู้มีได้หลายนิยาม มีมุมมองหนึ่งที่ถือว่าคนเราจะรู้บางสิ่งได้ก็ต่อเมื่อมั่นใจ 100% และในเชิงนามธรรมก็ต้อง “ถูกต้อง” ด้วย เหตุที่เรียกว่า “เชิงนามธรรม” ก็เพราะตั้งแต่แรกเราไม่มีคำพยากรณ์ที่จะบอกได้ว่าเรื่องอย่าง “มีวัวอยู่ในทุ่งหรือไม่?” นั้นถูกหรือผิด จึงทำให้เป็นรูปธรรมไม่ได้
มุมมองนี้สุดท้ายจะไปอยู่ในตำแหน่งแบบเดการ์ต ซึ่งแทบจะมีสิ่งเดียวที่ “รู้” ได้คือข้อเท็จจริงว่าฉันมีอยู่จริง เป็นนิยามที่น่าสนใจและสำคัญในเชิงปรัชญาและประวัติศาสตร์ก็จริง แต่ก็ชนขอบเขตจำกัดอย่างรวดเร็ว แค่ “ฉันมีอยู่จริง” อย่างเดียวสร้างตรรกะต่อไปได้ไม่มาก ต้องมีวัตถุดิบมากกว่านั้น
ถ้าใช้มุมมองอื่นอย่าง ความรู้เชิงความน่าจะเป็น เราก็พูดได้ว่า “ฉันเห็นวัวอยู่ในทุ่ง ดังนั้นฉันรู้ว่ามีวัวอยู่ที่นั่น” ความหมายตรงนี้คือฉันมีเหตุผลเชิงอุปนัยเพียงพอที่จะเชื่อว่าสิ่งที่เห็นไม่ใช่วัวที่ทำจากเยื่อกระดาษ แต่เป็นวัวจริง ๆ เพราะความน่าจะเป็นที่ใครสักคนจะเอาวัวเยื่อกระดาษไปตั้งไว้ในทุ่งนั้นต่ำในเชิงอุปนัย
ความรู้แบบนี้อาจผิดได้ นี่ไม่ใช่แค่ปัญหาปรัชญาทฤษฎีล้วน ๆ แต่ในชีวิตจริงผมก็เคยเห็นของเล่นเล่นตลกถูกวางไว้ในทุ่ง และเคยถูกหลอกด้วยหุ่นไล่กาหรือของประดับสวนที่ทำมาให้ดูเหมือนคนจากระยะไกลจนหลงเชื่อในแวบแรกมาแล้ว นี่เป็นคำถามจริง
ถึงอย่างนั้น แม้ในสถานการณ์ที่คำพยากรณ์แห่งความจริงจะบอกว่า “ผิด” เราก็ยังสามารถใช้นิยามของความรู้ที่ถือว่าฉันมี “ความรู้” ว่ามีคนอยู่ตรงนั้นได้ เราสามารถสร้างอะไรบางอย่างบนแนวคิดความรู้ที่ “ลู่เข้า” สู่ความจริง แต่ไม่จำเป็นต้องไปถึงเสมอ มันซับซ้อนกว่า แต่มีประโยชน์กว่ามาก
ตัวอย่างสองข้อนี้ก็ยังไม่ได้ครอบคลุมนิยามของความรู้ที่น่าสนใจและมีประโยชน์ทั้งหมดด้วยซ้ำ ข้อหลังนั้นใกล้เคียงกับกลุ่มของนิยามมากกว่าจะเป็นนิยามเดียว
ขอย้ำอีกครั้งว่าผมไม่ได้ตั้งใจจะตำหนินักปรัชญาที่ได้รับการฝึกฝนมาดีที่สุดโดยทั่วไปแบบนี้ เพียงแต่นักปรัชญาจำนวนมากมีแนวโน้มจะวนเวียนอยู่กับข้อเท็จจริงที่ว่า “เราเข้าถึงคำพยากรณ์แห่งสัจธรรมสัมบูรณ์ไม่ได้” นานเกินไป
ใช่ นั่นเป็นข้อเท็จจริงที่ต้องรับมือ ปัญหาอย่าง “ฉันคิด ฉันจึงมีอยู่ แล้วนอกเหนือจากนั้นเราสรุปอะไรได้อย่างเคร่งครัด 100% บ้าง?” ก็เช่นกัน แต่การจับเรื่องนั้นมาทำซ้ำโดยเปลี่ยนรูปไปเรื่อย ๆ ไม่ได้สร้างผลผลิตอะไร
ไม่มีคำพยากรณ์แบบนั้นอยู่ ต้องยอมรับข้อเท็จจริงนี้แล้วก้าวต่อไป การนิยามมันขึ้นมาไม่ได้ทำให้มันเกิดขึ้น การปรารถนาไม่ได้ทำให้มันเกิดขึ้น การเทหมึกลงบนกระดาษแล้วบิดตรรกะให้พันกันเหมือนเพรตเซล จากนั้นประกาศว่ามันจำเป็นอย่างไรก็ไม่ทำให้มันเกิดขึ้น
ถ้าพระเจ้ามีอยู่จริง โดยส่วนตัวผมเอนเอียงไปทาง “มี” แต่ไม่ว่าจะอย่างไร พระเจ้าก็ย่อมไม่ใช่ฐานข้อมูลที่เราสามารถ query ได้ทุกครั้งที่ถามว่า “ตรงนั้นมีวัวไหม?” อย่างแน่นอน
ถ้าออกจากจุดนั้นไม่ได้ ต่อให้เติมคำพูดเข้าไปมากแค่ไหน ก็จะติดอยู่ในสนามเด็กเล่นเล็ก ๆ แห่งหนึ่ง บางทีนั่นอาจเป็นทั้งหมดที่พวกเขาต้องการและเต็มใจจะทำก็ได้ แต่ก็ยังเป็นสนามเด็กเล่นเล็ก ๆ อยู่ดี
ในปรัชญา เรา “ผิด” จริง ๆ ไม่ได้ เพราะไม่มีการพิสูจน์ว่าไอเดียผิดแล้วโยนทิ้ง ถ้าทำแบบนั้นได้ เราก็คงเรียกมันว่า “วิทยาศาสตร์” ไปแล้ว
ดังนั้นปรัชญาจึงกลายเป็นก้อนเนื้อที่สะสมคำว่า “คนนั้นพูดแบบนี้ คนนี้พูดแบบนั้น” ไปเรื่อย ๆ เมื่อถามคำถามเชิงปรัชญา คำตอบก็จะเป็น “Aristotle พูดแบบนี้, Kant พูดแบบนั้น, Descartes พูดแบบนี้, Searle พูดแบบนั้น”
ถ้าถามว่า “แล้วคำตอบคืออะไรล่ะ?” ก็จะได้คำตอบว่า “ก็เพิ่งบอกไปไง” ดังนั้นถ้าอยากถกเถียงเรื่องอะไรสักอย่างจริง ๆ ก็ต้องไปสู้กันเรื่องนิยาม
ความรู้และความจริงเป็น แนวคิดแบบรวมศูนย์ ผมชอบ โมเดล ที่ไม่มีปัญหาแบบนั้นมากกว่า
โมเดลทุกอย่างไม่สมบูรณ์และเป็นสิ่งชั่วคราว และกระบวนการเดียวกันอาจมีได้หลายโมเดล ความรู้และความจริงมักนำไปสู่ข้อถกเถียงไม่รู้จบได้ง่าย แต่โมเดลทำให้เราเข้าใจข้อจำกัดได้ดีกว่า และไม่มีใครอ้างว่าบรรลุความสมบูรณ์แบบ ในการเขียนโปรแกรมเราเรียกสิ่งนี้ว่า abstraction และเราก็รู้ด้วยว่ามันมีรอยรั่วเสมอ
ผมคิดว่าปัญหาทางปรัชญาจำนวนมากเกิดจากความปรารถนาจะอธิบายสิ่งต่าง ๆ แบบรวมศูนย์ ตัวอย่างเช่น สำนึกรู้ ความเข้าใจ และปัญญา
ผมชอบคำว่า “การสำรวจค้นหา” มากกว่า การสำรวจค้นหานั้นกระจายศูนย์ และครอบคลุมทั้งปริมณฑลส่วนบุคคล ระหว่างบุคคล และสังคม การสำรวจค้นหากำหนดพื้นที่ค้นหา แต่เมื่อเราพูดถึงสำนึกรู้ มันกลับเงียบงันต่อสภาพแวดล้อมและผู้อื่น
การสำรวจค้นหาทำสิ่งที่สำนึกรู้ ความเข้าใจ และปัญญาพยายามจะทำ ความสามารถทางจิตทั้งหมด เช่น ความใส่ใจ ความทรงจำ จินตนาการ และการวางแผน ล้วนเป็นรูปแบบหนึ่งของการสำรวจค้นหา การเรียนรู้คือการสำรวจค้นหาเพื่อหาตัวแทนเชิงแทนค่า วิทยาศาสตร์ก็เป็นการสำรวจค้นหา ตลาดก็เป็นการสำรวจค้นหา และวิวัฒนาการของ DNA กับการพับตัวของโปรตีนก็เป็นการสำรวจค้นหา
มันเป็นสากลกว่าและเป็นวิทยาศาสตร์กว่า การสำรวจค้นหาขจัดความลี้ลับไปได้มาก และไม่ทำพลาดด้วยการรวมศูนย์ตัวเองไว้ภายในมนุษย์คนเดียว
ปัญหาทางปรัชญาที่ลึกซึ้งเกิดขึ้นเพราะมีสิ่งที่เป็นปริศนาอย่างแท้จริงเกี่ยวกับการดำรงอยู่ การเปลี่ยนคำเรียกไม่ได้ทำให้ปริศนานั้นหายไป
รุ่นพี่ที่ทำงานด้วยกันตอนฝึกงานครั้งแรกเรียกปัญหาประเภทนี้ว่า กฎแห่งความล้มเหลวโดยบังเอิญ และผมก็จำขึ้นใจ
เวลาดีบัก ผมจะลองสิ่งที่ดูชัดเจนหลายอย่างเพื่อยืนยันความจริง เช่น ย้อนการเปลี่ยนแปลงทั้งหมดของตัวเองกลับไป แล้วดูว่าบั๊กหายหรือไม่
ถ้าตอนนั้นก็ยังไม่ทำงาน ก็ถือว่ามีปัจจัยภายนอกเปลี่ยนไป เช่น ฮาร์ดแวร์ บริการแบ็กเอนด์ หรือการสั่นไหวของโลก ถ้าทำงานได้ ก็ทำ binary search บนแกนเวลาเพื่อหาตำแหน่ง
สำหรับบั๊กยาก ๆ ที่ท้าทายตรรกะ วิธีนี้ใช้ได้ผล 99% เหมือนกับเริ่มจาก สถานะปกติที่รู้แน่ แทนที่จะไล่ดู log, blame และ diff ไฟล์ไม่รู้จบ
แน่นอนว่าบางกรณีก็ทำไม่ได้ แต่กับโค้ดที่รอบ build·install·test ค่อนข้างเร็ว วิธีนี้ได้ผลดีจริง ๆ
ผมถึงขั้นเขียนเทสต์เพื่อดูว่าพบ bug กรณีขอบของ compiler หรือปัญหาในโค้ดไลบรารีหรือไม่ เกือบจะเปิด issue ในไลบรารีแล้ว ก่อนที่สาเหตุจริงจะเผยออกมา
ความจริงคือบั๊กเล็ก ๆ ในการตั้งค่าเทสต์ รวมกับความผิดพลาดที่นิยาม hardware interface ของโปรโตคอลเก่าเป็น HREG แทนที่จะเป็น IREG
มันบังเอิญทำงานได้ดีอยู่พักหนึ่ง แล้วด้วยเหตุผลอย่าง stack corruption หรือ pointer แปลก ๆ ก็สร้าง callback loop ภายในไลบรารีขึ้นมา เป็นบั๊กที่ทำให้ผมเริ่มสงสัยจริง ๆ ว่าตัวเองยังสติครบไหม
“ผมนั่งอยู่ในสวนกับนักปรัชญา เขาชี้ไปที่ต้นไม้ใกล้ ๆ แล้วพูดซ้ำ ๆ ว่า ‘ผมรู้ว่านั่นคือต้นไม้’ เมื่อมีคนอีกคนเข้ามาและได้ยินคำนี้ ผมจึงบอกเขาว่า ‘คนนี้ไม่ได้บ้าครับ เราแค่กำลังทำปรัชญากันอยู่เท่านั้น’”
― Ludwig Wittgenstein
ไม่ค่อยเข้าใจว่ามันเป็นปัญหาใหญ่ตรงไหน การมีเหตุผลรองรับเป็นสเกลตั้งแต่ 0 ถึง 1 และถ้าเป็น 1 ก็เท่ากับอยู่ในสภาวะรู้แจ้งทุกสิ่ง
เราอยู่ในโลกที่ซับซ้อน และไม่มีใครมีเวลาเป็นพระเจ้า ดังนั้นก็แค่ยอมรับความเชื่อที่จริงและมีเหตุผลรองรับระดับ 0.5 แล้วไปต่อก็พอ
ส่วนเรื่องความเชื่อนั้น อาจพูดได้ว่า “ถ้าคุณเชื่อ มันก็ไม่ใช่การโกหก”
ส่วนเรื่องความจริงก็ลองสมมติว่ามีวัวอยู่จริง ๆ แต่ก่อนที่คุณจะเรียกใครสักคนมาตรวจสอบความเชื่อที่จริงและมีเหตุผลรองรับนั้น มนุษย์ต่างดาวก็มาลักพาวัวไปและทิ้งวงปริศนาในทุ่งไว้ ตอนนี้สิ่งที่ทุกคนเห็นมีแต่รูปวัวที่ทำจากเปเปอร์มาเช่ คุณเลยดูเหมือนคนโง่ แต่จริง ๆ แล้วคุณเคยมีความเชื่อที่จริงและมีเหตุผลรองรับที่เป็นจริงอยู่ นี่คือ ความเชื่อที่จริงและมีเหตุผลรองรับแบบชเรอดิงเงอร์
ถ้าคุณโน้มน้าวคนอื่นไม่ได้ มันสำคัญจริงหรือ? กลับกัน ถ้าความรู้นั้นผิด แต่ทุกคนเห็นพ้องว่าจริง มันสำคัญหรือไม่?
ความเชื่อที่จริงและมีเหตุผลรองรับมีอยู่ก็เพื่อเผยให้เห็นสมมติฐานที่ผิดเท่านั้น คล้ายกับการอยู่ฝั่งที่ทำนายผิดของตัวทำนายการแตกแขนง ต่อให้มีความเชื่อที่จริงและมีเหตุผลรองรับระดับ 0.9 แต่ถ้าได้คำตอบที่ถูกด้วยโอกาส 0.1 แล้วไม่อัปเดตสมมติฐาน นั่นแหละคือปัญหา รูปปั้นสักตัวในทุ่งไม่ใช่เรื่องใหญ่
ยกเว้นว่ากำลังสืบคดีฆาตกรรมอยู่และคุณคือ Sherlock Holmes เขาเป็นตัวทำนายการแตกแขนงที่ทรงพลังจริง ๆ
ถ้าใส่หุ่นยนต์เข้าไปในซากวัวแล้วไม่มีใครแยกความแตกต่างได้ มันยังเป็นวัวอยู่ไหม? ถ้าพบลูกผสมวัว-ม้าอันน่าสยดสยอง ควรเรียกมันว่าอะไร? ถ้าวัวตัวนั้นมีการกลายพันธุ์เฉพาะตัวที่วัวตัวอื่นไม่มีเลย มันยังเข้ากับต้นแบบของความเป็นวัวหรือไม่?
เช่น ถ้ามันผลิตน้ำนมไม่ได้ล่ะ? ถ้ามันถูกสร้างขึ้นในห้องแล็บล่ะ? คุณสมบัติอะไรบ้างที่จำเป็นต่อการสืบทอด ความเป็นวัว?
นี่ก็เป็นความคลุมเครือที่ภาษาปกคลุมไว้เช่นกัน เช่น “cow” ยังถูกใช้เป็นคำดูหมิ่นที่ไม่ได้จำเป็นต้องหมายถึงสัตว์วงศ์วัวด้วย
และยังมีปัญหาเรื่อง “ความรู้มีขอบเขตจำกัดหรือไม่จำกัด” ด้วย สักวันหนึ่งจะมีจุดที่เราอธิบายทุกอย่างได้ วิทยาศาสตร์สิ้นสุดลง และเราพักผ่อนบนความสำเร็จได้หรือไม่? แล้วหลังจากนั้นจะเกิดอะไรขึ้น? เราจะใช้เวลาอธิบายสมมติฐานที่ไม่มีอยู่จริงหรือ? คณิตศาสตร์บริสุทธิ์เชิงทฤษฎี? หรือแม้แต่นั่นก็อาจจบลงได้เช่นกัน?
https://www.wikiwand.com/en/articles/Karl_Popper
ควรอ่านหากต้องการดูปัญหาอุปนัยและปัญหาเกณฑ์แบ่งเขต: https://www.wikiwand.com/en/articles/Falsifiability
สรุปคือ เพราะเราไม่ได้ “รู้แจ้งทุกสิ่ง” ในทางปฏิบัติเราจึงไม่มีวันรู้สิ่งใดได้จริง ๆ
แต่เมื่อถูกขอให้อธิบายให้ชัดเจน ผู้คนมักพบว่าคำอธิบายของตนเข้ากันไม่ได้กับคำอธิบายของคนอื่น พอขุดลึกลงไปอีก คำอธิบายนั้นก็ยืนไม่อยู่เลย นั่นจึงทำให้การทดลองทางความคิดบางอย่างของกรีกโบราณดูเหมือนปริศนาเซน
คุณสามารถใช้ชีวิตได้แม้ไม่ต้องหาคำตอบที่เข้มงวด กิจกรรมส่วนใหญ่ของมนุษย์ที่เกินกว่าการเอาชีวิตรอดสามารถจัดอยู่ในหมวด “ไม่เห็นว่ามันเป็นปัญหาใหญ่ตรงไหน” ได้
การพูดแบบนั้นกับคำถามเรื่องความรู้แล้วเขียนต่ออีก 200 คำ ไม่ใช่การปฏิเสธที่จะมีส่วนร่วม แต่เป็นการต่อเติมคำตอบที่ดีพอให้เข้ากับความท้าทายใหม่ แล้วเดินหน้าต่อไป
นั่นแหละคือเหตุผลที่คำถามแบบนี้ยาก และทำไมบางคนจึงถูกดึงดูดให้สำรวจคำตอบ
กรณี Capgras Delusion ของ Ramachandran:
https://www.youtube.com/watch?v=3xczrDAGfT4
คำถามที่ว่า “กลับกัน ถ้าความรู้นั้นผิด แต่ทุกคนเห็นพ้องว่าจริง มันสำคัญหรือไม่?” เป็นตัวอย่างของ ความเป็นจริงจากฉันทามติ เป็น intuition pump ที่ยืมมาจากที่ไหนสักแห่ง
ความเป็นจริงจากฉันทามติยังได้รับการเคารพแม้ในโดเมนควอนตัม:
https://youtu.be/vSnq5Hs3_wI?t=753
อนุภาคเดี่ยวยังคงอยู่ในสภาวะซ้อนทับเชิงควอนตัม แต่ตำแหน่งสัมพัทธ์สร้างฉันทามติร่วมกันภายในเครือข่ายการพัวพัน ฉันทามตินี้นิยามโครงสร้างของวัตถุระดับมหภาค และทำให้มันดูเหมือนถูกกำหนดไว้อย่างชัดเจนสำหรับผู้สังเกต รวมถึงแมวของ Schrödinger ด้วย
กรณีเก็ตเทียร์บอกประเด็นที่น่าสนใจเกี่ยวกับ ความจริงและความรู้
ข้ออ้างเชิงข้อเท็จจริงควรวาดภาพเหตุการณ์ที่เป็นสาเหตุที่มีผลทำให้ข้ออ้างนั้นเกิดขึ้น คำบรรยายคือความสัมพันธ์ของการวาดภาพ หรือการสอดคล้องกันระหว่างคำพูดกับเหตุการณ์ที่เป็นไปได้ เช่น วัวในทุ่ง
ความรู้เกิดขึ้นเมื่อเหตุการณ์ที่ถูกบรรยายเป็นสาเหตุที่มีผลของความเชื่อ วัวเปเปอร์มาเช่เป็นสาเหตุของความเชื่อ ไม่ใช่วัวจริง ดังนั้นสัญชาตญาณของเราจึงไม่มองว่านี่เป็นความรู้ตามปกติ
ดังนั้นข้อความที่จริงต้องมีทั้ง ความสัมพันธ์เชิงสาเหตุ และความสัมพันธ์เชิงพรรณนากับบางสิ่งในโลก พูดอีกอย่างคือ ข้อความที่จริงอธิบายส่วนหนึ่งของประวัติเชิงสาเหตุของตัวมันเองโดยนัย
ในตรรกะแบบคลาสสิก ประพจน์อาจเป็นจริงในตัวมันเองได้แม้ไม่มีการพิสูจน์ แต่ในตรรกะแบบสัญชาตญาณนิยม ประพจน์จะเป็นจริงก็ต่อเมื่อมีการพิสูจน์ การพิสูจน์คือสาเหตุที่ทำให้ประพจน์นั้นเป็นจริง
ในตรรกะแบบสัญชาตญาณนิยม มันไม่ได้ง่ายเหมือน “มีวัวอยู่ในทุ่งหรือไม่มี” เพราะอย่างที่กล่าวไป ความรู้ว่า “มีวัวอยู่ในทุ่ง” ต้องการการพิสูจน์จึงจะเป็นจริง
จึงเกิดความละเอียดอ่อนมากมาย เช่น “ไม่ได้ไม่มีวัวอยู่ในทุ่ง” เป็นความรู้ที่อ่อนกว่า “มีวัวอยู่ในทุ่ง”
QED เป็นการพิสูจน์ตามธรรมเนียมการใช้คำ
ปัญหาเริ่มตั้งแต่ส่วนที่ว่า “การ ‘รู้’ สิ่งที่เป็นเท็จนั้นเป็นไปไม่ได้ ดังนั้นมันต้องเป็นจริง”
สำหรับชาวกรีกอาจฟังขึ้น แต่ในศตวรรษที่ 21 นั้นฟังไม่ขึ้นเลย เป็นที่ยอมรับกันทั่วไปว่าเราทุกคนใช้ชีวิตอยู่โดย “รู้” สิ่งที่เป็นเท็จ
กล่าวคือ สิ่งที่ผิดไม่ใช่ความรู้ แต่เป็นความเชื่อว่าตนมีความรู้
แน่นอนว่าในความหมายตามชีวิตประจำวัน สุดท้ายเราก็อาจพูดได้ว่าเรารู้สิ่งนั้น และอาจบอกได้ว่าการแยกแยะแบบนี้อย่างมากก็เป็นแค่การจับผิดถ้อยคำเกินเหตุ แต่ปรัชญาพร้อมจะผ่าเส้นผมให้ละเอียดเท่าที่เหตุผลจะผ่าได้
อาจเป็นเพราะมีความเชื่อพื้นฐานเกี่ยวกับธรรมชาติของความเป็นจริงต่างกัน หรือไม่ก็ใช้คำเดียวกันด้วยนิยามที่ต่างกัน
ดังนั้น ในความเป็นจริง เราไม่อาจรู้สิ่งที่จริง ๆ แล้วเป็นเท็จว่าเป็นจริงได้ ทำได้เพียงเชื่อว่าสิ่งที่จริง ๆ แล้วเป็นเท็จนั้นเป็นจริงเท่านั้น การอธิบายให้แม่นยำว่าเราเปลี่ยนจากความเชื่อไปเป็นความรู้ได้อย่างไร ก็คือญาณวิทยานั่นเอง
และในการถกเถียงเฉพาะบางเรื่องเกี่ยวกับหัวข้อหนึ่ง ๆ สำหรับผู้เข้าร่วมส่วนใหญ่ที่ไม่ได้นิ่งเงียบ สถานะว่า “ไม่รู้” ก็ดูแทบเป็นไปไม่ได้ในทางปฏิบัติ
ปัญหาคือคำว่า “รู้” นั้นถูกใช้แบกรับหลายความหมายเกินไป
การรู้ในมุมบุคคลที่หนึ่งคือความเชื่อ ในระดับหนึ่งก็เป็นเพียงศรัทธา เราเชื่อว่ากฎฟิสิกส์จะไม่เปลี่ยนไปในวันพรุ่งนี้ และเชื่อว่าเราจำได้ว่าเมื่อวานเคยมีอยู่
วิทยาศาสตร์พยายามตรวจสอบทุกอย่างอย่างเข้มงวด เพื่อผลักศรัทธานั้นให้เข้าใกล้ข้อเท็จจริง แต่เราไม่มีทางรู้ได้เลยว่าทำไมสิ่งใดจึงเป็นเช่นนั้น
“รู้” อีกแบบหนึ่งคือแนวคิดทำนองสัจธรรมสัมบูรณ์ และความเชื่อของใครบางคนบังเอิญตรงกับสิ่งนั้น ไม่ว่าความบังเอิญนั้นจะเป็นโชคล้วน ๆ หรือการสังเกตที่เฉียบคม หรือทั้งสองอย่างเหมือนกรณีในบทความก็ตาม
อันที่จริงมันใกล้เคียงกับสเปกตรัมมากกว่า และตัวสำนวนนี้เองก็เป็นคำที่ผมใช้แบกรับหลายความหมายเหมือนกัน อีกสำนวนที่ผมใช้บ่อยคือ “นี่เป็นปัญหาเชิงความน่าจะเป็น และในนี้ไม่มีอะไรที่เป็นสัมบูรณ์”
เรื่องนี้อาจเคยสั่นคลอนปรัชญาวิเคราะห์หรือสาขาย่อยของมัน แต่ในภาพรวมของปรัชญาแทบไม่รู้สึกถึงแรงสะเทือนเกินกว่านั้น
ปรัชญาวิเคราะห์ชอบจินตนาการว่าตัวเองเป็นปรัชญาที่แท้จริง แต่เรื่องนั้นไร้สาระ มันก็เป็นเพียงสำนักหนึ่งที่มั่นใจเกินไปและปกป้องอาณาเขตอย่างก้าวร้าว แถมยังผูกขาดทรัพยากร
ทั้งที่นักศึกษาจำนวนมากโหยหาความรุ่มรวยและความกว้างขวางของสิ่งที่ปัจจุบันเรียกว่าปรัชญาหลังคานท์ ซึ่งใกล้เคียงกับปรัชญาภาคพื้นทวีปหรือปรัชญายุโรปสมัยใหม่ในอดีต