← ทำไมตาถึงอ่านกราฟนี้ได้เร็วกว่า
LEVEL 4 · ระดับเทพ
ชุดเครื่องมือที่เอาไปใช้ต่อได้เอง
บทที่แล้วรื้อสไลด์หนึ่งใบด้วยกลไกทั้งเล่ม บทนี้ทำสิ่งเดียว — บีบวิธีนั้นให้เล็กพอที่จะพกติดตัวไปใช้กับสไลด์ใบต่อไปของคุณเอง
และเล่มนี้จะจบด้วยสิ่งที่มันสัญญาไว้ตั้งแต่หน้าแรก คือไม่ให้กฎ สิ่งที่คุณจะได้จากบทนี้เป็น คำถาม ไม่ใช่คำสั่ง เพราะคำถามใช้ได้กับสถานการณ์ที่เล่มนี้ไม่เคยเห็น ส่วนกฎใช้ไม่ได้
15.1 เจ็ดคำถาม ไม่ใช่เจ็ดกฎ
ทุกข้อในตารางนี้ตอบด้วยตัวเลขได้ ไม่มีข้อไหนที่ต้องตอบด้วยความรู้สึก และช่องขวาสุดบอกว่าถ้าตกแล้วต้องกลับไปทำอะไร ไม่ใช่แค่บอกว่าตก
| คำถาม | กลไกอยู่บทที่ | ถ้าตก ทำอะไรต่อ |
|---|---|---|
| ช่องว่างที่แคบที่สุดได้ส่วนแบ่งเท่าไหร่ของช่วงที่ช่องทางมีให้ | 4 · 5 | ขึ้นบันไดหนึ่งขั้น · ถ้าขั้นบนสุดยังตก แปลว่าปัญหาไม่ใช่ชนิดกราฟ ให้เปลี่ยนสิ่งที่วัดหรือพิมพ์ตัวเลขไปเลย |
| ฐานแกนบิดสัดส่วนไปกี่เท่า | 6 · 9 | ความยาวต้องเริ่มจากศูนย์ · ตำแหน่งซูมได้แต่ต้องทำเครื่องหมายบอก |
| สีกำลังแบกอะไรอยู่ | 8 | แบกปริมาณ ให้เหลือสีเดียวไล่ความสว่าง · แบกกลุ่ม ให้ย้ายเป็นป้ายติดชิ้น |
| คนอ่านต้องไล่ทีละชิ้นกี่ครั้ง | 2 · 11 | เรียงตามค่า · ติดป้าย · พิมพ์ค่า จนกว่าจะเหลือศูนย์ |
| หมึกที่ไม่ตอบคำถามไหนเลยเหลือกี่ชิ้น | 7 | ถามทีละชิ้นว่าลบแล้วมีคำถามไหนที่ตอบไม่ได้อีกต่อไปหรือเปล่า |
| ชุดที่แสดงครบขอบเขตไหม ทับกันไหม | 12 | ทับกันแปลว่าใช้เกณฑ์แบ่งปนกัน ให้กลับไปแก้ที่เกณฑ์ อย่าย้ายรายการ |
| หัวข้อแบกข้อที่ภาพแบกไม่ไหวครบไหม | 13 | เขียนข้อที่ตกลงไปในหัวข้อ · เกลาถ้อยคำได้ ห้ามเติมข้อเท็จจริง |
สังเกตว่าไม่มีคำว่า "อย่า" อยู่ในตารางเลยสักช่อง เพราะทุกช่องเป็นการวัดแล้วตัดสิน ไม่ใช่การห้ามล่วงหน้า
15.2 เช็กลิสต์ในรูปของโปรแกรม
ตารางข้างบนใช้ด้วยมือได้ แต่มันจะไม่ถูกใช้จริงถ้าต้องนั่งไล่เอง สคริปต์ข้างล่าง (audit.py) จึงเอาทั้งเจ็ดข้อมาไว้ในฟังก์ชันเดียว แล้วรับสไลด์เป็น dict หนึ่งก้อน
เกือบทุกสูตรในไฟล์นี้ยกมาจากบทก่อนหน้าตรง ๆ · ที่เพิ่มใหม่มีสามอย่าง คืออันดับบันไดของบทที่ 5 ในรูปตัวเลข · ทางออกเมื่อเรขาคณิตให้ส่วนแบ่งไม่ได้ · และการตรวจว่าชุดที่แสดงรวมได้เท่าขอบเขตไหม
และมันตอบเป็น สามสถานะ ไม่ใช่สองอย่างที่เช็กลิสต์ทั่วไปทำ — ผ่าน · ตก · ข้าม · สถานะที่สามสำคัญที่สุด เพราะบางคำถามไม่เกี่ยวกับสไลด์ใบนั้นเลย (วงกลมไม่มีฐานแกนให้ตัด) และบางคำถามเครื่องมือตอบไม่ได้จริง ๆ (ความชันกับความเข้มไม่มีสูตรส่วนแบ่งของช่วง) · การเอาสองกรณีนี้ไปนับเป็น "ผ่าน" คือการโกหกตัวเอง
"""เช็กลิสต์เจ็ดข้อในรูปของโปรแกรม — คัดลอกไฟล์นี้ไปใช้กับสไลด์ของคุณเองได้เลย"""
K = 0.05
LADDER = {"ตำแหน่ง": 1, "ความยาว": 3, "ความชัน": 4, "มุม": 5, "พื้นที่": 6, "ความเข้ม": 7}
# คำถามเจ็ดข้อ กับบทที่กลไกของมันอยู่ — ลำดับนี้ตรงกับลำดับที่ audit() ตรวจ
CHECKS = [
("ช่องทางแบกช่องว่างที่แคบที่สุดไหวไหม", "4-5"),
("ฐานแกนบิดสัดส่วนหรือเปล่า", "6, 9"),
("สีกำลังแบกปริมาณอยู่ไหม", "8"),
("คนอ่านต้องไล่ทีละชิ้นกี่ครั้ง", "2, 11"),
("หมึกที่ไม่ตอบคำถามไหนเลยเหลือกี่ชิ้น", "7"),
("ชุดที่แสดงครบขอบเขตไหม", "12"),
("หัวข้อแบกข้อที่ภาพแบกไม่ไหวครบไหม", "13"),
]
def share_of_range(gap, vals, channel):
"""ช่องว่าง gap ได้ส่วนแบ่งเท่าไหร่ของช่วงที่ช่องทางมีให้ — None = เรขาคณิตตอบไม่ได้"""
hi, total = max(vals), sum(vals)
if channel in ("ตำแหน่ง", "ความยาว"):
return gap / hi
if channel == "มุม":
return gap / total
if channel == "พื้นที่":
return (hi ** 0.5 - (hi - gap) ** 0.5) / hi ** 0.5
return None
def lie_factor(a, b, floor):
real = abs(a - b) / min(a, b)
ha, hb = a - floor, b - floor
return abs(ha - hb) / min(ha, hb) / real
def audit(name, s):
"""ตรวจสไลด์หนึ่งใบ — สถานะต่อข้อมีสามแบบ: True ผ่าน · False ตก · None ตอบไม่ได้"""
vals = [v for _, v in s["data"]]
rank = sorted(s["data"], key=lambda kv: -kv[1])
steps = [(rank[i], rank[i + 1]) for i in range(len(rank) - 1)]
tight = min(steps, key=lambda p: p[0][1] - p[1][1])
big, small = tight[0][1], tight[1][1]
gap = big - small
rows = []
# 1 · ช่องทาง (บทที่ 4-5)
rung = LADDER[s["channel"]]
share = share_of_range(gap, vals, s["channel"])
if share is None:
rows.append((None, f"ช่องทาง {s['channel']} = ขั้น {rung} ของบันได "
f"· เรขาคณิตให้ส่วนแบ่งของช่วงไม่ได้ ต้องตัดสินด้วยมือ"))
else:
rows.append((share >= K, f"ช่องว่างแคบสุด {gap} จุด ได้ {share * 100:.2f}% ของช่วง "
f"(ช่องทาง {s['channel']} = ขั้น {rung} ของบันได)"))
# 2 · ฐานแกน (บทที่ 6, 9) — เกี่ยวเฉพาะช่องทางที่อ่านค่าจากความยาว
floor = s.get("axis_floor")
if s["channel"] not in ("ความยาว", "พื้นที่"):
rows.append((None, f"ช่องทาง {s['channel']} ไม่มีฐานแกนให้ตัด ข้อนี้ไม่เกี่ยว"))
elif floor is None:
rows.append((None, "ช่องทางนี้อ่านค่าจากความยาว แต่ spec ไม่ได้บอกฐานแกน จึงตัดสินไม่ได้"))
elif floor >= small:
rows.append((False, f"ฐานแกนที่ {floor} ตัดจนแท่งที่สั้นกว่าเหลือ {small - floor} "
f"· สัดส่วนหายไปทั้งหมด ตัวคูณคำนวณไม่ได้ด้วยซ้ำ"))
else:
lf = lie_factor(big, small, floor)
rows.append((abs(lf - 1) < 0.01, f"ฐานแกนที่ {floor} -> ตัวคูณคำโกหก {lf:.2f}"))
# 3 · สี (บทที่ 8) — ข้อนี้อ่านจาก spec ล้วน สคริปต์ไม่ได้เห็นสีจริง
rows.append((s["color_carries"] != "ปริมาณ",
f"spec บอกว่าสีทำหน้าที่ {s['color_carries']} ด้วย {s['hues']} สี"))
# 4 · งานโหมดไล่ทีละชิ้น (บทที่ 2, 11)
n = len(s["data"])
serial = (n if s["legend"] else 0) + (0 if s["sorted_by_value"] else n - 1) \
+ (0 if s["values_printed"] else n)
rows.append((serial == 0, f"คนอ่านต้องไล่ทีละชิ้น {serial} ครั้ง"))
# 5 · หมึกเปล่า (บทที่ 7) — อ่านจาก spec ล้วนเหมือนกัน ต้องนับจากภาพจริงมาก่อน
ink = s["ink"]
rows.append((ink["เปล่า"] == 0,
f"spec บอกว่าหมึกเปล่า {ink['เปล่า']} ชิ้น จาก {sum(ink.values())} "
f"· หมึกที่เป็นข้อมูล {ink['ข้อมูล'] / sum(ink.values()) * 100:.1f}%"))
# 6 · ความครบของชุด (บทที่ 12)
names = [k for k, _ in s["data"]]
complete = sum(vals) == s["universe"] and len(set(names)) == len(names)
rows.append((complete, f"{len(names)} กลุ่ม รวมได้ {sum(vals)} จากขอบเขต {s['universe']}"))
# 7 · หัวข้อ (บทที่ 13) — เทียบรายการที่คำนวณได้ กับรายการที่ spec ประกาศว่าหัวข้อพูดถึง
# ช่องทางที่เรขาคณิตวัดไม่ได้ (or 0) ถือว่าภาพแบกไม่ไหวทุกข้อไว้ก่อน จนกว่าจะพิสูจน์ว่าไหว
need = [(a[0], b[0], a[1] - b[1]) for a, b in steps + [(rank[0], rank[-1])]
if (share_of_range(a[1] - b[1], vals, s["channel"]) or 0) < K]
missing = [f for f in need if f not in s["headline_facts"]]
rows.append((not missing,
f"ภาพแบกไม่ไหว {len(need)} ข้อ "
f"· spec บอกว่าหัวข้อพูดถึง {len(need) - len(missing)} ข้อ"))
mark = {True: "ผ่าน", False: "ตก ", None: "ข้าม"}
tally = {v: sum(1 for ok, _ in rows if ok is v) for v in (True, False, None)}
print(f"=== {name} — ตก {tally[False]} · ผ่าน {tally[True]} · ข้าม {tally[None]} "
f"จาก {len(rows)} ข้อ ===")
for i, ((ok, detail), (question, src)) in enumerate(zip(rows, CHECKS), start=1):
print(f" {i}. [{mark[ok]}] {question} (บทที่ {src})")
print(f" {detail}")
print()
return tally[False]
DATA = [("ก", 22), ("ข", 18), ("ค", 25), ("ง", 16), ("จ", 19)]
SLIDE_BEFORE = dict(
data=DATA, universe=100, channel="มุม", axis_floor=None,
legend=True, sorted_by_value=False, values_printed=False,
hues=5, color_carries="ตัวตนของกลุ่ม",
ink={"ข้อมูล": 5, "บริบท": 2, "เปล่า": 11},
headline_facts=[],
)
SLIDE_AFTER = dict(
data=DATA, universe=100, channel="ความยาว", axis_floor=0,
legend=False, sorted_by_value=True, values_printed=True,
hues=1, color_carries="เน้นข้อสรุป",
ink={"ข้อมูล": 16, "บริบท": 2, "เปล่า": 0},
headline_facts=[("จ", "ข", 1)],
)
before = audit("สไลด์ตั้งต้นของบทที่ 14", SLIDE_BEFORE)
after = audit("สไลด์ที่ประกอบใหม่ในบทที่ 14", SLIDE_AFTER)
print(f"ข้อที่ตก {before} -> {after} โดยตัวเลขต้นทางไม่ขยับเลยสักตัว")
print("ทุกข้อที่ตกมีชื่อบทกำกับ จึงย้อนกลับไปอ่านกลไกที่มันมาได้เสมอ")
# --- เคสที่เครื่องมือต้องไม่ตาย: ช่องทางที่เรขาคณิตวัดไม่ได้ กับฐานแกนที่ตัดเกิน ---
print("\n=== เอาไปใช้กับสไลด์แบบอื่นแล้วมันตอบว่าอะไร ===")
audit("ถ้าเข้ารหัสด้วยความเข้มบน heatmap", {**SLIDE_AFTER, "channel": "ความเข้ม"})
audit("ถ้าเผลอตัดฐานแกนไว้ที่ 18", {**SLIDE_AFTER, "axis_floor": 18})
print("=== แผนที่ของ FIG 15.1: บทไหนอยู่ตรงไหน ===")
for i, (question, src) in enumerate(CHECKS, start=1):
print(f" ข้อ {i} <- บทที่ {src}: {question}")
print(" กรอบความคิด (ไม่ใช่ข้อตรวจ) <- บทที่ 1, 3, 10")ผลรันจริง
=== สไลด์ตั้งต้นของบทที่ 14 — ตก 4 · ผ่าน 2 · ข้าม 1 จาก 7 ข้อ ===
1. [ตก ] ช่องทางแบกช่องว่างที่แคบที่สุดไหวไหม (บทที่ 4-5)
ช่องว่างแคบสุด 1 จุด ได้ 1.00% ของช่วง (ช่องทาง มุม = ขั้น 5 ของบันได)
2. [ข้าม] ฐานแกนบิดสัดส่วนหรือเปล่า (บทที่ 6, 9)
ช่องทาง มุม ไม่มีฐานแกนให้ตัด ข้อนี้ไม่เกี่ยว
3. [ผ่าน] สีกำลังแบกปริมาณอยู่ไหม (บทที่ 8)
spec บอกว่าสีทำหน้าที่ ตัวตนของกลุ่ม ด้วย 5 สี
4. [ตก ] คนอ่านต้องไล่ทีละชิ้นกี่ครั้ง (บทที่ 2, 11)
คนอ่านต้องไล่ทีละชิ้น 14 ครั้ง
5. [ตก ] หมึกที่ไม่ตอบคำถามไหนเลยเหลือกี่ชิ้น (บทที่ 7)
spec บอกว่าหมึกเปล่า 11 ชิ้น จาก 18 · หมึกที่เป็นข้อมูล 27.8%
6. [ผ่าน] ชุดที่แสดงครบขอบเขตไหม (บทที่ 12)
5 กลุ่ม รวมได้ 100 จากขอบเขต 100
7. [ตก ] หัวข้อแบกข้อที่ภาพแบกไม่ไหวครบไหม (บทที่ 13)
ภาพแบกไม่ไหว 4 ข้อ · spec บอกว่าหัวข้อพูดถึง 0 ข้อ
=== สไลด์ที่ประกอบใหม่ในบทที่ 14 — ตก 1 · ผ่าน 6 · ข้าม 0 จาก 7 ข้อ ===
1. [ตก ] ช่องทางแบกช่องว่างที่แคบที่สุดไหวไหม (บทที่ 4-5)
ช่องว่างแคบสุด 1 จุด ได้ 4.00% ของช่วง (ช่องทาง ความยาว = ขั้น 3 ของบันได)
2. [ผ่าน] ฐานแกนบิดสัดส่วนหรือเปล่า (บทที่ 6, 9)
ฐานแกนที่ 0 -> ตัวคูณคำโกหก 1.00
3. [ผ่าน] สีกำลังแบกปริมาณอยู่ไหม (บทที่ 8)
spec บอกว่าสีทำหน้าที่ เน้นข้อสรุป ด้วย 1 สี
4. [ผ่าน] คนอ่านต้องไล่ทีละชิ้นกี่ครั้ง (บทที่ 2, 11)
คนอ่านต้องไล่ทีละชิ้น 0 ครั้ง
5. [ผ่าน] หมึกที่ไม่ตอบคำถามไหนเลยเหลือกี่ชิ้น (บทที่ 7)
spec บอกว่าหมึกเปล่า 0 ชิ้น จาก 18 · หมึกที่เป็นข้อมูล 88.9%
6. [ผ่าน] ชุดที่แสดงครบขอบเขตไหม (บทที่ 12)
5 กลุ่ม รวมได้ 100 จากขอบเขต 100
7. [ผ่าน] หัวข้อแบกข้อที่ภาพแบกไม่ไหวครบไหม (บทที่ 13)
ภาพแบกไม่ไหว 1 ข้อ · spec บอกว่าหัวข้อพูดถึง 1 ข้อ
ข้อที่ตก 4 -> 1 โดยตัวเลขต้นทางไม่ขยับเลยสักตัว
ทุกข้อที่ตกมีชื่อบทกำกับ จึงย้อนกลับไปอ่านกลไกที่มันมาได้เสมอ
=== เอาไปใช้กับสไลด์แบบอื่นแล้วมันตอบว่าอะไร ===
=== ถ้าเข้ารหัสด้วยความเข้มบน heatmap — ตก 1 · ผ่าน 4 · ข้าม 2 จาก 7 ข้อ ===
1. [ข้าม] ช่องทางแบกช่องว่างที่แคบที่สุดไหวไหม (บทที่ 4-5)
ช่องทาง ความเข้ม = ขั้น 7 ของบันได · เรขาคณิตให้ส่วนแบ่งของช่วงไม่ได้ ต้องตัดสินด้วยมือ
2. [ข้าม] ฐานแกนบิดสัดส่วนหรือเปล่า (บทที่ 6, 9)
ช่องทาง ความเข้ม ไม่มีฐานแกนให้ตัด ข้อนี้ไม่เกี่ยว
3. [ผ่าน] สีกำลังแบกปริมาณอยู่ไหม (บทที่ 8)
spec บอกว่าสีทำหน้าที่ เน้นข้อสรุป ด้วย 1 สี
4. [ผ่าน] คนอ่านต้องไล่ทีละชิ้นกี่ครั้ง (บทที่ 2, 11)
คนอ่านต้องไล่ทีละชิ้น 0 ครั้ง
5. [ผ่าน] หมึกที่ไม่ตอบคำถามไหนเลยเหลือกี่ชิ้น (บทที่ 7)
spec บอกว่าหมึกเปล่า 0 ชิ้น จาก 18 · หมึกที่เป็นข้อมูล 88.9%
6. [ผ่าน] ชุดที่แสดงครบขอบเขตไหม (บทที่ 12)
5 กลุ่ม รวมได้ 100 จากขอบเขต 100
7. [ตก ] หัวข้อแบกข้อที่ภาพแบกไม่ไหวครบไหม (บทที่ 13)
ภาพแบกไม่ไหว 5 ข้อ · spec บอกว่าหัวข้อพูดถึง 1 ข้อ
=== ถ้าเผลอตัดฐานแกนไว้ที่ 18 — ตก 2 · ผ่าน 5 · ข้าม 0 จาก 7 ข้อ ===
1. [ตก ] ช่องทางแบกช่องว่างที่แคบที่สุดไหวไหม (บทที่ 4-5)
ช่องว่างแคบสุด 1 จุด ได้ 4.00% ของช่วง (ช่องทาง ความยาว = ขั้น 3 ของบันได)
2. [ตก ] ฐานแกนบิดสัดส่วนหรือเปล่า (บทที่ 6, 9)
ฐานแกนที่ 18 ตัดจนแท่งที่สั้นกว่าเหลือ 0 · สัดส่วนหายไปทั้งหมด ตัวคูณคำนวณไม่ได้ด้วยซ้ำ
3. [ผ่าน] สีกำลังแบกปริมาณอยู่ไหม (บทที่ 8)
spec บอกว่าสีทำหน้าที่ เน้นข้อสรุป ด้วย 1 สี
4. [ผ่าน] คนอ่านต้องไล่ทีละชิ้นกี่ครั้ง (บทที่ 2, 11)
คนอ่านต้องไล่ทีละชิ้น 0 ครั้ง
5. [ผ่าน] หมึกที่ไม่ตอบคำถามไหนเลยเหลือกี่ชิ้น (บทที่ 7)
spec บอกว่าหมึกเปล่า 0 ชิ้น จาก 18 · หมึกที่เป็นข้อมูล 88.9%
6. [ผ่าน] ชุดที่แสดงครบขอบเขตไหม (บทที่ 12)
5 กลุ่ม รวมได้ 100 จากขอบเขต 100
7. [ผ่าน] หัวข้อแบกข้อที่ภาพแบกไม่ไหวครบไหม (บทที่ 13)
ภาพแบกไม่ไหว 1 ข้อ · spec บอกว่าหัวข้อพูดถึง 1 ข้อ
=== แผนที่ของ FIG 15.1: บทไหนอยู่ตรงไหน ===
ข้อ 1 <- บทที่ 4-5: ช่องทางแบกช่องว่างที่แคบที่สุดไหวไหม
ข้อ 2 <- บทที่ 6, 9: ฐานแกนบิดสัดส่วนหรือเปล่า
ข้อ 3 <- บทที่ 8: สีกำลังแบกปริมาณอยู่ไหม
ข้อ 4 <- บทที่ 2, 11: คนอ่านต้องไล่ทีละชิ้นกี่ครั้ง
ข้อ 5 <- บทที่ 7: หมึกที่ไม่ตอบคำถามไหนเลยเหลือกี่ชิ้น
ข้อ 6 <- บทที่ 12: ชุดที่แสดงครบขอบเขตไหม
ข้อ 7 <- บทที่ 13: หัวข้อแบกข้อที่ภาพแบกไม่ไหวครบไหม
กรอบความคิด (ไม่ใช่ข้อตรวจ) <- บทที่ 1, 3, 10ผลรันนี้มีสามจุดที่ควรอ่านช้า ๆ
จุดแรก สไลด์ที่ประกอบใหม่ ยังตกข้อที่หนึ่งอยู่ ช่องว่าง 1 จุดได้ 4.00% ซึ่งยังไม่ถึงเกณฑ์ นี่ไม่ใช่ความล้มเหลวของบทที่ 14 แต่มันคือสิ่งที่หัวข้อ 5.4 บอกไว้ตั้งแต่แรกว่า บางชุดข้อมูลไม่มีช่องทางไหนแสดงได้ และทางออกไม่ใช่การไล่เปลี่ยนชนิดกราฟ · ข้อที่เจ็ดจึงผ่าน เพราะข้อที่ตกถูกย้ายไปอยู่ในหัวข้อเรียบร้อยแล้ว เช็กลิสต์ที่ดีไม่ได้บังคับให้ทุกข้อผ่าน มันบังคับให้ทุกข้อที่ตกมีที่ไป
จุดที่สอง ข้อที่สามผ่านทั้งสองใบ เพราะสไลด์นี้ไม่ได้เอาสีไปแบกตัวเลขตั้งแต่ต้น ซึ่งเป็นเรื่องปกติและควรเป็นแบบนั้น รายการตรวจที่ทุกข้อตกเสมอไม่ใช่รายการตรวจ มันคือรายการข้อกล่าวหา
จุดที่สาม สองบล็อกท้ายคือการเอาเครื่องมือไปใช้กับสไลด์ที่ไม่ใช่สองใบนี้ — heatmap ที่เข้ารหัสด้วยความเข้ม กับสไลด์ที่เผลอตัดฐานแกนไว้ที่ 18 · ทั้งสองเคสมันตอบ ไม่ได้ตาย และคำตอบก็ใช้ได้จริง: เคสแรกบอกว่าเรขาคณิตวัดไม่ได้ ต้องตัดสินด้วยมือ · เคสที่สองบอกว่าแท่งที่สั้นกว่าเหลือศูนย์ ซึ่งพังยิ่งกว่าตัวคูณคำโกหกสูง ๆ เสียอีก · เครื่องมือที่ตายเมื่อเจอของนอกตัวอย่าง คือเครื่องมือที่ใช้ได้แค่กับตัวอย่าง
15.3 สี่อย่างที่สคริปต์นี้ตรวจไม่ได้
เครื่องมือที่ให้ตัวเลขทุกครั้งมีอันตรายในตัวมันเอง คือมันชวนให้เชื่อว่าอะไรที่มันไม่ได้พูดถึงแปลว่าไม่มีปัญหา สี่ข้อข้างล่างคือสิ่งที่มันมองไม่เห็น และทุกข้อร้ายแรงกว่าทุกข้อในเช็กลิสต์
ศูนย์ มันไม่เคยเห็นสไลด์ของคุณ ข้อนี้ต้องมาก่อนทุกข้อ เพราะมันเปลี่ยนวิธีอ่านผลรันทั้งหมด — audit() อ่าน dict ที่คุณพิมพ์เอง ไม่ได้อ่านภาพ · ข้อที่สามกับข้อที่ห้าตัดสินจาก color_carries กับ ink ล้วน ๆ และข้อที่เจ็ดก็เทียบกับ headline_facts ที่คุณประกาศ ไม่ได้อ่านสตริงหัวข้อจริง (สังเกตคำว่า "spec บอกว่า" ในผลรัน — มันเตือนตรงนั้น) · ถ้าคุณกรอกว่าหมึกเปล่าเป็น 0 มันก็เชื่อ · ด่านเดียวคือต้องนับจากภาพจริงก่อนกรอก ซึ่งเป็นงานของคุณ ไม่ใช่ของสคริปต์
⚠️ นี่คือกลไกเดียวกับตัวคูณคำโกหกของหัวข้อในบทที่ 13.4 เป๊ะ ๆ — ตัวเลขที่ดูน่าเชื่อที่สุด คือตัวเลขที่คนอ่านตรวจย้อนไม่ได้ และคราวนี้คนอ่านคือคุณเอง
หนึ่ง ข้อมูลถูกหรือเปล่า สคริปต์รับ DATA มาแล้วเชื่อทันที ถ้าตัวเลขผิดตั้งแต่ต้น มันจะให้กราฟที่ผ่านครบเจ็ดข้อและบอกเรื่องที่ไม่จริงได้อย่างสวยงาม · ด่านเดียวที่มีคือนิสัยจากบทที่ 10 — วาดให้ตัวเองดูก่อนสรุปเสมอ ซึ่งเป็นนิสัย ไม่ใช่ข้อตรวจ จึงไม่ได้อยู่ในรายการเจ็ดข้อ
สอง คำถามใช่หรือเปล่า ทุกข้อในเช็กลิสต์วัดว่าภาพตอบคำถามที่ตั้งไว้ได้ดีแค่ไหน แต่ไม่มีข้อไหนถามว่าคำถามนั้นถูกต้องไหม · นี่คือบทเรียนของหัวข้อ 14.5 ที่ขยายออกไป — จุดบนแกนร่วมแพ้แท่งเพราะคำถามของสไลด์ ไม่ใช่เพราะอันดับบนบันได ถ้าตั้งคำถามผิด กราฟที่ผ่านเจ็ดข้อก็ยังตอบผิดอยู่ดี
สาม คนฟังเป็นใคร เกณฑ์ K ไม่รู้ว่าคนดูนั่งห่างจากจอกี่เมตร ไม่รู้ว่าเขาเคยเห็นข้อมูลชุดนี้มาก่อนไหม และไม่รู้ว่าเขากำลังจะตัดสินใจเรื่องอะไร · เล่มนี้ให้กลไกของสายตา ซึ่งเหมือนกันทุกคน แต่บริบทไม่เหมือนกันสักคน
เครื่องมือที่ดีคือเครื่องมือที่บอกได้ว่าตัวเองไม่รู้อะไร
15.4 ทั้งเล่มในภาพเดียว
ภาพนี้คือสายพานของบทที่ 3 ที่คุณเห็นตั้งแต่ต้นเล่ม แค่แขวนทุกบทลงไปตรงขั้นที่มันทำงานอยู่จริง
พอวางแบบนี้แล้ว โครงของทั้งเล่มจะเห็นได้ในบรรทัดเดียว — บทส่วนใหญ่อยู่ที่ขั้นเข้ารหัส เพราะนั่นคือขั้นเดียวที่คุณคุมได้ ส่วนบทที่อยู่ตรงขั้นถอดรหัสไม่ได้สอนให้คุณทำอะไร มันสอนว่าคุณกำลังส่งของเข้าไปในเครื่องแบบไหน
สองปลายของสายพานก็บอกอะไรเหมือนกัน — บทที่ 10 ยืนอยู่ก่อนที่ข้อมูลจะขึ้นสายพานด้วยซ้ำ เพราะมันตรวจตัวเลขไม่ใช่ตรวจภาพ ส่วนบทที่ 1 อยู่ปลายสุด เพราะสไลด์ที่ต้องยืนอธิบายคืออาการที่โผล่ออกมาเมื่อขั้นใดขั้นหนึ่งก่อนหน้าล้มเหลว
และมีสามบทที่ไม่ได้แขวนอยู่บนสายพานเลย คือบทที่ 3 ซึ่งเป็นตัวสายพานเอง บทที่ 14 ที่ประกอบทั้งสายพานลงบนสไลด์เดียว และบทที่ 15 ที่คุณกำลังอ่านอยู่ ซึ่งเป็นเช็กลิสต์ที่เดินตามสายพานทีละขั้น
15.5 คุณกลายเป็นใคร
หน้าแรกของเล่มนี้สัญญาไว้ว่าอ่านจบแล้วคุณจะ มองกราฟตรงหน้าออกเองว่ามันจะถูกอ่านผิดตรงไหน และแก้ได้โดยไม่ต้องถามใคร
วิธีตรวจว่าสัญญานั้นเกิดขึ้นจริงไหม ไม่ใช่การถามว่าคุณจำอะไรได้บ้าง แต่คือการดูว่าคำถามในหัวคุณเปลี่ยนไปหรือยัง กลับไปดูตารางในหัวข้อ 3.3 อีกครั้ง
ถ้าตอนนี้คุณเปิดสไลด์ขึ้นมาแล้วคำถามแรกที่ผุดขึ้นคือ "ข้อมูลนี้ถูกเข้ารหัสด้วยคุณสมบัติอะไร" แทนที่จะเป็น "กราฟนี้สวยไหม" แปลว่าเล่มนี้ทำงานของมันเสร็จแล้ว
สิ่งที่คุณได้กลับไปไม่ใช่ความจำ มันคือลำดับการถาม — ช่องทางไหน · ตัวหารคืออะไร · คนอ่านต้องทำงานอะไรแทนคุณบ้าง · อะไรที่ภาพส่งไปไม่ถึง แล้วมันไปอยู่ที่ไหนแทน
และเมื่อไหร่ที่คุณเจอสถานการณ์ที่เล่มนี้ไม่ได้พูดถึง คุณจะไม่ต้องรอให้ใครออกกฎข้อใหม่มาให้ เพราะกลไกที่อยู่ใต้กฎทุกข้อ คุณมีมันแล้ว
กฎบอกคุณว่าต้องทำอะไร กลไกบอกคุณว่าทำไม และมีแค่อย่างหลังที่ตามคุณไปได้ในวันที่โจทย์เปลี่ยน
อ่านต่อ: ราคา vs มูลค่า#
สิบบทแรกเป็นเรื่องของชั้นล่าง — ตัวเลขหนึ่งชุดเดินทางเข้าสายตาคนอ่านยังไง และหายไปตรงไหนบ้าง · บทที่ 11 ถึง 13 ขึ้นมาอีกชั้น คือเมื่อของหลายชิ้นอยู่บนหน้าเดียวกัน และเมื่อประโยคเดียวต้องแบกสิ่งที่ภาพแบกไม่ไหว · สองบทสุดท้ายเอาทั้งหมดมาประกอบลงบนสไลด์จริง แล้วบีบให้เหลือเช็กลิสต์ที่พกติดตัวไปใช้ต่อได้
ถ้าอยากลองใช้สิ่งที่เพิ่งอ่านกับข้อมูลจริงที่มีเดิมพัน งบการเงินคือสนามที่ดีที่สุด เพราะมันเต็มไปด้วยตัวเลขที่ต่างกันไม่กี่เปอร์เซ็นต์แต่เปลี่ยนคำตอบทั้งหมด และเต็มไปด้วยกราฟที่แกนถูกซูมจนคุณต้องระวังตัวตลอดเวลา — ซึ่งตอนนี้คุณวัดออกมาเป็นตัวเลขได้แล้วว่ามันซูมไปกี่เท่า
คู่มือหุ้น — ราคา vs มูลค่า — อ่านงบการเงินเป็นด้วยตัวเอง และแยกออกว่าตัวเลขตรงหน้าคือราคาที่ตลาดตกลงกัน หรือมูลค่าที่กิจการสร้างจริง
If this was useful —buy me a coffee