Vibe Coding และการร่วมมือกับ AI


เมื่อเทคโนโลยีสร้างแรงบันดาลใจใหม่ให้การสร้างสรรค์

ตลอดระยะเวลาเกือบสิบห้าปีที่ผ่านมา Philip Guo ได้สำรวจการบรรจบกันของเทคโนโลยี การศึกษา และการออกแบบ ในฐานะศาสตราจารย์ด้าน cognitive science และ design ที่ UC San Diego หลายคนอาจเคยอ่านบทความล่าสุดของเขาใน O’Reilly Radar ซึ่งเขาได้บอกเล่าเส้นทางการเพิ่มความสามารถ AI chat เข้าไปใน Python Tutor เครื่องมือ visualization ฟรีที่ช่วยนักเรียนเขียนโปรแกรมนับล้านคนเข้าใจว่าการทำงานของโค้ดเป็นอย่างไร ประสบการณ์นั้นทำให้เขาเริ่มไตร่ตรองถึงความสัมพันธ์ที่กำลังพัฒนาระหว่างตัวเขากับ generative AI ไม่ใช่แค่ในฐานะเครื่องมือ แต่ในฐานะ เพื่อนร่วมงาน ด้วย

ช่วงหลังมานี้ เขาเริ่มสนใจแนวปฏิบัติใหม่ที่เรียกว่า vibe coding ซึ่ง Andrej Karpathy เป็นผู้บัญญัติคำนี้ขึ้น และกำลังเป็นที่พูดถึงอย่างกว้างขวางในวงการเทคโนโลยี Simon Willison อธิบายได้ชัดเจนว่า

เวลาเราพูดถึง vibe coding หมายถึงการสร้างซอฟต์แวร์ด้วย LLM โดยไม่ตรวจสอบโค้ดที่มันสร้าง

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

ในตอนเริ่มต้น เขายังไม่สามารถปล่อยมือได้ขนาดนั้น เขาเป็นคนที่ต้องตรวจสอบโค้ดทุกบรรทัดอย่างพิถีพิถัน และมักจะเขียนใหม่ส่วนใหญ่เสียด้วยซ้ำ แต่เมื่อเวลาผ่านไปและเครื่องมือ AI เหล่านี้พัฒนาขึ้น เขาก็เริ่ม ปล่อยมือ มากขึ้นในบางบริบท อย่างไรก็ตาม เขายังไม่สามารถยอมรับ vibe coding แบบสุดโต่งได้เต็มตัว ด้วยนิสัยของคนที่ทำงานด้านการศึกษา เขาจำเป็นต้องมีการตรวจสอบคุณภาพบางอย่าง นั่นนำไปสู่สิ่งที่เขาเรียกว่า vibe checks จุดตรวจสอบเชิงกลยุทธ์ที่ช่วยสร้างความมั่นใจโดยไม่ต้องย้อนกลับไปตรวจสอบโค้ดทีละบรรทัด เป็นเส้นทางสายกลางที่กลายเป็นเวิร์กโฟลว์ที่ใช้ได้ดีสำหรับโปรเจกต์ส่วนตัวของเขา และวันนี้ เขาอยากแบ่งปันประสบการณ์จากเส้นทางนี้ให้คุณได้เห็น

ตัวอย่างการใช้ Vibe Coding: แปลงไฟล์ HTML 250 ไฟล์เป็น Markdown

ช่วงหลัง เขาหันมาใช้ vibe coding มากขึ้นสำหรับการสร้าง script เล็กๆ ที่ใช้แก้ปัญหาเฉพาะในการทำงานส่วนตัว โดยเฉพาะงานประเภทที่การอธิบายสิ่งที่เขาต้องการให้ AI ฟัง ง่ายกว่าการลงมือเขียนโค้ดเองมาก เช่น งานประมวลผลข้อมูล หรือจัดการไฟล์ต่างๆ ซึ่งผลลัพธ์สามารถตรวจสอบความถูกต้องได้ง่าย

