跳轉到

4.2 0 與 1 的痛苦:最早期的面板切換與機器碼編程#

直接跟機器對話的年代#

第一代電腦(1945–1955)的「程式設計」是一門體力與腦力兼修的苦工。以 ENIAC 為例:

  • 程式 = 連接函數表、單元之間的纜線 + 3,000 個開關的設置
  • 女程式員群體(ENIAC Six:Kathleen McNulty、Jean Jennings Bartik、Betty Holberton、Marlyn Wescoff、Frances Bilas、Ruth Lichterman)最初被當作「接線員」——她們在沒有文件、沒有手冊的情況下,靠讀電路圖發明了調試、斷點、子程式的技術。但她們 1946 年在賓大展示 ENIAC 時不被介紹為程式員,只被介紹為「展示機器的女孩」——性別化的勞動分工讓程式設計早期被貶低為「文書工作」,直到 1960s 才逆轉為「高大上」職業。這段歷史是全書性別視角的樞紐:職業的地位,是由社會敘事而非技能內容決定的。

Manchester Baby / EDSAC 時代的日常:

  1. 把指令寫成二進制或八進制數
  2. 用面板開關逐位撥入,或用紙帶打孔機準備
  3. 按下運行,盯著指示燈與陰極射線管
  4. 出錯時,靠示波器上磁鼓的圖形判斷程式行為——Wilkes 回憶,他意識到「除錯將耗費與寫程式一樣長的時間」的那一天(1949),是軟體工程意識的第一次覺醒

為什麼機器碼如此痛苦#

一台典型的早期機器,指令格式如(示意):

\[\text{指令} = [\text{操作碼 4 bits}][\text{位址 12 bits}]\]

寫「把記憶體位址 3072 的數加入累加器」=寫 1010 110000000000。人腦要同時維護:

  • 每個操作的二進制碼(無任何助記線索)
  • 每個變數的記憶體位址(手工分配,移動一行程式碼,後面全部位址要重算)
  • 資料的位址與格式

認知負荷的經濟學:機器碼把「設計邏輯」與「簿記工作」綁在一起,而簿記占掉了 80% 的注意力。早期程式員的名人軼事全是與這種痛苦搏鬥:圖靈在曼徹斯特親手寫機器碼並堅持「這才是真正理解機器」(他的同事習慣開他的玩笑);韋爾克斯(Wilkes)在 EDSAC 上建立了「副程式庫」的概念——把重複的簿記封裝成可複用單元,這是抽象化本能的第一次工業覺醒。

程式設計的社會史:誰在做這份工作#

事實 意義
1945–60s 美國程式員招聘廣告偏好「細心、耐心」的女性 打字員、會計的職業性別延伸;女性一度占程式員 30–50%
1960s 「程式員=天才/工程師」敘事成型 男性大規模進入;職業聲望重估
1968 軟體危機報告 程式設計成為「工程學科」的建制化轉折(NATO 軟體工程會議)
1984 揭示程式設計 Aptitude 測試的偏誤研究 天才迷思的教育學批判

歷史的啟示:程式設計從「女性文書勞動」到「男性工程精英」的身分翻轉,與技術難度無關,與薪資、聲望與敘事有關。這個案例今天仍是科技業性別討論的核心歷史證據。

機器碼的現代迴響#

機器碼從未消失,它只是退到了金字塔底層,並在幾個場景中「復活」:

  • 效能關鍵處的手寫最佳化:加密、解碼器(FFmpeg 的 SIMD 函數)、遊戲引擎的熱迴圈
  • 安全研究:漏洞利用、shellcode、逆向工程——機器碼是攻防雙方的共同母語
  • 教學與理論:計算機組織課程(Patterson & Hennessy)以 MIPS/RISC-V 機器碼開場——理解抽象層的代價,才知道每一層抽象省了什麼
  • AI 時代的對比:LLM 生成高階語言代碼時,人類對機器碼的距離更遠了——但效能調優、編譯器後端、JIT 設計仍是「機器碼素養」的領地(第 17 章將回到這點:抽象層越高,底層專家越稀缺越昂貴)

中間層的呼喚#

到 1950 年代初,全世界的共識已經浮現:機器碼與人之間需要一層緩衝。問題是,這層緩衝應該多薄(助記符替換二進制)還是多厚(接近數學公式)?兩個答案分別催生了:

  • 組合語言(下一節)——薄的答案
  • Fortran(第 5 章)——厚的答案

而「厚的答案」在當時被普遍認為不可能:機器怎麼可能自己理解接近人類語言的程式?這個懷疑,即將被一位前游泳選手出身的工程師擊碎。


下一節:4.3 組合語言的誕生