- ระบบเทคโนโลยีสมัยใหม่ได้พัฒนาไปสู่โครงสร้างที่ ซับซ้อนเกินกว่าที่คนคนเดียวจะเข้าใจทั้งหมดได้
- เมื่อ การพัฒนาซอฟต์แวร์และการใช้งาน AI เพิ่มขึ้น กรณีที่นักพัฒนาสร้างระบบโดยไม่เข้าใจกลไกภายในก็เพิ่มมากขึ้น
- Simon Wardley ชี้ถึงความเสี่ยงของการสร้างระบบโดยปราศจากความเข้าใจ, Adam Jacob ชี้ว่า AI กำลังเปลี่ยนวิธีการพัฒนา, และ Bruce Perens ชี้ว่าความซับซ้อนได้ก้าวข้ามขีดจำกัดไปแล้ว
- Louis Bucciarelli ใช้กรณีศึกษาของระบบโทรศัพท์เพื่อแสดงให้เห็นว่า เทคโนโลยีพันกันอยู่หลายชั้นจนไม่มีใครเข้าถึงความเข้าใจอย่างสมบูรณ์ได้
- บทความเน้นว่า AI กำลังทำให้ความซับซ้อนนี้รุนแรงขึ้น แต่ในความเป็นจริง มนุษย์ก็จัดการกับเทคโนโลยีภายใต้ความเข้าใจเพียงบางส่วนมาเป็นเวลานานแล้ว
ความซับซ้อนของเทคโนโลยีและขีดจำกัดของความเข้าใจ
- หลังการเสื่อมถอยของ Twitter ได้มีการถกเถียงเรื่อง ความเข้าใจทางเทคนิคและความซับซ้อน อย่างคึกคักบน LinkedIn
- มีการกล่าวถึงโพสต์ของ Simon Wardley, Adam Jacob และ Bruce Perens ในฐานะประเด็นที่เชื่อมโยงกัน
- Wardley เตือนถึง อันตรายของการสร้างระบบโดยไม่รู้หลักการพื้นฐาน
- คำว่า “Magic” ใช้ในเชิงวิจารณ์เพื่อเรียกเฟรมเวิร์กที่ซ่อนการทำงานภายใน โดยยก Ruby on Rails เป็นตัวอย่างเด่น
- Jacob ชี้ว่า AI กำลังเปลี่ยนวิธีการพัฒนาซอฟต์แวร์อย่างถึงราก
- AI ช่วยเพิ่มประสิทธิภาพ แต่ก็มีแนวโน้มทำให้นักพัฒนาทำงานโดยไม่เข้าใจโครงสร้างชั้นล่าง
- Perens กล่าวถึงว่า สถานการณ์ที่ Wardley กังวลได้กลายเป็นความจริงไปแล้ว
- ด้วยความซับซ้อนของ CPU และระบบปฏิบัติการยุคใหม่ ทำให้นักพัฒนาจำนวนมากเข้าใจหลักการทำงานจริงอย่างคลาดเคลื่อน
กรณีศึกษา ‘โทรศัพท์’ ของ Louis Bucciarelli
- Bucciarelli อภิปรายเรื่อง ขีดจำกัดของความรู้เท่าทันทางเทคโนโลยี ในหนังสือ Designing Engineers เมื่อปี 1994
- คนส่วนใหญ่ไม่สามารถอธิบายหลักการทำงานของโทรศัพท์ได้ในระดับกายภาพ
- มีองค์ประกอบหลายชั้นที่เกี่ยวพันกัน เช่น การกำหนดเส้นทาง, การประมวลผลสัญญาณ, การส่งผ่านดาวเทียม, การดำเนินงานขององค์กร, และโครงสร้างกำกับดูแล ของเครือข่ายสื่อสาร
- เขาสรุปว่า “ไม่มีใครรู้ทั้งหมดอย่างสมบูรณ์ว่าโทรศัพท์ของตัวเองทำงานอย่างไร”
- สิ่งนี้เป็นสัญลักษณ์ว่าระบบเทคโนโลยีที่ซับซ้อนนั้นอยู่เหนือความเข้าใจอย่างสมบูรณ์ของมนุษย์
การสัมภาษณ์งานสายเทคนิคและ ‘ขีดจำกัดของความรู้’
- ผู้เขียนย้อนเล่าบทสนทนากับ Brendan Gregg ในช่วงที่ทำงานอยู่ที่ Netflix
- Gregg บอกว่าในการสัมภาษณ์ เขาจะประเมิน ขอบเขตความรู้ของผู้สมัครและปฏิกิริยาต่อขอบเขตนั้น
- เขาดำเนินการสัมภาษณ์บนสมมติฐานว่า “ไม่มีใครเข้าใจทั้งระบบทั้งหมดได้อย่างสมบูรณ์”
- แนวทางนี้แสดงให้เห็นว่า ท่าทีที่ยอมรับในสิ่งที่ตนไม่รู้ สำคัญพอๆ กับความสามารถทางเทคนิค
ธรรมชาติของความซับซ้อนและผลกระทบของ AI
- มุมมองของ Wardley, Jacob, Perens และ Bucciarelli ต่างเผยให้เห็น ความหลีกเลี่ยงไม่ได้ของความซับซ้อน ในคนละระดับ
- Wardley: ความเสี่ยงของการสร้างโดยไม่เข้าใจ
- Jacob: ประสิทธิภาพและความห่างเหินที่ AI นำมา
- Perens: ความจริงของความซับซ้อนที่มีอยู่แล้ว
- Bucciarelli: ความเป็นไปไม่ได้ในการเข้าใจทั้งระบบ
- บทความยอมรับว่า AI จะยิ่งทำให้ปัญหานี้รุนแรงขึ้น แต่ก็เตือนให้ระลึกว่า มนุษย์ใช้ชีวิตกับเทคโนโลยีภายใต้ความเข้าใจเพียงบางส่วนมาโดยตลอด
สรุปการถกเถียงของผู้อ่าน
- ในคอมเมนต์มีความกังวลจำนวนมากว่า AI กำลังทำให้การเรียนรู้และความเข้าใจอ่อนแอลง
- บางคนชี้ว่า “เมื่อ LLM เขียนโค้ดแทน โซ่แห่งความเข้าใจก็ถูกตัดขาด”
- Wardley อธิบายว่า “ก่อนหน้านี้ความเข้าใจยังคงอยู่ผ่านห่วงโซ่แบบลำดับชั้น แต่ LLM ได้ลบห่วงโซ่นั้นออกไป”
- ผู้อ่านอีกบางคนโต้แย้งว่า “การสรุปว่าข้อดีของ AI มีมากกว่าความเสี่ยงนั้นยังเร็วเกินไป”
- โดยรวมแล้ว การสูญเสียความเข้าใจทางเทคนิคในยุค AI และ การขาดช่วงของการเรียนรู้ กลายเป็นประเด็นหลักของการถกเถียง
1 ความคิดเห็น
ความเห็นจาก Hacker News
สิ่งที่น่ากังวลในการเขียนโปรแกรมทุกวันนี้คือ นักพัฒนาแบบ "ชั้นกลาง" ที่ไม่รู้ทั้งชั้นบนสุด (เป้าหมายของผลิตภัณฑ์) และชั้นล่างสุด (วิธีการทำงานจริง) มีมากขึ้น
เมื่อก่อนถึงจะไม่เข้าใจธุรกิจ ก็ยังเข้าใจความหมายของโค้ด แต่ตอนนี้เหมือนอยู่ในบรรยากาศที่ไม่จำเป็นต้องรู้ด้วยซ้ำว่าโค้ดทำงานอย่างไร
พอใช้ Claude ไปเรื่อย ๆ ก็รู้สึกว่า ความสามารถในการรับรู้บริบท ค่อย ๆ ลดลง วัฒนธรรมการพัฒนาที่แค่ให้เทสต์ผ่านและปุ่มกดได้ก็จบ ทำให้ฉันรู้สึกเหมือนไม่มีอะไรให้เรียนรู้อีก และไม่มีอะไรให้มีส่วนร่วมอีกแล้ว
โดยเฉพาะบริษัทใหญ่ยิ่งขาดความโปร่งใส ฉันเคยทำโอทีเพื่อให้ทันเดดไลน์ แต่สุดท้ายกำหนดการถูกเลื่อนโดยที่มีแค่ฉันที่ไม่รู้
ถ้าฉันถูกปฏิบัติเหมือนเป็นแค่เครื่องมือ ฉันก็จะทำแค่บทบาทนั้น แต่ถ้าต้องการ ownership จริง ก็ต้องมีที่นั่งบนโต๊ะตัดสินใจ
เมื่อก่อนเสียเวลาไปกับงานตั้งค่าซ้ำ ๆ แต่ตอนนี้โฟกัสกับฟีเจอร์หลักได้อย่างเดียว ทำให้รักษาภาพรวมของโครงสร้างทั้งระบบไว้ในหัวได้ดีกว่าเดิม
เช่น เลือกโค้ดไม่กี่บรรทัดใน IDE แล้วพูดด้วยเสียงว่า "แก้ส่วนนี้เป็นแบบนี้ให้หน่อย" แล้วมันสะท้อนผลทันที
ถ้าเร็วพอ การควบคุมด้วยเมาส์+เสียงก็น่าจะเป็น เครื่องมือการเข้าถึง ที่ยอดเยี่ยมได้ด้วย
ฉันคิดว่า LLM อาจช่วยลดความซับซ้อนแบบนี้ลงได้ด้วยซ้ำ ฉันชอบ abstraction ที่พอดี แต่ไม่ชอบการไม่รู้อะไรเกี่ยวกับข้างในเลย
บทความนี้พูดถึงปรากฏการณ์ที่ผู้คนใช้ abstraction โดยไม่รู้ว่าข้างในทำงานอย่างไร
แต่นั่นก็เป็นพัฒนาการตามธรรมชาติอยู่แล้ว เพราะมีใครบางคนออกแบบ abstraction นั้นขึ้นมา และทำให้ชั้นบนใช้งานได้
ตรรกะแบบ "ฉันไม่รู้เรื่อง Wi‑Fi driver ดังนั้นฉันก็ไม่จำเป็นต้องรู้โค้ด" ใช้ไม่ได้
เมื่อก่อนเราพัฒนาวิธีคิดด้วยการรับมือกับ "ความซับซ้อนที่จำเป็น" โดยตรง แต่ตอนนี้หลายครั้งกลับกลายเป็นแค่ตัวเชื่อมท่อเท่านั้น
ทางแก้คือห่อ abstraction ด้วย DSL (ภาษาเฉพาะโดเมน) แทนการใช้ภาษาทั่วไป ถ้าเป็น SaaS ฉันมองว่าแนวทาง DSL-first ดีกว่า API-first
ฉันไม่คิดว่า AI จะแย่ไปกว่านั้น สิ่งสำคัญคือการเข้าใจ abstraction ที่ตัวเองใช้เป็นฐาน
dependency tree ต่างหากที่สร้างปัญหาใหญ่ที่สุด
แค่ดูโปรเจกต์ Node.js ก็มีแพ็กเกจที่พึ่งพากันเป็นร้อย ส่วนใหญ่ไม่ต้องรู้ภายในก็ได้ แต่ถ้าอินเทอร์เฟซพังบ่อยก็จะเริ่มอันตราย
หลายทีมไม่ได้ติดตาม EOL (สิ้นสุดการสนับสนุน) หรือช่องโหว่ด้วยซ้ำ ความจริงคือบ่อยครั้งเราไม่รู้เลยว่า "ของนี้ยังมีการดูแลอยู่ไหม?"
แต่ถึงก่อนยุค AI ก็มีโปรเจกต์จำนวนมากที่จมอยู่กับ dependency hell จากการชนกันของเวอร์ชันอยู่แล้ว
ผู้คนไม่จำเป็นต้องรู้ทุกอย่าง แต่ฉันคิดว่า ความไม่รู้ที่ทำให้พื้นฐานหายไป เป็นเรื่องอันตราย
ถ้าเปรียบกับการทำอาหาร เราไม่จำเป็นต้องปลูกข้าวสาลีเอง แต่ถ้าแม้แต่ทอดไข่ยังไม่เป็นก็เป็นปัญหา
ถ้าบริษัทต่าง ๆ ทำอาหารทุกอย่างให้เป็นมาตรฐานและปรุงให้หมด แบบนั้นถือเป็นความก้าวหน้าหรือความถดถอยกันแน่
ถ้าวันหนึ่งหุ่นยนต์มาแทนการผลิตอาหารทั้งหมดได้จริง การไม่รู้วิธีทำอาหารก็คงไม่ใช่ปัญหาอีกต่อไป
เราคงไม่ต้องรู้ถึงวัสดุศาสตร์ของส่วนผสมเพื่อหลีกเลี่ยงการพึ่งพิงหรอกไม่ใช่หรือ?
ชั้นล่างอย่างคำสั่ง CPU และแคชนั้นผ่านการ ตรวจสอบและจัดทำเอกสาร อย่างเข้มข้นมาหลายสิบปี
ในทางกลับกัน โค้ดที่ LLM สร้างยังไม่น่าเชื่อถือเท่ากัน และอาจต้องรีแฟกเตอร์ใหม่พรุ่งนี้เลยก็ได้
ฉันอาจไม่รู้รายละเอียดการทำงานของชั้นล่างทั้งหมด แต่ฉันเข้าใจว่าโค้ดของฉันทำงานอย่างไร
การไม่รู้ชั้นล่าง กับ การไม่รู้ขอบเขตความรับผิดชอบของตัวเอง เป็นคนละเรื่องโดยสิ้นเชิง
ตอนนี้สิ่งที่อันตรายจริง ๆ คือการมี เศษโค้ดที่ไม่มีใครรู้ว่ามันทำงานอย่างไร
ฉันไม่เห็นด้วยกับข้อกล่าวหาที่ว่า AI ทำให้สถานการณ์แย่ลง
ตรงกันข้าม LLM ได้เรียนรู้ความรู้แทบทุกแขนงมาแล้ว จึงสามารถ อธิบายอย่างเป็นระบบ สำหรับคำถามอย่าง "โทรศัพท์ทำงานอย่างไร?" ได้
มนุษย์มีข้อจำกัดตรงที่ "ไม่รู้แม้กระทั่งว่าตัวเองไม่รู้อะไร" แต่ LLM จัดการกับความรู้ที่ถูกถ่ายทอดเป็นภาษาได้แทบทั้งหมด
แน่นอนว่ามันยังอ่อนด้านการให้เหตุผลหรือการสร้างโค้ด แต่ ความสามารถในการบูรณาการความรู้ เหนือกว่ามนุษย์
มันแทนเอกสารจริงไม่ได้ เพียงแต่มีประโยชน์มากในแบบเดียวกับมนุษย์ คือช่วยบอกได้ว่า "ควรไปค้นอะไรต่อ"
การออกแบบที่ดีคือการทำให้ ระบบทำงานได้โดยไม่ต้องรู้ทั้งหมด
ปัญหาไม่ใช่ว่าระบบนั้นสร้างโดย AI แต่คือเรายังไม่เข้าใจ รูปแบบความล้มเหลวและข้อจำกัด ของมันดีพอ
สุดท้ายแล้ว แก่นสำคัญคือ ความสามารถในการออกแบบเชิงองค์กร ว่าจะประสานมนุษย์กับ AI อย่างไรให้ได้ระบบที่ต้องการ
ฉันไม่ได้รู้ภายในของคอมพิวเตอร์ทั้งหมด แต่ฉันแก้ปัญหาด้วย การทำสคริปต์อัตโนมัติในทางปฏิบัติ
ต่อให้ไม่เคยเรียน x86 assembly ก็ยังบริหารโครงสร้างพื้นฐานด้วย Python ได้
แต่ฉันคิดว่านักพัฒนาที่มีประสบการณ์มี หน้าที่ต้องถ่ายทอด ความรู้นั้น และฉันเองก็อยากรับช่วงบทบาทนั้นในสักวัน
อย่าสูญเสียความอยากรู้อยากเห็น และควรพูดคุยกับนักพัฒนารุ่นพี่อย่างกระตือรือร้น
แต่ความจริงที่ว่าแม้จะย้ำเรื่อง ความสำคัญของความเข้าใจพื้นฐาน แค่ไหนก็ยังถูกมองข้ามอยู่เรื่อย ๆ นั้นน่าอึดอัดมาก
ฉันตอบคำถามอย่าง "พอพิมพ์ URL แล้วเกิดอะไรขึ้นบ้าง?" ได้จริง
ฉันเคยทำงานเป็น ช่างเทคนิคเครื่องปฏิกรณ์นิวเคลียร์บนเรือดำน้ำ ของกองทัพเรือสหรัฐฯ และเรียนมาตั้งแต่ทฤษฎีอิเล็กทรอนิกส์ไปจนถึงการแก้ปัญหาระบบ
หลังจากนั้นก็ย้ายสายมา IT โดยยังใช้ท่าทีเดิม คือไล่อ่านเอกสารและทดลองจนกว่าจะเข้าใจถึงที่สุด
นิสัยแบบนี้ช่วยได้มากเวลาต้องแก้ปัญหา เพราะ การเชื่อมโยงความรู้ที่ดูสุ่ม ๆ กลับมีประโยชน์มาก
บทความวิกิของ VMEbus ก็น่าอ้างอิงเช่นกัน
เพียงแต่ฉันเป็นคนประเภทที่ ทนกับการไม่รู้ไม่ได้ เลยอาจเป็นกรณีพิเศษ