00 · แผนที่
บทนี้คือชั้นล่างสุดของหอคอย — แผนที่ที่ทุกบทเหนือขึ้นไปถือว่าคุณเห็นมาแล้ว
ทำไม "วิทยาการคอมพิวเตอร์ (computer science)" จึงไม่ใช่ทั้งเรื่องของคอมพิวเตอร์และไม่ใช่วิทยาศาสตร์ — และสาขาวิชาเหล่านี้คืออะไรกันแน่
เดือนกันยายน ปี 1967 ชายสามคนเขียนจดหมายถึงวารสาร Science เพราะเพื่อนร่วมวงการบอกพวกเขาไม่หยุดว่าสาขาวิชาของพวกเขาไม่มีอยู่จริง Allen Newell, Alan Perlis และ Herbert Simon ไม่ใช่พวกเพี้ยนไร้ชื่อที่ออกมาปกป้องกระแสชั่วครู่ Perlis ได้ Turing Award รางวัลแรกที่เคยมอบให้ใคร เมื่อปีก่อนหน้านั้น Newell กับ Simon จะได้รางวัลเดียวกันร่วมกันในปี 1975 Simon จะได้รางวัลโนเบลสาขาเศรษฐศาสตร์เพิ่มอีกในปี 1978 คำแก้ต่างของพวกเขายาวประโยคเดียว — วิทยาการคอมพิวเตอร์ (computer science) คือ "การศึกษาคอมพิวเตอร์และปรากฏการณ์ทั้งหมดที่อยู่รอบตัวมัน" ("the study of computers and all the phenomena surrounding them") (Newell, Perlis & Simon, 1967)
สิบแปดปีให้หลัง ตำราที่โด่งดังที่สุดเท่าที่สาขานี้เคยผลิต เปิดเล่มด้วยการเถียงกับผู้ก่อตั้งสาขาของตัวเอง Structure and Interpretation of Computer Programs ของ Abelson และ Sussman ประกาศในคำนำว่าพวกเขาเชื่อว่า "วิทยาการคอมพิวเตอร์" ไม่ใช่วิทยาศาสตร์ และความสำคัญของมันแทบไม่เกี่ยวกับคอมพิวเตอร์ (SICP, 1985) คำแดกดันชุดเดียวกันแต่คมกว่ายังหมุนเวียนอยู่จนถึงวันนี้ — วิทยาการคอมพิวเตอร์ไม่ได้เกี่ยวกับคอมพิวเตอร์ มากไปกว่าที่ดาราศาสตร์เกี่ยวกับกล้องโทรทรรศน์ (computer science is no more about computers than astronomy is about telescopes) — คนมักยกให้เป็นคำของ Edsger Dijkstra แต่ต้นตอที่สืบย้อนได้คือ Michael Fellows และ Ian Parberry ในปี 1993 (Quote Investigator)
ผู้ก่อตั้งเรียกมันว่าวิทยาศาสตร์ของคอมพิวเตอร์ คำสอนของสาขาเองบอกว่ามันไม่ใช่ทั้งสองอย่าง ทั้งคู่พูดถูก และการเห็นว่าทั้งคู่ถูกพร้อมกันได้อย่างไร คืองานของบทนี้ — และคือแนวคิดที่จัดวางทั้งเล่ม
"การคำนวณ (computing)" ไม่ใช่สาขาวิชาเดียวที่สวมป้ายชื่อห้าใบ นี่คือสิ่งแรกที่ต้องเข้าใจ แต่ละสาขาคือ คำถาม คนละคำถามที่ถามกับเครื่องจักรชุดเดียวกัน แผนที่ทางการวาดโดยสมาคมวิชาชีพด้านคอมพิวเตอร์ รายงาน CC2005 (ACM, AIS และ IEEE Computer Society) ตรึงสาขาดั้งเดิมทั้งห้าไว้ และรุ่นต่อมา CC2020 — คณะทำงานห้าสิบคนจากยี่สิบประเทศ รายงานผลปลายปี 2020 — รับห้าสาขานั้นมาต่อ พร้อมต้อนรับผู้มาใหม่อีกสอง ห้าสาขาถามว่า:
วิทยาการคอมพิวเตอร์ (computer science, CS): อะไรบ้างที่คำนวณได้ และด้วยต้นทุนเท่าไร? วิศวกรรมคอมพิวเตอร์ (CE): ไฟฟ้ากลายเป็นตรรกะได้อย่างไร — และฮาร์ดแวร์จบตรงไหน ซอฟต์แวร์เริ่มตรงไหน? วิศวกรรมซอฟต์แวร์ (SE): เกิดอะไรกับโปรแกรมเมื่อมันต้องอยู่ไปอีกหลายปีและถูกแก้ด้วยมือหลายคู่? ระบบสารสนเทศ (IS): การคำนวณ ทำ อะไรภายในองค์กร — ต่อการตัดสินใจ ต่อบันทึกข้อมูล ต่ออำนาจ? เทคโนโลยีสารสนเทศ (IT): ใครทำให้ระบบจริงเดินอยู่ได้เพื่อผู้ใช้จริง และทำอย่างไร? ผู้มาใหม่สองรายคือ ความมั่นคงปลอดภัยไซเบอร์ (cybersecurity) (ข้อแนะนำหลักสูตร: CSEC2017) และ วิทยาการข้อมูล (data science) (ACM competencies, 2021) — อายุน้อยกว่า และดังที่จะเห็นต่อไป มีรูปทรงต่างจากห้าสาขารุ่นพี่
จ้องสิ่งประดิษฐ์ชิ้นเดียว — ระบบเวชระเบียนผู้ป่วยของโรงพยาบาล — ห้าสาขากลายเป็นห้าอาชีพทันที นักวิทยาการคอมพิวเตอร์ถามว่าอัลกอริทึมจับคู่เวชระเบียนขยายไปรับผู้ป่วยสิบล้านคนไหวไหม วิศวกรคอมพิวเตอร์ถามว่าทำไมตัวควบคุมที่เก็บข้อมูลทำให้การเขียนข้อมูลเสียหายตอนไฟดับ วิศวกรซอฟต์แวร์ถามว่าจะแก้มอดูลเรียกเก็บเงินอย่างไรไม่ให้ระบบของฝ่ายเภสัชกรรมพัง ผู้เชี่ยวชาญด้านระบบสารสนเทศถามว่าทำไมพยาบาลถึงเลี่ยงระบบไปจดใส่กระดาษ ผู้เชี่ยวชาญด้านเทคโนโลยีสารสนเทศคือคนที่ถูกตามตัวตอนตีสามเมื่อระบบล่ม เครื่องเดียวกัน ห้าคำถาม
หนังสือเล่มนี้ไม่เดินตามแผนที่นั้นทีละแผนก มันตัดคนละมุม — มุมที่สาขานี้เองตัดอย่างเงียบๆ ทุกวัน กลเม็ดใหญ่หนึ่งเดียวของการคำนวณ กลเม็ดที่รองอยู่ใต้ทุกสาขาวิชา คือ นามธรรม (abstraction): สร้างชั้นขึ้นมาหนึ่งชั้น ซ่อนกลไกของมันไว้ ยื่นผิว (surface) ที่ง่ายกว่าสิ่งที่มันปิดบังให้ชั้นบน ประจุไฟฟ้าถูกซ่อนโดยทรานซิสเตอร์ (transistor) ทรานซิสเตอร์ถูกซ่อนโดยเกตตรรกะ (logic gate) เกตถูกซ่อนโดยตัวประมวลผล (processor) ตัวประมวลผลถูกซ่อนโดยระบบปฏิบัติการ (operating system) คำสั่งดิบของเครื่องถูกซ่อนโดยภาษาโปรแกรม (programming language) เครื่องเดี่ยวถูกซ่อนโดยเครือข่าย (network) ไล่ขึ้นไปเรื่อยๆ จนถึงเด็กคนหนึ่งลากรูปถ่ายข้ามหน้าจอ สั่งสวิตช์นับพันล้านตัวด้วยนิ้วเดียว โดยไม่ต้องเข้าใจสวิตช์ตัวไหนเลย ไม่มีใครถือหอคอยทั้งหลังไว้ในหัวพร้อมกัน นั่นไม่ใช่ความล้มเหลวของการศึกษา — มันคือการออกแบบ Dijkstra ชี้จุดว่าทำไมกลเม็ดนี้ได้ผล ในปาฐกถา Turing Award ปี 1972 ของเขา จุดประสงค์ของ abstraction ไม่ใช่เพื่อความคลุมเครือ แต่เพื่อ "สร้างระดับความหมายใหม่ขึ้นมาระดับหนึ่ง ที่ซึ่งเราสามารถแม่นยำได้อย่างสมบูรณ์" ("to create a new semantic level in which one can be absolutely precise") (EWD340) แต่ละชั้นไม่ใช่ภาพพร่ามัวของชั้นล่าง มันคือ ภาษาใหม่ ที่แม่นยำในเงื่อนไขของตัวเอง
หลักฐานว่าหอคอยนี้ปีนได้ คือนักเรียนปีนมันจริง ในตำรา-คอร์สเล่มเดียวของ Nisan และ Schocken ชื่อ The Elements of Computing Systems (nand2tetris.org) ผู้เรียนเริ่มจาก logic gate ตัวเดียว แล้วก่อขึ้นไป — เกต ชิป เครื่องจักร แอสเซมเบลอร์ (assembler) คอมไพเลอร์ ระบบปฏิบัติการ และเกมหนึ่งเกม — ภายในหนึ่งเทอม คนเดียวสร้างชั้นซ้อน (stack) ได้ทั้งกอง เพราะแต่ละชั้นไม่ต้องการอะไรจากชั้นล่าง นอกจากผิวของมัน
ผิวเหล่านั้นไม่สมบูรณ์แบบ และนี่คือไอเดียที่สองที่ทั้งเล่มพิงอยู่ Joel Spolsky ตั้งชื่อให้มันว่ากฎว่าด้วย abstraction ที่รั่วเสมอ (the Law of Leaky Abstractions): "abstraction ที่ไม่ธรรมดาทุกตัว รั่วไม่มากก็น้อย" ("all non-trivial abstractions, to some degree, are leaky") (Spolsky, 2002) แอปของคุณสัญญาว่าข้อความ "ถูกส่งแล้ว" จนกระทั่งเครือข่ายชั้นล่างไม่เห็นด้วย ลูปสองลูปที่เหมือนกันทุกประการทางตรรกะ ทำงานเร็วช้าต่างกันสิบเท่า เพราะวิธีที่ฮาร์ดแวร์หน่วยความจำสามชั้นข้างล่างแคช (cache) ข้อมูล เมื่อ abstraction รั่ว ต้องมีคนลงบันไดไปดู — และการรู้ว่ารั่วมาจากชั้น*ไหน* คือเนื้อส่วนใหญ่ของความเชี่ยวชาญในการคำนวณ ด้วยเหตุนี้ทุกบทในเล่มนี้จึงตอบคำถามสามข้อเกี่ยวกับชั้นของตัวเอง: ชั้นนี้ซ่อนอะไร ยื่นผิวแบบไหนขึ้นไป และรั่วตรงไหน
ข้อถกเถียงระหว่างปี 1967 กับปี 1985 คลี่คลายได้ตรงนี้ Newell, Perlis และ Simon พูดถูก ปรากฏการณ์เหล่านั้นมีอยู่จริง และชั้นอย่างสถาปัตยกรรม (architecture) เครือข่าย และ machine learning ถูกศึกษาด้วยการทดลอง เหมือนศึกษาธรรมชาติ Abelson กับ Sussman ก็พูดถูก ไม่มีชั้นใดเหนือสองชั้นล่างสุดที่เกี่ยวกับอิเล็กทรอนิกส์แม้แต่น้อย — หอคอยส่วนบนก่อขึ้นจากโครงสร้างล้วนๆ ใกล้คณิตศาสตร์มากกว่าเครื่องจักรใดๆ การคำนวณไม่ใช่ความรู้ชนิดเดียว มันคือหอคอยที่ฟิสิกส์แข็งตัวเป็นวิศวกรรม วิศวกรรมแข็งตัวเป็นภาษา และภาษาแข็งตัวเป็นสิ่งที่ใกล้เคียงความคิดอย่างยิ่ง
วิธีอ่านเล่มนี้: สิบห้าชั้น กับบทปิดอีกหนึ่งบท แต่ละบทจบในตัวเอง ยาวบทละ 900–1,400 คำ — เป็นหลักการ ไม่ใช่การสำรวจภาพรวม บทที่ 01–03 คือชั้นรากฐาน (อะไรคำนวณได้ อะไรมีประสิทธิภาพ อะไรคือสารสนเทศ) 04–06 ประกอบตัวเครื่องขึ้นมา 07–10 พามันไปสู่สเกลใหญ่ 11–14 เดินตามขอบ ที่ซึ่งฝ่ายตรงข้าม พฤติกรรมที่เรียนรู้ได้ และมนุษย์เข้ามาเกี่ยว อ่านตามลำดับถ้าอยากปีนขึ้นไปทั้งหอคอย หรือกระโดดไปชั้นไหนก็ได้ — ทุกบทบอกตำแหน่งของตัวเองในชั้นซ้อนไว้ในบรรทัดแรก และหัวข้อ "เชื่อมโยง" บอกว่าบันไดไหนพาไปที่ไหน
เชื่อมโยง
ชั้นล่างของบทนี้: ไม่มี — นี่คือพื้นดิน บทอื่นทั้งหมดยืนอยู่บนมัน สาขาวิชาทาบทับกับชั้นต่างๆ ไม่เท่ากัน และควรสังเกตไว้ขณะอ่าน: CS ครอบคลุมเต็มบทที่ 01–03 และ 12, CE เป็นเจ้าของบทที่ 04, SE เป็นเจ้าของบทที่ 07, IS กับ IT โผล่ในบทที่ 08–10 ส่วนผู้มาใหม่สองรายที่อายุน้อยกว่า — security กับ data science — กลับไม่ใช่ชั้นสักชั้น แต่เป็นช่องบันไดที่ตัดขึ้นลงแนวดิ่งผ่านทุกอย่าง (บทที่ 11 และ 12 อธิบายว่าทำไม)
คำถามที่ยังเปิดอยู่
การคำนวณคือวิทยาศาสตร์ แขนงหนึ่งของวิศวกรรม หรือคณิตศาสตร์แบบใหม่? จดหมายปี 1967 ไม่ได้ฟันธง และหกสิบปีผ่านไป สาขาวิชานี้ยังให้ทุนกับคำตอบทั้งสามแบบ data science กับ cybersecurity จะแข็งตัวเป็นสาขาวิชาที่มีชั้นของตัวเอง หรือจะละลายกลายเป็นสมรรถนะ (competency) ที่มืออาชีพด้านการคำนวณทุกคนต้องมี — การอ่านแบบหลังนี้เองที่กรอบคิดแบบ competency-first ของ CC2020 เอียงไปหาอย่างเงียบๆ? แล้วหอคอยนี้หยุดโตแล้วหรือยัง? บทที่ 12 หยิบความเป็นไปได้ที่ยังเปิดอยู่ขึ้นมา ว่าภาษาธรรมชาติเองกำลังกลายเป็นชั้นใหม่ล่าสุด — ผิวที่ซ่อนทุกอย่างในเล่มนี้ไว้ข้างใต้
อ่านต่อ
- Charles Petzold, Code: The Hidden Language of Computer Hardware and Software, 2nd ed., Microsoft Press, 2022 — หอคอยชั้นล่าง สร้างขึ้นทีละชั้นสำหรับผู้อ่านทั่วไป; มีคู่มือโต้ตอบได้ที่ codehiddenlanguage.com
- Allen Newell, Alan Perlis & Herbert Simon, "Computer Science," Science 157, no. 3795 (1967): 1373–1374 — science.org
- ACM & IEEE Computer Society, Computing Curricula 2020: Paradigms for Global Computing Education — รายงานฉบับเต็ม PDF