‹

06 · Languages & Compilers

06 · Languages & Compilers

06 · ​ภาษา​และ​คอมไพเลอร์

This chapter is the floor where instructions stop being addressed to a machine and start being addressed to people — and where a program is written to be read.

​ชั้นนี้​คือ​จุด​ที่​คำสั่ง​เลิก​พูด​กับ​เครื่องจักร​และ​หันมา​พูด​กับ​คน — ​โปรแกรม​ถูก​เขียน​ขึ้น​เพื่อให้​คนอ่าน

What makes a text mean something to a machine?

​อะไร​ทำให้​ข้อความ​มีความหมาย​ต่อ​เครื่องจักร?

When John Backus's group at IBM began work on FORTRAN, the job was estimated at six months. In his own history of the project, Backus records that the six-month figure "remained the interval-to-completion until it actually was completed over two years later, in April 1957." The delay is not the interesting part. What everyone expected the result to be is. Backus recalled that "it is difficult to convey ... the strength of the skepticism about 'automatic programming'" and about "its ability to produce efficient programs"; his team's stated goal was only to "produce programs almost as efficient as hand coded ones" (Backus, The History of FORTRAN I, II, and III). Almost. The premise of the field was that a machine could not read a human notation and produce good code, and that premise was not stupid. Nothing about meaning looks mechanical.

​งาน​ที่​ประเมิน​ไว้​หก​เดือน​ใช้เวลา​จริง​กว่า​สอง​ปี ​ทีม​ของ John Backus ​ที่ IBM ​เริ่ม​ทำ FORTRAN ​ด้วย​ตัวเลข​นั้น ​และ​ใน​บันทึก​ประวัติ​โครงการ​ของ​เขา​เอง Backus ​เล่า​ว่า​หก​เดือน "​ยังคง​เป็นระยะ​เวลา​ที่​คาด​ไว้​จนกว่า​งาน​จะ​เสร็จ​จริง ​ซึ่ง​เกิดขึ้น​อีก​กว่า​สอง​ปี​ให้หลัง ​ใน​เดือน​เมษายน 1957" (remained the interval-to-completion until it actually was completed over two years later, in April 1957) ​ความล่าช้า​ไม่​ใช่​ส่วน​ที่​น่าสนใจ ​ส่วน​ที่​น่าสนใจ​คือ​สิ่ง​ที่​ทุกคน​คาด​ว่า​ผลลัพธ์​จะ​เป็น Backus ​เล่า​ว่า "​ยาก​ที่จะ​สื่อ ... ​ถึง​ความแรง​ของ​ความคลางแคลงใจ​ต่อ 'automatic programming'" (it is difficult to convey ... the strength of the skepticism about 'automatic programming') ​และ​ต่อ "​ความสามารถ​ของ​มัน​ใน​การผลิต​โปรแกรม​ที่​มีประสิทธิภาพ" (its ability to produce efficient programs) ​เป้าหมาย​ที่​ทีม​ของ​เขา​ประกาศ​ไว้​มี​แค่ "​ผลิต​โปรแกรม​ที่​มีประสิทธิภาพ​เกือบ​เท่า​โค้ด​ที่​เขียน​ด้วยมือ" (produce programs almost as efficient as hand coded ones) (Backus, The History of FORTRAN I, II, and III) ​เกือบ. ​ข้อสมมติ​ของ​วงการ​ตอนนั้น​คือ​เครื่องจักร​อ่าน​สัญกรณ์​ของ​มนุษย์​แล้ว​ผลิต​โค้ด​ที่​ดี​ไม่​ได้ ​และ​ข้อสมมติ​นั้น​ไม่​โง่​เลย ​ไม่​มี​อะไร​ใน​เรื่อง​ความหมาย​ที่​ดู​เป็น​กลไก