ตัวอย่างหนึ่งที่ชัดเจนคือ ในชั้นเรียนที่เขาสอน เขามีนักเรียนส่งแบบสอบถามผ่านแอปเว็บที่สามารถ export เป็น HTML ได้ ทำให้เขามีไฟล์ HTML กว่า 250 ไฟล์ที่เต็มไปด้วยข้อมูล feedback ของนักเรียน ทว่ามันถูกฝังอยู่ใน markup และ styling code จำนวนมหาศาล สิ่งที่เขาต้องการจริงๆ คือไฟล์ Markdown ที่สะอาดๆ มีเพียงเนื้อหาข้อความ ส่วนหัว (headers) และลิงก์ (hyperlinks) ที่นักเรียนแนบมา

แทนที่จะนั่งเขียนสคริปต์แปลงไฟล์เอง เขาจึงพิมพ์ขอให้ Claude เขียน Python script ที่สามารถแปลงไฟล์ HTML เหล่านี้เป็น Markdown พร้อมทั้งรักษาข้อความ รูปแบบเบื้องต้น และ hyperlinks ไว้ Claude แนะนำให้ใช้ไลบรารี BeautifulSoup ซึ่งเป็นตัวเลือกที่ดี และสร้างสคริปต์ที่สามารถประมวลผลไฟล์ทั้งหมดใน directory และสร้างไฟล์ Markdown คู่กันขึ้นมาโดยอัตโนมัติ

ในภายหลังเขานึกขึ้นได้ว่า ถ้าใช้ Pandoc อาจทำงานนี้ได้เช่นกัน แต่ในจิตวิญญาณของ vibe coding เขาเลือกที่จะ ไปตาม vibe โดยไม่เสียเวลาคิดมาก Part ของ vibe coding คือการข้ามขั้นตอนการเปรียบเทียบเครื่องมือหรือค้นคว้าวิธีที่ดีที่สุด คุณแค่บอกสิ่งที่อยากได้ และไปตามทางที่ได้มา

เขาไม่ได้ตรวจสอบโค้ดที่ Claude สร้างขึ้นเลย เขาเพียงแค่บันทึกมันเป็นไฟล์ Python รันมันบน directory ที่มีไฟล์ HTML ทั้งหมด และรอดูผลลัพธ์ การ run and see แบบนี้คือทั้งความเสรีและความเสี่ยงของ vibe coding เพราะคุณไว้ใจให้ AI ตีความความต้องการของคุณโดยไม่ตรวจสอบรายละเอียดของการ implement

ความไว้วางใจและความเสี่ยงในการทำ Vibe Coding: เมื่อคุณรันโค้ดที่ไม่ได้ตรวจสอบ

ทันทีที่เขากด “run” เพื่อรันสคริปต์ที่ได้จาก vibe coding เขาก็ได้ตระหนักถึงสิ่งหนึ่งที่น่าจะทำให้นักพัฒนาหลายคนรู้สึกหนาวๆ ร้อนๆ คือ เขากำลังรันโค้ดที่ ไม่ได้ตรวจสอบแม้แต่บรรทัดเดียว บนคอมพิวเตอร์ส่วนตัวของเขาเอง และใช้ข้อมูลจริง

ในโลกการพัฒนาซอฟต์แวร์แบบดั้งเดิม นี่ถือเป็นเรื่องที่ใกล้เคียงกับ ประมาท มาก แต่ด้วยยุคของ AI tools อย่าง Claude 3.7 Sonnet หรือ ChatGPT ซึ่งสร้างชื่อเสียงมานานว่าผลิตโค้ดที่ค่อนข้างปลอดภัยและทำงานได้ตามคาด เขาจึงรู้สึกว่าความไว้วางใจในระดับหนึ่งเริ่มก่อตัวขึ้นระหว่างเขากับเครื่องมือเหล่านี้

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

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

ถึงอย่างนั้น เขาก็ยังคิดว่าโลกของ vibe coding ยังขาดบางอย่างที่จะทำให้มัน ปลอดภัยแบบไม่ต้องลุ้น เขาอยากเห็นระบบปฏิบัติการพัฒนาฟีเจอร์ restricted execution mode สำหรับ vibe coding โดยเฉพาะ

