ถ้าผมต้องเริ่มใช้ AI เขียน code ใหม่ตั้งแต่วันแรก
ถ้าเริ่มใหม่ ผมจะเรียนวิธี reject output ก่อนเขียน prompt ดีๆ: เปลี่ยน logic แทนแก้คำ, steer สั้นๆ ถี่ๆ, v1 ผิดทางก็ทิ้ง, เขียน rules ใน CLAUDE.md ครั้งเดียว และสั่งด้วยข้อห้าม
ถ้าผมต้องเริ่มใช้ AI เขียน code ใหม่ตั้งแต่วันแรก
สิ่งที่ผมจะเรียนก่อน ไม่ใช่วิธีเขียน prompt ที่ดี
แต่เป็นวิธี reject output ที่ไม่ใช่
เพราะ prompt ที่ดีช่วยได้แค่ครั้งเดียว
แต่ taste ที่ดีช่วยได้ทุกครั้ง
5 สิ่งที่ผมอยากรู้ตั้งแต่วันแรก
- อย่าแก้คำ — เปลี่ยน Logic
ตอนแรกผมเขียน prompt แบบนี้:
"fix this bug", "make it cleaner", "refactor"
ตอนนี้ผมเขียนแบบนี้:
"rewrite เหมือนคนที่เคยโดน production incident ตี 2 มาก่อน"
ต่างกันยังไง? อย่างแรกแก้ output อย่างหลังเปลี่ยน generator
ตัวอย่าง: ผมให้ AI เขียน error handler
• v1: generic try-catch ครอบทุก route → ใช้ได้ แต่จืด
• บอก AI: "เขียนเหมือนคนที่เคยดีบัก error ที่ไม่มี log ตอนตี 3"
• v2 → retry logic, structured logging, alert แยกตาม severity
AI เก่งเรื่องเดินตามทางที่คุณขีด แต่อย่าให้มันเลือกทางเอง
- Feedback สั้น คุมทิศถี่
ตอนแรกผมเขียน prompt ยาว 3 paragraphs อธิบายทุกอย่าง
ตอนนี้ผมแค่ steer สั้นๆ:
"over-engineered ตัดออก"
"error handling กว้างไป ต้อง specific"
"ยังไม่ได้รัน อย่าบอกว่า done"
AI ไม่ต้องการ prompt ที่สมบูรณ์แบบ มันต้องการ direction ที่ชัด
3 filters ที่ผมใช้ override AI ทุกรอบ:
Over-engineering Filter — ทำเกินที่ขอ? → ตัด
❌ สั่ง utility function ได้ class hierarchy มา 5 ชั้น
✅ function เดียว ทำงานเดียว ไม่มี abstraction ที่ยังไม่ต้องใช้
Smell Check — code นี้ดูเหมือน AI เขียน? → rewrite
❌ comment ทุกบรรทัด + docstring ยาวกว่า code
✅ code อ่านรู้เรื่อง ไม่ต้องมี comment อธิบาย
Concrete Filter — generic เกินไป? → specific
❌ handleError(err) ที่ swallow ทุก error เหมือนกัน
✅ retry สำหรับ network, alert สำหรับ auth, crash สำหรับ data corruption
Small steps, fast convergence
- ถ้า v1 กาก อย่าแก้ — ฆ่าทิ้ง
ตอนแรกผม refine ทีละจุด แก้ทีละบรรทัด ใช้เวลา 2 ชั่วโมง ได้ code ที่ "ดีขึ้น" แต่ direction ยังผิดอยู่ดี
ตอนนี้: ถ้า approach ผิด → rewrite ทั้งชิ้น
ตัวอย่าง: ผมให้ AI สร้าง callback handler
• v1: switch-case ยาว 200 บรรทัด ทุก action อยู่ใน function เดียว
• ผมไม่ได้แก้ทีละ case — สั่ง rewrite ทั้งหมด
• v2: แตกเป็น handler แยก + shared utility + proper error boundary
Fix thinking, not syntax
ถ้า approach ผิด เขียนใหม่ทั้งชิ้น อย่าแพทช์ทับ
- เขียน Rules ครั้งเดียว ใช้ซ้ำได้ตลอด
สิ่งที่ผมอยากรู้ตั้งแต่วันแรกมากที่สุด: เลิกพูดซ้ำทุกครั้งที่เปิดแชท
เขียนสิ่งที่คุณชอบ/ไม่ชอบ เป็น rules ไว้ใน CLAUDE.md ครั้งเดียว
ตัวอย่าง rules ที่ผมใช้จริง
- ห้าม over-engineer
- ห้าม AI smell
- Specific > generic
- Verify before done
Prompt once, reuse forever
- สั่งด้วย "ห้าม" ไม่ใช่ "อยาก"
สั่งกว้างๆ AI จะมั่ว สั่งด้วยข้อห้าม AI จะคม
ไม่ดี: "สร้าง API endpoint ให้หน่อย"
ดีกว่า:
ห้าม over-engineer
ห้ามใช้ ORM ถ้า raw query ทำได้
error ต้อง return proper status code
ห้ามเกิน 50 lines
Constraint = loss function
บอก AI ว่า "อะไรห้ามทำ" ชัดกว่าบอกว่า "อยากได้อะไร"
สรุป
ถ้าผมเริ่มใหม่ ผมจะไม่ไปหา prompt template
ผมจะเริ่มจากการรู้ว่า output แบบไหนที่ผมจะ reject
• เปลี่ยน Logic > แก้คำ
• Steer ถี่ๆ > ร่ายยาว
• ทุบทิ้ง > ฝืนเกลา
• ฝัง Rules > พูดซ้ำ
• วางกรอบ > ขอร้อง
Prompt engineering สอนคุณเขียน prompt ที่ดี
Prompt taste สอนคุณ reject output ที่ไม่ใช่