- การเขียนโปรแกรมคือ การสร้างสรรค์ที่ค่อย ๆ ขัดเกลาข้อกำหนดที่กำกวมให้แม่นยำ และ AI ช่วยเร่งกระบวนการนี้ด้วยการแปลงข้อกำหนดภาษาอังกฤษให้เป็นโค้ด
- ‘Vibe coding’ ทำให้การพัฒนาแบบอาศัยความรู้สึกเป็นไปได้ แต่ก็ไม่อาจหลีกเลี่ยง ปัญหาความซับซ้อนและบั๊ก ที่เกิดจากการรั่วไหลของ abstraction ได้
- มนุษย์ใช้ abstraction และการบีบอัด เพื่อรับมือกับความซับซ้อน และสิ่งนี้ทำงานเป็นคุณค่าหลักของการเขียนโปรแกรม
- ใน ยุค AGI คาดว่า AI จะช่วยสนับสนุน abstraction ที่ดียิ่งขึ้น ทำให้เกิด การสร้างโค้ดที่ประณีตและมีศิลปะ
- ตรงกันข้ามกับแนวคิดที่ว่า “โค้ดตายแล้ว” AI ถูกนำเสนอว่าไม่ใช่จุดจบของการเขียนโค้ด แต่เป็นเครื่องมือที่เปิดฉากการเริ่มต้นใหม่
การตายของโค้ดเป็นคำกล่าวอ้างที่เกินจริง
- ชี้ให้เห็นถึง ความกำกวมของข้อกำหนดภาษาอังกฤษและข้อจำกัดด้านความแม่นยำ โดยมองว่าการเขียนโปรแกรมเป็นการกระทำที่ค่อย ๆ เพิ่มความแม่นยำซ้ำไปซ้ำมาเหมือนการเขียน
- ผ่านคำกล่าวของ Bertrand Russell ที่เน้นว่า “ทุกสิ่งล้วนกำกวม จนกว่าคุณจะพยายามทำให้มันแม่นยำ”
- AI สามารถแปลงข้อกำหนดที่เขียนเป็นภาษาอังกฤษให้เป็นโค้ดที่รันได้อย่างรวดเร็ว ทำให้ผู้ใช้ค่อย ๆ ทำให้ผลลัพธ์ที่ต้องการชัดเจนขึ้นได้
- ‘Vibe coding’ คือวิธีพัฒนาที่ตอบสนองต่อผลลัพธ์ที่ AI สร้างขึ้นอย่างอาศัยความรู้สึก แต่สิ่งนี้อาจสร้าง ภาพลวงของ abstraction ที่แม่นยำ
- เมื่อ abstraction รั่วไหล ก็จะเกิดบั๊กที่ไม่คาดคิด และปัญหานี้ยิ่งรุนแรงขึ้นเมื่อระบบมีขนาดใหญ่ขึ้น
- มีการยกกรณีของ Dan Shipper ที่แนะนำประสบการณ์การสร้าง collaborative text editor ด้วย ‘vibe coding’ ซึ่งได้รับความนิยม แต่สุดท้ายล่มเพราะปัญหาความซับซ้อน
- “การทำงานร่วมกันแบบสด” ดูเหมือนจะเรียบง่ายในเชิงสัญชาตญาณ แต่ในความเป็นจริงเป็นปัญหาที่ยากมาก และแสดงให้เห็นธรรมชาติของความซับซ้อน
การควบคุม abstraction และความซับซ้อน
- มนุษย์รับรู้สิ่งต่าง ๆ ได้พร้อมกันเพียงประมาณ 7±2 รายการ ดังนั้น วิธีเดียวในการรับมือกับความซับซ้อนคือ ‘การบีบอัด’ หรือก็คือ abstraction
- ผ่านคำกล่าวของ Edsger Dijkstra ที่ย้ำว่า “จุดประสงค์ของ abstraction ไม่ใช่ความกำกวม แต่คือความแม่นยำในระดับความหมายใหม่”
- ยกตัวอย่างกรณีที่ Sophie Alpert ทำให้ผังการแจ้งเตือนอันซับซ้อนของ Slack เรียบง่ายลง
- แก่นสำคัญของการเขียนโปรแกรมคือ การสร้าง abstraction ที่ดีกว่าเพื่อจัดการความซับซ้อน และเราสามารถมองเห็นความงามนั้นได้จากแนวทางอย่าง functional reactive programming
- แม้แต่ปัญหาที่ซับซ้อนโดยเนื้อแท้อย่าง collaborative text editor ก็ยังสามารถค่อย ๆ พิชิตได้ผ่านเครื่องมือ abstraction อย่าง ReactJS หรือ TailwindCSS
ยุค AGI และบทบาทของโค้ด
- เมื่อ AI พัฒนาเร็วขึ้นและมีต้นทุนต่ำลงเรื่อย ๆ ในที่สุดมันจะไปถึง สติปัญญาที่แยกไม่ออกจากมนุษย์ (AGI)
- ในยุค AGI มีแนวโน้มว่าทุกคนจะสามารถใช้สติปัญญาระดับทรงพลังได้ราวกับมี ‘อัจฉริยะระดับ Karpathy 100 คน’ ในราคาถูก
- แต่สิ่งนี้ไม่ได้มีไว้เพื่อผลิต ‘โค้ดห่วยเพิ่มขึ้นอีก’ หากแต่จะถูกใช้เป็น เครื่องมือสำหรับ abstraction ที่ดีกว่าและความเข้าใจความซับซ้อนที่ลึกขึ้น
- โค้ดไม่ได้เป็นเพียงวิธีสร้างซอฟต์แวร์ แต่ยังเป็น ผลผลิตเชิงศิลปะที่สำคัญในตัวเอง และโค้ดที่เขียนอย่างดีสามารถเปรียบได้กับบทกวี
- เช่นเดียวกับที่การเขียนไม่มีสิ่งที่เรียกว่า ‘vibe writing’ การเขียนโค้ดก็ไม่อาจถูกแทนที่ด้วยการกระทำที่อาศัยเพียงความรู้สึก
- เมื่อ AGI มาถึง เครื่องจักรจะสามารถเขียนโค้ดที่ ‘ไม่ใช่ non-slop’ ได้ และนั่นจะเป็นความก้าวหน้าอันน่ายินดีของมนุษยชาติ
AI และการยกระดับคุณภาพโค้ด
- ปัจจุบัน AI ยังสร้าง โค้ดที่ไม่สมบูรณ์ อยู่ แต่เหล่านักพัฒนาก็ใช้งานมันโดยคำนึงถึงข้อจำกัดนี้
- ตามมุมมองของ Simon Willison AI ควรถูกใช้เป็น เครื่องมือในการสร้างโค้ดที่ดีกว่า
- เมื่อ AGI ปรากฏขึ้น มันจะถูกนำไปใช้แก้ ปัญหา abstraction ที่ยากที่สุด เป็นลำดับแรก เพื่อปรับปรุงระบบซับซ้อนอย่างไลบรารี collaborative editor
- มีการแนะนำกรณีศึกษาการพัฒนา full-stack React framework (vtrr) สำหรับ Val Town โดยใช้ Opus 4.6
- มันแก้ปัญหาที่ยังค้างอยู่เกี่ยวกับ React Router 7 ได้ในคราวเดียว และจัดการความซับซ้อนได้อย่างสง่างามด้วยเดโมไฟล์เดียว 50 บรรทัด
- สิ่งนี้แสดงให้เห็นว่า การสร้างโค้ดที่ประณีตผ่านความร่วมมือระหว่าง AI กับมนุษย์ เป็นไปได้
อนาคตของโค้ดและคุณค่าของรูปแบบนิยม
- คนจำนวนมากในสังคมเชื่อว่า “โค้ดตายแล้ว” แต่นั่นคือ ความผิดพลาดแบบเดียวกับการประกาศจุดจบของเรื่องเล่าเพียงเพราะการประดิษฐ์แท่นพิมพ์
- AI ไม่ใช่จุดจบของการเขียนโค้ด แต่หมายถึง การเริ่มต้นใหม่ของการเขียนโค้ด
- ผ่านคำกล่าวของ Edsger Dijkstra, Tony Hoare และ Charles Babbage มีการเน้นว่า การคิดอย่างเป็นรูปแบบและพลังการบีบอัดของสัญลักษณ์ ช่วยขยายขอบเขตความคิดของมนุษย์
- Dijkstra กล่าวว่าการใช้ภาษาที่เป็นทางการควรถูกมองว่าไม่ใช่ภาระ แต่เป็นสิทธิพิเศษ
- Hoare เปรียบเทียบสองแนวทาง คือ “การออกแบบเรียบง่ายที่เห็นได้ชัดว่าไร้ข้อบกพร่อง” กับ “การออกแบบซับซ้อนที่ไม่ชัดเจนว่ามีข้อบกพร่องหรือไม่”
- Babbage ชี้ว่า การบีบอัดของสัญลักษณ์คือพลังที่ช่วยเร่งการคิด
- โดยสรุป โค้ดไม่ได้ตายไป และในยุค AI มันยิ่งก้าวขึ้นมาเป็นเครื่องมือสร้างสรรค์ที่ทรงพลังยิ่งกว่าเดิม
1 ความคิดเห็น
ความเห็นจาก Hacker News
Chris Lattner ได้รีวิวคอมไพเลอร์ที่เขียนด้วย Claude AI และบอกว่าไม่มีส่วนไหนที่ถือว่านวัตกรรม
AI มีแนวโน้มจะนำความรู้เดิมมาจัดเรียงใหม่ในแบบเฉลี่ย ๆ จึงไม่สามารถสร้าง การคิดเชิงวิพากษ์ หรือพาราไดม์ใหม่ขึ้นมาเองได้
มนุษย์สามารถคิดนอกกรอบจากฉันทามติเดิมได้ แต่ AI มีแรงดึงให้ย้อนกลับไปหาฉันทามตินั้น
สุดท้ายแล้ว AI คือ พวกคล้อยตามกระแส (conformist) ซึ่งเป็นทั้งจุดแข็งและจุดอ่อนของมัน
บทความที่เกี่ยวข้อง
แทนที่จะต้องเสียเวลาหลายชั่วโมงไล่อ่านเอกสารเพื่อตั้งค่าการยืนยันตัวตนที่ซับซ้อนอย่าง OAuth หรือ SAML เอง LLM สามารถสร้าง โค้ดเชื่อมต่อที่ใช้งานได้จริง ให้ได้อย่างรวดเร็ว
และยังใช้คุยกับ AI เพื่อจัดระเบียบความคิดของตัวเอง คล้าย rubber duck debugging ได้ด้วย
บทสนทนาแบบนี้มีความซับซ้อนในระดับที่คนที่ไม่มีประสบการณ์พัฒนาซอฟต์แวร์จริงทำได้ยาก
สิ่งที่น่ากังวลจริง ๆ คือ AI จะทำให้อุปสงค์ลดลงจนวงการเกิด ภาวะอุปทานล้นเกิน หรือไม่
ถ้ายังมีปัญหาทางธุรกิจใหม่ ๆ เกิดขึ้นต่อเนื่อง AI ก็จะเป็นเครื่องมือที่ช่วยได้ แต่ถ้าไม่เป็นเช่นนั้น งานก็จะลดลงอยู่ดีไม่ว่าจะมี AI หรือไม่ก็ตาม
โครงข่ายประสาทเทียมโดยพื้นฐานแล้วทำ interpolation ไม่ใช่ extrapolation
กล่าวคือ ในขอบเขตที่เคยเรียนรู้มามันทำได้ละเอียดมาก แต่พอออกนอกขอบเขตนั้นไปก็แทบคาดเดาไม่ได้
บทความ Wikipedia และ ตัวอย่าง SolidGoldMagikarp แสดงเรื่องนี้ได้ชัดเจน
เป้าหมายของ Claude ไม่ใช่การสร้างนวัตกรรม แต่เป็นการพิสูจน์ว่า “AI สามารถสร้างคอมไพเลอร์ได้หรือไม่”
ถ้าดูกรณีอย่าง AlphaDev หรือ AlphaEvolve ก็มีความเป็นไปได้มากพอที่ AI จะสร้างนวัตกรรมจริงได้ผ่าน การเรียนรู้เชิงสำรวจและการผสานความรู้
ส่วนใหญ่แล้วเราต้องการเครื่องมือที่คาดเดาได้ ไม่ใช่สิ่งไม่เสถียรที่เรียนรู้เองไปเรื่อย ๆ
AI มีความสามารถในการจัดระเบียบข้อกำหนดที่ขัดแย้งกันเพื่อสร้าง การนำไปใช้ที่สอดคล้องกัน
เช่น คำขอที่เป็นไปไม่ได้อย่าง “ช่วยวาดเส้นสีแดง 7 เส้นด้วยหมึกสีน้ำเงิน” มันก็ยังตอบเชิงตรรกะได้
ที่ Claude ตอบว่า “นั่นเป็นไปไม่ได้ ดังนั้นการวาด 0 เส้นคือคำตอบที่ซื่อสัตย์ที่สุด” ก็ถือเป็น ตัวอย่างของการคิดเชิงวิพากษ์
สำหรับคำถามว่า “AI จะสร้างเทคโนโลยีใหม่ได้ไหม?” ผมยังมองด้วยความสงสัย
AI พึ่งพาข้อมูลเดิมที่มีอยู่ ดังนั้นเมื่อมีภาษาใหม่หรือเฟรมเวิร์กใหม่เกิดขึ้น ข้อมูลฝึกที่ไม่เพียงพออาจทำให้เกิด ความเสี่ยงที่ความเร็วในการพัฒนาจะช้าลง
AI coding อาจช่วยลดการ “ประดิษฐ์ล้อขึ้นใหม่” และช่วยให้เราเลิกติด อาการ NIH syndrome ก็ได้
แม้แทบไม่มีข้อมูลฝึก มันก็ยังอ่านเอกสาร เขียนโค้ด และ ลองแนวทางใหม่ ๆ ได้
เราควรเปิดรับความเป็นไปได้ว่า วันหนึ่ง AI ก็อาจทำ การสังเคราะห์เทคโนโลยีเชิงสร้างสรรค์ ได้เช่นกัน
ท้ายที่สุดเราอาจเข้าสู่ยุคที่นักพัฒนาต้อง จ่ายเงินเพื่อให้ตัวเองถูกใส่เข้าไปในข้อมูลฝึกของ AI
เช่นแพลตฟอร์มอย่าง skills.sh ที่มี ระบบสกิล สำหรับสอนเฟรมเวิร์กใหม่ให้ AI
แค่มีเอกสารและโค้ดตัวอย่าง AI ก็สามารถนำเฟรมเวิร์กนั้นไปใช้ได้ทันที
ผมมีความรู้สึก ขัดแย้งในตัวเอง ต่อโค้ด
ในงาน โค้ดคือ หนี้ทางเทคนิค แต่ในอีกมุมหนึ่งมันก็เป็น ความสนุกในฐานะงานอดิเรก
ผมรู้สึกว่าโลกแบบคอมพิวเตอร์ใน Star Trek ที่ “พูดความต้องการออกไปแล้วมันจัดการให้เอง” กำลังใกล้เข้ามา
ทรัพยากรทางปัญญา จำนวนมากของสังคมกำลังถูกใช้ไปกับเทคโนโลยีโฆษณาหรืออุตสาหกรรมสอดส่อง
ถ้า AI มาแทนการเขียนโค้ดได้ ก็อาจเป็น จุดเปลี่ยนให้เกิดการจัดสรรคนเก่งใหม่ ได้
ผมกำลังสร้าง CRDT ที่สามารถย้าย ลบ และจัดเรียงได้ในโครงสร้างต้นไม้โดยไม่ต้องมี tombstone
Claude Code เขียนโค้ดได้ดี แต่พยายามจะเพิ่ม tombstone ตลอด จนผมต้องใช้ การพิสูจน์เชิงตรรกะ เพื่อโน้มน้าวมัน
ดูเหมือนว่า AI ยังไม่ได้มีความเข้าใจเชิงโครงสร้างที่ละเอียดระดับนี้อย่างสมบูรณ์
ทุกครั้งที่มีเทคโนโลยีใหม่เกิดขึ้น มนุษย์ก็มักจะผ่านช่วงของ ความคาดหวังเกินจริงและการทดลอง เสมอ
และมนุษย์ก็เรียนรู้ขีดจำกัดของเทคโนโลยีผ่านกระบวนการนั้น
คำสัญญาของ การเขียนโปรแกรมแบบเอเจนต์ ฟังดูดีมาก แต่สุดท้ายทุกคนก็จะเรียนรู้ความจริงผ่านการลองผิดลองถูก
มากกว่าจะบอกว่า “โค้ดตายแล้ว” ผมมองว่ามนุษย์กำลัง ยกระดับชั้นของ abstraction ขึ้นอีกหนึ่งขั้น
ตอนนี้เราเขียนสเปกเป็นภาษาอังกฤษ แล้ว AI ก็เขียนโค้ดให้
แต่เมื่อจำเป็นต้องมี ความเฉพาะเจาะจง (specificity) อย่างสมบูรณ์ โค้ดก็ยังมีประโยชน์กว่าอยู่ดี
เหมือนการแต่งภาพ ถ้าต้องการควบคุมแบบละเอียดมาก การทำเองยังดีกว่า แต่ในกรณีส่วนใหญ่ก็แค่ให้ AI จัดการก็พอ
ผมคิดว่าเมื่อเวลาผ่านไป AI จะเขียน โค้ดที่เสถียรและปลอดภัยสูง ได้ดีกว่ามนุษย์
อย่างที่ Simon Willison พูดไว้ คุณค่าที่แท้จริงของ vibe coding ไม่ใช่การ “เร็วขึ้น” แต่คือการสร้าง “โค้ดที่ดีกว่า”
เราสามารถสร้างต้นแบบจากโมเดลการออกแบบหลายแบบ แล้วปรับปรุงซ้ำโดยดูจากเกณฑ์เรื่อง ความอ่านง่าย ความน่าเชื่อถือ และความทนทานต่อความผิดพลาด
ทุกวันนี้เวลารีวิวโค้ดแล้วบอกว่า “ส่วนนี้เปลี่ยนแบบนี้นะ” AI ก็แก้ให้ได้ทันที
แต่เพื่อนร่วมงานหลายคนกลับคาดหวังแค่ “โลกที่โค้ดหายไป” เท่านั้น
ไม่นานมานี้มีข่าวว่า Donald Knuth ขอให้ AI ช่วยพิสูจน์ แล้ว AI ก็พบ บทพิสูจน์ที่ไม่เคยเป็นที่รู้จักมาก่อน
แต่สิ่งนั้นอาจไม่ใช่การค้นพบใหม่จริง ๆ เท่าไร แต่อาจเป็นแค่ การไปค้นเจอข้อมูลเก่าที่ถูกลืม
นี่คือสิ่งที่ทำให้ LLM เป็น เครื่องมือวิจัยที่ทรงพลัง และในขณะเดียวกันก็ทำให้มันดูเหมือนมีความคิดสร้างสรรค์
ถ้าอ่าน Dragon Book คุณน่าจะสร้างของที่ทำงานได้ภายในไม่กี่เดือน และเข้าใจหลักการทั้งหมดไปพร้อมกัน
ผมคิดว่าภาษาโปรแกรมคือเครื่องมือสำหรับ บีบอัดเจตนาของมนุษย์ให้อยู่ในรูปที่กระชับ
แต่บางครั้งภาษาธรรมชาติก็สื่อ เจตนาได้แม่นยำและหนาแน่นกว่า
abstraction ที่ดีคือสิ่งที่ช่วยลดช่องว่างนี้ลง และ DSL หรือภาษาตระกูล ML/Lisp ก็คือตัวอย่างของสิ่งนั้น
เช่น บทเรียน Electric Clojure ที่แสดงให้เห็นว่าโค้ดเองก็อาจถ่ายทอดเจตนาได้ดีที่สุด
ท้ายที่สุดแล้ว อย่างที่ Wittgenstein กล่าวไว้ “ภาพที่คลุมเครือ บางครั้งก็อาจเป็นสิ่งที่เราต้องการพอดี”