- มีความเชื่อว่าเพราะ AI ช่วยเขียนและจัดระเบียบโค้ดได้ หนี้ทางเทคนิค (tech debt) จึงจะมีความสำคัญน้อยลง
- แต่ในความเป็นจริง AI กลับทำให้ ต้นทุน ของหนี้ทางเทคนิค สูงขึ้นกว่าเดิม
- ใน codebase ที่มี หนี้ต่ำ เครื่องมือ AI จะช่วยเพิ่มความเร็วได้สูงสุด แต่ใน legacy codebase ที่มี หนี้สูง ประสิทธิภาพของเครื่องมือ AI จะลดลงอย่างมาก
- ผลลัพธ์คือ codebase ที่มีหนี้ทางเทคนิคมาก จะเผชิญความยากลำบากมากขึ้นในการนำเครื่องมือ AI มาใช้
Generative AI เปราะบางต่อโค้ดที่ซับซ้อน
- เครื่องมือเขียนโค้ดด้วย AI อย่าง Cursor หรือ Aider ตอบสนองต่อความซับซ้อนของโค้ดอย่างไวมาก
- ในโค้ดที่มีแพตเทิร์นเดิมหรืออินเทอร์เฟซที่นิยามไว้อย่างชัดเจน จะช่วยเพิ่มความเร็วได้มาก แต่ในโค้ดที่มี control flow ซับซ้อน และ มี dependency จำนวนมาก กลับมีปัญหาในการสร้างคำตอบที่ใช้งานได้จริง
- codebase ที่ซับซ้อนไม่ได้ทำให้แค่โมเดล AI ทำงานยากขึ้นเท่านั้น แต่ยังทำให้นักพัฒนาจัดโครงคำขอให้ชัดเจนได้ยากขึ้นด้วย
- ด้วยเหตุนี้ นักพัฒนาจำนวนมากจึงมีแนวโน้มจะรอจนกว่าเครื่องมือ AI จะสามารถจัดการความซับซ้อนระดับ ‘production’ ได้
ใช้เครื่องมือ AI ให้ได้ผลจริง
- แทนที่จะฝืนใช้เครื่องมือ AI กับ legacy codebase สิ่งสำคัญคือให้ ผู้เชี่ยวชาญที่เป็นมนุษย์ทำการ refactor เพื่อให้ AI สามารถทำงานได้อย่างราบรื่น
- หากการ refactor โดยตรงมีความเสี่ยง ก็สามารถใช้แนวทางอย่างแพตเทิร์น Strangler Fig เพื่อพัฒนาโมดูลใหม่ และใช้ประโยชน์จากเครื่องมือ AI ได้ทันทีผ่านวิธีนี้
- แนวทางนี้ช่วยให้ทีมพัฒนามุ่งเน้นไปที่การยกระดับ abstraction และให้น้ำหนักกับ การออกแบบสถาปัตยกรรม มากกว่ารายละเอียดการ implement โค้ด
แนวทางที่เป็นมิตรกับ AI
- สิ่งสำคัญคือการ ทำระบบให้เป็นโมดูล เพื่อให้เครื่องมือ AI ทำงานได้อย่างถูกต้อง และกำหนดปฏิสัมพันธ์ระหว่างโมดูลผ่านอินเทอร์เฟซที่ชัดเจน
- การคงโครงสร้างโมดูลที่สามารถอธิบายฟังก์ชันหลักและการไหลของข้อมูลด้วยภาษาธรรมชาติได้ ถือเป็นเกณฑ์ที่มีประโยชน์
- หากใช้เครื่องมืออย่าง Gauge Tach เพื่อกำหนดการมองเห็นและกฎด้านสถาปัตยกรรม ก็จะช่วยให้ระบบพัฒนาไปสู่โครงสร้างแบบโมดูลได้
คุณภาพเป็นตัวกำหนดความเร็ว
- การรักษา codebase ให้มีคุณภาพสูง กลายเป็นเรื่องสำคัญยิ่งกว่าที่เคย
- หากลงทุนกับสถาปัตยกรรมแบบโมดูล ทีมก็จะดึงประสิทธิภาพสูงสุดจากเครื่องมือ AI ได้ พร้อมทั้งพัฒนาฟีเจอร์ได้รวดเร็วและสร้างซอฟต์แวร์คุณภาพสูงไปพร้อมกัน
4 ความคิดเห็น
ดูเหมือนว่าการพองตัวของซอฟต์แวร์จะเป็นชะตากรรมที่หลีกเลี่ยงไม่ได้
ดูเหมือนว่าพวกผู้จัดการหรือคนทำนองนั้นจะมีความคิดประมาณว่า AI จะแก้ได้ทุกอย่าง เพราะไปเห็นอะไรบางอย่างมา ChatGPT สร้างภาพฝันไว้มากเกินไป น่าจะต้องย้ำว่ายังอยู่แค่ระดับประถม จำเป็นต้องบอกว่ามันช่วยได้เพียงเล็กน้อยในฐานะเครื่องมือเสริมเท่านั้น.. แล้วสถานการณ์ข้างบนก็น่าเห็นด้วยตรงที่ ถ้าซับซ้อนเมื่อไร มันจะเข้าใจผิดได้ง่าย เหมือนจะมองภาพรวมของทั้งโปรเจ็กต์ไม่ออก
หนีไม่พ้นคำว่า garbage in garbage out จริง ๆ นะ
ความคิดเห็นจาก Hacker News
บริษัทที่มีโค้ดเบสอายุน้อยและมีคุณภาพสูงได้รับประโยชน์จากเครื่องมือ generative AI มากที่สุด ขณะที่บริษัทที่มีโค้ดเบส legacy ที่ซับซ้อนประสบปัญหาในการนำมาใช้ ฉันก็มีประสบการณ์คล้ายกันเมื่อใช้ LLM กับโปรเจกต์ส่วนตัว พอโค้ดเบสมีความเฉพาะตัวขึ้นแม้เพียงเล็กน้อย โมเดลก็เริ่มทำผิดพลาดและงานยากขึ้น
LLM ทำให้งานง่าย ๆ ง่ายยิ่งขึ้น แต่จะทำพลาดเมื่อต้องเจองานยาก ช่องว่างนี้ไม่ได้แคบลง แต่กลับกว้างขึ้น
ในสภาพแวดล้อมที่มี "หนี้สูง" มันสร้างคำตอบที่มีประโยชน์ได้ยาก เพราะมีทั้งการควบคุมลำดับการทำงานที่ละเอียดอ่อน การพึ่งพากันระยะยาว และแพตเทิร์นที่คาดไม่ถึง ในหลายกรณี สิ่งนี้ไม่ได้สะท้อนว่าเป็น "หนี้ทางเทคนิค" แต่เป็นสัญญาณของความเป็นผู้ใหญ่ของโค้ดเบส
แทนที่จะบังคับให้เครื่องมือ generative AI แก้ปัญหาซับซ้อนในโค้ดเบส legacy ควรให้ผู้เชี่ยวชาญที่เป็นมนุษย์รีแฟกเตอร์โค้ด legacy เพื่อให้ generative AI ทำงานได้อย่างราบรื่น
เริ่มมีความเชื่อว่า AI จะทำให้หนี้ทางเทคนิคมีความสำคัญน้อยลง แต่โค้ดที่ AI สร้างขึ้นนั้นไม่เป็นระเบียบ ขาดความสม่ำเสมอ และไวอย่างมากต่อพรอมป์ต์และคอนเท็กซ์อินพุตที่เฉพาะเจาะจง
โค้ดที่ AI สร้างอาจมีคุณค่าจริง แต่กรอบการมองในบทความนี้ไม่สมจริง
แมชชีนเลิร์นนิงก็เหมือนบัตรเครดิตดอกเบี้ยสูงของหนี้ทางเทคนิค ยิ่งการสร้างโค้ดทำได้ง่าย ก็ยิ่งมีโค้ดถูกสร้างมากขึ้น และต้นทุนการบำรุงรักษาก็เพิ่มขึ้น
แม้จะทึ่งกับความสามารถของ LLM ในการสร้างโค้ด แต่เป้าหมายคือการลดปริมาณโค้ด
AI จัดการงานง่าย ๆ และสร้างโค้ดได้มากขึ้น แต่ก็สร้างบั๊กที่ค้นหาได้ยากด้วย เครื่องมือเหล่านี้ทำให้เราเดินหน้าได้เร็วขึ้น แต่ก็จำเป็นต้องเปลี่ยนวิธีการปฏิบัติงานในอีกแบบหนึ่ง
AI อาจช่วยในการทำความเข้าใจและแก้ไขโค้ดได้ แต่การคัดลอกแล้ววางแบบไม่ลืมหูลืมตาไม่ใช่เรื่องดี ยังคงต้องมีการรีวิวโค้ด การขอคำอธิบาย และการทำซ้ำอยู่เสมอ