ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

AI & Vibe Coding

Pair Programming กับ AI: เทคนิคคุยหลายรอบให้ได้งาน

Pair Programming กับ AI: เทคนิคคุยหลายรอบให้ได้งาน

หลายคนเริ่มใช้ AI เขียนโค้ดด้วยการพิมพ์คำสั่งยาวหนึ่งย่อหน้าแล้วหวังว่าจะได้ระบบที่เสร็จสมบูรณ์ ผลที่ได้มักเป็นโค้ดที่ "เกือบใช่" จากนั้นก็ตามด้วยการสั่งแก้ไปเรื่อย ๆ จนบทสนทนายาวเป็นร้อยข้อความ AI เริ่มลืมสิ่งที่ตกลงกันไว้ตอนต้น และเราก็เริ่มลืมเหมือนกัน บทความนี้จะมองการทำงานกับ AI แบบ pair programming คือมีคนหนึ่งคุมทิศทาง อีกคนลงมือ แล้วคุยกันเป็นรอบสั้น ๆ พร้อมเทคนิคที่ช่วยให้การคุยหลายรอบได้งานจริง ไม่วนอยู่กับที่

บทบาทใน pair: เราเป็น navigator

ใน pair programming แบบดั้งเดิม จะมี driver คนที่จับคีย์บอร์ดพิมพ์ กับ navigator คนที่มองภาพรวม คิดทิศทาง และจับข้อผิดพลาด เมื่อทำงานกับ AI บทบาทที่เหมาะคือให้ AI เป็น driver และเราเป็น navigator

หน้าที่ของ navigator ได้แก่ กำหนดว่ารอบนี้จะทำอะไร ตรวจสิ่งที่ driver ทำทุกครั้ง ตัดสินใจเมื่อมีทางเลือก และหยุดเมื่อเห็นว่ากำลังไปผิดทาง ถ้าเราปล่อยให้ AI ทั้งคิดทั้งพิมพ์ เราจะกลายเป็นผู้ชม ไม่ใช่คู่ pair และนั่นคือจุดที่งานเริ่มหลุดการควบคุม

แบ่งงานย่อยก่อนเริ่ม

งานใหญ่หนึ่งก้อนควรถูกแบ่งเป็นขั้นที่แต่ละขั้น "ตรวจได้" เช่น รันได้ เทสต์ผ่าน หรือเห็นผลบนหน้าจอ ตัวอย่างเช่น ฟีเจอร์ "ให้ผู้ใช้แนบไฟล์ในกระทู้"

  1. เพิ่ม migration ตาราง attachment และ model พร้อม rules
  2. เขียน service รับไฟล์ ตรวจชนิดและขนาด แล้วบันทึกนอก web root
  3. เพิ่ม action อัปโหลดใน controller พร้อมตรวจสิทธิ์
  4. แสดงรายการไฟล์และลิงก์ดาวน์โหลดผ่าน action ที่ตรวจสิทธิ์
  5. เขียนเทสต์สำหรับกรณีไฟล์ผิดชนิด ไฟล์ใหญ่เกิน และผู้ใช้ไม่มีสิทธิ์

เราจะคุยกับ AI ทีละขั้น ตรวจ แล้ว commit ก่อนไปขั้นถัดไป วิธีนี้ทำให้ถ้าขั้นไหนพัง เราย้อนกลับได้แค่ขั้นเดียว และ AI ไม่ต้องจำบริบทยาวเกินไป อีกเทคนิคคือให้ AI ช่วยแบ่งงานเองก่อน แล้วเราค่อยปรับลำดับหรือรวมแยกขั้นตามที่เห็นสมควร

ให้ AI ถามกลับก่อนลงมือ

AI มีนิสัยอยากตอบทันที เมื่อข้อมูลไม่ครบ มันจะเดาส่วนที่ขาดเอง และการเดานั้นมักไม่ตรงกับระบบของเรา วิธีแก้ง่ายมาก คือสั่งให้มันถามก่อน