The first move that made it mechanical was to cut meaning in two. Syntax is the question of whether a text is well formed; semantics is the question of what it does. They are not even the same kind of question. Backus described the syntax of a proposed international algebraic language in 1959 using a notation of rules and alternatives; Peter Naur adapted it for the ALGOL 60 report, and Donald Knuth's 1964 letter to CACM proposed the name it still carries, Backus–Naur Form (Knuth, 1964). With a formal grammar, "is this a valid program" stops being a matter of judgment and becomes a decision a program can make. ALGOL 60 was the demonstration, and Tony Hoare's verdict is the most quoted line in language design: "Here is a language so far ahead of its time, that it was not only an improvement on its predecessors, but also on nearly all its successors" — from his 1973 keynote "Hints on Programming Language Design", not, as is usually claimed, his Turing lecture.

​สิ่ง​ที่​ทำให้​เรื่อง​นี้​กลายเป็น​กลไก​ได้ ​คือ​การผ่า​ความหมาย​ออก​เป็น​สอง​ท่อน ​ไวยากรณ์ (syntax) ​ถาม​ว่า​ข้อความ​มี​รูป​ถูกต้อง​หรือไม่ ​ความหมาย (semantics) ​ถาม​ว่า​มัน​ทำ​อะไร ​สอง​คำถาม​นี้​ไม่​ใช่​คำถาม​คนละ​คำตอบ ​แต่​คนละ​ชนิด Backus ​บรรยาย syntax ​ของ​ภาษา​พีชคณิต​สากล​ที่​เสนอ​กัน​ใน​ปี 1959 ​ด้วย​สัญกรณ์​ของ​กฎ​และ​ทางเลือก Peter Naur ​ดัดแปลง​มัน​ไป​ใช้​ใน​รายงาน ALGOL 60 ​และ​จดหมาย​ของ Donald Knuth ​ถึง CACM ​ใน​ปี 1964 ​เสนอชื่อ​ที่​มัน​แบก​มา​จนถึง​วันนี้ ​คือ Backus–Naur Form (Knuth, 1964) ​พอ​มี​ไวยากรณ์​รูป​นัย ​คำถาม​ว่า "​โปรแกรม​นี้​ถูกต้อง​หรือไม่" ​ก็​พ้น​จาก​ดุลพินิจ ​กลายเป็น​ข้อ​ตัดสิน​ที่​โปรแกรม​ทำ​เอง​ได้ ALGOL 60 ​คือ​บทพิสูจน์ ​และ​คำตัดสิน​ของ Tony Hoare ​คือ​ประโยค​ที่​ถูก​อ้าง​มาก​ที่สุด​ใน​วงการ​ออกแบบ​ภาษา "​นี่​คือ​ภาษา​ที่​ล้ำยุค​ของ​มัน​มาก​จน​ไม่​ใช่​แค่​ก้าวหน้า​กว่า​รุ่น​ก่อนหน้า ​แต่​ยัง​ก้าวหน้า​กว่า​รุ่น​ต่อๆ ​มา​เกือบ​ทั้งหมด​ด้วย" (Here is a language so far ahead of its time, that it was not only an improvement on its predecessors, but also on nearly all its successors) — ​มาจาก​ปาฐกถา​ปี 1973 ​เรื่อง "Hints on Programming Language Design" ​ไม่​ใช่​ปาฐกถา Turing ​อย่าง​ที่​มัก​อ้าง​กัน​ผิด

Semantics resisted the same treatment, and the compiler's answer was not to solve meaning but to descend it — one small, exact step at a time. A compiler is a tower inside the tower. Lexical analysis turns characters into words. Parsing turns words into a tree that reflects the grammar. Semantic analysis annotates that tree with what the names refer to and whether the operations are permitted. Then the tree becomes an intermediate representation belonging to no particular language and no particular machine; optimization rewrites it into a cheaper one with the same meaning; and code generation emits the instruction set of chapter 04. Each stage exists because it hands the next one a representation in which the next one's job is easy — which is this book's whole thesis, performed in miniature inside a single program. The intermediate representation earns its keep with arithmetic: without it, supporting n languages on m machines takes n × m compilers; with it, n + m.

