- ในสภาพแวดล้อมการพัฒนาแบบ มี AI ช่วยเหลือ มีกรณีเพิ่มขึ้นที่วิศวกรมือใหม่ส่ง PR ขนาดใหญ่ที่ยังไม่ผ่านการตรวจสอบยืนยัน
- ภารกิจหลักของนักพัฒนาไม่ใช่แค่การเขียนโค้ด แต่คือการส่งมอบ โค้ดที่พิสูจน์แล้วว่าใช้งานได้จริง
- เพื่อให้ทำเช่นนั้นได้ จำเป็นต้องทำสองขั้นตอนคือ การทดสอบด้วยตนเอง และ การทดสอบอัตโนมัติ
- แม้แต่ coding agent ก็ควรถูกตั้งค่าให้ตรวจสอบการเปลี่ยนแปลงที่ตัวเองสร้างขึ้นได้ด้วยตนเอง
- ท้ายที่สุดแล้ว ความรับผิดชอบอยู่ที่นักพัฒนามนุษย์ และมีเพียงโค้ดที่มาพร้อมหลักฐานการตรวจสอบยืนยันเท่านั้นที่มีคุณค่าอย่างแท้จริง
ปัญหาของการส่งโค้ดที่ยังไม่ผ่านการตรวจสอบยืนยัน
- มีการกล่าวถึงกรณีที่วิศวกรมือใหม่ซึ่งใช้เครื่องมือ LLM ส่ง PR ขนาดใหญ่ที่ยังไม่ตรวจสอบยืนยัน แล้วพึ่งพา code review
- สิ่งนี้ถูกชี้ว่า ไม่ให้เกียรติและไม่มีประสิทธิภาพ และเป็นการละเลยความรับผิดชอบในฐานะนักพัฒนา
- บทบาทของวิศวกรซอฟต์แวร์ไม่ใช่แค่การผลิตโค้ด แต่คือการส่งมอบ โค้ดที่พิสูจน์แล้วว่าใช้งานได้
- โค้ดที่ยังไม่ผ่านการตรวจสอบยืนยันถือเป็นการผลักภาระไปให้ผู้รีวิว
สองขั้นตอนในการพิสูจน์ว่าโค้ดทำงานได้
- ขั้นตอนแรกคือ การทดสอบด้วยตนเอง โดยต้องตรวจสอบด้วยตัวเองว่าโค้ดทำงานได้ถูกต้อง
- จำเป็นต้องมีขั้นตอนตั้งค่าระบบให้กลับสู่สถานะเริ่มต้น ใช้การเปลี่ยนแปลง แล้วตรวจสอบผลลัพธ์
- สามารถแนบคำสั่งเทอร์มินัลและผลลัพธ์ที่ได้ในคอมเมนต์ code review หรือพิสูจน์ด้วย วิดีโอบันทึกหน้าจอ
- หลังจากยืนยันว่าทำงานปกติแล้ว ควรค้นหาปัญหาผ่าน การทดสอบกรณีขอบ เพิ่มเติม
- ขั้นตอนที่สองคือ การทดสอบอัตโนมัติ ซึ่งถูกย้ำว่าเป็นกระบวนการจำเป็นจากพัฒนาการของเครื่องมือ LLM
- ควรใส่การทดสอบอัตโนมัติไปพร้อมกับการเปลี่ยนแปลง และหากย้อนการแก้ไขกลับ การทดสอบต้องล้มเหลว
- การเขียนเทสต์ใช้ขั้นตอนเดียวกับการทดสอบด้วยตนเอง และ ความสามารถในการผสานรวม test harness เป็นสิ่งสำคัญ
- การคิดว่าการทดสอบอัตโนมัติเพียงอย่างเดียวเพียงพอแล้วจึงข้ามการทดสอบด้วยตนเอง เป็นแนวทางที่ผิด
บทบาทและการตรวจสอบยืนยันของ coding agent
- กระแสสำคัญของวงการ LLM ในปี 2025 คือ การเติบโตอย่างรวดเร็วของ coding agent โดยมี Claude Code และ Codex CLI เป็นตัวอย่างเด่น
- เครื่องมือเหล่านี้สามารถรันโค้ดและแก้ปัญหาด้วยตัวเองได้
- coding agent ก็ต้อง พิสูจน์การเปลี่ยนแปลงของตัวเอง และต้องทำทั้งการทดสอบด้วยตนเองและการทดสอบอัตโนมัติ
- ในกรณีของเครื่องมือ CLI สามารถฝึกให้เอเจนต์รันเองโดยตรง หรือทำให้อัตโนมัติด้วยระบบอย่าง CLIRunner ของ Click
- หากเป็นการแก้ไข CSS ก็สามารถตั้งค่าให้ตรวจสอบผลลัพธ์ผ่าน การจับภาพหน้าจอ ได้
- หากในโปรเจกต์มีเทสต์เดิมอยู่แล้ว เอเจนต์จะขยายต่อหรือใช้แพตเทิร์นเดิมซ้ำ
- โครงสร้างและคุณภาพของโค้ดเทสต์ มีผลโดยตรงต่อคุณภาพการสร้างเทสต์ของเอเจนต์
- สุนทรียะต่อโค้ดเทสต์ ถูกกล่าวถึงว่าเป็นความสามารถหลักที่แยกวิศวกรอาวุโสออกจากคนอื่น
ความรับผิดชอบของมนุษย์และคุณค่าของโค้ด
- คอมพิวเตอร์ไม่สามารถรับผิดชอบได้ และมนุษย์ต้องเป็นผู้รับบทบาทนั้น
- การที่ LLM สร้างแพตช์ขนาดใหญ่ได้ไม่ใช่สิ่งที่มีคุณค่าอีกต่อไป
- คุณค่าที่แท้จริงอยู่ที่การส่งมอบ โค้ดที่พิสูจน์แล้วว่าใช้งานได้
- เมื่อส่ง PR ต้องแนบ หลักฐาน ที่แสดงให้เห็นอย่างชัดเจนว่าโค้ดทำงานได้ถูกต้องเสมอ
4 ความคิดเห็น
เห็นด้วยมากครับ ตอนนี้ความรับผิดชอบของโค้ดในรูปแบบ PR มีโครงสร้างที่ผลักภาระไปให้เมนเทนเนอร์และรีวิวเวอร์ คนที่ส่งโค้ดจาก LLM ที่ไม่ได้รีวิวเข้ามาก็ไม่ได้เสียเปรียบอะไร
พอลองมีส่วนร่วมกับโค้ดเบสของ Google จะเห็นว่ามีการวัดอะไรทำนองเครดิตของคอนทริบิวเตอร์อยู่เหมือนกัน คิดว่าโอเพนซอร์ส / บริษัทอื่น ๆ ก็น่าจะเริ่มนำแนวทางแบบนี้มาใช้กันมากขึ้น ความน่าเชื่อถือน่าจะกลายเป็นทรัพย์สินที่สำคัญยิ่งกว่าเดิม
โอ้ Google ใช้แนวคิดแบบนั้นสินะ
> ไวบ์ Engineering
ความเห็นจาก Hacker News
ช่วงนี้มีเรื่องเล่าน่าหดหู่ที่เห็นบ่อยมาก: วิศวกรจูเนียร์ที่ได้พลังจากเครื่องมือ LLM โยน PR ขนาดมหึมาที่ยังไม่ได้ทดสอบให้เพื่อนร่วมงานหรือเมนเทนเนอร์โอเพนซอร์ส แล้วคาดหวังว่า code review จะจัดการที่เหลือให้เอง ที่แย่กว่านั้นคือพฤติกรรมแบบนี้ไม่ได้มาจากแค่จูเนียร์ แต่ยังมาจากนักพัฒนาระดับซีเนียร์ด้วย
วิธีเขียน PR ที่ดีใช้ได้กับทุกกรณี ไม่ใช่แค่โค้ดที่ AI สร้าง ฉันมักเขียนคำอธิบาย PR โดยเรียงลำดับเป็น วิธีทำงานปัจจุบัน, เหตุผลที่ต้องเปลี่ยน, และสิ่งที่เปลี่ยน พร้อมใส่วิธีทดสอบ สกรีนช็อต และคำสั่ง E2E test เพื่อลดภาระของ reviewer วิธีนี้ยังช่วยมากกับการทำงานแบบ async หรือทีมที่อยู่คนละ time zone
แก่นของการเป็นวิศวกรคือการเข้าใจ requirement แปลงมันเป็นลำดับตรรกะที่ทำงานได้, จัดการ trade-off, และรับผิดชอบต่อผลลัพธ์ การสร้างโค้ดหรือสุ่มส่ง PR ไปเรื่อยคืออาการของการขาดพื้นฐานเหล่านี้เสียมากกว่า coding agent กลับยิ่งเป็นตัวเตือนให้เห็นแก่นแท้ของงานวิศวกรรมอีกครั้ง
การทดสอบเป็นสิ่งจำเป็น แต่ไม่เพียงพอ ต้องตรวจสอบโค้ดด้วยตรรกะด้วย การทดสอบเป็นเพียงการแสดงให้เห็นว่าทำงานปกติภายใต้ input และสภาพแวดล้อมบางแบบเท่านั้น
ฉันไม่ได้มองการทดสอบเป็นภาระหน้าที่ แค่อยากเห็นว่าโค้ดมันทำงานจริง ถ้าการเห็นโค้ดรันแล้วไม่ทำให้ตื่นเต้น งานนี้ก็คงไม่เหมาะกับคุณ
ฉันได้ยินเรื่องที่ว่าด้วย LLM แล้วจูเนียร์จะโยน PR ก้อนใหญ่เข้ามา แต่ในองค์กรของเรายังไม่ค่อยมีแบบนั้น
ฉันไม่เห็นด้วยกับคำว่า “งานของคุณคือส่งมอบโค้ดที่อยู่ในสภาพพิสูจน์แล้ว” งานที่แท้จริงคือการแก้ปัญหาทางธุรกิจ แน่นอนว่าส่วนใหญ่แล้วมันลงเอยที่โค้ด แต่การแยกความต่างนี้สำคัญ
ที่ทำงานเก่าของฉันเป็นผู้ผลิตฮาร์ดแวร์คุณภาพสูงในญี่ปุ่น ถ้าแผนก QA เจอบั๊ก การปล่อยผลิตภัณฑ์จะถูกหยุดทันที เพราะงั้นแต่ละแผนกพัฒนาจึงสร้างทีม QC ของตัวเองขึ้นมาเพื่อเพิ่มการทดสอบล่วงหน้า สุดท้ายซอฟต์แวร์ก็ถูกตรวจสอบอย่างเข้มงวดมาก
ทุกวันนี้แก่นของงานกลายเป็นแค่ปิด ticket ให้ได้ คุณภาพโค้ดไม่ถูกนับในสถิติ เลยกลายเป็นว่าไม่สำคัญ ฉันไม่ร่วมกับระบบแบบนี้อีกแล้ว ตอนนี้ความเป็นช่างฝีมือหายไปหมด ทุกคนอยากได้แต่ไม้อัดราคาถูกกับกาว
ปัญหาคือคำว่า “โค้ดที่พิสูจน์แล้ว” หมายถึงอะไร เพราะบางทีก็มีการแปะชุดทดสอบที่ LLM ทำมาแล้วส่ง PR ก้อนใหญ่เข้ามา ฉันเองก็ทำvibe codingกับโปรเจกต์ส่วนตัว แต่ถ้าทำแบบนั้นในระดับทีมมันเป็นนิสัยที่ไม่ดี เหตุผลที่จ้างวิศวกรก็เพื่อซื้อความเชี่ยวชาญของพวกเขา