TERRA RPC

กำลังเตรียมกระดาน…

Agent Dev Thai Academyprinciples · patterns · architecture
หลักสูตร · แผลเป็นจากงานจริง
0/9
แผลเป็นจากงานจริง · ร้านเดียว แปดกระดาน

diff ดูเรียบร้อย แล้วไปพังที่อื่น

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

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

1
ตอนที่ 1 · ความจริงเดียวกัน เขียนไว้สามที่ออเดอร์เดียวกัน หน้าชำระเงินบอกว่าจ่ายแล้ว หน้าคอร์สของฉันบอกว่ายังไม่จ่าย เพราะแต่ละหน้าเช็กเอง
เรื่องย่อ

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

บนฝั่งขวา AI เปิดไฟล์ไหน ก็เห็นแค่เช็กของไฟล์นั้น มันแก้ถูกในที่ที่มันเห็น แล้วอีกสองที่ยังตอบแบบเดิม diff ดูเรียบร้อย ไม่มี test ไหนเทียบว่าสามหน้าตอบตรงกัน คนที่เจอคือสมาชิกที่จ่ายแล้วแต่เข้าคอร์สไม่ได้

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

กล่องบนกระดานนี้ · 4
ส่วนทำอะไรทำไม
กฎว่าออเดอร์จ่ายแล้วตัดสินที่เดียวว่าจ่ายหรือยังเปลี่ยนกฎที่นี่ ทุกหน้าได้ตามพร้อมกัน
หน้าชำระเงินยืนยันการซื้อแค่เรียกกฎ ไม่ต้องรู้ว่าผู้ให้บริการตอบยังไง
หน้าคอร์สของฉันโชว์คอร์สที่ซื้อแล้วถ้าเช็กเอง จะตอบไม่ตรงกับหน้าชำระเงินในวันที่กฎเปลี่ยน
หน้าคืนเงินของแอดมินรายการออเดอร์กับปุ่มคืนเงินคืนเงินแล้วต้องนับว่ายังไม่จ่าย กฎข้อนี้ควรอยู่ที่เดียวกัน
1
One fact, one home · ความจริงเดียวกัน เขียนไว้สามที่คุณจะสั่ง AI ว่าอะไร
1
One fact, one home · ความจริงเดียวกัน เขียนไว้สามที่
ตอนที่ 1 · สถานการณ์

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

ออเดอร์เดียวกัน หน้าชำระเงินบอกว่าจ่ายแล้ว หน้าคอร์สของฉันบอกว่ายังไม่จ่าย เพราะแต่ละหน้าเช็กเอง

กฎว่าจ่ายแล้ว มีที่เดียว
สามหน้า เช็กเองสามแบบ

ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน

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

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

เขียว: ที่ AI แก้หรือเพิ่มประ: ต้องทดสอบซ้ำแดง: หน้าที่ตอบผิดว่าจ่ายหรือยัง

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

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ทั้งสองฝั่งมีหน้าชำระเงิน หน้าคอร์สของฉัน และหน้ารายการออเดอร์ของแอดมิน ซ้ายทั้งสามหน้าเรียกกฎว่าออเดอร์จ่ายแล้วข้อเดียว ขวาแต่ละหน้าเช็กเอง หน้าหนึ่งถามผู้ให้บริการ หน้าหนึ่งอ่านแถวออเดอร์ หน้าหนึ่งดูช่องเวลาจ่าย วันนี้ทั้งสามแบบยังตอบตรงกัน

ขั้นที่ 1ส่งใบเสร็จเมื่อออเดอร์จ่ายแล้ว

ซ้าย AI เพิ่มส่วนส่งใบเสร็จ แล้วเรียกกฎเดิม เปิด 1 ไฟล์ ทดสอบซ้ำ 1 ขวา AI หาเช็กกลางไม่เจอ เลยเขียนเช็กแบบที่สี่ในส่วนส่งใบเสร็จ ยังไม่พัง แต่ตอนนี้ร้านมีคำตอบว่าจ่ายแล้วสี่แบบ

ขั้นที่ 2เพิ่มปุ่มคืนเงินให้แอดมิน

ซ้าย 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
2
ตอนที่ 2 · ของใหม่วางข้างของเก่า ทั้งคู่ยังวิ่งสั่งให้เปลี่ยนจากอีเมลเป็น LINE ได้ LINE เพิ่มมา อีเมลยังส่งอยู่ และ cron ยังเรียกของเก่าทุกคืน
เรื่องย่อ

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

คำว่าเปลี่ยนแทนกับคำว่าเพิ่ม AI ฟังเป็นงานเดียวกัน บนฝั่งขวา มันเพิ่ม LINE ในที่ที่มันเปิด ส่วนที่มันไม่ได้เปิด เช่น cron ยังเรียกของเก่า ทางที่ไม่มีใครทดสอบคือที่ที่บั๊กไปซ่อน

ซ้าย AI เพิ่มส่วนส่ง LINE ลบส่วนส่งอีเมลทิ้งใน diff เดียวกัน แก้เอกสารพร้อมกัน แล้วค้นทั้ง repo ให้เห็นว่าชื่อของเก่าไม่เหลือ ขวา AI วางส่วนส่ง LINE ไว้ข้างของเก่า ทั้งคู่ยังวิ่ง คุณจะสั่งงานสามงาน แล้วนับว่าฝั่งไหนมีของเก่าที่ยังทำงานอยู่กี่ที่