​ความหมาย​ไม่​ยอมให้​จัดการ​แบบ​เดียวกัน ​คอมไพเลอร์​จึง​ไม่​ไขมัน ​แต่​พา​มัน​ลง​บันได​ทีละขั้น​เล็กๆ ​ที่​แม่นยำ ​คอมไพเลอร์​คือ​หอคอย​ซ้อน​อยู่​ใน​หอคอย ​การวิเคราะห์​คำศัพท์ (lexical analysis) ​แปลง​ตัวอักษร​เป็น​คำ parsing ​แปลง​คำเป็น​ต้นไม้​ที่​สะท้อน​ไวยากรณ์ ​การวิเคราะห์​ความหมาย (semantic analysis) ​เติม​ลง​บน​ต้นไม้​นั้น​ว่าแต่​ละ​ชื่อ​อ้าง​ถึง​อะไร ​และ​การดำเนินการ​ใด​ได้รับอนุญาต ​ต้นไม้​กลายเป็น​ตัวแทน​กลาง (intermediate representation) ​ที่​ไม่​ผูก​กับ​ภาษา​ใด​หรือ​เครื่อง​ใด ​การเพิ่มประสิทธิภาพ (optimization) ​เขียน​มัน​ใหม่​ให้​ถูก​ลง​โดย​ความหมาย​ไม่​เปลี่ยน ​และ​การสร้าง​โค้ด (code generation) ​ปล่อย​ชุดคำสั่ง​ของ​บท​ที่ 04 ​ออกมา ​ทุก​ขั้น​มี​อยู่​เพราะ​มัน​ยื่น​ตัวแทน​ที่​ทำให้​งาน​ของ​ขั้น​ถัดไป​ง่าย — ​นั่น​คือ​วิทยานิพนธ์​ทั้ง​เล่ม​ของ​หนังสือ​นี้ ​แสดง​ย่อส่วน​อยู่​ใน​โปรแกรม​เดียว ​ตัวแทน​กลาง​คุ้มค่า​ตัว​ด้วย​เลขคณิต​ล้วนๆ ​ไม่​มี​มัน ​การรองรับ n ​ภาษา​บน m ​เครื่อง​ต้อง​ใช้​คอมไพเลอร์ n × m ​ตัว ​มี​มัน ​ใช้ n + m

What languages built on that machinery offer is a set of ways to name things — functions, types, modules, objects — each of which exists to let a reader ignore something. The most compressed illustration is LISP. In April 1960 John McCarthy published a paper defining computation over symbolic expressions, including a function called eval that described what it means to evaluate any expression in the language (Recursive Functions of Symbolic Expressions, CACM 3, no. 4). It was mathematics, meant for reading. Then Steve Russell hand-compiled eval into IBM 704 machine code (McCarthy, History of Lisp), and the definition of the language became an interpreter for the language. That is chapter 04's stored-program idea coming due: because a program is data, a description of a language is a program that runs it.

​ภาษา​ที่​สร้าง​บน​กลไก​นั้น​ให้​ชุด​วิธี​ตั้งชื่อ​แก่​สิ่ง​ต่างๆ — ​ฟังก์ชัน, ​ชนิด​ข้อมูล (type), ​มอดูล (module), ​อ็อบเจกต์ (object) — ​แต่ละ​อย่าง​มี​ไว้​ให้​ผู้อ่าน​เพิกเฉย​ต่อ​บางอย่าง​ได้ ​ตัวอย่าง​ที่​กระชับ​ที่สุด​คือ LISP ​เดือน​เมษายน 1960 John McCarthy ​ตีพิมพ์​เปเปอร์​ที่​นิยาม​การคำนวณ​บน​นิพจน์​เชิง​สัญลักษณ์ (symbolic expressions) ​รวมถึง​ฟังก์ชัน​ชื่อ eval ​ที่​อธิบาย​ว่าการ​ประเมิน​นิพจน์​ใดๆ ​ใน​ภาษา​นี้​หมายความว่า​อย่างไร (Recursive Functions of Symbolic Expressions, CACM 3, no. 4) ​มัน​คือ​คณิตศาสตร์ ​ตั้งใจ​ให้​อ่าน Steve Russell ​เอา eval ​ไป​คอมไพล์​ด้วยมือ​ลง​เป็น​โค้ด​เครื่อง IBM 704 (McCarthy, History of Lisp) ​และ​นิยาม​ของ​ภาษา​ก็​กลายเป็น​อิน​เทอร์พ​รี​เตอร์ (interpreter) ​ของ​ภาษา​นั้น​เอง ​นั่น​คือ​ไอเดีย​โปรแกรม​ที่เก็บ​ใน​หน่วยความจำ (stored program) ​จาก​บท​ที่ 04 ​ถึงกำหนด​จ่ายคืน ​เพราะ​โปรแกรม​คือ​ข้อมูล ​คำอธิบาย​ของ​ภาษา​จึง​เป็น​โปรแกรม​ที่​รัน​ภาษา​นั้น​ได้

