วิธีที่ทีมวิศวกรรมซอฟต์แวร์ใช้ AI
(refactoring.fm)- เครื่องมือเขียนโค้ดที่ขับเคลื่อนด้วย AI เพิ่มขึ้นอย่างรวดเร็ว และแม้นักพัฒนาบางคนจะสร้างผลงานที่น่าทึ่งด้วย AI ได้ แต่ในทีมวิศวกรรมจริงกลับมักเห็นผลลัพธ์ไม่มากนัก
- เหตุผลที่ผลลัพธ์แตกต่างกันมี 2 ข้อ: "กรีนฟิลด์ vs โค้ดเบสขนาดใหญ่", "เล่นคนเดียว vs หลายคน"
- จึงคาดการณ์เวิร์กโฟลว์การเขียนโค้ดแบบใหม่สำหรับ AI และแนวโน้มในอนาคตไว้ดังนี้:
- หลายบริษัทกำลังจ้างวิศวกรเพิ่ม — โดยเฉพาะบริษัทที่ดี
- ความท้าทายที่ใหญ่ที่สุดคือโค้ดเบสขนาดใหญ่ — พื้นที่ที่สร้างคุณค่าได้จริง
- หุ่นยนต์ vs ไอรอนแมน — ความแตกต่างเชิงปรัชญาของเครื่องมือ AI
- การเพิ่มประสิทธิภาพความสุขของนักพัฒนา — งานน่าเบื่ออะไรบ้างที่ AI รับไปทำได้
- การติดตามโค้ดจาก AI เป็น anti-pattern — อย่าหลงไปกับความยั่วยวนของการติดตาม
สาเหตุของความแตกต่างด้านผลลัพธ์
- Green-field vs โค้ดเบสขนาดใหญ่
- เครื่องมือ AI ส่วนใหญ่ถูกปรับให้เหมาะกับโปรเจ็กต์ใหม่ (Green-field)
- เมื่อนำไปใช้กับโค้ดเบสเก่า ประสิทธิภาพจะลดลง
- เล่นคนเดียว vs หลายคน
- เวิร์กโฟลว์ AI ในปัจจุบันเน้นการทำงานคนเดียว
- เมื่อทำงานร่วมกันในทีมจะเกิดปัญหา (เช่น merge conflict, การจัดการคอนเท็กซ์ที่ซับซ้อน เป็นต้น)
"เวิร์กโฟลว์ AI ใช้คนเดียวพอได้ แต่ถ้าใช้ในทีมจะชนกันบ่อยและไม่มีประสิทธิภาพ"
บริษัทชั้นนำกำลังจ้างวิศวกรเพิ่ม
- คำทำนายที่ว่าความก้าวหน้าของ AI จะทำให้ความต้องการวิศวกรลดลงนั้นไม่เป็นจริง
- เมื่อ AI เพิ่มผลิตภาพ สุดท้ายจะเกิด Jevons paradox ที่ทำให้การจ้างวิศวกรเพิ่มขึ้น
-
การตอบสนองของแต่ละองค์กรต่อการนำ AI มาใช้
- ทีมระดับบน: ผลิตภาพเพิ่มขึ้นจากการใช้ AI → จ้างวิศวกรเพิ่ม
- ทีมระดับกลาง: ไม่มีการเปลี่ยนแปลงด้านการจ้าง เพราะติดระบบราชการและต้นทุนการประสานงาน
- ทีมระดับล่าง: เทคโนโลยีเป็นเพียงเครื่องมือธรรมดา → ลดขนาดทีมเพื่อลดต้นทุน
ปัญหาใหญ่ที่สุดคือโค้ดเบสขนาดใหญ่
- AI เก่งมากในการแก้ปัญหาเชิงอัลกอริทึม แต่ผลงานในงานฟรีแลนซ์จริงกลับไม่ดีนัก
- สาเหตุหลักคือ ขาดคอนเท็กซ์
- วิธีส่งผ่านคอนเท็กซ์ให้ AI ในโค้ดเบส:
- Fine-tuning → คาดเดาผลได้ยากและมีต้นทุนสูง
- การขยาย Context Window → รับประกันความแม่นยำได้ยาก
- RAG (Retrieval-Augmented Generation) → ปัจจุบันมีแนวโน้มดีที่สุด
RAG ที่ดี คือหัวใจของการขยายเครื่องมือเขียนโค้ด AI
หุ่นยนต์ vs ไอรอนแมน: ความแตกต่างเชิงปรัชญาของเครื่องมือ AI
- เครื่องมือแบบอัตโนมัติเต็มรูปแบบ → ทำงานเหมือนเอเจนต์อิสระ
- รับคำสั่งจาก Slack แล้วส่ง PR โดยอัตโนมัติ
- ตัวอย่าง: Devin, Lindy
- เครื่องมือแบบเสริมพลัง → มนุษย์เป็นผู้นำงานและ AI ทำหน้าที่สนับสนุน
- ใช้เป็นเครื่องมือช่วยใน IDE และมนุษย์เป็นผู้ส่ง PR ขั้นสุดท้าย
- ตัวอย่าง: Augment, Cursor
-
กลยุทธ์ไหนได้เปรียบกว่า?
- วงจรป้อนกลับ → เครื่องมือแบบเสริมพลังแก้ข้อผิดพลาดได้เร็วกว่า
- ความสามารถในการขยาย → เครื่องมือแบบอัตโนมัติเต็มรูปแบบเสี่ยงเพิ่มความซับซ้อนในองค์กร
- แนวทางที่มีมนุษย์เป็นศูนย์กลาง → เครื่องมือแบบเสริมพลังพัฒนาไปในทิศทางที่เสริมความสามารถมนุษย์
"AI ควรสร้างอเวนเจอร์ส ไม่ใช่ Clone Wars"
การเพิ่มประสิทธิภาพเพื่อความสุขของนักพัฒนา
- ทีมที่ประสบความสำเร็จไม่ได้โฟกัสที่ ผลิตภาพ แต่โฟกัสที่ ความสุขของนักพัฒนา
- ใช้ AI เพื่อลดงานง่าย ๆ ที่น่าเบื่อและหนักหน่วง
- Toil ที่ AI ช่วยแก้ได้
- 1) การทำเทสต์อัตโนมัติ
- AI เขียนโค้ดเทสต์ → ลดภาระโค้ด boilerplate
- รางวัลจากการเขียนสเปกไว้ล่วงหน้ามากขึ้น → นำ TDD มาใช้ได้ง่ายขึ้น
- 2) การทำเอกสารอัตโนมัติ
- AI เขียนคอมเมนต์โค้ดและสเปกทางเทคนิค → ลดภาระการดูแลเอกสาร
- AI อธิบายโครงสร้างและพฤติกรรมของโค้ดได้ → แต่เจตนาในการเขียนโค้ดยังต้องให้มนุษย์อธิบาย
- 3) การปรับปรุงคุณภาพโค้ด
- ตรวจสอบสไตล์โค้ดและช่องโหว่ด้านความปลอดภัยได้
- ตัวอย่างเครื่องมือ AI: Augment, Packmind, Codacy
- 1) การทำเทสต์อัตโนมัติ
การติดตามโค้ดจาก AI เป็น anti-pattern
- หาก AI ทำงานแบบอัตโนมัติ ก็จำเป็นต้องติดตามผลงาน
- แต่ถ้า AI ทำหน้าที่เสริมพลังมนุษย์ การแยกโค้ดจาก AI ออกจากโค้ดของมนุษย์ก็ไม่มีความหมาย
- การโฟกัสที่ ผลิตภาพและความพึงพอใจของนักพัฒนา จะมีประสิทธิผลกว่า
ประเด็นสำคัญ
- การนำ AI มาใช้ทำให้การจ้างวิศวกรเพิ่มขึ้น → เมื่อผลิตภาพเพิ่มขึ้นจาก Jevons paradox การจ้างก็ขยายตาม
- จำเป็นต้องมีการใช้ AI แบบหลายผู้เล่น → ต้องเสริมความร่วมมือในระดับทีม
- ต้องแก้ปัญหาโค้ดเบสขนาดใหญ่ → หัวใจสำคัญคือการให้คอนเท็กซ์
- เครื่องมือแบบเสริมพลังได้เปรียบกว่าแบบอัตโนมัติเต็มรูปแบบ → มนุษย์นำและ AI สนับสนุน
- เพิ่มประสิทธิภาพความสุขของนักพัฒนา → ให้ความสำคัญกับความสุขมากกว่าผลิตภาพ
- การกลับมาของ TDD → AI ช่วยลดภาระในการเขียนเทสต์
- ภาระงานเอกสารลดลง → AI เขียนคอมเมนต์โค้ดและสเปกทางเทคนิคอัตโนมัติ
- คุณภาพโค้ดดีขึ้น → AI ช่วยตรวจสไตล์โค้ดและปัญหาความปลอดภัย
- การติดตามโค้ดจาก AI ไม่มีความหมาย → ควรประเมินผลงานจากผลิตภาพและความพึงพอใจโดยรวม
1 ความคิดเห็น
ผมเห็นด้วยกับข้อ 1 ได้ยากนะ
ผมรู้สึกแบบนี้บ่อยมาก เพราะแม้จะพยายามจ้างวิศวกรที่ดีในบริษัทเล็ก ๆ แต่มันไม่ง่ายเลยจริง ๆ