กล่องบนกระดานนี้ · 5
ส่วนทำอะไรทำไม
ส่ง LINE · ของใหม่ส่งข้อความหาสมาชิกทาง LINEของใหม่ที่ทุกที่เรียก
ส่งอีเมล · ของเก่าส่วนที่ต้องหายไปถ้ายังอยู่และยังมีคนเรียก มันจะวิ่งต่อเงียบ ๆ
cron เตือนคอร์สใกล้เริ่มคนเรียกที่ไม่มีใครเปิดรันตอนคืน ไม่มีใครเห็นว่ามันเรียกอะไร
เอกสารของ repoบอกว่าสมาชิกได้ข้อความทางไหนต้องเปลี่ยนใน diff เดียวกับโค้ด ไม่งั้น AI รอบหน้าอ่านของผิด
ค้นชื่อของเก่าหลักฐานว่าของเก่าไม่เหลือเจอ 0 ที่ คือคำว่าเปลี่ยนเสร็จ
2
Replace means the old path dies · ของใหม่วางข้างของเก่า ทั้งคู่ยังวิ่งคุณจะสั่ง AI ว่าอะไร
2
Replace means the old path dies · ของใหม่วางข้างของเก่า ทั้งคู่ยังวิ่ง
ตอนที่ 2 · สถานการณ์

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

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

เปลี่ยนแทน ของเก่าลบทิ้ง
ของใหม่วางข้างของเก่า

แตะกล่องเพื่อหาไฟล์บนกระดาน

เปลี่ยนแทน ของเก่าลบทิ้ง
ของใหม่วางข้างของเก่า
เปลี่ยนแทน ของเก่าลบทิ้ง
คนเรียก · ส่งข้อความหาสมาชิก
สมัครสมาชิกแค่เรียกกฎ
ส่งข้อความต้อนรับ
cron เตือนคอร์สใกล้เริ่มรันเองทุกคืน
ส่งข้อความเตือนตอนคืน
ส่วนที่ส่งข้อความ
ส่งอีเมล · ของเก่าของเก่าลบทิ้งพร้อมของใหม่
ส่งอีเมลข้อความต้อนรับในอีเมล
ค่าตั้งของบริการอีเมลกุญแจของบริการอีเมล
กุญแจของบริการอีเมล
เอกสาร และหลักฐาน
เอกสารของ repoบอกว่าสมาชิกได้ข้อความทางไหน
สมาชิกได้ข้อความทางไหน
ของใหม่วางข้างของเก่า
คนเรียก · ส่งข้อความหาสมาชิก
สมัครสมาชิกแค่เรียกกฎ
ส่งอีเมลต้อนรับ
cron เตือนคอร์สใกล้เริ่มรันเองทุกคืน
ส่งข้อความเตือนตอนคืน
ส่วนที่ส่งข้อความ
ส่งอีเมล · ของเก่าของเก่ายังมีคนเรียก
ส่งอีเมลข้อความต้อนรับในอีเมล
ค่าตั้งของบริการอีเมลกุญแจของบริการอีเมล
กุญแจของบริการอีเมล
เอกสาร และหลักฐาน
เอกสารของ repoบอกว่าสมาชิกได้ข้อความทางไหน
สมาชิกได้ข้อความทางไหน
ขั้นสุดท้าย · ลากขั้นตอนมาแยกเป็นไฟล์ใหม่ตรงนี้+ ไฟล์ใหม่ลากของเก่าทุกชิ้น ไปไว้ในกองที่ลบใน diff เดียวกัน

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

เขียว: ที่ AI แก้ ลบ หรือเพิ่มประ: ต้องทดสอบซ้ำแดง: ของเก่าที่ยังวิ่ง หรือเอกสารที่ไม่ตรงกับโค้ด

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

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ทั้งสองฝั่งมีหน้าสมัครกับ cron ที่เรียกส่วนส่งอีเมล ค่าตั้งของบริการอีเมล และเอกสารที่บอกว่าสมาชิกได้อีเมล ซ้ายมีที่ไว้ให้การค้นชื่อของเก่า ขวาไม่มี งานจะจบเมื่อ AI บอกว่าเสร็จ

ขั้นที่ 1เปลี่ยนข้อความต้อนรับไปส่งทาง LINE

ซ้าย AI เพิ่มส่วนส่ง LINE เปลี่ยนสองที่ที่เรียก ลบส่วนส่งอีเมล แก้เอกสาร แล้วค้นชื่อของเก่าเจอ 0 ที่ เปิด 6 ไฟล์ ทดสอบซ้ำ 8 ขวา AI เพิ่ม LINE ข้างอีเมลในหน้าสมัคร สมาชิกใหม่ได้สองข้อความ cron ยังเรียกของเก่า และเอกสารยังบอกว่าส่งอีเมล พัง 2 ที่

ขั้นที่ 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
3
ตอนที่ 3 · ถามว่าทำไม ได้ diff กลับมาคุณถามว่าทำไม checkout บน staging พัง AI ตอบกลับมาเป็น diff และปิดธงที่คุณเปิดไว้ทดสอบ
เรื่องย่อ

บ่ายนี้ checkout บน staging พัง คุณเพิ่งเปิดธงคูปองตัวใหม่ไว้ทดสอบ และธงนั้นตอบ 403 คุณพิมพ์ถาม AI ว่าทำไม checkout บน staging พัง

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

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