Types are the sharpest of the naming mechanisms, because a type is a promise a machine can check. Declaring that a function takes an integer and returns a string is a claim about every possible execution, verified before any execution happens — the only part of programming where you get a guarantee rather than a test result. The guarantee is narrow but real: when Gao, Bird and Barr took public JavaScript bugs, checked out the code just before each fix, added type annotations by hand, and asked whether a type checker would have complained, both Flow and TypeScript caught 15 percent of them (To Type or Not to Type, ICSE 2017). Read that carefully: it is not "15 percent of bugs are type errors," but 15 percent of bugs that had already survived testing, review, and release. Push the idea far enough and it stops being about bugs. The Curry–Howard correspondence, observed by Haskell Curry in the 1930s and stated by William Howard in a 1969 manuscript titled "The Formulae-as-Types Notion of Construction," says that types are propositions and programs are proofs of them. A type checker is a small automatic theorem prover most programmers use daily without noticing.

Type ​คือ​กลไก​ตั้งชื่อ​ที่​คม​ที่สุด ​เพราะ type ​คือ​คำสัญญา​ที่​เครื่องจักร​ตรวจ​ได้ ​ประกาศ​ว่า​ฟังก์ชัน​หนึ่ง​รับ​จำนวนเต็ม​และ​คืน​สตริง ​คือ​ข้อกล่าวอ้าง​ครอบคลุม​การรัน​ทุกครั้งที่​เป็นไปได้ ​ตรวจสอบ​เสร็จ​ก่อน​การรัน​ครั้งแรก​จะ​เกิดขึ้น​ด้วยซ้ำ — ​เป็น​ส่วน​เดียว​ของ​การเขียน​โปรแกรม​ที่​คุณ​ได้การ​รับประกัน (guarantee) ​ไม่​ใช่​ผล​การเทสต์ ​การรับประกัน​นี้​แคบ​แต่​จริง Gao, Bird ​และ Barr ​หยิบ​บั๊ก JavaScript ​ที่​เปิดเผย​ต่อ​สาธารณะ ​เช็ค​เอาต์​โค้ด​ช่วง​ก่อน​แก้​บั๊ก​แต่ละ​ตัว ​ใส่ type annotation ​ด้วยมือ ​แล้ว​ถาม​ว่า​ตัว​ตรวจ​ชนิด (type checker) ​จะ​โวย​ไหม ​ทั้ง Flow ​และ TypeScript ​จับได้ 15 ​เปอร์เซ็นต์ (To Type or Not to Type, ICSE 2017) ​อ่าน​ให้​ละเอียด ​นี่​ไม่​ใช่ "15 ​เปอร์เซ็นต์​ของ​บั๊ก​เป็น​ข้อผิดพลาด​เรื่อง type" ​แต่​คือ 15 ​เปอร์เซ็นต์​ของ​บั๊ก​ที่​รอด​การเทสต์ ​การรีวิว ​และ​การปล่อย​ใช้งาน​จริง​มา​แล้ว ​ดัน​ไอเดีย​นี้​ไป​ไกล​พอ ​มัน​เลิก​เป็นเรื่อง​บั๊ก Curry–Howard correspondence ​ที่ Haskell Curry ​สังเกตเห็น​ใน​ทศวรรษ 1930 ​และ William Howard ​ระบุ​ไว้​ใน​ต้นฉบับ​ปี 1969 ​ชื่อ "The Formulae-as-Types Notion of Construction" ​บอก​ว่า type ​คือ ​ข้อเสนอ (proposition) ​และ​โปรแกรม ​คือ ​บทพิสูจน์​ของ​มัน type checker ​คือ​เครื่องพิสูจน์​ทฤษฎีบท​อัตโนมัติ​ตัว​จิ๋ว​ที่​โปรแกรมเมอร์​ส่วนใหญ่​ใช้​ทุกวัน​โดย​ไม่ทันสังเกต

