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