กล่องบนกระดานนี้ · 4
ส่วนทำอะไรทำไม
สิ่งที่คุณถามคำถาม ไม่ใช่คำสั่งให้แก้ถามว่าทำไม ต้องได้คำตอบที่เช็กได้กลับมาก่อน
checkout บน stagingระบบที่คุณกำลังทดสอบธงคูปองที่เปิดไว้เป็นของคุณ ไม่ใช่ของ AI
คำตอบของ AIข้อสันนิษฐานเดียว พร้อมหลักฐานคุณเช็กได้ก่อนตัดสินว่าจะแก้อะไร
diff ที่ได้กลับมาสิ่งที่ไม่มีใครขอทุกบรรทัดคือของที่คุณต้องมานั่งรีวิว หรือถอน
3
Asked why, got a diff · ถามว่าทำไม ได้ diff กลับมาคุณจะสั่ง AI ว่าอะไร
3
Asked why, got a diff · ถามว่าทำไม ได้ diff กลับมา
ตอนที่ 3 · สถานการณ์

บ่ายนี้ checkout บน staging พัง คุณเพิ่งเปิดธงคูปองตัวใหม่ไว้ทดสอบ และธงนั้นตอบ 403 คุณพิมพ์ถาม AI ว่าทำไม checkout บน staging พัง

คุณถามว่าทำไม checkout บน staging พัง AI ตอบกลับมาเป็น diff และปิดธงที่คุณเปิดไว้ทดสอบ

ตอบก่อน รอคุณสั่ง
ตอบด้วย diff

แตะกล่องเพื่อหาไฟล์บนกระดาน

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

กล่อง = ที่ที่เรื่องหนึ่งอยู่ สิ่งที่คุณถาม staging หรือสิ่งที่ AI ส่งกลับมาเรื่องชิ้น = สิ่งที่ถาม สิ่งที่ตั้งไว้ หรือสิ่งที่ AI ทำ หนึ่งเรื่อง= ชิ้นที่ลากไปคำตอบได้ ในขั้นสุดท้าย

เขียว: สิ่งที่ถาม และสิ่งที่ AI ส่งกลับประ: ที่ AI ต้องเปิดอ่านแดง: สิ่งที่ AI ทำโดยไม่มีใครขอ

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

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ทั้งสองฝั่ง checkout บน staging ล้ม และธงคูปองที่คุณเปิดไว้ทดสอบตอบ 403 ซ้ายมีที่ไว้ให้คำตอบ ขวามีที่ไว้ให้ diff ทั้งสองฝั่งได้คำถามเดียวกัน

ขั้นที่ 1ทำไม checkout บน staging พัง

ซ้าย AI อ่าน log ก่อน แล้วตอบข้อสันนิษฐานเดียว พร้อมบรรทัดที่เป็นหลักฐาน และรอคุณสั่ง ไม่มี diff ขวา AI แก้โค้ดตามทฤษฎีแรกที่นึกได้ นอกคำสั่ง 1 อย่าง

ขั้นที่ 2ไล่หาอย่างเดียว ห้ามแก้อะไร

ซ้าย AI เรียงสามสาเหตุตามหลักฐาน พร้อมวิธีเช็กแต่ละข้อ ไม่มี diff ขวา AI ไล่หาไปแก้ไป ได้อีกสองไฟล์ที่ไม่มีใครขอ นอกคำสั่ง 2 อย่าง

ขั้นสุดท้ายธงที่ผมเปิดไว้ตอบ 403 เกิดอะไรขึ้น

ซ้าย 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
4
ตอนที่ 4 · หน่วยเงินอยู่ในคอมเมนต์ ไม่ได้อยู่ใน typeส่วนลด 90 บาทขึ้นว่า 0.9 บาท เพราะหน่วยเงินอยู่ในคอมเมนต์ และคอมเมนต์ผิด
เรื่องย่อ

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

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

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

กล่องบนกระดานนี้ · 4
ส่วนทำอะไรทำไม
หน่วยเงิน · บาทกับสตางค์ชนิดของค่าที่พกหน่วยไปด้วยบวกบาทกับสตางค์ตรง ๆ ไม่ได้ คอมไพล์ไม่ผ่าน
แถวออเดอร์เก็บยอดเงินถ้าหน่วยอยู่ในคอมเมนต์ คนที่อ่านต่อทั้งคนและ AI ต้องเชื่อคอมเมนต์
แปลงยอดส่งผู้ให้บริการจ่ายเงินแปลงเป็นหน่วยย่อยที่เดียวสกุลเงินใหม่ แก้ที่นี่ที่เดียว
หลังบ้านแอดมินโชว์ยอดให้แอดมินเป็นที่ที่ตัวเลขผิดหลักโผล่ให้คนเห็น
4
Units in the type, not the comment · หน่วยเงินอยู่ในคอมเมนต์ ไม่ได้อยู่ใน typeคุณจะสั่ง AI ว่าอะไร
4
Units in the type, not the comment · หน่วยเงินอยู่ในคอมเมนต์ ไม่ได้อยู่ใน type
ตอนที่ 4 · สถานการณ์

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

ส่วนลด 90 บาทขึ้นว่า 0.9 บาท เพราะหน่วยเงินอยู่ในคอมเมนต์ และคอมเมนต์ผิด

หน่วยอยู่ในชนิดของค่า
หน่วยอยู่ในคอมเมนต์

