• วิศวกรซอฟต์แวร์ที่มีประสิทธิภาพจะสร้างและคงไว้ซึ่ง แบบจำลองทางความคิดที่ชัดเจน เกี่ยวกับข้อกำหนดและโค้ด และทำงานเป็นลูปของการเปรียบเทียบ·อัปเดตสิ่งเหล่านี้ซ้ำ ๆ
  • LLM สามารถเขียนและแก้ไขโค้ด เขียนเทสต์ และดีบักได้ แต่ขาดความสามารถในการ คงไว้ซึ่งแบบจำลองทางความคิดที่แม่นยำ จึงเกิดความสับสนเมื่อเจองานที่ซับซ้อน
  • ปัจจุบัน LLM มีข้อจำกัดในการระบุความต่างระหว่างโค้ดกับข้อกำหนดอย่างแม่นยำและแก้ไขได้อย่างเหมาะสม เนื่องจากปัญหา การตกหล่นของบริบท, อคติต่อข้อมูลล่าสุด, และ อาการหลอน
  • มนุษย์สามารถสลับวิธีคิดได้อย่างยืดหยุ่นตามสถานการณ์ เช่น เก็บบริบททั้งหมดไว้ชั่วคราว หรือซ่อนรายละเอียดบางส่วนไว้ชั่วคราวเพื่อมองภาพรวม แต่ LLM ยังทำสิ่งนี้ไม่ได้
  • LLM มีประโยชน์กับงานที่ข้อกำหนดเรียบง่าย แต่ในการพัฒนาซอฟต์แวร์ที่ซับซ้อน สุดท้ายแล้ว วิศวกรซอฟต์แวร์ ยังต้องรับผิดชอบโดยตรงต่อความชัดเจนของข้อกำหนดและการทำงานของโค้ด และ LLM มีบทบาทเป็น เครื่องมือช่วย

ลูปวิศวกรรมซอฟต์แวร์

  • วิศวกรที่ชำนาญจะทำงานโดยวนซ้ำตามขั้นตอนต่อไปนี้
    1. สร้างแบบจำลองทางความคิดของข้อกำหนด
    2. เขียนโค้ดให้สอดคล้องกับแบบจำลองนั้น
    3. ทำความเข้าใจว่าโค้ดที่เขียนขึ้นทำอะไรจริง ๆ
    4. ระบุความแตกต่างแล้วแก้ไขโค้ดหรือข้อกำหนด
  • หัวใจสำคัญของลูปนี้คือความสามารถในการมี แบบจำลองทางความคิดที่แม่นยำและคงสภาพได้

ข้อจำกัดของ LLM

  • LLM สามารถทำงานอย่างการเขียนโค้ด ระบุปัญหาแล้วแก้ไข เขียน·รันเทสต์ เพิ่มล็อก และใช้ดีบักเกอร์ได้
  • แต่เนื่องจากไม่สามารถ คงไว้ซึ่งแบบจำลองทางความคิด จึงเกิดปัญหาดังต่อไปนี้
    • สมมติว่าโค้ดที่ตัวเองเขียนทำงานได้ดี
    • เมื่อเทสต์ล้มเหลว จะอาศัยการเดาว่าควรแก้โค้ดหรือแก้เทสต์
    • เมื่อเกิดความสับสน จะลบโค้ดทั้งหมดแล้วเขียนใหม่ตั้งแต่ต้น
  • ต่างจากมนุษย์ เมื่อเทสต์ล้มเหลว มนุษย์จะตรวจสอบแบบจำลองเพื่อกำหนดทิศทางการแก้ไข หรือเมื่อรู้สึกติดขัดก็มีความยืดหยุ่นในการคลี่คลายปัญหาผ่านการสนทนา
  • วิศวกรซอฟต์แวร์จะรัน เทสต์ระหว่างทำงาน และเมื่อเกิดปัญหาก็สามารถตัดสินได้อย่างชัดเจนว่าควรแก้ส่วนใด
  • บางครั้งแม้จะเริ่มงานทั้งหมดใหม่ ก็ยังนำไปสู่ผลลัพธ์ที่มี ความเข้าใจต่อปัญหา ลึกซึ้งยิ่งขึ้น

ความเป็นไปได้ในอนาคต

  • ในอนาคตเมื่อโมเดลพัฒนาขึ้น สถานการณ์อาจเปลี่ยนไปได้ แต่ วิศวกรรมซอฟต์แวร์ ต้องการมากกว่าการสร้างโค้ดอย่างเดียว
  • มนุษย์เมื่อแก้ปัญหาสำคัญจะสามารถดึงบริบททั้งหมดออกมาจากความทรงจำชั่วคราวเพื่อใช้งาน และเลือกโฟกัสที่ประเด็นหรือมองภาพใหญ่ได้
  • สิ่งสำคัญไม่ใช่การเพิ่มข้อมูลในคอนเท็กซ์ไปเรื่อย ๆ แต่คือวิธีคิดที่จัดการเฉพาะข้อมูลที่จำเป็นอย่างเลือกสรร
  • LLM ยังขาดความสามารถในการเก็บ·กู้คืนบริบทชั่วคราวแบบมนุษย์ หรือคิดสลับไปมาระหว่างภาพใหญ่กับรายละเอียด
  • ข้อจำกัดหลักของ LLM ในปัจจุบัน
    • การตกหล่นของบริบท(Context omission): หาไม่เก่งว่าข้อมูลที่จำเป็นหายไปตรงไหน
    • อคติต่อข้อมูลล่าสุด(Recency bias): ให้น้ำหนักกับข้อมูลล่าสุดในหน้าต่างบริบทมากเกินไป
    • อาการหลอน(Hallucination): สร้างรายละเอียดที่ไม่มีอยู่จริงขึ้นมา
  • หากเพิ่มความสามารถด้านหน่วยความจำเข้าไป อาจช่วยให้ดีขึ้นบางส่วน แต่เมื่อความซับซ้อนเกินระดับหนึ่ง ก็ยังล้มเหลวในการ เข้าใจบริบทและคงไว้ซึ่งแบบจำลอง
  • ยังขาดความสามารถในการรักษา แบบจำลองทางความคิด ที่คล้ายกันสองชุดพร้อมกันเพื่อวิเคราะห์ความแตกต่าง และตัดสินใจว่าควรแก้ข้อกำหนดหรือโค้ดตรงไหน

บทบาทและการใช้งานในปัจจุบัน

  • LLM มีจุดแข็งด้านการสร้างโค้ดอย่างรวดเร็วและการรวมข้อกำหนด·เอกสาร จึงใช้งานได้ดีพอกับงานที่เรียบง่ายและชัดเจน
  • แต่สำหรับปัญหาที่ไม่เรียบง่าย การคงไว้ซึ่งบริบทที่เพียงพอและการปรับปรุงแบบวนซ้ำยังทำได้ยาก
  • ดังนั้นเรื่องอย่าง การทำให้ข้อกำหนดชัดเจน, การตรวจสอบโค้ด ยังคงเป็นความรับผิดชอบของวิศวกรซอฟต์แวร์
  • แม้จะมุ่งไปสู่สภาพแวดล้อมที่ มนุษย์และเอเจนต์(LLM) สร้างซอฟต์แวร์ร่วมกัน แต่ ณ เวลานี้ วิศวกรต้องเป็นผู้นำ และใช้ LLM เป็นเครื่องมือ

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น