ลองจินตนาการว่าคุณสามารถบอกระบบได้ว่า รัน Python script นี้ แต่อนุญาตแค่การสร้างไฟล์ใหม่ในโฟลเดอร์ที่กำหนด ห้ามลบหรือเขียนทับไฟล์เดิม และบล็อกการเชื่อมต่ออินเทอร์เน็ตโดยสิ้นเชิง แนวทางนี้จะเป็น sandbox แบบเบาๆ ที่เพิ่มความสบายใจให้กับการทดลองงานส่วนตัว โดยไม่ลดความสะดวกสบายเหมือนการไปตั้ง Virtual Machine หรือ Docker ขึ้นมาใหม่

บางคนอาจถามว่า แล้วทำไมไม่ใช้ VM, container หรือแม้แต่ cloud services? คำตอบของเขาคือ สำหรับโปรเจกต์ขนาดเล็กส่วนตัว ความสะดวกสบายจากการทำงานบนเครื่องตัวเองโดยตรงนั้น ไม่มีอะไรแทนได้ การต้องอัปโหลดไฟล์ 250 ไฟล์ขึ้น cloud หรือตั้ง Docker environment ใหม่หมด กลายเป็นความยุ่งยากที่ทำลายจุดประสงค์หลักของ vibe coding ไปทันที นั่นคือ ความเร็ว ความง่าย และความลื่นไหล

Vibe Checks: กลยุทธ์ตรวจสอบง่ายๆ สำหรับโค้ดที่สร้างโดย AI

และนี่คือส่วนที่ vibe checks เข้ามามีบทบาทอย่างแท้จริง

อย่างที่เขาได้กล่าวไป การตรวจสอบด้วยตนเองยังโอเคอยู่ในกรณีที่งานมีขนาดเล็ก เช่น เปิดไฟล์ Markdown ที่แปลงเสร็จขึ้นมาสุ่มเช็ก 10-20 ไฟล์จาก 250 ไฟล์ เพื่อดูว่าผลลัพธ์เป็นอย่างที่ต้องการหรือไม่ แต่ถ้างานใหญ่กว่านี้ล่ะ เช่น 2,500 ไฟล์ หรือ 25,000 ไฟล์? การตรวจสอบด้วยสายตาเริ่มไม่ใช่ทางเลือกที่ดีอีกต่อไป

ทางออกคือการสร้าง vibe check script ขึ้นมา มันไม่ใช่การตรวจสอบอย่างละเอียดแบบ unit testing หรือ integration testing แต่เป็นการตรวจสอบง่ายๆ ที่พอให้เรามั่นใจว่าโค้ดหลักทำงานได้ตามเป้าหมายเบื้องต้น

ในกรณีของเขา เขาใช้แนวคิดง่ายๆ ว่า ขนาดไฟล์ Markdown ควรเล็กกว่าไฟล์ HTML เพราะเราลอก markup ออกไปเยอะ ดังนั้นถ้า Markdown ไฟล์ไหนมีขนาดน้อยกว่า 40% ของ HTML ต้นฉบับมากๆ นั่นอาจเป็นสัญญาณว่ามีการแปลงผิดพลาด หรือข้อมูลบางส่วนหายไป

เขาจึงขอให้ Claude ช่วยเขียน vibe check script ที่:

  • หาไฟล์ HTML และ Markdown คู่กัน
  • คำนวณสัดส่วนขนาดไฟล์
  • แจ้งเตือนไฟล์ที่ Markdown มีขนาดน้อยกว่า 40% ของ HTML

ผลลัพธ์น่าสนใจมาก vibe check นี้สามารถจับข้อผิดพลาดหลายไฟล์ที่การแปลงเนื้อหาไม่สมบูรณ์ เขาจึงนำไฟล์ที่พบปัญหานั้นกลับไป refine สคริปต์แปลงไฟล์กับ Claude ใหม่ และทำซ้ำกระบวนการนี้ไปเรื่อยๆ จนกว่าผลลัพธ์จะออกมาไม่มีไฟล์ต้องสงสัยอีก

ที่น่าสนใจอีกอย่างคือ vibe check script เองเป็นโค้ดที่ ง่าย กว่าสคริปต์หลักมาก มันแค่เปรียบเทียบขนาดไฟล์ ซึ่งทำให้เขาสามารถไล่อ่านและตรวจสอบมันด้วยตนเองได้ แม้ว่าเขาจะไม่ได้ตรวจสคริปต์แปลง HTML เป็น Markdown แบบละเอียดก็ตาม