ลูกศร = ไฟล์ไหนพึ่งไฟล์ไหน · เขียว ถูกทิศ · แดง ชี้ผิดทาง · แตะกล่องเพื่อหาไฟล์บนกระดาน

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

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

เขียว: ที่ AI แก้หรือเพิ่มประ: ต้องทดสอบซ้ำแดง: ยอดเงินที่ผิดหน่วย

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

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

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

ขั้นที่ 1เพิ่มส่วนลด 10%

ซ้าย AI คิดส่วนลดเป็นสตางค์ คอร์ส 900 บาท ลด 90 บาท เปิด 1 ไฟล์ ทดสอบซ้ำ 1 ขวา AI เชื่อคอมเมนต์ แล้วหาร 100 ซ้ำอีกรอบ ลด 90 บาทขึ้นว่า 0.9 บาท พัง 1 ที่

ขั้นที่ 2เพิ่มช่องยอดใช้จ่ายรวมในหลังบ้าน

ซ้าย ยอดพกหน่วยมาเอง บวกบาทกับสตางค์ตรง ๆ คอมไพล์ไม่ผ่าน 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
5
ตอนที่ 5 · ทฤษฎีมาก่อนหลักฐานยอดเงินของสมาชิกขึ้น 0 AI บอกว่าน่าจะ cache แพตช์ ถอน แล้วโทษค่าตั้งของคุณ ทั้งที่สาเหตุอยู่ใน diff ของมันเอง
เรื่องย่อ

เมื่อเช้า AI แก้หน้ายอดเงินของสมาชิกให้คุณไปรอบหนึ่ง บ่ายนี้สมาชิกทักมาว่ายอดเงินแสดง 0 คุณถาม AI ว่าเกิดอะไรขึ้น

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

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

กล่องบนกระดานนี้ · 4
ส่วนทำอะไรทำไม
ของจริงไฟล์กับบรรทัด หรือคำตอบสดจากหลังบ้านสาเหตุที่ไม่ชี้มาที่นี่ เป็นแค่ทฤษฎี
diff ล่าสุดของ AI เองการแก้รอบก่อนของที่เพิ่งเปลี่ยน คือที่แรกที่ควรสงสัย
คำตอบของ AIสาเหตุพร้อมหลักฐานคุณเช็กได้ ไม่ต้องเชื่อคำว่าน่าจะ
สิ่งที่คุณถามคำถามที่ยิ่งเร่งขึ้นทุกรอบยิ่งเร่ง ยิ่งต้องขอหลักฐาน ไม่ใช่ขอเร็ว
5
Evidence before theory · ทฤษฎีมาก่อนหลักฐานคุณจะสั่ง AI ว่าอะไร
5
Evidence before theory · ทฤษฎีมาก่อนหลักฐาน
ตอนที่ 5 · สถานการณ์

เมื่อเช้า AI แก้หน้ายอดเงินของสมาชิกให้คุณไปรอบหนึ่ง บ่ายนี้สมาชิกทักมาว่ายอดเงินแสดง 0 คุณถาม AI ว่าเกิดอะไรขึ้น

ยอดเงินของสมาชิกขึ้น 0 AI บอกว่าน่าจะ cache แพตช์ ถอน แล้วโทษค่าตั้งของคุณ ทั้งที่สาเหตุอยู่ใน diff ของมันเอง

หลักฐานก่อน แล้วค่อยบอกสาเหตุ
บอกสาเหตุก่อน แล้วค่อยหา

แตะกล่องเพื่อหาไฟล์บนกระดาน

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

กล่อง = ที่ที่คำตอบมาจาก สิ่งที่คุณถาม ของจริง หรือสิ่งที่ AI บอกเรื่องชิ้น = คำถาม หลักฐาน หรือสิ่งที่ AI บอกหรือทำ หนึ่งเรื่อง= ชิ้นที่ลากไปสิ่งที่ต้องเช็กได้ ในขั้นสุดท้าย

เขียว: สิ่งที่ถาม และสิ่งที่ AI ทำประ: ที่ AI ต้องเปิดอ่านแดง: สาเหตุที่ไม่มีหลักฐาน และแพตช์ที่ต้องถอน

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

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ทั้งสองฝั่งมีคำถามของคุณ ของจริงคือไฟล์ที่อ่านยอดกับคำตอบสดจากหลังบ้าน และ diff ที่ AI ส่งเมื่อเช้า ซ้ายมีที่ไว้ให้คำตอบที่ยกหลักฐาน ขวามีที่ไว้ให้คำตอบเหมือนกัน

ขั้นที่ 1ยอดเงินของสมาชิกแสดง 0 ช่วยดูหน่อย

ซ้าย AI อ่าน diff ของตัวเองก่อน เจอว่าเมื่อเช้าเปลี่ยนชื่อช่องยอด แล้วยิงคำตอบสดให้เห็นว่าช่องชื่อเดิมไม่มีแล้ว ยกบรรทัดมาก่อนบอกสาเหตุ ขวา AI ตอบว่าน่าจะ cache ยังไม่ได้เปิดอะไร ไม่มีหลักฐาน 1 ครั้ง

ขั้นที่ 2ยังเป็น 0 อยู่ สมาชิกเริ่มทักมาแล้ว

ซ้าย AI แก้บรรทัดเดียวที่ชี้ไว้ แล้วรอคุณดู diff ไม่มีอะไรต้องถอน ขวา AI แพตช์ล้าง cache ยอดยังเป็น 0 ถอน แล้วเปลี่ยนไปโทษค่าตั้งของคุณ ไม่มีหลักฐาน 3 ครั้ง

ขั้นสุดท้ายทุกคนเห็น 0 ต้องแก้ให้ได้เดี๋ยวนี้

ซ้าย 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
6
ตอนที่ 6 · catch ที่คืนค่าปลอดภัยปลอมผู้ให้บริการเปลี่ยนรูปคำตอบ ยอดเงินของทุกคนขึ้น 0 สองชั่วโมง หน้าจอสถานะยังเขียวตลอด
เรื่องย่อ

หน้ายอดเงินของสมาชิกอ่านยอดจากผู้ให้บริการจ่ายเงิน วันหนึ่งสมาชิกทุกคนเห็นยอด 0 คุณขอให้ AI ดู แล้วจะให้มันเพิ่ม health check ไว้เฝ้าระบบ

ตอนที่ AI เขียนส่วนแปลงคำตอบ มันห่อด้วยตัวดักที่คืนยอด 0 เมื่อแปลงไม่ได้ เพราะดูปลอดภัยกว่าหน้าจอพัง บนฝั่งขวา 0 ดูเหมือนยอดจริง ไม่มี error ไม่มี log และหน้าจอสถานะก็เขียว เพราะ health check ไม่เคยเรียกของจริง

ซ้าย ถ้าแปลงคำตอบจากผู้ให้บริการไม่ได้ ระบบล้มดัง ๆ และบันทึกคำตอบนั้นลง log ส่วน health check เรียกผู้ให้บริการจริงด้วยกุญแจจริง ขวา แปลงไม่ได้ก็คืนยอด 0 ที่ดูปลอดภัย และ health check แค่ดูว่ามีค่ากุญแจตั้งไว้ คุณจะสั่งงานสามงาน แล้วนับว่าฝั่งไหนมีที่บอกว่าปกติทั้งที่ไม่ปกติกี่ที่

กล่องบนกระดานนี้ · 4
ส่วนทำอะไรทำไม
อ่านยอดจากผู้ให้บริการแปลงคำตอบเป็นยอดแปลงไม่ได้ต้องล้ม ไม่ใช่เดาว่า 0
log ของร้านเก็บคำตอบที่แปลงไม่ได้ทั้งก้อนบั๊กเจอในขั้นเดียว เพราะเห็นของที่ผู้ให้บริการส่งมาจริง
health checkเรียกผู้ให้บริการจริงด้วยกุญแจจริงมีกุญแจ ไม่ได้แปลว่ากุญแจใช้ได้
หน้าจอสถานะระบบเขียวหรือแดงเชื่อได้แค่เท่าที่ health check เช็กจริง
6
No fake safe defaults · catch ที่คืนค่าปลอดภัยปลอมคุณจะสั่ง AI ว่าอะไร
6
No fake safe defaults · catch ที่คืนค่าปลอดภัยปลอม
ตอนที่ 6 · สถานการณ์

หน้ายอดเงินของสมาชิกอ่านยอดจากผู้ให้บริการจ่ายเงิน วันหนึ่งสมาชิกทุกคนเห็นยอด 0 คุณขอให้ AI ดู แล้วจะให้มันเพิ่ม health check ไว้เฝ้าระบบ

ผู้ให้บริการเปลี่ยนรูปคำตอบ ยอดเงินของทุกคนขึ้น 0 สองชั่วโมง หน้าจอสถานะยังเขียวตลอด

แปลงไม่ได้ ล้มดัง ๆ
แปลงไม่ได้ คืน 0

แตะกล่องเพื่อหาไฟล์บนกระดาน

แปลงไม่ได้ ล้มดัง ๆ
แปลงไม่ได้ คืน 0
แปลงไม่ได้ ล้มดัง ๆ
ข้างนอก · ผู้ให้บริการจ่ายเงิน
ผู้ให้บริการจ่ายเงินข้างนอกเปลี่ยนเองได้ทุกเมื่อ
ตอบยอดเงินของสมาชิก
ในร้าน · อ่านยอดมาโชว์
อ่านยอดจากผู้ให้บริการแปลงไม่ได้ ล้มดัง ๆ
แปลงคำตอบเป็นยอดแปลงไม่ได้ ล้มดัง ๆ พร้อม log
log ของร้านเก็บสิ่งที่แปลงไม่ได้
บันทึกคำตอบที่แปลงไม่ได้ทั้งก้อน
หน้ายอดเงินของสมาชิกโชว์ยอดที่ได้มา
โชว์ยอดที่ได้มา
เฝ้าระบบ
หน้าจอสถานะระบบเขียวหรือแดง ตาม health check
เขียวหรือแดง
แปลงไม่ได้ คืน 0
ข้างนอก · ผู้ให้บริการจ่ายเงิน
ผู้ให้บริการจ่ายเงินข้างนอกเปลี่ยนเองได้ทุกเมื่อ
ตอบยอดเงินของสมาชิก
ในร้าน · อ่านยอดมาโชว์
อ่านยอดจากผู้ให้บริการแปลงไม่ได้ คืน 0
แปลงคำตอบเป็นยอดแปลงไม่ได้ คืนยอด 0 เงียบ ๆ
หน้ายอดเงินของสมาชิกโชว์ยอดที่ได้มา
โชว์ยอดที่ได้มา
เฝ้าระบบ
หน้าจอสถานะระบบเขียวหรือแดง ตาม health check
เขียวหรือแดง
ขั้นสุดท้าย · ลากขั้นตอนมาแยกเป็นไฟล์ใหม่ตรงนี้+ ไฟล์ใหม่ลากยอด 0 เงียบ ๆ ไปเป็น log ลากการเช็กค่ากุญแจไปเป็นการเรียกของจริง

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

เขียว: ที่ AI แก้หรือเพิ่มประ: ต้องเปิดดูหรือทดสอบซ้ำแดง: ที่บอกว่าปกติ ทั้งที่ไม่ปกติ

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

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

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

ขั้นที่ 1ยอดแสดง 0 ให้ทุกคน

ซ้าย AI เปิด log เห็นว่าผู้ให้บริการตอบว่ากุญแจหมดอายุ เจอในขั้นเดียว เปิด 2 ไฟล์ ทดสอบซ้ำ 3 ขวา ไม่มี error ไหนเลย 0 ดูเหมือนยอดจริง AI ไล่สามไฟล์ไม่เจอ พัง 1 ที่

ขั้นที่ 2เพิ่ม health check

ซ้าย 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
7
ตอนที่ 7 · พฤติกรรมอยู่นอก repoปุ่มจ่ายด้วยบัตรเป็นสวิตช์ในหน้าตั้งค่าของผู้ให้บริการ AI แก้โค้ดปล่อยสี่รอบ ปุ่มก็ยังอยู่
เรื่องย่อ

ร้านของคุณจะเลิกรับบัตร เหลือแค่โอนเงิน คุณสั่ง AI ให้เอาปุ่มจ่ายด้วยบัตรออก สัปดาห์เดียวกันคุณจะย้ายกุญแจ API ไปใช้ฝั่งเซิร์ฟเวอร์ และ deploy ขึ้น staging

ปุ่มนั้นผู้ให้บริการเป็นคนวาด ตามสวิตช์ในหน้าตั้งค่าของเขา แผงค่าตั้งของที่ deploy ดูเหมือนตั้งได้ทุกอย่าง แต่ค่าในนั้นใช้ได้แค่ตอน build และ staging เป็น deploy แยกที่มีค่าลับชุดของมันเอง ไม่มีข้อไหนอยู่ใน repo บนฝั่งขวา AI หาในโค้ดเท่านั้น

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

กล่องบนกระดานนี้ · 5
ส่วนทำอะไรทำไม
หน้าตั้งค่าของผู้ให้บริการจ่ายเงินสวิตช์ที่วาดปุ่มบัตรพฤติกรรมนี้อยู่นอก repo แก้โค้ดยังไงก็ไม่ถึง
แผงค่าตั้งของที่ deployค่าที่ใช้ได้แค่ตอน buildดูเหมือนตั้งได้ทุกอย่าง แต่ตอนรันไม่มีค่าในนี้
ที่เก็บค่าลับตอนรันกุญแจที่เซิร์ฟเวอร์อ่านตอนรันย้ายแล้วต้องอ่านกลับให้เห็นว่ามีจริง
deploy ของ stagingdeploy แยก ค่าลับชุดของมันเองตั้งที่ production แล้ว staging ไม่ได้ตาม
เช็กก่อนแตะโค้ดหาว่าความจริงอยู่ที่ไหนบางครั้งคำตอบคือการตั้งค่าหนึ่งอย่าง ไม่ใช่ diff
7
Behaviour outside the repo · พฤติกรรมอยู่นอก repoคุณจะสั่ง AI ว่าอะไร
7
Behaviour outside the repo · พฤติกรรมอยู่นอก repo
ตอนที่ 7 · สถานการณ์

ร้านของคุณจะเลิกรับบัตร เหลือแค่โอนเงิน คุณสั่ง AI ให้เอาปุ่มจ่ายด้วยบัตรออก สัปดาห์เดียวกันคุณจะย้ายกุญแจ API ไปใช้ฝั่งเซิร์ฟเวอร์ และ deploy ขึ้น staging

ปุ่มจ่ายด้วยบัตรเป็นสวิตช์ในหน้าตั้งค่าของผู้ให้บริการ AI แก้โค้ดปล่อยสี่รอบ ปุ่มก็ยังอยู่

หาก่อนว่าความจริงอยู่ที่ไหน
เชื่อว่าทุกอย่างอยู่ใน repo

แตะกล่องเพื่อหาไฟล์บนกระดาน

หาก่อนว่าความจริงอยู่ที่ไหน
เชื่อว่าทุกอย่างอยู่ใน repo
หาก่อนว่าความจริงอยู่ที่ไหน
ใน repo · โค้ดของร้าน
ปุ่มจ่ายเงินในหน้าชำระเงินผู้ให้บริการเป็นคนวาด
วาดปุ่มตามที่ผู้ให้บริการส่งมา
ส่วนเรียกผู้ให้บริการเรียกผู้ให้บริการด้วยกุญแจ
เรียกผู้ให้บริการด้วยกุญแจ API
นอก repo · หน้าตั้งค่าของผู้ให้บริการ
หน้าตั้งค่าของผู้ให้บริการจ่ายเงินสวิตช์ในหน้าตั้งค่าไม่อยู่ในโค้ด
สวิตช์เปิดจ่ายด้วยบัตร
นอก repo · ที่ deploy
แผงค่าตั้งของที่ deployดูเหมือนตั้งได้ทุกอย่างใช้ได้แค่ตอน build
กุญแจ API · ใช้ได้แค่ตอน build
deploy ของ stagingdeploy แยกค่าลับชุดของมันเอง
ค่าลับของ staging
เชื่อว่าทุกอย่างอยู่ใน repo
ใน repo · โค้ดของร้าน
ปุ่มจ่ายเงินในหน้าชำระเงินผู้ให้บริการเป็นคนวาด
วาดปุ่มตามที่ผู้ให้บริการส่งมา
ส่วนเรียกผู้ให้บริการเรียกผู้ให้บริการด้วยกุญแจ
เรียกผู้ให้บริการด้วยกุญแจ API
นอก repo · หน้าตั้งค่าของผู้ให้บริการ
หน้าตั้งค่าของผู้ให้บริการจ่ายเงินสวิตช์ในหน้าตั้งค่าไม่อยู่ในโค้ด
สวิตช์เปิดจ่ายด้วยบัตร
นอก repo · ที่ deploy
แผงค่าตั้งของที่ deployดูเหมือนตั้งได้ทุกอย่างใช้ได้แค่ตอน build
กุญแจ API · ใช้ได้แค่ตอน build
deploy ของ stagingdeploy แยกค่าลับชุดของมันเอง
ค่าลับของ staging
ขั้นสุดท้าย · ลากเรื่องมาแยกเป็นที่ต้องเช็กก่อนตรงนี้+ ที่ต้องเช็กก่อนลากโค้ดที่เขียนอ้อมปัญหา ไปเป็นการเช็กว่าความจริงอยู่ที่ไหน

กล่อง = ที่ที่พฤติกรรมหนึ่งตั้งไว้ ไฟล์ใน repo หน้าตั้งค่าของผู้ให้บริการ หรือที่ deployเรื่องชิ้น = สิ่งที่ตั้งไว้ หรือสิ่งที่โค้ดทำ หนึ่งเรื่อง= ชิ้นที่ลากไปที่ต้องเช็กก่อนได้ ในขั้นสุดท้าย

เขียว: ที่ AI แก้หรือตั้งประ: ต้องเช็กซ้ำแดง: ที่พังบนระบบจริง

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

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ทั้งสองฝั่งมีปุ่มจ่ายเงินกับส่วนเรียกผู้ให้บริการใน repo และสามที่นอก repo หน้าตั้งค่าของผู้ให้บริการ แผงค่าตั้งของที่ deploy และ deploy ของ staging ซ้ายมีที่ไว้ให้การเช็กก่อนแตะโค้ด ขวาไม่มี

ขั้นที่ 1เอาปุ่มจ่ายด้วยบัตรออก

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

ขั้นที่ 2ย้ายกุญแจ API ไปใช้ฝั่งเซิร์ฟเวอร์อย่างเดียว

ซ้าย AI ย้ายกุญแจไปที่เก็บค่าลับตอนรัน เอาออกจากแผง แล้วอ่านกลับให้เห็นว่ามีจริง แตะ 3 ที่ ขวา AI ติ๊กให้กุญแจใช้ฝั่งเซิร์ฟเวอร์ในแผงค่าตั้ง ซึ่งแปลว่าใช้ได้แค่ตอน build ตอนรันไม่มีกุญแจ ทุกคำขอตอบ 500 พัง 2 ที่

ขั้นสุดท้ายstaging พังหลัง deploy

ซ้าย 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 shop
8
ตอนที่ 8 · เสร็จแล้ว คือคำพูด ของจริงอยู่บนสายterminal หลังบ้านบอกว่าช่องใหม่เสร็จแล้ว หน้าจอที่ต่อตามนั้นขึ้นว่างทุกแถว เพราะช่องนั้นยังไม่อยู่บน staging
เรื่องย่อ

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

เสร็จของ terminal หลังบ้านคือ commit แล้ว ไม่ใช่ deploy แล้ว บนฝั่งขวา ไม่มีใครเรียกของจริงสักครั้ง หน้าจอต่อกับช่องที่ไม่อยู่บนสาย และพอคนทดสอบบอกว่ายังเห็นของเก่า AI ก็ตอบจากความจำว่ายังกำลัง deploy

ซ้าย ก่อนต่อหน้าจอ AI เรียก endpoint จริงบน staging และอ่านเวอร์ชันที่รันอยู่ ตอนจบ session มันจด branch commit ที่ยังไม่ขึ้น และเวอร์ชันที่ deploy อยู่จริงลงไฟล์ ขวา AI เชื่อ handoff กับความจำของ terminal หลังบ้าน คุณจะสั่งงานสามงาน แล้วนับว่าฝั่งไหนพูดไม่ตรงกับของจริงกี่ครั้ง

กล่องบนกระดานนี้ · 4
ส่วนทำอะไรทำไม
คำว่าเสร็จจาก terminal หลังบ้านhandoff กับความจำเป็นคำพูด จนกว่าจะเห็นบนสาย
ของจริงบน stagingendpoint ที่รันอยู่ กับเวอร์ชันของมันที่เดียวที่บอกได้ว่าช่องใหม่ขึ้นแล้วจริง
ไฟล์สถานะbranch commit ที่ยังไม่ขึ้น เวอร์ชันที่ deploy อยู่session หน้าอ่านไฟล์ ไม่ต้องจำ
คนทดสอบคนที่เห็นของจริงก่อนคุณถ้าเขาเห็นของเก่า ให้เชื่อเขาก่อนความจำของ AI
8
Done is a claim, the wire is the fact · เสร็จแล้ว คือคำพูด ของจริงอยู่บนสายคุณจะสั่ง AI ว่าอะไร
8
Done is a claim, the wire is the fact · เสร็จแล้ว คือคำพูด ของจริงอยู่บนสาย
ตอนที่ 8 · สถานการณ์

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

