Software Engineering Fundamentals สำคัญกว่าเดิมในยุค AI
ดู talk ของ Matt Pocock (YouTube) มา thesis หลักของ Matt คือ fundamentals ของ software engineering สำคัญกว่าเดิมในยุค AI ไม่ใช่ลดความสำคัญลง
ช่วงก่อนหน้ามี paradigm ที่เรียกว่า “specs-to-code” เกิดขึ้นมา มันวิธีในการ เขียน product-spec ก่อน แล้วให้ LLM ลงมือ implement แต่ปัญหาที่เกิดขึ้นจากวิธีนี้ มันทำให้เกิด software entropy เพิ่มขึ้น
แล้วเราจะแก้ไขหรือป้องกันยังไงได้บ้าง? ขออธิบายก่อนว่า การเขียน code มันมีเรื่องของ Architecture ที่ต้อง design ให้ดี เพื่อให้ code-based มี qulity และ maintain ง่าย ซึ่ง specs-to-code ทำให้ speed ให้การ implement มันเพิ่มและทำให้มีโอกาสที่ code-based จะมีของที่เป็น garbage code เพิ่งขึ้น
แล้วทีนี้ LLM ก็ implement โดยอ้างข้อมูลจาก code-based ที่เราเขียน (ล้อเล่น LLM เขียน 😂) ไว้ ซึ่งหมายความถ้า code-based ของเราคุณภาพไม่ดีพอ ก็จะกลายเป็น grabage-in grabage-out วิธีแก้ก็คือกลับมาคิดเรื่อง architecture ให้ลึกขึ้น
Bad code is the most expensive it’s ever been; Good codebases matter more than ever
What are Matt’s suggestions?
Matt ยกตัวอย่าง failure mode ที่ developer มักเจอตอนเขียนโค้ดกับ AI พร้อม pillar ที่ใช้แก้แต่ละแบบ:
-
AI ทำไม่ตรงกับที่เราอยากได้ - เกิดจาก mental model ไม่ตรงกัน วิธีแก้คือ Shared Design Concep ซึ่ง Matt แนะนำให้ลองใช้ skill ที่เขาทำขึ้นมาชื่อ Grill Me ซึ่ง skill จะให้ AI สัมภาษณ์เราก่อน เพื่อคุยกันผ่าน design tree ด้วยกันก่อนลงมือเขียน code
-
AI พูดเยอะเกิน / คุยกันคนละเรื่อง - term ไม่ตรงกัน Ubiquitous Language เป็นคำที่ใช้ใน Domain-Driven Design ซึ่งเป็นการเขียนไฟล์ markdown เก็บ glossary ของ domain terms เป็น docs เพื่อให้ AI พูดภาษาเดียวกับเรา ลด hallucination ที่เกิดจากการตีความหมายหรือบางครั้งเข้าใจความหมายของคำไม่ตรงกัน
-
AI generate โค้ดออกมาแล้วไม่ work - “outrun your headlights” เขียนทีเดียวเยอะเกิน ให้ AI ทำแบบ step-by-step เพื่อให้เกิด Feedback loops และทำพร้อมกันกับ Test-Driven Development ซึ่งจะทำให้เราสามารถ verify code ที่ LLM เขียนมา ได้ดีกว่าให้มันเจน code ก้อนใหญ่ๆ มาทีเดียว (เอาจริงๆ มีคนแนะนำให้เปิด PR ทุกครั้งที่ LLM เขียน code ให้เรา เพื่อบังคับให้เราต้องเห็น code ผ่านตาบ้าง อย่าเอาแต่ LGTM แล้ว merge lol)
-
Codebase navigate ยาก - ถ้า codebase ของเรา organize ได้ไม่ดี เวลา LLM จะ generate code มันก็ต้องหา context จาก code ที่มีอยู่ ซึ่งมันหายาก ทำให้กิน tokens เยอะ เพราะขนาดคนเองยังอ่านหา reference ยากเลย วิธีแก้ที่ Matt แนะนำคือให้รวมเป็น module ใหญ่ แล้วซ่อน complexity ไว้ข้างใน แล้วให้ทำเป็น interface เล็กๆ เรียบง่าย เวลาจะใช้ก็อ่านจาก interface พอ ไม่ต้องไปวิ่งหา context ทั่ว codebase แบบนี้ทั้งคนทั้ง LLM ก็ทำงานง่ายขึ้น แถมประหยัด tokens ด้วย
Key Takeaway
Code is not cheap; it is an asset that must be designed with care.
AI ไม่ได้ทำให้ engineering fundamentals หายไป มันทำให้ fundamentals สำคัญขึ้นกว่าเดิม เพราะถ้าเราไม่มี discipline AI จะช่วยเราสร้าง mess ได้เร็วขึ้นมากเท่านั้นเอง
PS. ถ้าใครอยากลองใช้ skill ที่ Matt เขียน ไปลองใช้จาก repo นี้ได้เลย https://github.com/mattpocock/skills