แน่นอนว่า vibe check นี้ไม่สามารถตรวจสอบได้ว่าฟอร์แมตใน Markdown ถูกต้อง หรือ hyperlinks ถูกดึงมาอย่างครบถ้วนหรือไม่ แต่มันสามารถสร้างความมั่นใจในระดับที่ สมเหตุสมผล สำหรับเป้าหมายหลักในตอนนั้นได้อย่างดีเยี่ยม

Vibe Coding + Vibe Checking: สมดุลใหม่ระหว่างความเร็วกับความมั่นใจ

สาระสำคัญที่เขาอยากสื่อก็คือ การทำ vibe coding ไม่ได้แปลว่าคุณต้องละทิ้งการตรวจสอบอย่างสิ้นเชิง หากแต่คุณควร สร้าง vibe check เล็กๆ น้อยๆ ควบคู่กันไป

ทุกครั้งที่ทำ vibe coding เขาจะตั้งคำถามกับตัวเองว่า มีสคริปต์ง่ายๆ อะไรบ้างที่สามารถตรวจสอบความถูกต้องของโค้ดที่สร้างโดย AI ได้อย่างรวดเร็ว?
แม้ว่าการตรวจสอบเหล่านี้จะไม่สมบูรณ์แบบเหมือนการเขียน unit tests สำหรับ production code แต่มันเพียงพอที่จะป้องกันความผิดพลาดที่เห็นได้ชัดเจน และที่สำคัญกว่านั้นคือ มันไม่ขัดจังหวะ flow ของการสร้างสรรค์แบบ vibe coding

การวาง vibe checks ขนานไปกับการทำงานในแต่ละขั้นตอนนี้ คือสิ่งที่ช่วยผสานข้อดีของความเร็วและความคิดสร้างสรรค์จาก vibe coding เข้ากับความเชื่อมั่นในผลลัพธ์แบบงานวิศวกรรมซอฟต์แวร์ปกติ

เขาตื่นเต้นมากกับแนวคิดในอนาคตที่ AI coding assistants อย่าง Claude หรือ ChatGPT อาจพัฒนาตัวเองจนสามารถเสนอ vibe checks ให้กับเราตั้งแต่แรก ไม่ใช่แค่สร้างสคริปต์หลักให้ แต่ยังเสนอ script ตรวจสอบเบื้องต้นด้วย เช่น ในโปรเจกต์แปลง HTML เป็น Markdown ของเขา ถ้า Claude เสนอไฟล์เปรียบเทียบขนาดไฟล์ให้อัตโนมัติได้เลยตั้งแต่แรก มันจะทำให้กระบวนการนี้ไหลลื่นและปลอดภัยขึ้นอีกหลายเท่า

เขาสามารถจินตนาการถึงโลกอนาคตที่เรามี AI coding assistant กึ่งอัตโนมัติที่ทำได้ทั้ง:

  • เขียนโค้ดตามคำอธิบาย
  • สร้าง vibe checks อัตโนมัติ
  • รัน vibe checks นั้นทันที
  • แจ้งเตือนเราเฉพาะเมื่อมีข้อผิดพลาดหรือต้องการการตรวจสอบเพิ่มเติมจากมนุษย์

และถ้าควบคู่กับ sandboxed execution mode ที่เขาพูดถึงไปก่อนหน้านี้ โลกของ vibe coding จะกลายเป็นเครื่องมือทรงพลังอย่างยิ่ง ทั้งสำหรับงานส่วนตัว งานทดลอง หรือแม้แต่งาน prototype ที่นำไปใช้จริงได้แบบปลอดภัยกว่าเดิม

เรื่อง meta: บทความนี้ก็เกิดจาก vibe blogging

และนี่คือจุดหักมุมที่น่าสนใจที่สุดในเรื่องนี้
บทความทั้งหมดที่คุณกำลังอ่านอยู่นี้เอง ก็ถูกสร้างขึ้นผ่านกระบวนการที่เขาเรียกว่า vibe blogging

