99 · ปิดเล่ม — หอคอยเมื่อมองทั้งหลัง
บทนี้คือหลังคา — ที่ยืนเมื่อปีนจบแล้ว และแผนที่ที่คืนให้ตอนเดินออก
หอคอยทั้งหลังหน้าตาเป็นอย่างไร — และคนคนเดียวจะปีนมันขึ้นไปได้อย่างไร
กดปุ่มส่ง
ข้อความถึงเพื่อนอีกทวีปหนึ่งใช้นิ้วโป้งแตะครั้งเดียว อินเทอร์เฟซที่รับการแตะคือแผ่นกระจกที่ขอบและปุ่มทุกอันถูกวาดขึ้นด้วยมือ เป็นตัวบ่งชี้ (signifier) ยืนแทน affordance ที่กระจกไม่มีจริง (13) แอปที่ทำงานตามนั้นเขียนด้วยสัญกรณ์ที่สร้างมาให้คนอ่าน ก่อนถูกลดขั้นลงมาทีละขั้นอย่างแม่นยำ แต่ละขั้นง่ายเพราะขั้นก่อนหน้าทำให้ง่าย จนเหลือเป็นคำสั่งที่ไม่มีมนุษย์คนไหนได้เห็น (06) มันรันเป็นหนึ่งในโพรเซส (process) หลายร้อยตัวบนเครื่องที่โกหกแต่ละตัวอย่างพิถีพิถันว่ามีเครื่องอยู่กี่เครื่อง (05) คำสั่งเหล่านั้นทำงานบนสวิตช์นับพันล้านตัวที่ไม่รู้ว่าตัวเลขคืออะไร จัดวางกันจนเลขคณิตโผล่ขึ้นมาจากการจัดวางเอง (04) ข้อความกลายเป็นบิต — หน่วยของความประหลาดใจ ตีราคาด้วยทฤษฎีที่ปฏิเสธโดยหลักการที่จะถามว่ามันหมายความว่าอะไร (03) — ถูกตัดเป็นแพ็กเก็ต (packet) ที่หาทางของตัวเองแยกกันข้ามเครือข่ายที่ไม่มีใครเป็นเจ้าของ ขนโดยผู้ส่งที่ยอมชะลอตัวเองโดยสมัครใจเพื่อให้คนแปลกหน้าได้พูดด้วย (09) มันเดินทางแบบเข้ารหัส ใต้คณิตศาสตร์ที่ทำให้คนสองคนที่ไม่เคยเจอกันตกลงความลับกันได้ในห้องที่เต็มไปด้วยคนดักฟัง (11) ปลายทางมันตกลงในฐานข้อมูลที่เขียนเจตนาลงบันทึก (log) ก่อนแตะข้อมูลจริง ไฟดับระหว่างคำสั่งสองคำสั่งจึงทำให้มันโกหกไม่ได้ (08) บนสำเนา (replica) ที่ตกลงกันไม่ได้ว่าตอนนี้กี่โมง แต่มีโพรโทคอลไว้ตกลงเรื่องอื่นอยู่ดี (10) โมเดลที่งอกจากข้อมูล ทักษะของมันไม่มีใครเขียนลงไป เป็นผู้ตัดสินว่าข้อความนี้ควรค่าแก่การแสดง (12) และตลอดการลงมาทั้งหมด ฐานรากรับไว้ได้: ทุกอย่างที่เกิดขึ้นคำนวณได้ (computable) เสียต้นทุนเท่าที่คณิตศาสตร์ว่าด้วยต้นทุนบอกว่าต้องเสีย (02) และอยู่ในรั้วที่ขีดไว้ตั้งแต่ปี 1936 ก่อนเครื่องพวกนี้จะเกิดขึ้นสักเครื่อง (01)
แตะครั้งเดียว ทุกชั้นทำงาน และไม่มีใครที่แตะข้อความนี้ระหว่างทาง — ไม่มีผู้เขียนชั้นไหน เชี่ยวชาญเพียงใดก็ตาม — ถือทั้งหมดไว้ในหัวพร้อมกันได้ บทที่ 00 บอกว่านี่ไม่ใช่ความล้มเหลวของการศึกษา แต่คือการออกแบบ ผ่านการลงและขึ้นสิบห้าชั้นมาแล้ว ประโยคนั้นควรอ่านต่างออกไป: มันคือ ความสำเร็จ หอคอยยืนอยู่ได้เพราะแต่ละชั้นเป็นภาษาจริง แม่นยำในเงื่อนไขของตัวเอง และเพราะคนบนแต่ละชั้นวางใจชั้นล่างได้โดยไม่ต้องลงไปตรวจเอง
มองจากหลังคา อาคารทั้งหลังพูดซ้ำอยู่สามท่อน ท่อนแรก แต่ละชั้นซ่อนกลไกไว้แล้วยื่นผิว (surface) ที่ง่ายกว่าสิ่งที่มันปิดบัง — กลเดียว เล่นสิบห้าแบบ ท่อนที่สอง ทุกผิวรั่ว และความเชี่ยวชาญในวงการคอมพิวเตอร์ส่วนใหญ่คือจมูกที่ดมออกว่ารอยรั่วมาจากชั้นไหน — ลูปที่ช้าแต่จริงๆ เป็นปัญหาหน่วยความจำ (04) ไฟล์ที่ "เซฟแล้ว" แต่จริงๆ เป็นปัญหา directory entry (05) เส้นทางที่ถูกจี้แต่จริงๆ เป็นปัญหาความเชื่อใจ (trust) (09) ท่อนที่สาม ช่องสองช่องที่ทะลุอาคารทั้งหลังไม่ใช่ชั้น แต่เป็นบันได: ฝ่ายตรงข้าม (11) กับผู้เรียน (12) เข้ามาได้ทุกชั้น ไม่มีชั้นไหนสร้างจบได้โดยไม่นับสองอย่างนี้ หลังคาเองยังไม่เสร็จ — ปูนยังเปียก ปัญหายังเปิดค้างไว้ บิลค่าพลังงานเพิ่งถึงกำหนดชำระ (14) — และฐานรากก็ยังเถียงกันไม่จบ (01) อาคารแบบนี้ไม่ใช่อนุสาวรีย์ มันคือไซต์ก่อสร้างที่บังเอิญมีคนอาศัยอยู่
เส้นทาง 30 วัน
เส้นทาง (route) ข้างล่างตั้งอยู่บนสมมติฐานเดียวกับทุกบท: มีสติปัญญา ไม่ต้องมีพื้นเรียนมาก่อน ชั้นละสองวัน วันแรกอ่านบทนั้นซ้ำ โดยเปิดแหล่งข้อมูลปฐมภูมิ (primary source) วางไว้ข้างๆ — เลือกมาเพราะอ่านได้จริง และการอ่าน Turing หรือ Shannon จากต้นฉบับคือยาที่แก้ความเชื่อว่ารากฐานพวกนี้เกินตัวเราได้เร็วที่สุด วันที่สองลงมือแตะของจริง แหล่งเรียน (resource) ทุกชิ้นที่นี่เป็นของหลักในสาขาของมันและฟรี ลิงก์ตรวจสอบแล้วตอนเล่มนี้เข้าโรงพิมพ์ วันละสองชั่วโมงหนึ่งเดือนไม่ทำให้ใครเป็นผู้เชี่ยวชาญ มันทำสิ่งที่ดีกว่านั้น — ทุกชั้นกลายเป็นที่ที่เราเคยยืนมาแล้ว ไม่มีอะไรในวงการคอมพิวเตอร์เป็นคำเล่าลือสำหรับเราอีกต่อไป
| วัน | ชั้น | งานของสองวันนั้น |
|---|---|---|
| 1–2 | 00 แผนที่ | อ่านบทที่ 00 ซ้ำ จากนั้นเริ่มหอคอยชั้นล่างสำหรับผู้อ่านทั่วไป: Petzold's Code companion (codehiddenlanguage.com) และเอกสาร Nand2Tetris (nand2tetris.org) ที่จะใช้ในวันที่ 9–10 |
| 3–4 | 01 ทฤษฎีการคำนวณ | Turing 1936, §9 โดยใช้บทที่ 01 เป็นไกด์ (PDF) จากนั้นอ่านหัวข้อ Church–Turing ใน Stanford Encyclopedia (plato.stanford.edu) |
| 5–6 | 02 อัลกอริทึมและโครงสร้างข้อมูล | MIT OCW 6.006 เลกเชอร์ (lecture) แรกๆ (ocw.mit.edu) ลงมือเขียนอัลกอริทึมแบบแบ่งแล้วพิชิต (divide and conquer) เองสักตัวหนึ่ง แล้วจับเวลาเทียบกับแบบ naive |
| 7–8 | 03 สารสนเทศและการเข้ารหัส | Shannon 1948, Part I (PDF) จากนั้นอ่านบทเปิดของ MacKay (inference.org.uk) |
| 9–10 | 04 สถาปัตยกรรมคอมพิวเตอร์ | Nand2Tetris projects 1–3: จากเกตตัวเดียวไปจนถึง ALU เลขคณิตจะปรากฏขึ้นจากการจัดวางเอง ด้วยมือเราเอง |
| 11–12 | 05 ระบบปฏิบัติการ | OSTEP บทสนทนาเรื่อง virtualization กับบทนำ (pages.cs.wisc.edu/~remzi/OSTEP) ลอง list โพรเซสบนเครื่องตัวเอง แล้วหาว่าแต่ละตัวกำลังโกหกเรื่องอะไรอยู่ |
| 13–14 | 06 ภาษาและคอมไพเลอร์ | Crafting Interpreters จนถึงส่วน scanner กับ parser (craftinginterpreters.com) — หอคอยของคอมไพเลอร์ ที่สร้างทีละชั้นในเอดิเตอร์ของเราเอง |
| 15–16 | 07 วิศวกรรมซอฟต์แวร์ | Software Engineering at Google, บทที่ 1–2 (abseil.io) เอางานของตัวเองสักชิ้นเข้าระบบควบคุมเวอร์ชัน (version control) แล้วเขียนเทสต์หนึ่งตัวที่จะจับได้ถ้าเราเปลี่ยนใจภายหลัง |
| 17–18 | 08 ฐานข้อมูล | Readings in Database Systems (redbook.io) จากนั้นเขียนคิวรี (query) SQL สิบตัวกับชุดข้อมูลจริงสักชุด แล้วปล่อยให้ query optimizer เลือกเส้นทางเอง |
| 19–20 | 09 เครือข่าย | Computer Networks: A Systems Approach, บทที่ 1 (systemsapproach.org) จากนั้น Jacobson & Karels 1988 (PDF) — เครือข่ายที่กินตัวเองจนพัง กับวิธีแก้ที่โทรศัพท์ของเรายังใช้อยู่จนถึงทุกวันนี้ |
| 21–22 | 10 ระบบกระจาย | Lamport 1978 (podc.org) จากนั้น van Steen & Tanenbaum บทที่ 1 (distributed-systems.net) |
| 23–24 | 11 ความปลอดภัยและวิทยาการรหัสลับ | Cryptopals, Set 1 (cryptopals.com) — ทลายไซเฟอร์ (cipher) จริงด้วยโค้ดของตัวเอง จากนั้น Handbook of Applied Cryptography, บทที่ 1 (cacr.uwaterloo.ca/hac) |
| 25–26 | 12 ปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง | Karpathy, Neural Networks: Zero to Hero, สองบทเรียนแรก (karpathy.ai) — สร้าง backpropagation ด้วยมือเราเอง จากนั้น Deep Learning เป็นชั้นหนังสืออ้างอิง (deeplearningbook.org) |
| 27–28 | 13 ปฏิสัมพันธ์มนุษย์–คอมพิวเตอร์ และกราฟิกส์ | ขีดจำกัดเวลาตอบสนองสามระดับของ Nielsen (nngroup.com) Physically Based Rendering, บทที่ 1 (pbr-book.org) จากนั้นเลือกอินเทอร์เฟซที่เราใช้ทุกวันสักตัว แล้วแยก affordance ออกจาก signifier ของมัน |
| 29–30 | 14 พรมแดน | Quantum Computing for the Very Curious (quantum.country) the Millennium Problems (claymath.org) จากนั้นเขียนลิสต์คำถามที่ยังเปิดอยู่ของตัวเอง ลิสต์นั้นแหละคือข้อสอบ และเราเป็นคนให้คะแนนเอง |
ใบอนุญาตให้อยากรู้
ไม่มีใบรับรองสำหรับสิ่งที่เล่มนี้สมมติไว้ และไม่มีใบรับรองสำหรับสิ่งที่มันหวังจะทิ้งไว้ คนในบทเหล่านี้ส่วนใหญ่ไม่ได้รอมัน นักศึกษาคนหนึ่งหักล้างข้อคาดการณ์ของอาจารย์ตัวเองภายในหนึ่งสัปดาห์หลังได้ยิน (02) วิศวกรคนหนึ่งเบื่อการเสียวันหยุดสุดสัปดาห์ให้เครื่องที่ตรวจจับความผิดพลาดได้แต่แก้ไม่ได้ จึงคิดค้นรหัส (code) ที่ให้เครื่องซ่อมความผิดพลาดของตัวเอง (03) ระบบปฏิบัติการที่รันเซิร์ฟเวอร์ทั้งโลกเขียนเสร็จในหนึ่งเดือน เพราะงบไม่ยอมให้ใหญ่กว่านั้น (05) คำที่นักจิตวิทยาคนหนึ่งใช้เรียกสิ่งที่เก้าอี้มอบให้ร่างกาย กลายเป็นศัพท์ทำงานของทุกหน้าจอที่เราแตะ (13) ไม่มีใครในนี้ได้รับอนุญาตในรูปแบบใดที่มีน้ำหนักจริง พวกเขามีคำถามที่วางไม่ลง กับความกล้าที่จะเชื่อว่าคำถามนั้นเป็นของพวกเขาที่จะถาม
นั่นคือใบอนุญาต และไม่เคยเป็นของใครที่จะมอบให้ สิ่งที่เล่มนี้พยายามให้มีเพียงแผนที่ที่ทำให้ใบอนุญาตนั้นใช้ได้: ชื่อของแต่ละชั้น ไอเดียที่แบกน้ำหนักอยู่บนชั้นนั้น จุดที่ผิวรั่ว และคำสารภาพตรงๆ ทีละบทว่ายังไม่มีใครรู้อะไร รั้วที่สำคัญจริง (01) ขีดโดยคณิตศาสตร์ ไม่ใช่โดยผู้เฝ้าประตู ทุกอย่างข้างในรั้วปีนได้ และบทข้างบนแสดงให้เห็นแล้วว่าแต่ละชั้น เมื่อพบกันตามเงื่อนไขของมันเอง ไม่ใช่แค่ปีนได้ แต่ เรียบง่าย — หนึ่งหรือสองไอเดีย ยึดไว้อย่างแม่นยำ ทำงานทั้งหมด
บทที่ 00 ปิดทัวร์ด้วยเด็กคนหนึ่งลากรูปถ่ายไปบนหน้าจอ สั่งสวิตช์นับพันล้านตัวด้วยนิ้วเดียว โดยไม่ต้องเข้าใจสักตัว นั่นคือหอคอยที่ทำงานได้ แต่ ความจำเป็น ไม่เคยเป็นตัววัดที่ถูก การ อยากเข้าใจ เป็นคนละเรื่อง และความอยากนั้นคือใบอนุญาตทั้งหมด ปูนบนสุดยังเปียก บันไดเปิดไฟไว้แล้ว ปีนเลย
จบเล่มThe Tower of Abstractions — An Encyclopedia of the Computing Disciplinesกลับหน้าหนังสือ