7 คะแนน โดย GN⁺ 2024-11-15 | 4 ความคิดเห็น | แชร์ทาง WhatsApp
  • มีความเชื่อว่าเพราะ 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 ความคิดเห็น

 
savvykang 2024-11-21

ดูเหมือนว่าการพองตัวของซอฟต์แวร์จะเป็นชะตากรรมที่หลีกเลี่ยงไม่ได้

 
koreaisbest 2024-11-21

ดูเหมือนว่าพวกผู้จัดการหรือคนทำนองนั้นจะมีความคิดประมาณว่า AI จะแก้ได้ทุกอย่าง เพราะไปเห็นอะไรบางอย่างมา ChatGPT สร้างภาพฝันไว้มากเกินไป น่าจะต้องย้ำว่ายังอยู่แค่ระดับประถม จำเป็นต้องบอกว่ามันช่วยได้เพียงเล็กน้อยในฐานะเครื่องมือเสริมเท่านั้น.. แล้วสถานการณ์ข้างบนก็น่าเห็นด้วยตรงที่ ถ้าซับซ้อนเมื่อไร มันจะเข้าใจผิดได้ง่าย เหมือนจะมองภาพรวมของทั้งโปรเจ็กต์ไม่ออก

 
kallare 2024-11-18

หนีไม่พ้นคำว่า garbage in garbage out จริง ๆ นะ

 
GN⁺ 2024-11-15
ความคิดเห็นจาก Hacker News
  • บริษัทที่มีโค้ดเบสอายุน้อยและมีคุณภาพสูงได้รับประโยชน์จากเครื่องมือ generative AI มากที่สุด ขณะที่บริษัทที่มีโค้ดเบส legacy ที่ซับซ้อนประสบปัญหาในการนำมาใช้ ฉันก็มีประสบการณ์คล้ายกันเมื่อใช้ LLM กับโปรเจกต์ส่วนตัว พอโค้ดเบสมีความเฉพาะตัวขึ้นแม้เพียงเล็กน้อย โมเดลก็เริ่มทำผิดพลาดและงานยากขึ้น

  • LLM ทำให้งานง่าย ๆ ง่ายยิ่งขึ้น แต่จะทำพลาดเมื่อต้องเจองานยาก ช่องว่างนี้ไม่ได้แคบลง แต่กลับกว้างขึ้น

  • ในสภาพแวดล้อมที่มี "หนี้สูง" มันสร้างคำตอบที่มีประโยชน์ได้ยาก เพราะมีทั้งการควบคุมลำดับการทำงานที่ละเอียดอ่อน การพึ่งพากันระยะยาว และแพตเทิร์นที่คาดไม่ถึง ในหลายกรณี สิ่งนี้ไม่ได้สะท้อนว่าเป็น "หนี้ทางเทคนิค" แต่เป็นสัญญาณของความเป็นผู้ใหญ่ของโค้ดเบส

  • แทนที่จะบังคับให้เครื่องมือ generative AI แก้ปัญหาซับซ้อนในโค้ดเบส legacy ควรให้ผู้เชี่ยวชาญที่เป็นมนุษย์รีแฟกเตอร์โค้ด legacy เพื่อให้ generative AI ทำงานได้อย่างราบรื่น

  • เริ่มมีความเชื่อว่า AI จะทำให้หนี้ทางเทคนิคมีความสำคัญน้อยลง แต่โค้ดที่ AI สร้างขึ้นนั้นไม่เป็นระเบียบ ขาดความสม่ำเสมอ และไวอย่างมากต่อพรอมป์ต์และคอนเท็กซ์อินพุตที่เฉพาะเจาะจง

  • โค้ดที่ AI สร้างอาจมีคุณค่าจริง แต่กรอบการมองในบทความนี้ไม่สมจริง

  • แมชชีนเลิร์นนิงก็เหมือนบัตรเครดิตดอกเบี้ยสูงของหนี้ทางเทคนิค ยิ่งการสร้างโค้ดทำได้ง่าย ก็ยิ่งมีโค้ดถูกสร้างมากขึ้น และต้นทุนการบำรุงรักษาก็เพิ่มขึ้น

  • แม้จะทึ่งกับความสามารถของ LLM ในการสร้างโค้ด แต่เป้าหมายคือการลดปริมาณโค้ด

  • AI จัดการงานง่าย ๆ และสร้างโค้ดได้มากขึ้น แต่ก็สร้างบั๊กที่ค้นหาได้ยากด้วย เครื่องมือเหล่านี้ทำให้เราเดินหน้าได้เร็วขึ้น แต่ก็จำเป็นต้องเปลี่ยนวิธีการปฏิบัติงานในอีกแบบหนึ่ง

  • AI อาจช่วยในการทำความเข้าใจและแก้ไขโค้ดได้ แต่การคัดลอกแล้ววางแบบไม่ลืมหูลืมตาไม่ใช่เรื่องดี ยังคงต้องมีการรีวิวโค้ด การขอคำอธิบาย และการทำซ้ำอยู่เสมอ