ในตอนเริ่มต้น เขาได้อัปโหลดบทความเก่าที่เคยเขียนใน O’Reilly เรื่อง Using Generative AI to Build Generative AI ให้กับ Claude เพื่อเป็นข้อมูลอ้างอิง ให้มันได้ทำความเข้าใจสไตล์การเขียน น้ำเสียง (tone) และโครงสร้างบทความตามที่เขาใช้

เขาไม่ได้สั่งให้ Claude เขียนบทความทั้งหมดในครั้งเดียว แต่แบ่งออกเป็นแต่ละ section แล้วให้มันขยาย outline ในแต่ละส่วนตามหัวข้อที่เขาวางไว้ ระหว่างการทำงาน เขาจะทำหน้าที่คล้ายกับ vibe checker คือรีวิวงานแต่ละชิ้น ขอให้แก้ไขในจุดที่ยังไม่ตรงใจ และค่อยๆ ขยับเข้าใกล้บทความที่ต้องการมากขึ้นเรื่อยๆ

กระบวนการนี้สะท้อนแนวทางเดียวกันกับ vibe coding คือ เขาไม่ได้ micromanage ทุกประโยค แต่คุมภาพรวม ทิศทาง และเนื้อหาสาระที่ต้องการสื่อ ในขณะที่ปล่อยให้ AI จัดการรายละเอียดต่างๆ ไป

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

Epilogue: มุมมองจาก Claude และข้อคิดทิ้งท้าย

ย้อนกลับมาดูเบื้องหลังการ vibe blogging ครั้งนี้ Claude ก็ยอมรับว่าผลลัพธ์สุดท้ายอาจไม่ได้สะท้อนน้ำเสียงของเขา 100% ถึงแม้มันจะมีตัวอย่างบทความต้นฉบับเป็นแนวทางอยู่แล้วก็ตาม

การทำงานแบบเขียนทีละ section โดยไม่เห็นภาพรวมทั้งหมดตั้งแต่แรกก็สร้างความท้าทายให้กับ Claude เช่นกัน มันเผลอตกหลุมพรางโดยการยึด outline ที่เขาให้ไว้อย่างตรงตัวเกินไปในบางครั้ง แทนที่จะตีความและขยายความอย่างมีชีวิตชีวามากกว่านั้น

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

ที่สุดแล้ว กระบวนการนี้สอนเราว่า generative AI จะได้ผลดีที่สุด เมื่อมนุษย์ทำหน้าที่เป็นผู้นำทางที่ชัดเจน กำกับทิศทาง และให้ feedback อย่างสม่ำเสมอ

และในท้ายที่สุด เขาขอสารภาพอย่างตรงไปตรงมาว่า ถ้าไม่มี AI อย่าง Claude มาช่วย เขาก็คงไม่มีโอกาสได้เขียนบทความนี้เลย เพราะเขาไม่มีพลังงานพอจะลงมือเขียนบทความ 2,500 คำเต็มๆ ด้วยตัวเองในช่วงนี้ สิ่งที่ AI มอบให้เขา คือการลด activation energy ในการเริ่มต้นสร้างสรรค์โปรเจกต์ส่วนตัว ที่ปกติเขาอาจจะไม่มีแรงแม้แต่จะเริ่ม และนั่นสำหรับเขา คือแรงบันดาลใจที่แท้จริงจากการทำ vibe coding และ vibe blogging

ปล.

Philip Guo เป็นรองศาสตราจารย์ด้าน Cognitive Science และด้าน Computer Science & Engineering ที่ UC San Diego งานวิจัยของเขาครอบคลุมหลายสาขา ตั้งแต่ human-computer interaction, data science, programming tools และ online learning เขาศึกษาว่าผู้คนเรียนรู้การเขียนโปรแกรมคอมพิวเตอร์และ data science อย่างไร และพัฒนาเครื่องมือต่างๆ เพื่อช่วยให้ผู้คนเข้าใจโค้ดและข้อมูลได้ดียิ่งขึ้น ตัวอย่างเช่น เขาเป็นผู้สร้าง Python Tutor visualizer tool pythontutor ซึ่งช่วยให้ผู้คนเรียนรู้การเขียนโปรแกรมด้วย Python, JavaScript, C, C++, และ Java โดยการแสดงภาพการทำงานของโค้ดแบบทีละขั้นตอน

References: