- ประเด็นกังวลของ Jonathan Blow ที่ว่า “abstraction ทำให้ความสามารถในการบำรุงรักษาซอฟต์แวร์ที่จำเป็นอ่อนแอลง” นั้นมีน้ำหนักในแง่ของ การถ่ายทอดความรู้ แต่ตัวอย่างจำนวนมากที่เขายกมาประกอบกลับตีความประวัติศาสตร์และบริบทผิดไป
- ข้อถกเถียงเรื่อง “five nines”, ซอฟต์แวร์ที่แข็งแกร่ง, การชะงักงันของความก้าวหน้าทางเทคโนโลยี และผลิตภาพที่ลดลง มักไม่แยกแยะระหว่าง อุปกรณ์ผู้บริโภคกับระบบความพร้อมใช้งานสูง หรือพึ่งพาตัวอย่างที่เลือกมาเป็นบางส่วน
- ความกังวลเรื่องการสูญเสียความรู้ระดับต่ำมีเหตุผลอยู่บ้าง แต่ C, assembly, Rust, การพอร์ตระบบปฏิบัติการ, การศึกษาด้านคอมไพเลอร์ และกิจกรรมโอเพนซอร์สยังคงเป็นช่องทางรักษา ขีดความสามารถเชิงระบบ อยู่
- abstraction อย่างระบบปฏิบัติการ, ระบบไฟล์, เครือข่าย, multitasking และ framework เพิ่มความซับซ้อนก็จริง แต่ก็ช่วยรองรับการเปลี่ยนแปลงของฮาร์ดแวร์และความคาดหวังของผู้ใช้ พร้อมทั้งเพิ่ม ความสามารถในการพอร์ต·ผลิตภาพ·การเข้าถึงการสร้างสรรค์
- ความเสี่ยงที่ใหญ่กว่า abstraction เองคือ churn อย่างต่อเนื่อง, แพลตฟอร์มที่ถูกล็อก, โฆษณา·tracker·telemetry, และการอ่อนแอลงของความเป็นส่วนตัวกับเสรีภาพ ขณะเดียวกันก็ต้องรักษาฐานทักษะทางเทคนิคสำหรับดูแลระบบสำคัญต่อไป
จุดยืนพื้นฐานต่อข้อกล่าวอ้างของ Blow
- การบรรยายของ Jonathan Blow มีแนวคิดว่า abstraction ในซอฟต์แวร์นำไปสู่การสูญเสียความรู้ด้านการเขียนโปรแกรมระดับต่ำ และท้ายที่สุดอาจทำให้ไม่สามารถบำรุงรักษาซอฟต์แวร์ที่จำเป็น จนนำไปสู่การล่มสลายของอารยธรรม
- เห็นด้วยกับ ความสำคัญของการถ่ายทอดความรู้ แต่หากจะสนับสนุนข้อกล่าวอ้างเช่นนั้น ตัวอย่างและบริบททางประวัติศาสตร์ต้องถูกต้อง
- ข้อโต้แย้งหลักคือ ตัวอย่างของ Blow พึ่งพาความเข้าใจผิด ตัวอย่างที่เลือกมาเฉพาะส่วน และหลักฐานเชิงเกร็ดเล่าอย่างมาก อีกทั้งยังพลาดบางส่วนของประวัติศาสตร์คอมพิวเตอร์ไป
ข้อถกเถียงเรื่อง “five nines” และความแข็งแกร่ง
- Blow อ้างว่าในอดีตการขายระบบคอมพิวเตอร์ใช้ “five nines” หรือ เวลาทำงาน 99.999% เป็นถ้อยคำด้านคุณภาพ แต่แล็ปท็อปในปัจจุบันทำไม่ได้ถึงระดับนั้น
- ข้อที่ว่า five nines หมายถึง downtime ประมาณ 5 นาทีต่อปีนั้นถูกต้อง แต่ข้ออ้างว่าตัวชี้วัดนี้เคยใช้ขายแล็ปท็อปผู้บริโภคหรือโปรแกรมประมวลผลคำนั้นน่าจะผิด
- five nines มักใช้กับด้านต่าง ๆ เช่น ศูนย์รับแจ้งเหตุฉุกเฉินแบบ 911, ระบบโรงพยาบาล, การประมวลผลธุรกรรมทางการเงิน
- มักใช้ควบคู่กับสัญญาระยะยาวที่กำหนดรายละเอียดว่าสถานการณ์ใดไม่นับเป็น downtime
- บริษัทอย่าง IBM และ Amazon ยังขายระบบและบริการลักษณะนี้อยู่
- ข้อกล่าวอ้างว่าไม่มีซอฟต์แวร์ที่แข็งแกร่งออกมาเป็นเวลาหลายสิบปีก็มีตัวอย่างโต้แย้ง
- iPhone สามารถทำงานได้หลายสัปดาห์หรือหลายเดือนโดยไม่ต้องรีบูต
- เซิร์ฟเวอร์ไฟล์และพรินต์ของ Novell มีกรณี uptime 16 ปี
- อุปกรณ์ Unix, Windows, VMS และระบบ turnkey อย่าง IBM i ก็ถูกกล่าวถึงเป็นกรณีของความพร้อมใช้งานระยะยาว
การโต้แย้งเรื่องความก้าวหน้าทางเทคโนโลยีและผลิตภาพ
- เห็นด้วยบางส่วนกับคำกล่าวที่ว่า “บริษัทเทคโนโลยีไม่ผลักดันเทคโนโลยีอีกต่อไป” แต่บริษัทที่ให้ความสำคัญกับเงินมากกว่าก็มีมาตั้งแต่อดีตแล้ว
- ด้านที่ดู “น่าเบื่อ” อย่างระบบไฟล์, เว็บเซิร์ฟเวอร์, ฐานข้อมูล และภาษาโปรแกรมมิง ก็ยังคงถูกพัฒนาและปรับปรุงต่อไป
- ชั้น abstraction, virtualization และ containerization ที่ Blow ไม่ชอบเองก็ได้รับการปรับปรุงผ่านความพยายามจำนวนมาก และไม่ได้กลายเป็น สิ่งที่ไม่ใช่ความก้าวหน้าทางเทคโนโลยี เพียงเพราะไม่ชอบมัน
- ข้อกล่าวอ้างว่าผลิตภาพของพนักงาน Facebook เข้าใกล้ศูนย์นั้นตั้งอยู่บนสมมติฐานที่มองผลิตภัณฑ์ของ Facebook แค่ในฐานะฟังก์ชันของแพลตฟอร์มโซเชียล
- พนักงานของบริษัท Facebook รวมงานหลากหลาย เช่น กฎหมาย, บัญชี, กราฟิกดีไซน์, การดูแลระบบ, วิจัย, HR, ผู้จัดการระดับกลาง
- ยังมีธุรกิจอื่นอย่าง Instagram, WhatsApp และ Oculus VR
- ผลิตภัณฑ์จริงของ Facebook คือแพลตฟอร์มส่งโฆษณา และงานเก็บข้อมูลส่วนบุคคลกับข้อมูลส่วนตัวเพื่อแปลงเป็นโฆษณาแบบกำหนดเป้าหมาย แม้ผู้ใช้จะไม่เห็นเป็นฟังก์ชัน แต่ก็ปรากฏเป็นรายได้
ความรู้ระดับต่ำและสองด้านของ abstraction
- ยอมรับว่าเป็นความจริงที่โปรแกรมเมอร์จำนวนมากชอบสภาพแวดล้อมที่ไม่ต้องจัดการ memory allocation และ pointer
- มองว่า abstraction ที่มากเกินไป เช่น การใช้ JavaScript framework ที่ไม่จำเป็นเพื่อเรนเดอร์บล็อกเรียบง่าย หรือแอปเดสก์ท็อปที่ทำงานช้าอยู่ในเบราว์เซอร์ที่ bundled มา เป็นปัญหา
- อย่างไรก็ตาม จำนวนคนที่ใช้ C ได้ในปัจจุบัน และปริมาณโค้ด C·assembly ที่เขียน อาจมากกว่าในอดีต
- Linux และ NetBSD ยังคงถูกพอร์ตไปยังเป้าหมายหลากหลายที่ดูเหมือน CPU
- Rust มุ่งเน้นความแข็งแกร่ง ขณะเดียวกันก็ให้ pointer และการจัดการหน่วยความจำ
- Harvard CS50 สอนเรื่อง memory layout, pointer,
malloc(),free()ผ่านคอร์สสาธารณะ
- Garbage collection และ functional programming ไม่ใช่ abstraction ใหม่
- Lisp ให้ทั้งสองอย่างมาตั้งแต่ปลายทศวรรษ 1950
- Lisp ยังถูกใช้ในสภาพแวดล้อม “ฮาร์ดคอร์” อย่าง NASA Jet Propulsion Lab
- COBOL ไม่ได้ถูกกล่าวถึงในการบรรยายของ Blow แต่เป็นภาษาระดับสูงที่เป็นรากฐานของโครงสร้างพื้นฐานธนาคารและการเงิน และมีบทบาทสำคัญต่อระดับอารยธรรมปัจจุบัน
กรณี “Unix 3 สัปดาห์” ของ Ken Thompson
- การที่ Ken Thompson สร้าง assembler, editor และ kernel พื้นฐานได้ใน 3 สัปดาห์ถือเป็นผลงานที่โดดเด่นมาก
- อย่างไรก็ตาม ซอฟต์แวร์ ณ เวลานั้นแข็งแกร่งแค่ไหน เป็นมิตรต่อผู้ใช้เพียงใด และมีฟีเจอร์อะไรบ้างนั้นไม่ชัดเจน
- เงื่อนไขการทำงานในตอนนั้นต่างจากเงื่อนไขของนักพัฒนาปัจจุบันอย่างมาก
- ปัจจุบันการพัฒนามีองค์ประกอบอย่างเอกสาร, code review, daily standup, การจัด backlog, user story, unit test, ความต้องการของลูกค้า, A/B test, commit message, มาตรฐานการเขียนโค้ดขององค์กร
- สภาพแวดล้อมแบบ open office ที่ถูกรบกวน กับสภาพแวดล้อมการทำงานส่วนตัวแบบ Bell Labs ก็อาจแตกต่างกัน
- กรณีของ Thompson เพียงกรณีเดียวไม่ใช่หลักฐานว่าโปรแกรมเมอร์ในอดีตโดยรวมมีผลิตภาพสูงกว่า
- Thompson ยังเคยเข้าร่วม Multics ซึ่งขึ้นชื่อเรื่องความล่าช้า
- โครงการใหญ่ ๆ อย่าง IBM OS/360 ก็ล่าช้าเป็นเวลานาน และ Frederick P. Brooks เขียนหนังสือ 『The Mythical Man-month』 ในปี 1975 จากประสบการณ์เหล่านี้
ความก้าวหน้าของซอฟต์แวร์และความคาดหวังของผู้ใช้
- โดยรวมแล้วคอมพิวเตอร์แข็งแกร่งกว่าหลายสิบปีก่อน และโปรแกรมเมอร์ก็น่าจะมีผลิตภาพอย่างน้อยเท่าอดีต
- แต่ในบางกรณี การเริ่มต้นทำงานซับซ้อนขึ้น ซึ่งอาจลดผลิตภาพช่วงแรกได้
- ผู้ใช้ยุคใหม่ไม่อยากเรียน RPN เพื่อคำนวณเลขง่าย ๆ หรือเขียน directive ของ troff เพื่อทำใบปลิว
- อินเทอร์เฟซที่สะดวกและฟีเจอร์ขั้นสูงเพิ่มความซับซ้อนและเวลาพัฒนา ไม่ว่าจะเกี่ยวกับ abstraction หรือไม่ก็ตาม
- กรณีใน Amiga OS รุ่นเก่าที่เครื่อง crash ระหว่างคัดลอกไฟล์และทำให้พาร์ทิชันฮาร์ดไดรฟ์เสียหาย แสดงให้เห็นว่าระบบในอดีตไม่ได้เสถียรกว่าเสมอไป
- OS สำหรับคอมพิวเตอร์บ้านยุคใหม่มี memory protection และ journaling file system ทำให้ปัญหาแบบเดียวกันเกิดขึ้นน้อยกว่ามาก
- Windows 10 Home ก็มีข้อบกพร่อง แต่ก็รวมความก้าวหน้าเหล่านี้ไว้ด้วย
ข้ออ้างว่า “เมื่อก่อนทำได้เลย”
-
การคัดลอกและรันโปรแกรม
- การคัดลอกโปรแกรมจากคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่องหนึ่งแล้วรัน ยังคงทำได้หากเป็นสถาปัตยกรรมเป้าหมายและเงื่อนไขการคอมไพล์เดียวกัน
- มีกรณีที่ไบนารีแบบ static link ของ
slack-termที่ build ด้วย Go ทำงานได้บน Raspberry Pi หลายเครื่อง - อย่างไรก็ตาม ช่วงเวลาที่โปรแกรมแบบ standalone เป็นเรื่องทั่วไปต้องย้อนกลับไปถึงยุค C64 หรือ PC/XT และแม้แต่ Deluxe Paint IV บน Amiga ก็พึ่งพาไฟล์เสริมหลายไฟล์และไลบรารีฟังก์ชัน third-party
- เกม Amiga บางเกมใช้ฟลอปปีดิสก์แบบ track-loaded ที่ข้ามระบบไฟล์ ทำงานคล้าย container แบบยุคนั้น แต่มีข้อเสียคือขัดขวางการติดตั้งลงฮาร์ดดิสก์และ multitasking
-
ข้ออ้างว่าแค่ CPU เหมือนกันโค้ดก็รันได้
- คำกล่าวที่ว่าหากอยู่บน CPU เดียวกัน แค่โหลด machine code เข้า memory แล้วชี้ program counter ก็อาจรันได้นั้นเป็นไปได้ในเชิงทฤษฎี
- แต่สำหรับงานจริงอย่างการแสดงผลกราฟิก, การเล่นเสียง, การรับ input, การเขียนดิสก์ ความแตกต่างของฮาร์ดแวร์เป็นปัญหาใหญ่
- คอมพิวเตอร์บ้านที่ใช้ Z80 ในอดีต แม้ CPU เหมือนกัน แต่ฮาร์ดแวร์รอบข้างต่างกัน ทำให้การพอร์ตจริงทำได้ยาก
- กลับกัน โปรแกรมที่มีระดับ abstraction สูงกว่าอย่าง Basic สามารถพอร์ตข้ามเครื่องหลายแบบได้ง่ายกว่า
- เมื่อ Apple เปิดตัวเดสก์ท็อปไลน์ที่ใช้ ARM การพึ่งพา abstraction แทนการผูกติดกับฮาร์ดแวร์โดยตรงอาจลดภาระการพอร์ตไปยัง CPU ใหม่
-
ระบบปฏิบัติการและการเข้าถึงฮาร์ดแวร์
- ระบบปฏิบัติการไม่ได้แค่แย่งความสามารถของ CPU ไป แต่เพิ่มความสามารถอย่างระบบไฟล์, networking และ multitasking
- ผู้ใช้อย่าง Twitch streamer ที่ต้องรันเกมพร้อมโปรแกรมอื่น ต้องการ multitasking ที่แบ่งใช้ทรัพยากรฮาร์ดแวร์อย่างถูกจัดการและคาดการณ์ได้
- ซอฟต์แวร์บางส่วนบน Amiga และ Atari เข้าถึงฮาร์ดแวร์·หน่วยความจำโดยตรงโดยไม่ทำตามสเปกและ abstraction ที่ผู้ผลิตให้ไว้ จึงพังแม้มีการอัปเกรดเล็ก ๆ อย่างหน่วยความจำหรือฮาร์ดดิสก์
- ซอฟต์แวร์ที่เขียนให้สอดคล้องกับสเปกและ abstraction ยังสามารถขายต่อได้หลังฮาร์ดแวร์เปลี่ยนไป
-
กราฟิก, โปรแกรมไม่ลงลายเซ็น, LSP
- การวาดพิกเซลบนหน้าจอยังคงทำได้ในหลายภาษา และ Mode 13h ก็เข้าถึงผ่าน VGA BIOS ซึ่งเป็นชั้น abstraction ของฮาร์ดแวร์ยุคแรก
- โค้ดที่พึ่งพาฮาร์ดแวร์ VGA เฉพาะไม่สามารถพอร์ตได้ แต่โปรแกรมกราฟิกที่ใช้ abstraction ของ Windows สามารถทำงานได้ในสภาพแวดล้อมหลากหลาย ตั้งแต่ Hercules ถึง true-color XGA
- การรันโปรแกรมที่ไม่ลงลายเซ็นก็ยังทำได้ และมีกรณีคอมไพล์ WordGrinder ใช้เอง
- ความไม่พอใจบางส่วนของ Blow ใกล้เคียงกับปัญหาที่ผู้ผลิตฮาร์ดแวร์·ซอฟต์แวร์ล็อกระบบและลดสิทธิ์ผู้ใช้ มากกว่าเรื่อง abstraction
- สำหรับ Language Server Protocol โดยรวมเห็นด้วยกับฝั่ง Blow แต่ LSP แก้ปัญหามากกว่าแค่ “คลิกเมธอดเพื่อไปยัง definition”
เกม, ประสิทธิภาพ, multitasking
- แอปเพิ่มผลิตภาพยุคใหม่จำนวนมากมีกรณีประสิทธิภาพตกและ input lag รุนแรง
- สาเหตุส่วนหนึ่งคือ abstraction แต่ปัญหาที่ใหญ่กว่าคือโค้ดแย่และการเลือกเครื่องมือไม่เหมาะกับงาน
- แม้แต่โปรแกรมที่ใช้แพลตฟอร์มและ UI toolkit เดียวกัน ก็อาจให้ประสิทธิภาพที่ผู้ใช้รู้สึกได้ต่างกันมากบนเครื่องเดียวกัน
- ปัญหาที่ Blow ยกมาเรื่องเกมกู้คืนความละเอียดหน้าจอหลัง Alt-Tab เป็นประสบการณ์ที่แย่และควรปรับปรุง
- แต่เกม DOS ในอดีตเรียบง่ายเพราะไม่ต้องสนใจ process อื่น
- หากจะเล่น Doom บน Windows 3.1 ต้องบันทึกงาน ปิดโปรแกรม ออกจาก Windows แล้วค่อยเริ่มเกม
- เกม Amiga จำนวนมากก็ boot จากฟลอปปีดิสก์ ยึดเครื่องทั้งหมด และมักกลับสู่ OS อย่างเรียบร้อยไม่ได้
- multitasking ของเกมในปัจจุบัน แม้ยังไม่สมบูรณ์แบบ แต่ถือว่าดีขึ้นกว่าอดีต
การสูญเสียความรู้และความเร็วของการเปลี่ยนแปลง
- Blow มองว่าความรู้แบบการจัดการ sprite ใน Unity กำลังกลายเป็นความรู้จิปาถะแทนความเข้าใจเชิงลึก
- เห็นด้วยว่าความเร็วของการเปลี่ยนแปลงซอฟต์แวร์และฮาร์ดแวร์สมัยใหม่มักเร็วมากจนยากจะตามอย่างมีความหมาย
- แต่เรื่องนี้ใกล้เคียงกับปัญหา ความสม่ำเสมอตามเวลา และโมเดลการกระจายซอฟต์แวร์ มากกว่า abstraction เอง
- กระแสการปล่อยอะไรบางอย่างทุก 4 สัปดาห์อาจทำให้ผู้ใช้ได้ประสบการณ์ที่เสถียรได้ยาก
- หากเปลี่ยน UI บ่อย ผู้ใช้จะต้องต่อสู้กับรายละเอียดของอินเทอร์เฟซที่เปลี่ยนไปเรื่อย ๆ แทนที่จะได้ทำงานจริง
ความซับซ้อนคือปัญหาที่มนุษย์สร้างขึ้น
- Blow อ้างว่าหากตัดสินใจลดความซับซ้อนก็ลดได้ และเราหลงคิดว่าการเพิ่ม abstraction จะช่วยประหยัดเวลา
- หากใช้ framework ที่ถูกต้องกับงานที่ถูกต้อง ก็ช่วยนักพัฒนาเว็บได้มาก
- ขณะเดียวกันก็ยังสงสัยต่อท่าทีที่พยายามใช้เบราว์เซอร์ทำทุกอย่างตั้งแต่ word processing ไปจนถึงเกม หรือรีบย้ายไปใช้ framework ใหม่ทันทีทุกครั้งที่มีออกมา
- ความซับซ้อนของซอฟต์แวร์ไม่ได้เป็นปัญหาของโปรแกรมเมอร์อย่างเดียว แต่ตลาดและสภาพแวดล้อมองค์กรก็ร่วมสร้างขึ้นด้วย
- การเมืองในองค์กร, การประชุมไร้สาระ, ซอฟต์แวร์รายงานเวลาที่เข้าใจยาก, deadline ที่ผู้อื่นกำหนด, ความต้องการลูกค้าที่จุกจิก, การตัดสินใจบริหารแปลก ๆ, การประเมินกำหนดการจาก requirement นามธรรม, การ debug legacy code ล้วนส่งผลต่อการเลือกของนักพัฒนา
- ความซับซ้อนเป็นปัญหาที่มนุษย์สร้างขึ้น และหากลดความซับซ้อนในที่ทำงานได้ ระยะยาวก็อาจลดความซับซ้อนของซอฟต์แวร์ได้ด้วย
นักพัฒนารุ่นใหม่และความสามารถในการสร้าง engine
- ข้อกล่าวอ้างของ Blow ที่ว่านักพัฒนาเกมรุ่นใหม่ไม่เคยเขียน engine เอง และไม่นานอาจลืมความสามารถนั้นในระดับหมู่คณะ ดูใกล้เคียงกับตรรกะทางลาดลื่น
- คนส่วนใหญ่ที่มี C64, Amiga, 286 PC ไม่ได้กลายเป็นนักพัฒนาระดับต่ำ และหลายคนก็ไม่ได้เป็นโปรแกรมเมอร์
- abstraction และ game engine สำเร็จรูปช่วยให้สร้างสรรค์ได้โดยไม่ต้องเรียนรู้การจัดการหน่วยความจำระดับต่ำ, pointer, algorithm
- เด็กยุคนี้อยากสร้างสิ่งที่คล้ายเกม AAA ที่ซื้อในร้าน และความคาดหวังต่อเกมสมัยใหม่สูงกว่ายุค C64 หรือ Amiga มาก
- เส้นทางเรียนรู้เทคโนโลยีระดับต่ำยังคงมีอยู่
- Linux ดึงดูดนักพัฒนารุ่นใหม่ผ่านชุมชนโอเพนซอร์ส และกระตุ้นความสนใจในภาษาระบบอย่าง Rust, C, C++
- dwm เป็น window manager ที่ตั้งค่าด้วยการแก้ซอร์สโค้ด C
- มีนักพัฒนารุ่นใหม่ที่ใช้ C และ Z80 assembly, คนที่สร้าง Linux distribution ตั้งแต่ต้น, คนที่สร้างฮาร์ดแวร์เอง, และนักพัฒนา C ที่รัน OS วิจัยบนฮาร์ดแวร์สมัยใหม่
- หลักสูตรวิทยาการคอมพิวเตอร์และวิศวกรรมไฟฟ้ายังคงสอนพื้นฐานอย่าง C, assembly, การออกแบบคอมไพเลอร์
- การเข้าถึงเครื่องมือโปรแกรมมิง, เอกสาร, วิดีโอการสอน และแหล่งความรู้อย่าง MIT OpenCourseWare ถูกลงและดีขึ้นกว่าอดีต
ข้อสรุปสุดท้าย: ปัญหาที่ใหญ่กว่า abstraction
- บทสรุปของ Blow ใกล้เคียง survivalism ที่นำมาใช้กับเทคโนโลยี และพอเข้าใจอุปมาว่าเมื่อไฟดับก็ต้องมีคนรู้วิธีก่อไฟ
- สังคมพึ่งพาความสามารถในการรันโปรแกรมบางอย่างได้แทบตลอดเวลา
- หากล้มเหลว อาจเกิดผลร้ายแรง เช่น เศรษฐกิจโลกพังทลาย หรือระบบสาธารณสุขของประเทศล้มเหลว
- บันทึกทางประวัติศาสตร์และสมัยใหม่ถูกเก็บเป็นดิจิทัลมากขึ้นเรื่อย ๆ จึงต้องเข้าถึงได้ต่อไปในอนาคต
- ความซับซ้อนเปราะบาง และ abstraction อาจสร้างความไม่รู้ที่เป็นอันตรายได้ บล็อกธรรมดาไม่จำเป็นต้องใช้ shadow DOM ในการเรนเดอร์ และ IRC client ที่มีภาพก็ไม่จำเป็นต้องใช้เปลือกเบราว์เซอร์
- อย่างไรก็ตาม churn ต่อเนื่องที่มนุษย์สร้างขึ้นก็เป็นสาเหตุใหญ่ของความเปราะบางเช่นกัน
- การพัฒนาแบบ “Agile” มีเจตนาไม่ให้ปล่อยสิ่งที่ยังไม่เสร็จและยังไม่ผ่านการทดสอบ แต่ในความเป็นจริงกลับมี release ที่ยังไม่สมบูรณ์ออกมาอย่างต่อเนื่อง
- ระบบโฆษณา, tracker และ telemetry ทำงานคล้าย backdoor ตามการออกแบบโดยพฤตินัย เพิ่มทั้งช่องโหว่และความไม่สบายใจ
- ปัญหาที่ใหญ่กว่าของโลกดิจิทัลคือความเป็นส่วนตัวและเสรีภาพ
- เหตุผลที่เราอาจไม่สามารถ interface กับฮาร์ดแวร์โดยตรงได้ ไม่ใช่เพราะเราเลือก abstraction แต่เพราะสถานการณ์ที่เหลือแต่แพลตฟอร์มซึ่งถูกล็อกและควบคุมจากระยะไกลมากขึ้นเรื่อย ๆ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผมสอน วิชาระบบ ที่ Montana State ซึ่งครอบคลุมตั้งแต่ทรานซิสเตอร์ไปจนถึงระบบคอมพิวติ้งจริง ๆ และตอนเริ่มคอร์สก็มีนักศึกษาบางคนที่ไม่รู้ด้วยซ้ำว่าระบบไฟล์คืออะไรอย่างถูกต้อง
แม้ Blow จะมีบางจุดที่ผิดในรายละเอียด แต่ผมคิดว่าสำหรับนักศึกษาสายเทคโนโลยี เราควรพิจารณาการศึกษาแบบ NAND-to-Tetris อย่างจริงจังตั้งแต่ระดับมัธยมปลาย
เราใช้โมเดล “เก่า ๆ” อย่าง Little Man Computer หรืออีมูเลเตอร์ MIPS แบบภาพง่าย ๆ ซึ่งอาจไม่สมจริง แต่ให้ความรู้สึกว่าเรามาจากไหนด้วยระดับความซับซ้อนที่คนทั่วไปเข้าใจได้
พอดูตำราสถาปัตยกรรม 64 บิตที่คนแนะนำกันทุกวันนี้ก็ได้แต่หัวเราะ และการเชื่อมโยงเทคโนโลยีกลับไปถึงรากของมันเป็นปัญหาที่ยากจริง ๆ
ปัญหาอยู่ที่ระบบปฏิบัติการมือถือและบริษัทซอฟต์แวร์พยายามทำให้ข้อมูลผู้ใช้อยู่ใน สวนปิดที่มีกำแพงล้อมภายในแอป ให้มากที่สุด
แม้คุณจะทำงานกับไฟล์อยู่แล้ว ก็ยังบังคับให้ “นำเข้า” ข้อมูลเดิมเข้าไปในที่เก็บของตัวเอง และเมื่อแก้ไขแล้วก็ต้อง “ส่งออก” หรือ “แชร์” เป็นสำเนาใหม่เอง
ตอนนี้ผมกำลังเรียนปริญญาโทสาขาวิศวกรรมอุตสาหการที่ Montana State และต้องรับมือกับนักศึกษาปริญญาเอกที่ทำ อนุพันธ์ย่อย ง่าย ๆ ไม่ได้แทบทุกวัน
เทอมที่แล้วในวิชาคณิตศาสตร์ระดับ 400 ก็มีนักศึกษาที่ไม่รู้วิธีบวกเมทริกซ์สองตัวเข้าด้วยกัน
นักศึกษาปี 4 สาขาวิทยาการคอมพิวเตอร์ไม่รู้จักระบบไฟล์ก็น่าแปลก แต่เมื่อเทียบกับเรื่องเหลือเชื่อที่ผมเห็นที่นี่แล้วกลับดูธรรมดาไปเลย
บรรยากาศต่างจากตอนที่ผมเข้าเรียนมหาวิทยาลัยครั้งแรกในยุค 2000 มากจนน่าหดหู่ แต่ก็ทำให้ผมมั่นใจกับแนวโน้มตลาดงานฤดูใบไม้ผลิปีหน้าอย่างน่าประหลาด
แม้ชื่อจะบอกอย่างนั้น แต่ วิทยาการคอมพิวเตอร์ ไม่ใช่วิชาที่ว่าด้วยตัวคอมพิวเตอร์เอง และถึงคอมพิวเตอร์จะเป็นเครื่องมือที่จำเป็น แก่นของมันคือการทำ abstraction ของโดเมนและการสร้างแบบจำลองภาษา รวมถึงการนำไปใช้
เช่นเดียวกับที่นักดาราศาสตร์แค่ต้องใช้กล้องโทรทรรศน์ได้เท่าที่จำเป็น นักวิทยาการคอมพิวเตอร์ก็แค่ต้องใช้คอมพิวเตอร์ได้เท่าที่จำเป็น
การวางคอมพิวเตอร์ไว้เป็นศูนย์กลางจักรวาลและใช้เป็นจุดตั้งต้นของวิทยาการคอมพิวเตอร์เป็นความผิดพลาดใหญ่ และในเชิงประวัติศาสตร์ก็เป็นที่มาของความสับสนมากมาย
แม้แต่การเขียนโปรแกรม “ระดับต่ำ” สุดท้ายก็ยังเป็น abstraction และภาษา เพียงแต่ใช้ภาษาของอุปกรณ์คอมพิวติ้งเพื่อจำลอง abstraction ของโดเมนที่กำลังอภิปรายเท่านั้น
เวลาว่างผมดีคอมไพล์แอสเซมบลี MIPS และฟังก์ชันเล็ก ๆ ก็สามารถแปลงกลับเป็นโค้ด C ที่สอดคล้องกันได้ด้วยมือโดยไม่ต้องใช้เครื่องมืออื่น
แต่มันไม่ได้ถูกเจือจาง การสอนยังมีอยู่ หนังสือและคอมพิวเตอร์ก็มีอยู่ เราจึงไม่จำเป็นต้องเรียกครูว่าเป็นนักกวีพเนจร
สุดท้ายนี่ก็เป็นแค่อีกบล็อกโพสต์หนึ่งที่พูดถึงบล็อกโพสต์ และไม่รู้ว่าบล็อกเกอร์เหล่านั้น “สำคัญ” แค่ไหน แต่ก็มีกลิ่นของบล็อกเพื่อบล็อกอยู่ดี
เมื่อนักพัฒนาเว็บสูงวัยวิจารณ์ abstraction เขามักเล็งไปที่นักพัฒนา React; เมื่อนักพัฒนา Python วิจารณ์ ก็เล็งไปที่นักพัฒนาเว็บสูงวัย; และเมื่อนักพัฒนาแอปพลิเคชัน C++ วิจารณ์ ก็เล็งไปที่นักพัฒนา Python
นักพัฒนาเฟิร์มแวร์ก็เล็งไปที่นักพัฒนาแอปพลิเคชัน ส่วนวิศวกรไฟฟ้าก็เล็งไปที่นักพัฒนาเฟิร์มแวร์
การขีดเส้นว่า abstraction ที่มากเกินไป อยู่ตรงไหนโดยใช้ระดับที่ตัวเองรู้เป็นเกณฑ์ แล้วเรียกทุกอย่างหลังจากนั้นว่า “ฆ่าอารยธรรม” นี่ก็เป็นท่าทีที่น่าทึ่งทีเดียว
มีข้อชี้แนะดี ๆ หลายอย่าง และเพราะผมเองก็เคยดูการนำเสนอนั้นมาแล้ว ผมคิดว่าคำวิจารณ์เป็นเรื่องสำคัญ
แต่ที่ Blow พูดว่า “เราไม่สามารถแค่วาดพิกเซลบนหน้าจอได้” นั้นถูกต้อง
ผมทำงานเป็น โปรแกรมเมอร์เอนจินเกม ในบริษัทเกมขนาดกลาง และการจ้างคนที่จะมาดูแลโค้ดกราฟิกส์นั้นยากขึ้นมาก
API รุ่นเดียวกับ DX12 เรียกร้องจากโปรแกรมเมอร์สูงขึ้นอย่างมหาศาลเมื่อเทียบกับรุ่นก่อนหน้าอย่าง DX11 และการทำอะไรสักอย่างด้วย API นี้ก็เป็นงานใหญ่ในตัวมันเอง
Microsoft เองก็เคยยอมรับว่าการเรียน DX12 โดยไม่มีประสบการณ์กับ API กราฟิกส์รุ่นก่อนนั้นยากสุด ๆ แต่ตอนนี้ผมหาคำอ้างอิงนั้นในเอกสารไม่เจอแล้ว
ข้อโต้แย้งที่ว่า “API แบบนี้มีไว้สำหรับนักพัฒนาที่ต้องการรีดขีดจำกัดของการ์ดจอและทำ optimization ระดับต่ำมาก ๆ” ก็ถูกอยู่บางส่วน แต่ตอนนี้มันกลายเป็นมาตรฐานอุตสาหกรรมไปแล้ว และแทบสอนให้คนที่ไม่มีประสบการณ์เดิมไม่ได้
ถ้าไม่มีอะไรเปลี่ยน กลุ่มกำลังคนที่จ้างได้ จะหดตัวลงเรื่อย ๆ
แม้แต่การวาดปุ่มเดียวบนหน้าจอเวลาทำแอปพลิเคชันซอฟต์แวร์ก็ยากเกินไป จนคนส่วนใหญ่แค่ใช้ Progressive Web App ที่ช้ากว่าสมรรถนะที่เป็นไปได้ 100 เท่า
ในปี 2025 ตัวเลือกที่ดีที่สุดสำหรับแอปพลิเคชัน GUI จริง ๆ คือ Java Swing กับ Qt หรือเปล่า
มีแนวคิดใหญ่ ๆ ที่เชื่อมทุกอย่างเข้าด้วยกันอยู่ แต่ในเอกสารแทบไม่บอกใบ้เลย ต้องเข้าร่วมเซสชันฝึกอบรมหรือคุยกับคนที่รู้อยู่แล้วจึงจะเรียนรู้ได้
ผมมองว่าสิ่งอย่าง JavaScript ฝั่งเซิร์ฟเวอร์และ React ทำให้การพัฒนาซอฟต์แวร์เว็บเละเทะมาก เมื่อเทียบกับสิ่งที่มันทำจริง ๆ
เด็ก ๆ สมัยนี้บางคนไม่รู้ด้วยซ้ำว่าสิ่งที่เรนเดอร์ในเบราว์เซอร์คือ HTML คิดว่าเบราว์เซอร์เรนเดอร์ React เอง
แถม CEO ของ Vercel ยังพูดอะไรโง่สุด ๆ ว่า React คือ เคอร์เนล Linux ของการพัฒนา
https://news.ycombinator.com/item?id=42824720
ผมอยู่มานานพอจะจำยุค vanilla js, jQuery, Knockout, Angular 1 ได้ แต่ตอนนั้นความสับสนพื้นฐานก็มีอยู่เสมอ
React บางครั้งแค่ JSX อย่างเดียวก็ใช้ได้อย่างสมเหตุสมผล
ผมกลับโทษเครื่องมือที่ขับเคลื่อนด้วยเงิน VC อย่าง Vercel, Next, Apollo, Prisma และขยะที่เหล่าอินฟลูเอนเซอร์สายเว็บเดฟรับเงินมาใส่เต็มเว็บมากกว่า
คิดดูแล้ว ทุกส่วนของการทำซอฟต์แวร์บวมขึ้นหมด ตั้งแต่บอร์ด Notion ไปจนถึงการเลือกฐานข้อมูลที่น่าสงสัย
แต่ในฐานะคนที่ทำงานได้ดีแม้ไม่มีไลบรารี ผมอยากเสริมว่า DOM เป็นหนึ่งใน API ที่แย่ที่สุดที่มนุษย์เคยประดิษฐ์ขึ้น และ “reactive programming” เป็นโมเดลที่เหนือกว่าวิธีแบบเก่า
NextJS ทำให้การพัฒนาเครื่องมือที่สั่งสมมาหลายปีถอยหลัง และช้ากว่า Vite มาก
หน้าเว็บที่ไม่มีปฏิสัมพันธ์ใด ๆ ใน NextJS ที่ build แบบ static กลับดาวน์โหลด JavaScript 100KB เพื่อไม่ทำอะไรเลย
Facebook พยายามแก้ด้วย “compiler” สำหรับ React ทั้งที่จริง ๆ แค่ทำให้คอมโพเนนต์ไม่ re-render โดยไม่จำเป็นตั้งแต่แรกก็พอ
เมื่อเทียบกับ Preact ซึ่งแทบจะแทนกันได้ตรง ๆ React ใหญ่มหึมา และแสดงให้เห็นว่า Facebook ไม่ใส่ใจแค่ไหน
HTML เป็นรูปแบบ serialization และเบราว์เซอร์ใช้มันเพื่อสร้าง DOM ในหน่วยความจำ
React ไม่ได้ serialize อะไรเป็น HTML เลย แต่เรนเดอร์ลง DOM โดยตรง
การที่ความเห็นนี้ผิดแต่ยังได้โหวตสูง แสดงชัดว่าเธรดนี้มีลักษณะเป็น “คนแก่ชกใส่ก้อนเมฆ”
ตามความเข้าใจของผม HTML คืออินพุตของเบราว์เซอร์ แล้วเบราว์เซอร์แปลงมันเป็น DOM จากนั้นจึงนำไปสู่การวาดหน้าจอและการจัดการอินพุต ฯลฯ
ความแตกต่างนี้สำคัญ เพราะ React หรือไลบรารี JavaScript ตระกูล virtual DOM ไม่ได้สร้าง HTML แต่สร้าง คำสั่งจัดการ DOM ที่เขียนด้วย JavaScript
ข้อชี้แนะดี ๆ ของ Blow มีอยู่มาก แต่ผมคิดว่าเขามองข้ามไปว่า ความถดถอยจำนวนมากไม่ได้มาจากการล่องลอยระหว่างรุ่นคนหรือ entropy ของข้อมูล แต่มาจาก เจตนาร้าย อย่างโจ่งแจ้งของคนที่มีอำนาจตัดสินใจ
Blow มักชี้ประเด็นเกี่ยวกับการพัฒนาได้ยอดเยี่ยมจริง ๆ หลายครั้ง และบางครั้งก็หลุดเป้าไปโดยสิ้นเชิง
เขาประสบความสำเร็จมากและมีไอเดียที่ควรฟัง แต่ก็มีเรื่องไร้สาระจำนวนมากที่ถูกนำเสนอปะปนจนแยกไม่ออก
ผมรู้สึกอย่างแรงว่าเรื่อง การล่มสลายของอารยธรรม เป็นหนึ่งในเรื่องไร้สาระเหล่านั้น และแม้จะฟังสองครั้งแล้ว ส่วนใหญ่ผมก็เพิกเฉย
ขอบคุณบทความต้นทางที่โต้แย้งอย่างมีหลักการมากกว่า
ผมมองว่า Casey Muratori เลียนแบบ Blow แต่แม้แต่ส่วนดี ๆ ก็ทำได้ไม่ดี
Muratori ก็ยังทำเกมที่เริ่มเมื่อ 10 ปีก่อนไม่เสร็จ
ในทางกลับกัน ด้วยเกมเอนจินสมัยใหม่ รวมถึงอย่าง Raylib ทุกวันนี้แม้ในเกมแจมสุดสัปดาห์ก็ยังทำผลงานที่ดูดีพอสมควรได้ และเกม Sokoban ของ Blow ก็น่าจะทำได้ในราว 6 เดือน โดยเฉพาะถ้ามีทีมประมาณ 10 คน
ผมดูคอนเทนต์ของเขามาบ้าง และในหัวข้อที่เขารู้ เขาดูถ่อมตัวแต่ก็มีความเห็นชัดเจน และผมคิดว่า Handmade Hero ก็ทำได้ยอดเยี่ยม
เวลาที่ Jira ใช้เพื่อแสดง ticket หนึ่งใบ เวลาที่ Slack ใช้สลับห้องแชต หรือการที่ VSCode ตามความเร็วพิมพ์ปกติไม่ทัน มันบ้ามากจริง ๆ
เขาดูเหมือนโยนคำวิจารณ์กว้าง ๆ แล้วก็หายไปไม่ทำอะไรอีก
จะบอกว่าเขามีผลงานยิ่งใหญ่ก็พูดยาก ผมมองว่าเขาทำงานได้ในระดับโอเค
เกมที่ออกมามีแค่สองเกม และใกล้เคียงกับปริศนามากกว่าเกม เล่นจบครั้งเดียวแล้วแทบไม่มีเหตุผลให้กลับไปเล่นอีก
Braid ก็โอเค ส่วน The Witness ก็แค่เหมือน Flow
หลังจากนั้นเขาทำภาษาโปรแกรมมิ่งมา 10 ปีแล้ว แต่ไม่เผยแพร่เพราะ “ยังไม่เสร็จ”
ดูเหมือนหลังจากโชคดีทำเงินได้ เขาก็มองว่าตัวเองมีพรสวรรค์กว่าความเป็นจริงมาก
สภาพแวดล้อมซอฟต์แวร์สมัยใหม่มีปัญหามากมายจริง ๆ และผมก็คิดว่า การทำ abstraction มากเกินไป เป็นปัญหาด้วย
แต่สุดโต่งอีกฝั่งก็แย่เช่นกัน และก็มีแนวโน้มจะโรแมนติไซส์อดีตมากเกินไป
การแครชและการรีบูตก็เป็นปัญหา ระบบอย่าง Amiga มีปัญหาความเข้ากันได้ระหว่างเวอร์ชันฮาร์ดแวร์ และแม้แต่ระบบที่ให้ความสำคัญกับ compatibility ก็ไม่ได้ปลอดจาก incompatibility
แม้แต่ใน Windows 11 ซึ่งเป็นระบบสมัยใหม่ที่ไม่เสถียรที่สุด คอมพิวเตอร์ของผมก็ยังเสถียรกว่าคอมพิวเตอร์เครื่องใด ๆ ที่ผมใช้ก่อนปี 2010 มาก และยังรันซอฟต์แวร์สำหรับ Windows 95 ได้
คอมพิวเตอร์ที่ใช้ได้ในชีวิตประจำวันย่อมดีกว่าคอมพิวเตอร์ที่ใช้ไม่ได้
การทำให้ง่ายขึ้นทั้งหมดไม่ได้เป็น abstraction และ abstraction ทั้งหมดก็ไม่ได้เป็นการทำให้ง่ายขึ้นเช่นกัน
แต่บ่อยครั้ง abstraction เกิดขึ้นระหว่างการไล่ตามความเรียบง่าย
ผมไม่คิดว่า abstraction จะฆ่าซอฟต์แวร์หรืออารยธรรม แต่ abstraction ที่ย่ำแย่ ซึ่งสร้างขึ้นโดยอ้างเหตุผลเรื่องความเรียบง่ายในระยะสั้น จะลดความยืดหยุ่น ความคล่องตัว และการเข้าถึงลง
ถ้าดู syntactic sugar ของแทบทุกภาษา จะมีจุดหนึ่งที่ความเรียบง่ายเฉพาะส่วนซึ่งได้มาจากนัยเฉพาะบางอย่าง ไม่สามารถใช้เป็นเหตุผลรองรับความซับซ้อนที่เพิ่มขึ้นของเครื่องมือทั้งชุดได้อีกต่อไป
ในภาษาที่มีไวยากรณ์มากมาย ผู้คนไม่ได้ทำพลาดเพราะองค์ประกอบใดองค์ประกอบหนึ่งโดยเฉพาะ แต่เพราะการใช้เครื่องมือเพื่อแก้ปัญหาซับซ้อนให้ดีนั้น กลายเป็นเรื่องยากเสียเอง
ความซับซ้อนที่ async และ coroutine ใน Kotlin เพิ่มเข้ามาในประสบการณ์ของผมเมื่อจัดการโค้ดที่ “คล้ายเธรด” นั้น แตกต่างอย่างสิ้นเชิงจากวิธีที่ Elixir/Erlang จัดการปัญหาประเภทเดียวกัน
ทั้งสองต่างให้ abstraction และการทำให้ง่ายขึ้นสำหรับปัญหาเก่าอย่างการคำนวณแบบขนานและอะซิงโครนัส แต่แบบแรกเอาความเรียบง่ายหลายชั้นมาคูณกันจนกลับสร้างสิ่งที่ซับซ้อนขึ้นมา ส่วนแบบหลังใกล้เคียงกับ abstraction ที่เรียบง่ายจริง ๆ และทำงานได้เลย
ผู้เขียนดูเหมือนจะอยู่ในคนรุ่นที่อายุน้อยกว่า จึงเหมือนพลาดประเด็นของ Blow ไปโดยไม่รู้
น่าขันที่บทความนั้นเองดูเหมือนเป็นตัวอย่างแบบที่ Blow พูดถึง
คล้ายกับถ้าพูดว่า Figma กำลังทำลายโลกการออกแบบในระดับที่ไม่เคยมีมาก่อน ด้วยการทำให้ UX, UI และแนวทางการจัดการผลิตภัณฑ์ที่แย่ของ Figma เองกลายเป็นเรื่องปกติ แล้วได้รับปฏิกิริยาจากดีไซเนอร์รุ่นใหม่ที่งุนงงว่าทุกอย่างก็ปกติดี
ความรู้นั้นมีอยู่เพราะเติบโตมาในสภาพแวดล้อมนั้น แต่พวกเขาไม่ได้เติบโตมาแบบนั้น และสิ่งที่เป็นวัฒนธรรมกับประสบการณ์ก็ไม่ใช่เรื่องที่จะเรียนรู้จากที่ไหนได้ง่าย ๆ
การโจมตีตัวบุคคล แบบนี้ไม่ได้ช่วยเติมอะไรให้การสนทนาเลย
ตรงข้ามกับคำกล่าวที่ว่า “ข้ออ้างว่าซอฟต์แวร์กำลังก้าวหน้านั้นเป็นเท็จอย่างชัดเจน” ผมยังใช้คอมพิวเตอร์ Amiga ที่รักอยู่บ่อย ๆ
ไม่กี่สัปดาห์ก่อน ตอนคัดลอกไฟล์ลงฮาร์ดไดรฟ์ Amiga จู่ ๆ คอมพิวเตอร์ก็แครช และไม่ใช่เพราะผมทำอะไรผิด แต่เพราะระบบปฏิบัติการของคอมพิวเตอร์บ้านรุ่นเก่าไม่ได้เสถียรนัก
ผลคือพาร์ทิชันฮาร์ดไดรฟ์เสียหาย ระบบปฏิบัติการตรวจสอบไฟล์ซิสเต็มใหม่ไม่ได้ สุดท้ายจึงไม่มีทางเลือกนอกจากฟอร์แมตพาร์ทิชันใหม่
ผมไม่ค่อยรู้เรื่องการออกแบบ แต่ก็พอบอกได้ว่าข้อกล่าวหาเกี่ยวกับ Figma นั้นผิดโดยสิ้นเชิงเหมือนกับข้อกล่าวหาของ Blow
นั่นคือ ความโหยหาอดีต ที่กำลังพูดอยู่ อินเทอร์เฟซผู้ใช้มีสิ่งเละเทะอยู่เสมอ ซอฟต์แวร์ก็เช่นกัน และทุกอย่างก็เช่นกัน
เราจดจำแต่ข้อดีของตัวอย่างระดับบนสุดในอดีต และลืมทั้งของห่วย ๆ รวมถึงความล้มเหลวของสิ่งที่ออกแบบมาดีไปด้วย
ปัญหาคือ abstraction ที่ไม่ได้คิดให้ลึกพอ
มี abstraction จำนวนมากที่เห็นได้ชัดว่าเป็นร่างแรกหรือความพยายามครั้งแรก แต่เพราะ การบูชาความเร็ว และความโอหังของอุตสาหกรรมเทคโนโลยี จึงถูกปล่อยออกไปทั้งอย่างนั้นก่อนจะได้ขัดเกลาหลายรอบ
เมื่อ abstraction แบบนั้นกลายเป็นส่วนหนึ่งของโปรเจกต์ยอดนิยม คนอื่น ๆ ก็ลอกตามด้วยพฤติกรรมเลียนแบบ ภายใต้ธงคลุมเครือที่เรียกว่า “best practice”
ทำกระบวนการนี้ซ้ำไป 10–20 ปี ก็จะได้ความยุ่งเหยิงมหึมา
ที่แย่กว่านั้นคือ ในสังคมที่เทคโนโลยีกลับทำให้เกิดการเข้าสังคมมากเกินไปอย่างย้อนแย้ง ฉันทามติทางสังคมที่ไม่อยากถูกจับได้ว่าเป็น “คนหลอกลวง” ยังคงผลักดันให้วิธีแก้ปัญหาที่ยังไม่สุกงอมแพร่ต่อไป
ผมชอบงานนำเสนอของ Jonathan Blow ครั้งนั้น และกลับไปดูใหม่อย่างน้อยปีละครั้ง ผมมองว่าเขาไม่ได้พูดอะไรเพื่อก่อข้อถกเถียง แต่หลายคนโมโหหรือรู้สึกเจ็บจี๊ด เพราะลึก ๆ แล้วนักพัฒนาจำนวนมากรู้ว่าตัวเองไม่ได้ปล่อยงานออกมาด้วยความพยายามอย่างดีที่สุด และไม่ได้ชี้นำคนรุ่นใหม่อย่างเหมาะสม
เรามาถึงวัฒนธรรมที่การแสวงหาความใหม่เป็นเรื่องประจำวัน และบางครั้งยังถูกยกย่องด้วย
ในอดีต วิธีแก้ปัญหาที่ผ่านการพิจารณามาเพียงพอคือมาตรฐานทางวัฒนธรรม แต่ตอนนี้สิ่งใหม่กลายเป็นมาตรฐาน โดยไม่เกี่ยวว่ามันดีจริงหรือไม่
เราสามารถขุดคุ้ยรายละเอียดข้อโต้แย้งของ Blow ได้ไม่รู้จบ แต่หลักฐานก็ปรากฏอยู่ตรงหน้าเต็มไปหมด
และในกรอบเวลาที่ยาวพอ สิ่งนั้นอาจนำไปสู่ การล่มสลายของอารยธรรม ได้ และเมื่อดูปริมาณของสิ่งที่พังอยู่ในโลก ก็อาจกล่าวได้ว่ามันกำลังเกิดขึ้นแล้ว
น่าเสียดายที่ต้องแยกชำแหละประเด็นที่มีข้อบกพร่องอย่างละเอียดขนาดนี้
นักประจักษ์นิยมแบบสุดโต่งก็ห่างไกลจากความเป็นจริงพอ ๆ กับนักทฤษฎีล้วน ๆ และ Blow กำลังสร้างข้อโต้แย้งขึ้นมาเพียงเพราะมันเข้ากับประสบการณ์ของตนเอง เลือกเฉพาะตัวอย่างที่เข้ากับคำบ่นของตน แล้วผลักดันข้อยกเว้นให้ดูเหมือนเป็นกฎ