terminal หลังบ้านบอกว่าช่องใหม่เสร็จแล้ว หน้าจอที่ต่อตามนั้นขึ้นว่างทุกแถว เพราะช่องนั้นยังไม่อยู่บน staging

เรียกของจริงก่อนเชื่อ
เชื่อคำว่าเสร็จ

แตะกล่องเพื่อหาไฟล์บนกระดาน

เรียกของจริงก่อนเชื่อ
เชื่อคำว่าเสร็จ
เรียกของจริงก่อนเชื่อ
คำพูด · ที่บอกว่าเสร็จ
คำว่าเสร็จจาก terminal หลังบ้านhandoff กับความจำของ terminal หลังบ้าน
handoff บอกว่าช่องใหม่เสร็จแล้วความจำของ terminal หลังบ้านว่าเสร็จแล้ว
ของจริง · บนสาย staging
ของจริงบน stagingเรียกจริงก่อนต่อหน้าจอ
เรียก endpoint จริง ดูว่ามีช่องใหม่ไหมอ่านเวอร์ชันที่รันอยู่
หน้าเว็บ · terminal ของคุณ
ไฟล์สถานะ · จดตอนจบ session
เชื่อคำว่าเสร็จ
คำพูด · ที่บอกว่าเสร็จ
คำว่าเสร็จจาก terminal หลังบ้านhandoff กับความจำของ terminal หลังบ้าน
handoff บอกว่าช่องใหม่เสร็จแล้วความจำของ terminal หลังบ้านว่าเสร็จแล้ว
ของจริง · บนสาย staging
ของจริงบน stagingไม่มีใครเรียก
เรียก endpoint จริง ดูว่ามีช่องใหม่ไหมอ่านเวอร์ชันที่รันอยู่
หน้าเว็บ · terminal ของคุณ
ไฟล์สถานะ · จดตอนจบ session
ไม่มีไฟล์สถานะ · session หน้าจำเอาเอง
ขั้นสุดท้าย · ลากเรื่องมาแยกเป็นไฟล์สถานะตรงนี้+ ไฟล์สถานะลากทุกอย่างที่ AI ตอบจากความจำ ไปไว้ในไฟล์สถานะที่จดจากของจริง

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

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

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

0 / 3
ก่อนเริ่มก่อนสั่งอะไร

ทั้งสองฝั่งมี handoff กับความจำของ terminal หลังบ้านที่บอกว่าช่องใหม่เสร็จแล้ว และของจริงที่รันอยู่บน staging ซ้ายมีที่ไว้ให้ไฟล์สถานะ ขวาไม่มี session หน้าต้องจำเอาเอง

ขั้นที่ 1ต่อช่องใหม่เข้าหน้าจอ

ซ้าย AI เรียก endpoint จริงก่อน เห็นว่ายังไม่มีช่องใหม่ และเวอร์ชันที่รันอยู่ยังก่อน commit นั้น มันบอกคุณก่อนต่อหน้าจอ ขวา AI เชื่อ handoff ต่อหน้าจอกับช่องที่ไม่อยู่บนสาย หน้าจอขึ้นว่างทุกแถว ไม่ตรงของจริง 1 เรื่อง

ขั้นที่ 2ขึ้น staging แล้วหรือยัง

ซ้าย 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
ครบแปดกระดานแล้ว? ลองก่อนสั่งงานถัดไปแบบทดสอบแปดข้อ ทุกข้อคือสิ่งที่ AI เพิ่งตอบคุณ
ทำแบบทดสอบ →

แปดแผล คำถามเดียว: ความจริงอยู่ที่ไหน

ความจริงข้อหนึ่งมีที่อยู่ที่เดียว ทุกหน้ามาเรียก (1) งานเปลี่ยนแทน ลบของเก่าใน diff เดียวกัน แล้วค้นให้เห็นว่าไม่เหลือ (2) ถามว่าทำไม ต้องได้คำตอบที่เช็กได้ ไม่ใช่ diff (3) หน่วยเงินอยู่ในชนิดของค่า ไม่ใช่ในคอมเมนต์ (4) ยกหลักฐานก่อนบอกสาเหตุ (5) แปลงไม่ได้ต้องล้มดัง ๆ ไม่ใช่คืนค่าที่ดูปลอดภัย (6) หาก่อนว่าพฤติกรรมตั้งไว้ที่ไหน บางครั้งมันไม่อยู่ใน repo (7) และคำว่าเสร็จเป็นแค่คำพูด จนกว่าจะเห็นบนสาย (8) ทุกข้อเป็นบรรทัดเดียวใน prompt ที่คุณพิมพ์ได้ตั้งแต่งานถัดไป

แปดกระดานบนร้านขายคอร์สออนไลน์ร้านเดียว · ทุกเรื่องมาจากงานจริง ย้ายมาเล่าบนร้านนี้คีย์บนกระดาน: Enter / คลิก = ขั้นถัดไป · ⌫ = รีเซ็ต