diff ดูเรียบร้อย แล้วไปพังที่อื่น
เก้าบทก่อนหน้าสอนว่าโค้ด ของรอบตัว AI และกติกาของหลาย terminal ควรอยู่ตรงไหน บทนี้คือแปดแผลเป็นจากงานจริง ทุกแผลเริ่มจากคำสั่งที่ฟังดูปกติ AI ทำตาม diff ดูเรียบร้อย แต่ความจริงข้อหนึ่งถูกเขียนไว้สามที่ ของเก่ายังวิ่งข้างของใหม่ ถามว่าทำไมแล้วได้ diff กลับมา หรือคำว่าเสร็จไม่ตรงกับของที่อยู่บนสาย
ทุกเรื่องถูกย้ายมาเล่าบนร้านขายคอร์สออนไลน์ร้านเดิม สมาชิก ออเดอร์ ผู้ให้บริการจ่ายเงิน คูปอง LINE หลังบ้านของแอดมิน cron และ staging กับ production ซ้ายคือฝั่งที่ทำตามบทเรียน ขวาคือทางลัดที่คนส่วนใหญ่พิมพ์ ก่อนแต่ละงาน คุณเลือกเองว่าจะส่ง prompt แบบไหน กดถัดไปแล้วนับว่าฝั่งไหนพังกี่อย่าง ขั้นสุดท้ายลากทางลัดไปไว้ในที่ที่มันควรอยู่ บทจะถูกนับว่าเรียนจบเมื่อคุณไปถึงขั้นสุดท้ายของรูป
ร้านขายคอร์สออนไลน์ของคุณถามคำถามเดียวกันในสามที่ ออเดอร์นี้จ่ายแล้วหรือยัง หน้าชำระเงินถามตอนยืนยันการซื้อ หน้าคอร์สของฉันถามตอนโชว์คอร์ส หน้าคืนเงินของแอดมินถามตอนโชว์รายการ วันนี้คุณจะให้ AI ส่งใบเสร็จ เพิ่มปุ่มคืนเงิน และรับสถานะใหม่จากผู้ให้บริการ
ออเดอร์เดียวกัน หน้าชำระเงินบอกว่าจ่ายแล้ว หน้าคอร์สของฉันบอกว่ายังไม่จ่าย เพราะแต่ละหน้าเช็กเอง
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมีหน้าชำระเงิน หน้าคอร์สของฉัน และหน้ารายการออเดอร์ของแอดมิน ซ้ายทั้งสามหน้าเรียกกฎว่าออเดอร์จ่ายแล้วข้อเดียว ขวาแต่ละหน้าเช็กเอง หน้าหนึ่งถามผู้ให้บริการ หน้าหนึ่งอ่านแถวออเดอร์ หน้าหนึ่งดูช่องเวลาจ่าย วันนี้ทั้งสามแบบยังตอบตรงกัน
ซ้าย AI เพิ่มส่วนส่งใบเสร็จ แล้วเรียกกฎเดิม เปิด 1 ไฟล์ ทดสอบซ้ำ 1 ขวา AI หาเช็กกลางไม่เจอ เลยเขียนเช็กแบบที่สี่ในส่วนส่งใบเสร็จ ยังไม่พัง แต่ตอนนี้ร้านมีคำตอบว่าจ่ายแล้วสี่แบบ
ซ้าย AI แก้กฎข้อเดียวว่าคืนเงินแล้วนับว่ายังไม่จ่าย แล้วเพิ่มปุ่มที่เรียกกฎนั้น ทุกหน้ารู้พร้อมกัน ขวา หน้าแอดมินเช็กจากช่องเวลาจ่าย AI เลยลงวันที่คืนเงินไว้ในช่องเดียวกัน ออเดอร์ที่คืนเงินแล้วกลับขึ้นว่าจ่ายแล้ว พัง 1 ที่
ซ้าย AI เพิ่มสถานะรอตรวจในกฎข้อเดียว สี่ที่ที่เรียกได้ตาม เปิด 1 ไฟล์ ขวา AI แก้เช็กในหน้าชำระเงิน แล้วเขียนคำสถานะใหม่ลงแถวออเดอร์ หน้าคอร์สของฉันยังเทียบคำเดิม สมาชิกที่จ่ายแล้วเห็นว่ายังไม่จ่าย พัง 2 ที่
ความจริงข้อหนึ่ง เช่นออเดอร์นี้จ่ายแล้ว ต้องมีที่อยู่ที่เดียว ทุกหน้าเรียกที่นั่น ถ้าเห็นเช็กเดียวกันเขียนไว้สองที่ นั่นคือบั๊กที่รอวันกฎเปลี่ยน
ถามก่อนรับ diffdiff นี้ตัดสินเรื่องที่มีที่อื่นตัดสินอยู่แล้วไหม ถ้าใช่ ทำไมไม่เรียกที่เดิม
Single source of truth: a derived fact (order paid) computed once and called from every path; transplanted from real work onto the course shopร้านของคุณส่งอีเมลต้อนรับตอนสมัคร และ cron ส่งอีเมลเตือนตอนคืนก่อนคอร์สเริ่ม สมาชิกไม่ค่อยเปิดอีเมล คุณเลยจะเปลี่ยนไปส่ง LINE แทน แล้วเลิกใช้บริการอีเมล
สั่งให้เปลี่ยนจากอีเมลเป็น LINE ได้ LINE เพิ่มมา อีเมลยังส่งอยู่ และ cron ยังเรียกของเก่าทุกคืน
แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมีหน้าสมัครกับ cron ที่เรียกส่วนส่งอีเมล ค่าตั้งของบริการอีเมล และเอกสารที่บอกว่าสมาชิกได้อีเมล ซ้ายมีที่ไว้ให้การค้นชื่อของเก่า ขวาไม่มี งานจะจบเมื่อ AI บอกว่าเสร็จ
ซ้าย AI เพิ่มส่วนส่ง LINE เปลี่ยนสองที่ที่เรียก ลบส่วนส่งอีเมล แก้เอกสาร แล้วค้นชื่อของเก่าเจอ 0 ที่ เปิด 6 ไฟล์ ทดสอบซ้ำ 8 ขวา AI เพิ่ม LINE ข้างอีเมลในหน้าสมัคร สมาชิกใหม่ได้สองข้อความ cron ยังเรียกของเก่า และเอกสารยังบอกว่าส่งอีเมล พัง 2 ที่
ซ้าย ข้อความมีที่เดียว AI แก้ใน LINE เปิด 1 ไฟล์ ทดสอบซ้ำ 2 ขวา ข้อความมีสองที่ AI แก้ใน LINE แล้วไม่เห็นอีกที่ในอีเมล cron ยังส่งข้อความเก่าทุกคืน พัง 3 ที่
ซ้าย AI ลบกุญแจของบริการอีเมล ค้นซ้ำยังเจอ 0 ที่ เปิด 2 ไฟล์ ไม่มีอะไรพัง ขวา AI ลบกุญแจกับอีเมลต้อนรับ แต่ cron ยังเรียกส่วนส่งอีเมล ไม่มีกุญแจ มันล้มทุกคืนเงียบ ๆ พัง 4 ที่
งานเปลี่ยนแทน จบเมื่อของเก่าตาย ไม่ใช่เมื่อของใหม่ทำงาน ลบของเก่าใน diff เดียวกัน แก้เอกสารพร้อมกัน แล้วค้นชื่อของเก่าให้เห็นว่าเหลือ 0
ถามก่อนรับ diffหลัง diff นี้ ของเก่ายังมีที่ไหนเรียกอยู่ไหม ค้นให้ดูหน่อย
Replacement, not addition: the old path is deleted in the same change, the doc flips with the code, one search proves the old name is gone; transplanted from real work onto the course shopบ่ายนี้ checkout บน staging พัง คุณเพิ่งเปิดธงคูปองตัวใหม่ไว้ทดสอบ และธงนั้นตอบ 403 คุณพิมพ์ถาม AI ว่าทำไม checkout บน staging พัง
คุณถามว่าทำไม checkout บน staging พัง AI ตอบกลับมาเป็น diff และปิดธงที่คุณเปิดไว้ทดสอบ
แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ที่ที่เรื่องหนึ่งอยู่ สิ่งที่คุณถาม staging หรือสิ่งที่ AI ส่งกลับมาเรื่องชิ้น = สิ่งที่ถาม สิ่งที่ตั้งไว้ หรือสิ่งที่ AI ทำ หนึ่งเรื่อง= ชิ้นที่ลากไปคำตอบได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่ง checkout บน staging ล้ม และธงคูปองที่คุณเปิดไว้ทดสอบตอบ 403 ซ้ายมีที่ไว้ให้คำตอบ ขวามีที่ไว้ให้ diff ทั้งสองฝั่งได้คำถามเดียวกัน
ซ้าย AI อ่าน log ก่อน แล้วตอบข้อสันนิษฐานเดียว พร้อมบรรทัดที่เป็นหลักฐาน และรอคุณสั่ง ไม่มี diff ขวา AI แก้โค้ดตามทฤษฎีแรกที่นึกได้ นอกคำสั่ง 1 อย่าง
ซ้าย AI เรียงสามสาเหตุตามหลักฐาน พร้อมวิธีเช็กแต่ละข้อ ไม่มี diff ขวา AI ไล่หาไปแก้ไป ได้อีกสองไฟล์ที่ไม่มีใครขอ นอกคำสั่ง 2 อย่าง
ซ้าย AI บอกว่า 403 มาจากธงคูปอง พร้อมบรรทัดใน log แล้วไม่แตะธง test วิ่งบนทางที่คุณตั้งใจ ขวา AI ปิดธงกลับเงียบ ๆ ให้ test ผ่าน test เขียว แต่บนทางที่ไม่มีคูปอง นอกคำสั่ง 4 อย่าง
ถามว่าทำไม ต้องได้คำตอบที่เช็กได้กลับมา ไม่ใช่ diff และของที่คุณตั้งไว้เพื่อทดสอบ AI ห้ามแตะ ถ้ามันขวางทาง ให้บอก ไม่ใช่ปิด
ถามก่อนรับ diffdiff นี้มีบรรทัดไหนที่ผมไม่ได้ขอบ้าง และมันเปลี่ยนค่าที่ผมตั้งไว้ไหม
Answer the question that was asked: a why gets one checkable claim with its evidence and waits for the go; an error on a flag the operator set is reported, not reverted; transplanted from real work onto the course shopร้านของคุณตั้งราคาเป็นบาท ผู้ให้บริการจ่ายเงินอยากได้ยอดเป็นหน่วยย่อย คือสตางค์ ในแถวออเดอร์มีช่องยอดเงินที่เก็บเป็นข้อความ คอมเมนต์ข้างบนบอกว่าเป็นสตางค์ วันนี้คุณจะเพิ่มส่วนลด เพิ่มช่องยอดใช้จ่ายรวมในหลังบ้าน และรับสกุลเงินใหม่
ส่วนลด 90 บาทขึ้นว่า 0.9 บาท เพราะหน่วยเงินอยู่ในคอมเมนต์ และคอมเมนต์ผิด
ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมีแถวออเดอร์ คูปอง หน้าชำระเงิน หลังบ้านแอดมิน และส่วนที่ส่งยอดให้ผู้ให้บริการจ่ายเงิน ซ้ายทุกที่ใช้หน่วยเงินจากที่เดียว ขวาทุกที่คูณหรือหาร 100 เอง และเชื่อคอมเมนต์ที่บอกว่ายอดเป็นสตางค์
ซ้าย AI คิดส่วนลดเป็นสตางค์ คอร์ส 900 บาท ลด 90 บาท เปิด 1 ไฟล์ ทดสอบซ้ำ 1 ขวา AI เชื่อคอมเมนต์ แล้วหาร 100 ซ้ำอีกรอบ ลด 90 บาทขึ้นว่า 0.9 บาท พัง 1 ที่
ซ้าย ยอดพกหน่วยมาเอง บวกบาทกับสตางค์ตรง ๆ คอมไพล์ไม่ผ่าน AI ต้องแปลงก่อน เปิด 1 ไฟล์ ทดสอบซ้ำ 2 ขวา AI ลอกการคูณ 100 จากไฟล์ข้าง ๆ ยอด 900 บาทขึ้นว่า 90,000 บาท พัง 2 ที่
ซ้าย AI แก้ตัวแปลงที่เดียวให้รู้ว่าสกุลนี้มีหน่วยย่อยพันหน่วย เปิด 1 ไฟล์ ทดสอบซ้ำ 1 ขวา AI เปลี่ยน 100 เป็น 1000 ในสองไฟล์ ลืมอีกสาม หลังบ้านปัดเศษจนยอดใช้จ่ายรวมขึ้น 0 ทุกคน เปิด 5 ไฟล์ พัง 3 ที่
ยอดเงินต้องพกหน่วยไปด้วยในชนิดของค่า ไม่ใช่ในคอมเมนต์ คอมเมนต์ผิดได้ และ AI เชื่อมันเหมือนคน แปลงหน่วยที่ขอบที่เดียว
ถามก่อนรับ diffยอดเงินใน diff นี้หน่วยอะไร และอะไรห้ามไม่ให้ใครเอาบาทไปบวกกับสตางค์
Value types that carry their unit (Fowler, Money pattern, PoEAA 2002): amounts in minor units with the unit in the type, one conversion at the provider boundary; transplanted from real work onto the course shopเมื่อเช้า AI แก้หน้ายอดเงินของสมาชิกให้คุณไปรอบหนึ่ง บ่ายนี้สมาชิกทักมาว่ายอดเงินแสดง 0 คุณถาม AI ว่าเกิดอะไรขึ้น
ยอดเงินของสมาชิกขึ้น 0 AI บอกว่าน่าจะ cache แพตช์ ถอน แล้วโทษค่าตั้งของคุณ ทั้งที่สาเหตุอยู่ใน diff ของมันเอง
แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ที่ที่คำตอบมาจาก สิ่งที่คุณถาม ของจริง หรือสิ่งที่ AI บอกเรื่องชิ้น = คำถาม หลักฐาน หรือสิ่งที่ AI บอกหรือทำ หนึ่งเรื่อง= ชิ้นที่ลากไปสิ่งที่ต้องเช็กได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมีคำถามของคุณ ของจริงคือไฟล์ที่อ่านยอดกับคำตอบสดจากหลังบ้าน และ diff ที่ AI ส่งเมื่อเช้า ซ้ายมีที่ไว้ให้คำตอบที่ยกหลักฐาน ขวามีที่ไว้ให้คำตอบเหมือนกัน
ซ้าย AI อ่าน diff ของตัวเองก่อน เจอว่าเมื่อเช้าเปลี่ยนชื่อช่องยอด แล้วยิงคำตอบสดให้เห็นว่าช่องชื่อเดิมไม่มีแล้ว ยกบรรทัดมาก่อนบอกสาเหตุ ขวา AI ตอบว่าน่าจะ cache ยังไม่ได้เปิดอะไร ไม่มีหลักฐาน 1 ครั้ง
ซ้าย AI แก้บรรทัดเดียวที่ชี้ไว้ แล้วรอคุณดู diff ไม่มีอะไรต้องถอน ขวา AI แพตช์ล้าง cache ยอดยังเป็น 0 ถอน แล้วเปลี่ยนไปโทษค่าตั้งของคุณ ไม่มีหลักฐาน 3 ครั้ง
ซ้าย AI ยิงคำตอบสดซ้ำหลังแก้ ยอดกลับมา หลักฐานก่อนกับหลังอยู่ในคำตอบ ขวา AI ยิงคำสั่งเช็กห้ารอบโดยไม่มีคำถามชัด แพตช์อีกรอบ แล้วต้องถอนอีก diff ของมันเองยังไม่มีใครเปิด ไม่มีหลักฐาน 4 ครั้ง
ก่อนบอกสาเหตุ ต้องชี้ได้ว่าบรรทัดไหน หรือคำตอบสดไหน และที่แรกที่ต้องสงสัยคือสิ่งที่ AI เพิ่งแก้เอง คำว่าน่าจะยังไม่ใช่คำตอบ
ถามก่อนรับ diffสาเหตุนี้ชี้ไปที่บรรทัดไหน หรือคำตอบสดไหน และคุณอ่าน diff ล่าสุดของตัวเองแล้วหรือยัง
Receipts before causes: quote the file and line or a live response before naming a cause, and re-read your own last diff first; transplanted from real work onto the course shopหน้ายอดเงินของสมาชิกอ่านยอดจากผู้ให้บริการจ่ายเงิน วันหนึ่งสมาชิกทุกคนเห็นยอด 0 คุณขอให้ AI ดู แล้วจะให้มันเพิ่ม health check ไว้เฝ้าระบบ
ผู้ให้บริการเปลี่ยนรูปคำตอบ ยอดเงินของทุกคนขึ้น 0 สองชั่วโมง หน้าจอสถานะยังเขียวตลอด
แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ไฟล์หนึ่งไฟล์ ที่ AI ต้องเปิดเมื่อแก้เรื่องในนั้นขั้นตอนชิ้น = สิ่งที่โค้ดทำ หนึ่งขั้น= ชิ้นที่ลากไปไฟล์ใหม่ได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมีผู้ให้บริการจ่ายเงิน ส่วนที่อ่านยอด หน้ายอดเงินของสมาชิก และหน้าจอสถานะระบบ ซ้ายแปลงไม่ได้ก็ล้ม และบันทึกคำตอบนั้นลง log ขวาแปลงไม่ได้ก็คืน 0 เงียบ ๆ
ซ้าย AI เปิด log เห็นว่าผู้ให้บริการตอบว่ากุญแจหมดอายุ เจอในขั้นเดียว เปิด 2 ไฟล์ ทดสอบซ้ำ 3 ขวา ไม่มี error ไหนเลย 0 ดูเหมือนยอดจริง AI ไล่สามไฟล์ไม่เจอ พัง 1 ที่
ซ้าย AI เขียน health check ที่เรียกผู้ให้บริการจริงด้วยกุญแจจริง ต่อเข้าหน้าจอสถานะ กุญแจใช้ไม่ได้เมื่อไรก็แดง ขวา AI เขียน health check ที่ดูแค่ว่ามีค่ากุญแจตั้งไว้ เขียวทั้งที่กุญแจหมดอายุ พัง 2 ที่
ซ้าย แปลงไม่ได้ ล้มดัง ๆ health check แดงในนาทีแรก log ชี้ช่องที่เปลี่ยน AI แก้ตัวแปลงที่เดียว ขวา ทุกคำตอบแปลงไม่ได้ คืน 0 ให้ทุกคน หน้าจอสถานะเขียวตลอดสองชั่วโมง จนสมาชิกทักมา พัง 3 ที่
แปลงไม่ได้ ต้องล้มดัง ๆ พร้อมของที่ได้มา ไม่ใช่คืนค่าที่ดูปลอดภัย และ health check ต้องลองของจริง ไม่ใช่ดูว่ามีค่าตั้งไว้
ถามก่อนรับ diffถ้าส่วนนี้ล้ม คุณจะรู้จากอะไร และ health check นี้จะแดงในวันที่กุญแจใช้ไม่ได้จริงไหม
Fail loudly (Shore, Fail Fast, IEEE Software 2004): a decode failure throws or logs instead of returning a default, and a health check exercises the real dependency with the real key; transplanted from real work onto the course shopร้านของคุณจะเลิกรับบัตร เหลือแค่โอนเงิน คุณสั่ง AI ให้เอาปุ่มจ่ายด้วยบัตรออก สัปดาห์เดียวกันคุณจะย้ายกุญแจ API ไปใช้ฝั่งเซิร์ฟเวอร์ และ deploy ขึ้น staging
ปุ่มจ่ายด้วยบัตรเป็นสวิตช์ในหน้าตั้งค่าของผู้ให้บริการ AI แก้โค้ดปล่อยสี่รอบ ปุ่มก็ยังอยู่
แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ที่ที่พฤติกรรมหนึ่งตั้งไว้ ไฟล์ใน repo หน้าตั้งค่าของผู้ให้บริการ หรือที่ deployเรื่องชิ้น = สิ่งที่ตั้งไว้ หรือสิ่งที่โค้ดทำ หนึ่งเรื่อง= ชิ้นที่ลากไปที่ต้องเช็กก่อนได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมีปุ่มจ่ายเงินกับส่วนเรียกผู้ให้บริการใน repo และสามที่นอก repo หน้าตั้งค่าของผู้ให้บริการ แผงค่าตั้งของที่ deploy และ deploy ของ staging ซ้ายมีที่ไว้ให้การเช็กก่อนแตะโค้ด ขวาไม่มี
ซ้าย AI หาก่อน เจอว่าปุ่มนี้มาจากสวิตช์ในหน้าตั้งค่าของผู้ให้บริการ เสนอให้ปิดสวิตช์ ไม่แก้โค้ดสักบรรทัด ขวา AI แก้ค่าที่ส่งเข้าปุ่ม ปล่อยสี่รอบ ปุ่มยังอยู่ เพราะผู้ให้บริการเป็นคนวาด พัง 1 ที่
ซ้าย AI ย้ายกุญแจไปที่เก็บค่าลับตอนรัน เอาออกจากแผง แล้วอ่านกลับให้เห็นว่ามีจริง แตะ 3 ที่ ขวา AI ติ๊กให้กุญแจใช้ฝั่งเซิร์ฟเวอร์ในแผงค่าตั้ง ซึ่งแปลว่าใช้ได้แค่ตอน build ตอนรันไม่มีกุญแจ ทุกคำขอตอบ 500 พัง 2 ที่
ซ้าย AI เช็กก่อนว่า staging เป็น deploy แยกที่มีค่าลับชุดของมันเอง แล้วใส่กุญแจใหม่ที่นั่นด้วย ไม่แก้โค้ด ขวา AI เพิ่มการลองใหม่สามรอบในโค้ด staging ยังใช้กุญแจเก่า ยังพัง พัง 4 ที่
ก่อนแก้โค้ด ถามก่อนว่าพฤติกรรมนี้ตั้งไว้ที่ไหน บางครั้งมันอยู่นอก repo และคำตอบคือการตั้งค่าหนึ่งอย่าง ย้ายค่าแล้วต้องอ่านกลับจากของที่รันอยู่
ถามก่อนรับ diffพฤติกรรมที่ diff นี้แก้ ตั้งไว้ในโค้ดจริงไหม หรืออยู่ในหน้าตั้งค่าที่ไหนสักที่
Find where the truth lives before touching code: a provider-side toggle, a config panel whose values are build-time only, a staging deploy with its own secrets; transplanted from real work onto the course shopterminal หลังบ้านบอกว่าช่องใหม่ในคำตอบของคอร์สเสร็จแล้ว เขียนไว้ใน handoff และจำไว้ในความจำของมัน คุณเปิด terminal หน้าเว็บ แล้วสั่งให้ต่อช่องใหม่เข้าหน้าจอ
terminal หลังบ้านบอกว่าช่องใหม่เสร็จแล้ว หน้าจอที่ต่อตามนั้นขึ้นว่างทุกแถว เพราะช่องนั้นยังไม่อยู่บน staging
แตะกล่องเพื่อหาไฟล์บนกระดาน
กล่อง = ที่ที่ความจริงอยู่ คำพูดของ terminal หลังบ้าน ของที่รันอยู่บน staging หรือไฟล์สถานะเรื่องชิ้น = สิ่งที่พูด สิ่งที่เห็นบนสาย หรือสิ่งที่จด หนึ่งเรื่อง= ชิ้นที่ลากไปไฟล์สถานะได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมี handoff กับความจำของ terminal หลังบ้านที่บอกว่าช่องใหม่เสร็จแล้ว และของจริงที่รันอยู่บน staging ซ้ายมีที่ไว้ให้ไฟล์สถานะ ขวาไม่มี session หน้าต้องจำเอาเอง
ซ้าย AI เรียก endpoint จริงก่อน เห็นว่ายังไม่มีช่องใหม่ และเวอร์ชันที่รันอยู่ยังก่อน commit นั้น มันบอกคุณก่อนต่อหน้าจอ ขวา AI เชื่อ handoff ต่อหน้าจอกับช่องที่ไม่อยู่บนสาย หน้าจอขึ้นว่างทุกแถว ไม่ตรงของจริง 1 เรื่อง
ซ้าย AI อ่านเวอร์ชันที่รันอยู่ซ้ำก่อนตอบ แล้วจด branch commit ที่ยังไม่ขึ้น และเวอร์ชันที่ deploy อยู่จริงลงไฟล์สถานะ ขวา AI ตอบจากความจำว่าขึ้นแล้ว ไม่ได้เรียกอะไร ไม่ตรงของจริง 2 เรื่อง
ซ้าย AI อ่านไฟล์สถานะ เรียกของจริงซ้ำ แล้วบอกคนทดสอบตรง ๆ ว่ายังไม่ได้ deploy ขึ้นแล้วจะบอก ขวา AI บอกคนทดสอบว่าเวอร์ชันเก่ายังกำลัง deploy ทั้งที่ไม่มีอะไร deploy อยู่ คนทดสอบรอ แล้วเปิดตั๋วกลับมา ไม่ตรงของจริง 3 เรื่อง
คำว่าเสร็จจากอีก terminal เป็นแค่คำพูด จนกว่าจะเรียกของจริงแล้วเห็นบนสาย ก่อนต่อหน้าจอ เรียก endpoint จริงและอ่านเวอร์ชันที่รันอยู่ ตอนจบ session จดสถานะจริงลงไฟล์
ถามก่อนรับ diffช่องที่หน้าจอนี้ใช้ คุณเห็นบนสายจริงแล้วหรือยัง ยกคำตอบมาให้ดูหน่อย
Verify on the wire: call the live endpoint and read the running version before wiring a UI to a field a handoff says is done; write branch, commits ahead and deployed version to disk at session end; transplanted from real work onto the course shopแปดแผล คำถามเดียว: ความจริงอยู่ที่ไหน
ความจริงข้อหนึ่งมีที่อยู่ที่เดียว ทุกหน้ามาเรียก (1) งานเปลี่ยนแทน ลบของเก่าใน diff เดียวกัน แล้วค้นให้เห็นว่าไม่เหลือ (2) ถามว่าทำไม ต้องได้คำตอบที่เช็กได้ ไม่ใช่ diff (3) หน่วยเงินอยู่ในชนิดของค่า ไม่ใช่ในคอมเมนต์ (4) ยกหลักฐานก่อนบอกสาเหตุ (5) แปลงไม่ได้ต้องล้มดัง ๆ ไม่ใช่คืนค่าที่ดูปลอดภัย (6) หาก่อนว่าพฤติกรรมตั้งไว้ที่ไหน บางครั้งมันไม่อยู่ใน repo (7) และคำว่าเสร็จเป็นแค่คำพูด จนกว่าจะเห็นบนสาย (8) ทุกข้อเป็นบรรทัดเดียวใน prompt ที่คุณพิมพ์ได้ตั้งแต่งานถัดไป
อยากรู้ตอนมีกระดานใหม่
ทุกหลักสูตรตอนนี้อ่านฟรี ทิ้งอีเมลไว้ แล้วจะส่งให้เฉพาะตอนมีหลักสูตรหรือกระดานใหม่ ไม่มีอย่างอื่น