{"slug": "ai-ekhiiynokhdaethneraaaidaelw-aelweraacchaehluue-aairaihthmaa", "title": "AI เขียนโค้ดแทนเราได้แล้ว — แล้วเราจะเหลืออะไรให้ทำ?", "summary": "A developer argues that while AI tools like GitHub Copilot, Cursor, and Claude can generate code and tests, they lack understanding of business context and intent. The developer warns that AI-generated code may miss critical business flows, increase token costs, and introduce hidden issues like unnecessary dependencies or deleted logic. The developer recommends treating every AI proposal as a PR review and focusing on business requirements rather than just code generation.", "body_md": "มีประโยคที่ได้ยินบ่อยขึ้นทุกวัน: \"เดี๋ยวนี้ใครยังไม่ใช้ AI ช่วยเขียนโค้ดบ้าง?\"\n\nคำตอบคือ — แทบไม่มีแล้วครับ\n\nตั้งแต่ GitHub Copilot, Cursor, Claude, ChatGPT ไปจนถึง agent ที่เขียนโค้ดเองได้ทั้ง project — เราใช้ AI ใน level ที่ต่างกัน:\n\n| Level | หน้าตา | ตัวอย่าง |\n|---|---|---|\n🎵 Vibe Coding\n|\nพิมพ์สิ่งที่อยากได้ กด accept อย่างเดียว | \"เขียนหน้า login ให้หน่อย\" → กด tab tab tab |\n🧩 Prompt-Guided\n|\nคิดก่อน ถามทีละส่วน ตรวจทุกอย่าง | \"สร้าง `UserService` ที่ใช้ `bcrypt` hash password\" |\n🛠️ Skill/Lint-Guided\n|\nใช้ AI เป็น editor ชั้นสูง — lint, refactor, test | \"refactor function นี้ให้เป็น table-driven test\" |\n🏗️ Agent-Based\n|\nให้ AI run ทั้ง project — spawn subagent, PR, deploy | \"พอร์ต microservice นี้จาก Express ไป Fastify\" |\n\nแล้วคำถามคือ — ถ้า AI ทำทั้งหมดนี้ได้ **แล้วมนุษย์อย่างเราเหลืออะไร?**\n\nลองดู unit test ที่ AI เขียนให้:\n\n```\n// 🤖 AI-generated test\nfunc TestCalculateDiscount(t *testing.T) {\n    tests := []struct {\n        name     string\n        input    float64\n        expected float64\n    }{\n        {\"zero\", 0, 0},\n        {\"normal\", 100, 90},   // 10% discount\n        {\"max\", 1000, 800},     // 20% discount\n    }\n    for _, tt := range tests {\n        t.Run(tt.name, func(t *testing.T) {\n            result := CalculateDiscount(tt.input)\n            if result != tt.expected {\n                t.Errorf(\"got %v, want %v\", result, tt.expected)\n            }\n        })\n    }\n}\n```\n\nดูเผิน ๆ — สวย, table-driven, ถูกต้องตาม Go convention1\n\nแต่ถามหน่อย — **test นี้บอกอะไรเกี่ยวกับ business?**\n\n`input: 0, expected: 0`\n\n— test นี้ cover edge case หรือแค่ cover บรรทัด?AI test ได้ถูกต้องตาม function — แต่มัน **ไม่รู้ว่า business จริง ๆ คืออะไร**\n\nนึกภาพระบบ e-commerce:\n\n```\nลูกค้าซื้อสินค้า → ระบบตัดสต็อก → คำนวณส่วนลด → คิดค่าส่ง → ออกใบเสร็จ\n```\n\nAI แยก test ทีละ function ได้:\n\n`TestDeductStock`\n\n— \"ตัดสต็อก 1 ชิ้น\"`TestCalculateDiscount`\n\n— \"ส่วนลด 10%\"`TestCalculateShipping`\n\n— \"ค่าส่ง 50 บาท\"แต่สิ่งที่ AI **ไม่รู้**:\n\n\"ถ้าลูกค้ากดสั่ง แล้วสต็อกเหลือ 0 พอดี — ระบบต้อง reserve ไว้ 15 นาทีให้ลูกค้าจ่ายเงิน ถ้าไม่จ่ายให้คืนสต็อก และต้องส่ง notification ไปที่ร้านด้วย\"\n\nนี่คือ **business flow** — มันไม่ใช่ unit test ของ function ใด function หนึ่ง แต่มันคือเรื่องราวที่เชื่อม function เข้าด้วยกัน และมีแค่ **มนุษย์** เท่านั้นที่รู้ว่ามันควรจะเป็นยังไง\n\nต่อให้โยน requirement ทั้งก้อนเข้า context window — AI ก็อาจจะเชื่อมเรื่องราวถูก **ในวันนี้** แต่อีก 3 เดือนถัดมา:\n\n**AI ไม่มี context ว่า \"ทำไมโค้ดนี้ถึงถูกเขียนขึ้นมา\"** — มันเห็นแค่โค้ด ไม่เห็นความตั้งใจ2\n\nอีกเรื่องที่คนไม่ค่อยพูดถึง: **Token cost**\n\n```\n# AI เสนอ — \"refactor test ทั้งหมดเป็น parameterized\"\n# เพื่อให้ได้ test ที่ดี มันต้องอ่าน:\n#   1. function ที่จะ test (200 lines)\n#   2. test เดิมทั้งหมด (500 lines)\n#   3. business logic ที่เกี่ยวข้อง (300 lines)\n#   4. codebase context — import, types, helpers (1000+ lines)\n#\n# รวม ≈ 10,000-20,000 tokens ต่อรอบ\n# ถ้า refactor ครบ project — 200,000+ tokens\n# \n# ด้วย Claude Sonnet = ~$0.60 USD (200K tokens)\n# ด้วย GPT-4o = ~$1.00 USD\n#\n# ฟังดูไม่เยอะ — แต่ทำแบบนี้ทุกวัน = $20-30/เดือน\n# สำหรับทีม 5 คน = $100-150/เดือน\n# สำหรับทีม 50 คน = $1,000-1,500/เดือน\n```\n\nและนี่แค่ test refactor — ยังไม่นับ code review, PR description, document generation\n\n**ประเด็นไม่ใช่ \"แพง\"** — แต่คือ **\"มันคุ้มกับสิ่งที่ได้ไหม?\"**\n\nคุณคือคนเดียวที่รู้ว่า:\n\n**AI = คนเขียนโค้ด, คุณ = Product Owner ในร่าง developer**\n\nVibe coding4 สนุก — แต่พอ project โตขึ้น:\n\n```\nปัญหาจริง:\n- AI เพิ่ม dependency โดยไม่บอก\n- AI refactor function แล้วลบ business logic สำคัญออก\n- AI duplicate code แทนที่จะ extract shared logic\n- AI เลือก pattern ที่ \"ถูก\" แต่ไม่ใช่ pattern ที่ทีมใช้\n```\n\n**กฏส่วนตัวผม:** AI proposal ทุกอัน = PR review หนึ่งรอบ — `git diff`\n\nทุกไฟล์, ถามตัวเองว่า \"โค้ดนี้ยังสะท้อน business requirement อยู่ไหม?\"\n\nแทนที่จะถาม AI ว่า \"เขียน test ให้ฟังก์ชันนี้หน่อย\" — ลองถามแบบนี้:\n\n\"นี่คือ requirement: 'ลูกค้าที่ซื้อครบ 500 บาทได้ส่งฟรี แต่ถ้าเป็น member ได้ส่งฟรีที่ 300 บาท และถ้าสั่ง pre-order ห้ามรวมกับโปรอื่น' — ช่วยเขียน test ที่ cover requirement นี้ โดยไม่ต้องดูโค้ดเดิม\"\n\nแบบนี้ AI จะเขียน test จาก **business requirement** — ไม่ใช่จาก function signature — และคุณจะได้ test ที่พิสูจน์ว่าโค้ดทำงานถูกต้องตาม business จริง ๆ\n\n```\n❌ Pilot Mode: AI ขับ → คุณนั่งดู\n   \"สร้าง API สำหรับ user management\"\n   → AI ทำทั้งหมด → คุณกด merge\n\n✅ Navigator Mode: คุณขับ → AI นำทาง\n   \"ผมจะสร้าง handler สำหรับ reset password — \n    ช่วยแนะนำ flow ที่ secure หน่อย, \n    OWASP มีอะไรที่ต้องระวัง, \n    แล้วช่วยร่าง test case ให้\"\n   → AI แนะนำ → คุณเขียนโค้ด → AI review\n```\n\nNavigator mode ใช้ token น้อยกว่า, ผิดพลาดน้อยกว่า, และคุณยังเป็นเจ้าของโค้ด5\n\n| AI ทำได้ดี | มนุษย์ต้องทำ |\n|---|---|\n| เขียน boilerplate | ถือ business context |\n| Refactor ตาม pattern | อ่าน diff, ถาม \"ทำไม\" |\n| Generate test จาก function | เขียน test จาก business requirement |\n| แนะนำ best practice | ตัดสินใจว่าใช้ pattern ไหน |\n| หา bug pattern | เข้าใจว่า bug นี้กระทบ business ยังไง |\n| อธิบายโค้ด | เข้าใจ ความตั้งใจ ของโค้ด |\n\nคำถามไม่ใช่ \"AI จะแทนที่ developer ไหม\" — แต่มันคือ:\n\n\"Developer ที่ใช้ AI จะแทนที่ developer ที่ไม่ใช้ — และ developer ที่เข้าใจ business จะแทนที่ทั้งคู่\"\n\n**Table-driven test:** pattern มาตรฐานใน Go — ประกาศ test case เป็น slice ของ struct แล้ว loop `t.Run()`\n\n— อ่านง่าย เพิ่ม test case ง่าย ไม่ต้อง copy-paste โค้ด test ↩\n\n**Code ≠ Intent:** โค้ดคือ \"อะไร\" (what) — requirement, design doc, commit message คือ \"ทำไม\" (why) — AI เห็น what แต่ไม่เห็น why นี่คือช่องว่างที่มนุษย์มีค่า ↩\n\n**AI ชอบเขียนเลยขอบ:** AI มักจะ \"ช่วย\" โดยเพิ่ม edge case handling, validation, error message — ซึ่งดูดีใน diff แต่จริง ๆ แล้วมันกำลังขยาย scope ของงาน — เท่ากับเพิ่ม surface area สำหรับ bug โดยไม่จำเป็น ↩\n\n**Vibe Coding:** คำที่ Andrej Karpathy ใช้เรียกการเขียนโค้ดแบบ \"พิมพ์ prompt → accept → ไม่ดู diff\" — สนุกและ productive สำหรับ prototype แต่ risk สูงมากสำหรับ production ↩\n\n**Navigator vs Pilot:** analogy จาก aviation — pilot มีอำนาจตัดสินใจสุดท้าย navigator ให้ข้อมูล — ในบริบทโค้ด: คุณคือ pilot เพราะคุณต้องรับผิดชอบโค้ดที่ merge เข้า main ↩", "url": "https://wpnews.pro/news/ai-ekhiiynokhdaethneraaaidaelw-aelweraacchaehluue-aairaihthmaa", "canonical_source": "https://dev.to/gophernment/ai-ekhiiynokhdaethneraaaidaelw-aelweraacchaehluueaairaihtham-2kca", "published_at": "2026-06-30 00:40:07+00:00", "updated_at": "2026-06-30 00:48:28.313140+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "developer-tools", "ai-agents", "ai-products"], "entities": ["GitHub Copilot", "Cursor", "Claude", "ChatGPT", "Claude Sonnet", "GPT-4o"], "alternates": {"html": "https://wpnews.pro/news/ai-ekhiiynokhdaethneraaaidaelw-aelweraacchaehluue-aairaihthmaa", "markdown": "https://wpnews.pro/news/ai-ekhiiynokhdaethneraaaidaelw-aelweraacchaehluue-aairaihthmaa.md", "text": "https://wpnews.pro/news/ai-ekhiiynokhdaethneraaaidaelw-aelweraacchaehluue-aairaihthmaa.txt", "jsonld": "https://wpnews.pro/news/ai-ekhiiynokhdaethneraaaidaelw-aelweraacchaehluue-aairaihthmaa.jsonld"}}