Level 5 · Vibe Codingscheduleอ่าน 11 นาที

ตอนมันพังขึ้นมา ทำยังไงไม่ให้พังหนักกว่าเดิม

starsTL;DR

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

ตอนมันพังขึ้นมา ทำยังไงไม่ให้พังหนักกว่าเดิม

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

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

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

สัญชาตญาณที่ทำให้พังหนักกว่าเดิม

ก่อนอื่นต้องเข้าใจว่าทำไมการ "รีบแก้เพิ่ม" ถึงทำให้แย่ลง เพราะนี่คือกับดักที่เกือบทุกคนตกตอนตกใจ

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

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

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

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

ขั้นที่หนึ่ง ถอยกลับไปจุดที่ยังดี

พอหยุดมือได้แล้ว ขั้นต่อไปไม่ใช่การนั่งงมหาว่าพังตรงไหน แต่คือถอยกลับไปก่อน

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

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

สังเกตว่าขั้นนี้กลับลำดับที่สมองอยากทำทั้งหมด สมองอยากแก้ไปข้างหน้าให้จบ ๆ แต่สิ่งที่ถูกคือถอยกลับก่อน แล้วค่อยแก้ตอนใจเย็น

หลายคนติดตรงนี้ เพราะรู้สึกว่า "ถอยกลับ = ทิ้งงานที่เพิ่งทำ" ของที่ฉันเพิ่งแก้ไปจะหายหมดสิ จริง ๆ ไม่หาย ของที่คุณแก้ยังถูกเก็บอยู่ใน git ครบ การถอยกลับไม่ได้ลบมันทิ้ง แค่พาเว็บกลับไปอยู่ในสภาพเก่าชั่วคราว เพื่อให้คนใช้งานได้ก่อน พอคุณเข้าใจแล้วว่ามันพังเพราะอะไร คุณกลับมาหยิบงานที่ทำค้างไว้มาแก้ให้ถูกแล้วส่งขึ้นใหม่ได้เสมอ คิดง่าย ๆ ถอยกลับคือกดหยุดชั่วคราว ไม่ใช่กดลบ

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

ขั้นที่สอง อะไรเปลี่ยนไปตั้งแต่ตอนมันยังดี

พอเว็บกลับมาใช้ได้แล้ว คุณก็มีเวลานั่งหาต้นตอแบบสบาย ๆ และมีวิธีคิดหนึ่งที่ทำให้การหานี้เร็วขึ้นมาก

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

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

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

ขั้นที่สาม ลองใหม่ทีละก้าวเล็กลง

พอเดาได้แล้วว่าต้นตอน่าจะอยู่ตรงไหน คุณก็กลับมาหยิบงานที่ค้างไว้มาแก้ใหม่ แต่คราวนี้แก้คนละแบบกับตอนแรก

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

ขั้นที่สี่ ถ้าพังแบบเดิมสองครั้ง อย่าฝืน

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

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

การยอมหยุดแล้วขอความช่วยเหลือ ไม่ใช่ความล้มเหลว มันคือส่วนหนึ่งของสคริปต์คนเก่ง คนที่ทำงานสายนี้เป็นรู้ว่าเมื่อไหร่ควรหยุดขุดเอง

เปรียบเทียบกับการขับรถหลง

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

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

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

ของจริง เรื่องกล่องขาวบนรูปอวาตาร์

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

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

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

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

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

สรุป สคริปต์ที่ซ้อมไว้ก่อนถึงนาทีจริง

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

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

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

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


อ่านต่อ: รู้จักเพดานของตัวเอง

แหล่งอ้างอิง