งาน: ขั้นที่ 2 เขียน AttachmentService สำหรับรับไฟล์อัปโหลดใน Yii2
บริบท: PHP 8.2, Yii2 advanced template, เก็บไฟล์ที่ @common/uploads (นอก web root)

ก่อนเขียนโค้ด ให้ถามคำถามที่จำเป็นต้องรู้ไม่เกิน 5 ข้อ
ถ้าข้อไหนมีค่าเริ่มต้นที่สมเหตุสมผล ให้เสนอค่านั้นมาพร้อมคำถาม
ยังไม่ต้องเขียนโค้ดจนกว่าผมจะตอบ

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

สรุปสิ่งที่ตกลงทุกช่วง

เมื่อคุยไปหลายรอบ ข้อตกลงจะกระจัดกระจายอยู่ในข้อความต่าง ๆ ทั้งเรื่องชื่อ class ข้อจำกัด และสิ่งที่ตัดสินใจไม่ทำ บทสนทนายิ่งยาว โอกาสที่ AI จะ "ลืม" หรือกลับไปใช้แนวทางที่เราปฏิเสธแล้วก็ยิ่งสูง

เทคนิคที่แก้ได้ผลคือ ทุกครั้งที่จบขั้นย่อย ให้ AI สรุปข้อตกลงเป็นรูปแบบคงที่ แล้วเราตรวจและแก้ให้ถูก

สรุปสถานะ (หลังจบขั้นที่ 2)
เป้าหมายรวม: ผู้ใช้แนบไฟล์ในกระทู้ได้
เสร็จแล้ว: migration + model Attachment, AttachmentService::store()
ข้อตกลง:
- อนุญาต jpg, png, pdf ตรวจด้วย MIME จริงจากเนื้อไฟล์ ไม่เชื่อนามสกุล
- ขนาดสูงสุด 5 MB
- ชื่อไฟล์บนดิสก์ = random string, ชื่อเดิมเก็บใน DB เท่านั้น
- ไม่ทำ resize รูปในรอบนี้
ยังไม่ทำ: controller, หน้าแสดงผล, เทสต์
ขั้นถัดไป: ขั้นที่ 3 action upload พร้อมตรวจสิทธิ์

สรุปนี้มีประโยชน์สามต่อ หนึ่ง เราเห็นทันทีว่า AI เข้าใจผิดตรงไหน สอง ใช้เป็นข้อความเปิดเมื่อต้องเริ่ม session ใหม่ สาม ใช้เป็นข้อความ commit หรือคำอธิบาย PR ได้เกือบทันที ควรเก็บสรุปล่าสุดไว้ในไฟล์ในโปรเจกต์ เช่น notes/attachment-feature.md ไม่ใช่อยู่แค่ในหน้าแชต

รู้ว่าเมื่อไรควรเริ่ม session ใหม่

สัญญาณที่บอกว่าบทสนทนาหลงทางแล้ว

  • AI แก้ bug หนึ่งแล้วทำให้ bug เก่ากลับมา วนอยู่สองสามแบบ
  • AI กลับไปใช้ชื่อหรือแนวทางที่เราบอกให้เลิกใช้แล้ว
  • คำตอบเริ่มยาวขึ้น แต่แก้ปัญหาได้น้อยลง
  • เราเองเริ่มไม่แน่ใจว่าตอนนี้โค้ดอยู่ในสถานะไหน

เมื่อเห็นสัญญาณเหล่านี้ อย่าฝืนคุยต่อ ให้หยุด ย้อนโค้ดกลับไป commit ล่าสุดที่ทำงานได้ด้วย Git แล้วเปิด session ใหม่ โดยเริ่มด้วยข้อความเปิดที่สะอาด