Which raises the question of why there are so many. The HOPL database, maintained since 1995, catalogued 8,945 of them as of August 2026. The proliferation is not waste. A language is a bet about which mistakes are worth preventing and which repetitions are worth naming, and those bets are genuinely different for an operating system kernel, a statistical model, and a web page. Alan Perlis put the useful test in his 1982 Epigrams on Programming: "A language that doesn't affect the way you think about programming, is not worth knowing." What has not survived is the 1957 fear. Compilers routinely beat competent hand-written assembly, and superoptimizers now beat compilers: STOKE, searching randomly from unoptimized code for equivalent rewrites, matched or outperformed the best output of production compilers (Schkufza, Sharma & Aiken, ASPLOS 2013). Backus's team asked for almost as good, and lost that bet in the most agreeable direction.

​แล้ว​ทำไม​ถึง​มี​ภาษา​มากมาย​ขนาด​นี้ ​ฐานข้อมูล HOPL ​ที่​ดูแล​มา​ตั้งแต่​ปี 1995 ​นับ​ได้ 8,945 ​ภาษา ณ ​เดือน​สิงหาคม 2026 ​การแตกแขนง​นี้​ไม่​ใช่​ความสูญเปล่า ​ภาษา​หนึ่ง​คือ​การเดิมพัน​ว่าความ​ผิดพลาด​แบบ​ไหน​คุ้ม​ที่จะ​ป้องกัน ​และ​การทำซ้ำ​แบบ​ไหน​คุ้ม​ที่จะ​ตั้งชื่อ ​การเดิมพัน​นั้น​ต่างกัน​จริง​ระหว่าง​เคอร์เนล​ของ​ระบบปฏิบัติการ ​โมเดล​เชิง​สถิติ ​และ​หน้า​เว็บ Alan Perlis ​วาง​บท​ทดสอบ​ที่​ใช้ได้​จริง​ไว้​ใน Epigrams on Programming ​ปี 1982 "​ภาษา​ที่​ไม่​กระทบ​วิธี​คิด​ของ​คุณ​เกี่ยวกับ​การเขียน​โปรแกรม ​ก็​ไม่​คุ้ม​ที่จะ​รู้จัก" (A language that doesn't affect the way you think about programming, is not worth knowing) ​สิ่ง​ที่​ไม่​รอด​มา​คือ​ความกลัว​ของ​ปี 1957 ​คอมไพเลอร์​เอาชนะ​แอสเซมบลี​ฝีมือดี​ที่​เขียน​ด้วยมือ​เป็นเรื่อง​ปกติ​ไป​แล้ว ​และ​ตอนนี้ superoptimizer ​ก็​เอาชนะ​คอมไพเลอร์​อีกที: STOKE ​ค้น​แบบ​สุ่ม​จาก​โค้ด​ที่​ยัง​ไม่​ถูก​เพิ่มประสิทธิภาพ ​หา​รูปแบบ​เขียน​ใหม่​ที่​ความหมาย​เท่ากัน ​แล้ว​ให้ผล​เทียบเท่า​หรือ​ดีกว่า​ผลลัพธ์​ที่​ดี​ที่สุด​ของ​คอมไพเลอร์​ระดับ​โปร​ดัก​ชัน (Schkufza, Sharma & Aiken, ASPLOS 2013) ​ทีม​ของ Backus ​ขอ​แค่ ​เกือบ ​ดี​เท่า​โค้ด​มือ ​และ​แพ้​เดิมพัน​นั้น​ใน​ทิศทาง​ที่​น่ายินดี​ที่สุด

The people on this floor had a habit of turning on their own work. Backus received the Turing Award in 1977 and used the lecture to attack the model FORTRAN entrenched, titling it "Can Programming Be Liberated from the von Neumann Style?" — published in CACM the following August. Grace Hopper's A-0 system of 1951–52 is often called the first compiler; it functioned closer to a loader, and the more consequential work was FLOW-MATIC, whose English-like verbs passed almost intact into COBOL and put readable text into commercial programming for good. She retired from the US Navy in 1986 as a rear admiral, in the habit of handing visitors a length of wire just under a foot long — the distance light travels in a nanosecond — so that they would stop treating wasted time as free.

​คน​บน​ชั้นนี้​มี​นิสัย​หันกลับ​มา​โจมตี​งาน​ของ​ตัวเอง Backus ​รับ Turing Award ​ใน​ปี 1977 ​แล้ว​ใช้​ปาฐกถา​นั้น​ถล่ม​โมเดล​ที่ FORTRAN ​ปักหลัก​ไว้ ​ตั้งชื่อ​ว่า "Can Programming Be Liberated from the von Neumann Style?" — ​ลง​ใน CACM ​เดือน​สิงหาคม​ปี​ถัดมา ​ระบบ A-0 ​ของ Grace Hopper ​ปี 1951–52 ​มัก​ถูก​เรียก​ว่า​คอมไพเลอร์​ตัว​แรก ​จริงๆ ​มัน​ทำงาน​ใกล้เคียง​ตัว​โหลด (loader) ​มากกว่า ​งาน​ที่​ส่งผล​กว่า​คือ FLOW-MATIC ​คำกริยา​คล้าย​ภาษาอังกฤษ​ของ​มัน​ผ่าน​เข้าไป​ใน COBOL ​แทบ​ทั้งดุ้น ​และ​วางข้อ​ความที่​คนอ่าน​ออก​ไว้​ใน​การเขียน​โปรแกรม​เชิงพาณิชย์​อย่าง​ถาวร ​เธอ​เกษียณ​จาก​กองทัพเรือ​สหรัฐฯ ​ใน​ปี 1986 ​ด้วย​ยศ​พลเรือตรี ​ติดนิสัย​ยื่น​เส้น​ลวด​ยาว​เกือบ​หนึ่ง​ฟุต​ให้​แขก​ที่มา​เยี่ยม — ​ระยะทาง​ที่​แสง​เดินทาง​ได้​ใน​หนึ่ง​นาโน​วินาที — ​เพื่อให้​เลิก​คิด​ว่า​เวลา​ที่​เสีย​ไป​ไม่​มี​ต้นทุน

Connections

​เชื่อมโยง

Below this chapter, 04 supplies the instruction set the back end emits into, and 05 the process abstraction a compiled program is loaded into. Chapter 01 sets the ceiling: because the halting problem is undecidable, no compiler can decide in general whether an optimization is safe in every case, which is why real optimizers are conservative by construction. Above, chapter 07 asks which of these naming mechanisms keep large systems changeable over years, and chapter 12 raises the possibility that the next notation people write in will not be a programming language at all.

​ชั้นล่าง​ของ​บท​นี้ ​บท​ที่ 04 ​มอบ​ชุดคำสั่ง​ที่ back end ​ปล่อย​โค้ด​ออก​ไปหา ​และ​บท​ที่ 05 ​มอบ abstraction ​ของ process ​ที่​โปรแกรม​คอมไพล์​แล้ว​ถูก​โหลด​เข้าไป​อยู่ ​บท​ที่ 01 ​กำหนด​เพดาน ​เพราะ​ปัญหา​การหยุด (halting problem) ​ตัดสิน​ไม่​ได้ ​คอมไพเลอร์​จึง​ตัดสิน​ใน​กรณี​ทั่วไป​ไม่​ได้​ว่าการ​เพิ่มประสิทธิภาพ​หนึ่งๆ ​ปลอดภัย​ทุก​กรณี​หรือไม่ optimizer ​ตัวจริง​จึง​ถูก​ออกแบบ​มา​ให้​ระมัดระวัง​ไว้​ก่อน ​ชั้นบน ​บท​ที่ 07 ​ถาม​ว่า​กลไก​ตั้งชื่อ​เหล่านี้​ตัว​ไหน​ทำให้​ระบบ​ใหญ่​เปลี่ยนแปลง​ได้​ตลอด​หลาย​ปี ​และ​บท​ที่ 12 ​เปิด​ความเป็นไปได้​ว่า​สัญกรณ์​ถัดไป​ที่​คนใช้​เขียน​อาจ​ไม่​ใช่​ภาษา​โปรแกรม​เลย

Open questions

​คำถาม​ที่​ยัง​เปิด​อยู่

If a model can produce working code from an English description, what is a programming language for — specification, verification, or only review? Types demonstrably catch real defects, so why does a large part of the industry still decline them, and is the honest answer about evidence or about cost? And what would a language look like that was designed for programs to read rather than write?

​ถ้า​โมเดล​ผลิต​โค้ด​ที่ทำงาน​ได้​จาก​คำอธิบาย​ภาษาอังกฤษ ​ภาษา​โปรแกรม​มี​ไว้​ทำ​อะไร — ​ทำ​สเปก (specification) ​พิสูจน์​ความถูกต้อง (verification) ​หรือ​แค่​รีวิว? Type ​จับ​ข้อบกพร่อง​จริง​ได้​อย่าง​พิสูจน์​แล้ว ​แล้ว​ทำไม​อุตสาหกรรม​ส่วนใหญ่​ยัง​ปฏิเสธ​มัน ​คำตอบ​ที่​ตรงไปตรงมา​คือ​เรื่อง​หลักฐาน​หรือ​เรื่อง​ต้นทุน? ​และ​ภาษา​ที่​ออกแบบ​มา​ให้​โปรแกรม​อ่าน​มากกว่า​ให้​คนเขียน ​จะ​หน้าตา​แบบ​ไหน?

Go deeper

​อ่าน​ต่อ

บทถัดไป · 8 / 1607 · Software Engineering
Size
Page
Font

The Tower of Abstractions — An Encyclopedia of the Computing Disciplines

❦
100 · The Map00 · แผนที่201 · Theory of Computation01 · ทฤษฎีการคำนวณ302 · Algorithms & Data Structures02 · อัลกอริทึมและโครงสร้างข้อมูล403 · Information & Coding03 · สารสนเทศและการเข้ารหัส504 · Computer Architecture04 · สถาปัตยกรรมคอมพิวเตอร์605 · Operating Systems05 · ระบบปฏิบัติการ706 · Languages & Compilers06 · ภาษาและคอมไพเลอร์807 · Software Engineering07 · วิศวกรรมซอฟต์แวร์908 · Databases08 · ฐานข้อมูล1009 · Networks09 · เครือข่าย1110 · Distributed Systems10 · ระบบกระจาย1211 · Security & Cryptography11 · ความปลอดภัยและวิทยาการรหัสลับ1312 · AI & Machine Learning12 · ปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง1413 · HCI & Graphics13 · ปฏิสัมพันธ์มนุษย์–คอมพิวเตอร์ และกราฟิกส์1514 · The Frontier14 · พรมแดน1699 · Closing — The Tower, Seen Whole99 · ปิดเล่ม — หอคอยเมื่อมองทั้งหลัง