ผู้ตรวจสอบโค้ดกำลังพัฒนาความสามารถที่น่าอัศจรรย์ในการตรวจจับเมื่อเพื่อนร่วมงานใช้ AI ในการเขียนโค้ด ไม่ใช่สัญญาณที่เห็นได้ชัดเจนอย่างคอมเมนต์ที่ซ้ำซากหรือ switch statement ที่มากเกินไปที่เป็นตัวบ่งชี้ แต่เป็นสิ่งที่ละเอียดอ่อนกว่า - โค้ดที่ทำงานได้อย่างสมบูรณ์แบบแต่รู้สึกผิดปกติสำหรับโปรเจกต์
สัญญาณบ่งบอกของโค้ดที่สร้างด้วย AI
นักพัฒนาที่มีประสบการณ์สามารถระบุโค้ดที่เขียนด้วย AI ได้ผ่านสิ่งที่พวกเขาเรียกว่า vibe coding patterns โค้ดมักจะละเลยแนวทางปฏิบัติที่มีอยู่ในโปรเจกต์ในรูปแบบที่คาดเดาได้ อาจจะใช้ HTTP fetching จากศูนย์เมื่อโปรเจกต์มี data fetching library อยู่แล้ว อาจจะสร้าง utility functions ใหม่ที่มีอยู่แล้วในส่วนอื่นของโค้ดเบส บางครั้งอาจเปลี่ยน global configurations เมื่อมี module-level mechanisms ที่ใช้ได้ หรือใช้ classes ในโปรเจกต์ที่ใช้แนวทาง functional programming
รูปแบบเหล่านี้เกิดขึ้นเพราะโมเดล AI ขาดความเข้าใจอย่างลึกซึ้งเกี่ยวกับโค้ดเบสเฉพาะ พวกมันสร้างโซลูชันจากความรู้การเขียนโปรแกรมทั่วไปมากกว่าแนวทางปฏิบัติและโครงสร้างพื้นฐานที่มีอยู่เฉพาะโปรเจกต์ ชุมชนสังเกตเห็นว่าสิ่งนี้สร้างลายนิ้วมือที่ชัดเจนซึ่งผู้ตรวจสอบที่มีประสบการณ์สามารถจดจำได้
รูปแบบการตรวจจับโค้ด AI ที่พบบ่อย:
- การเขียนใหม่ของเครื่องมือโปรเจกต์ที่มีอยู่แล้ว
- การไม่สนใจไลบรารีดึงข้อมูลที่มีอยู่แล้ว
- การใช้รูปแบบสถาปัตยกรรมที่ไม่เหมาะสม (คลาสเทียบกับฟังก์ชัน)
- การแก้ไขการตั้งค่าส่วนกลางแทนการตั้งค่าระดับโมดูล
- โค้ดที่ทำงานได้แต่ไม่เป็นไปตามแบบแผนของโปรเจกต์
การเปรียบเทียบกับนักพัฒนาระดับเริ่มต้น
นักพัฒนาหลายคนเปรียบเทียบเครื่องมือ AI กับการทำงานร่วมกับโปรแกรมเมอร์มือใหม่ แต่มีความแตกต่างสำคัญ สมาชิกชุมชนคนหนึ่งสังเกตว่าในขณะที่นักพัฒนาระดับเริ่มต้นจะเรียนรู้และพัฒนาขึ้นในที่สุด โมเดล AI จะรีเซ็ตในการสนทนาใหม่แต่ละครั้ง คำแนะนำและบริบทที่ครอบคลุมที่จำเป็นในการแนะนำ AI อย่างเหมาะสมมักต้องใช้ความพยายามอย่างมากจากนักพัฒนาระดับสูง
ผมส่วนตัวมองว่า LLM เป็นโปรแกรมเมอร์มือใหม่มาก เขายินดีที่จะทำงาน จะรับคำแนะนำ แต่ความรู้เกี่ยวกับโค้ดเบสและรูปแบบที่เราใช้นั้นขาดแคลนอย่างมาก
สิ่งนี้สร้างพลวัตที่น่าสนใจที่ AI สามารถผลิตโค้ดที่ทำงานได้อย่างรวดเร็ว แต่ต้องการการดูแลและการปรับปรุงอย่างมากเพื่อให้ตรงตามมาตรฐานของโปรเจกต์
ความเร็วเทียบกับความยั่งยืน
การอภิปรายเผยให้เห็นความตึงเครียดที่กว้างขึ้นในการพัฒนาซอฟต์แวร์ระหว่างความเร็วในการส่งมอบและความสามารถในการบำรุงรักษาระยะยาว นักพัฒนาบางคนกังวลว่าเครื่องมือ AI ส่งเสริมความคิดแบบ speedrun ที่การทำให้บางสิ่งทำงานได้กลายเป็นสิ่งสำคัญกว่าการสร้างซอฟต์แวร์ที่ยั่งยืน
อย่างไรก็ตาม ชุมชนแบ่งออกเป็นสองฝ่ายในประเด็นนี้ ในขณะที่บางคนมองว่าโค้ดที่สร้างด้วย AI เป็นปัญหาโดยธรรมชาติ คนอื่นๆ โต้แย้งว่าปัญหาจริงไม่ใช่เครื่องมือแต่เป็นวิธีที่นักพัฒนาใช้มัน เอกสารที่ไม่ดี การขาดความเข้มงวดในการตรวจสอบโค้ด และความรู้เกี่ยวกับโปรเจกต์ที่ไม่เพียงพออาจนำไปสู่ปัญหาที่คล้ายกันไม่ว่าจะเป็นมนุษย์หรือ AI ที่เขียนโค้ด
แนวปฏิบัติที่ดีที่สุดสำหรับการเขียนโค้ดด้วย AI:
- สร้างไฟล์แนวทางและกฎเกณฑ์เฉพาะโปรเจกต์สำหรับ AI
- ใช้เครื่องมือ linting และ formatting แบบอัตโนมัติ
- ดำเนินกระบวนการ code review อย่างละเอียดถี่ถ้วน
- จัดเตรียมเอกสารโปรเจกต์และตัวอย่างรูปแบบให้กับ AI
- กำหนดขอบเขตงานของ AI ให้เป็นฟังก์ชันขนาดเล็กที่มีนิยามชัดเจน
- รักษาการดูแลและความรับผิดชอบของมนุษย์ต่อผลลัพธ์สุดท้าย
โซลูชันและแนวทางปฏิบัติที่ดี
ชุมชนนักพัฒนาได้ระบุกลยุทธ์หลายอย่างสำหรับการปรับปรุงการเขียนโค้ดด้วยความช่วยเหลือของ AI ซึ่งรวมถึงการสร้างแนวทางเฉพาะโปรเจกต์ที่ละเอียดสำหรับเครื่องมือ AI การใช้ automated linting และ formatting เพื่อจับปัญหาด้านสไตล์ และการใช้กระบวนการตรวจสอบโค้ดที่ละเอียดถี่ถ้วนมากขึ้น
ทีมบางทีมกำลังทดลองกับการป้อนเอกสารโปรเจกต์ที่ครอบคลุมและตัวอย่างของรูปแบบการเขียนโค้ดที่ต้องการให้โมเดล AI ทีมอื่นๆ เน้นไปที่การใช้ AI สำหรับงานที่เล็กกว่าและมีขอบเขตที่ชัดเจนมากกว่าฟีเจอร์ใหญ่ที่ต้องการความเข้าใจด้านสถาปัตยกรรมอย่างลึกซึ้ง
ฉันทามติดูเหมือนจะเป็นว่าเครื่องมือ AI สามารถมีคุณค่าได้เมื่อใช้อย่างรอบคอบ แต่ต้องการการดูแลและความใส่ใจเช่นเดียวกับเครื่องมือพัฒนาที่ทรงพลังใดๆ กุญแจสำคัญคือการให้แน่ใจว่านักพัฒนาที่เป็นมนุษย์ยังคงมีส่วนร่วมในกระบวนการและรับผิดชอบต่อผลลัพธ์สุดท้าย ไม่ว่าจะถูกสร้างขึ้นมาในตอนแรกอย่างไร
อ้างอิง: I Know When You're Vibe Coding