เรากำลังทำฟีเจอร์แนบไฟล์ใน Yii2 นี่คือสรุปสถานะล่าสุด:
(วางสรุปสถานะ)

โค้ดที่เกี่ยวข้องตอนนี้:
(วางเฉพาะไฟล์ที่เกี่ยวกับขั้นถัดไป)

รอบก่อนติดปัญหา: (อธิบายสั้น ๆ ว่าพยายามอะไรและล้มเหลวอย่างไร)
งานรอบนี้: ขั้นที่ 3 เท่านั้น ถามก่อนถ้าข้อมูลไม่พอ

การเริ่มใหม่พร้อมบริบทที่คัดมาแล้ว มักได้ผลดีกว่าการพยายามดึงบทสนทนายาวที่สับสนกลับมา เหมือนกับที่คนเราคิดออกง่ายขึ้นหลังลุกไปเดินเล่นแล้วกลับมามองปัญหาใหม่

จังหวะการทำงานหนึ่งรอบ

รวมทุกเทคนิคเข้าด้วยกัน จะได้วงจรสั้น ๆ ที่ใช้ซ้ำได้ทุกขั้น

  1. บอกงานของขั้นนี้พร้อมบริบทที่จำเป็น และให้ถามกลับ
  2. ตอบคำถาม แล้วให้ AI เขียนโค้ด
  3. อ่านโค้ด รันเทสต์ หรือลองบนหน้าจอ
  4. ถ้ามีปัญหา บอกผลที่เห็นจริง ไม่ใช่แค่ "ยังไม่ได้"
  5. เมื่อผ่าน ให้ AI สรุปสถานะ ตรวจสรุป แล้ว commit

ข้อ 4 สำคัญกว่าที่คิด การบอกว่า "ยังไม่ได้" ทำให้ AI ต้องเดาอีกรอบ แต่การแปะ error message จริง หรือบอกว่า "กดอัปโหลดไฟล์ PDF แล้วได้ข้อความ 'ชนิดไฟล์ไม่ถูกต้อง' ทั้งที่เป็น PDF จริง" ให้ข้อมูลที่ AI ใช้หาสาเหตุได้ตรงกว่ามาก

สรุป

  • มองการทำงานกับ AI เป็น pair programming ที่เราเป็น navigator ควบคุมทิศทางและตรวจงาน
  • แบ่งงานเป็นขั้นย่อยที่ตรวจได้ และ commit ทุกขั้น
  • สั่งให้ AI ถามกลับก่อนลงมือ เพื่อลดการเดา
  • ให้ AI สรุปข้อตกลงทุกช่วง แล้วเก็บไว้ในไฟล์ของโปรเจกต์
  • เมื่อบทสนทนาวนหรือหลง ให้ย้อนโค้ดแล้วเริ่ม session ใหม่ด้วยสรุปสถานะ

ลองทำ

เลือกฟีเจอร์ขนาดเล็กที่ต้องทำจริงในสัปดาห์นี้ ให้ AI ช่วยแบ่งเป็น 3–5 ขั้น แล้วทำตามวงจรด้านบนให้ครบทุกขั้น โดยบังคับตัวเองให้ขอสรุปสถานะทุกครั้งที่จบขั้นและเก็บลงไฟล์ เมื่อจบงาน ลองเปิด session ใหม่แล้ววางเฉพาะไฟล์สรุปสุดท้าย ถาม AI ว่า "ฟีเจอร์นี้ทำอะไร มีข้อจำกัดอะไร" ถ้ามันตอบได้ถูกต้อง แปลว่าสรุปของคุณดีพอจะใช้ต่องานหรือส่งต่อให้เพื่อนร่วมทีมได้

ติดปัญหาตอนทำตาม? ถามในชุมชน

ความคิดเห็น (0)

ยังไม่มีความคิดเห็น — เริ่มคุยเป็นคนแรก ถามสิ่งที่สงสัย หรือแชร์ประสบการณ์ของคุณ