駭客軼聞
有些電腦術語有著令人驚訝的傳承。許多術語都源自早已過時的技術。本文試圖拂去歷史的塵埃,揭開這些我們每天使用、卻不太確定其由來的詞彙背後那些精彩的故事。讓我們直接開始吧!
Bike-Shedding(自行車棚效應)
今日涵義:針對瑣碎問題進行無謂的討論。
Bike-shedding(自行車棚效應)一詞,原本是作為闡明「瑣碎法則」的隱喻而被創造出來的;它由丹麥電腦開發者 Poul-Henning Kamp(波爾-亨寧·坎普)於 1999 年在 FreeBSD 郵件論壇上推廣,並在柏克萊軟體套件(Berkeley Software Distribution)社群中流行開來,隨後擴散至整個軟體產業。
這個概念最初是作為其更廣泛的「帕金森定律」戲仿的推論而提出的。他以一個委員會針對原子爐的審議,對比針對自行車棚的審議,來戲劇化地呈現這個「瑣碎法則」。正如他所說:「花在議程上任何項目的時間,將與所涉及的金額成反比。」
原子爐造價極高且極其複雜,一般人無法理解,因此大家會假設負責的人自然懂。相反地,每個人都能想像便宜又簡單的自行車棚,因此規劃自行車棚時可能會引發無止盡的討論,因為每個參與者都想加上自己的意見、展現個人貢獻。
參考資料-維基百科:Law of Triviality
Boilerplate(樣板)

來源:維基共享資源
今日涵義:一段被一再複製、幾乎未經修改的程式碼區塊。
Boiler plate 原本指的是用來製造鍋爐的軋製鋼板,但在媒體中則用來指陳腔濫調或缺乏原創性的文字。此術語指的是預先準備好的文字的金屬印刷版,例如廣告或聯播專欄,這些印刷版會被分發給小型地方報社。這些印刷版因類比關係而被稱為「鍋爐板(boilerplate)」。這類樣板印刷版的一大供應商是 Western Newspaper Union,它向版圖較小的地方報紙提供「包含國內或國際新聞、可直接印刷的故事」,其中可能包含與常規內容一起預先印好的廣告。
參考資料:

來源:維基共享資源
Boot / Reboot / Bootstrapping(開機/重開機/自舉)
來源:維基共享資源
boot 一詞在電腦領域中指的是啟動電腦的過程。
在編譯器開發中,bootstrapping(自舉)一詞指的是用新語言重寫編譯器的過程:第一個編譯器先用現有語言撰寫,然後再用新語言重寫,並由自身來編譯。
「靠自己的靴帶把自己拉起來(to pull oneself up by one’s bootstraps)」這句俗諺可追溯至 19 世紀。高筒靴頂部可能有拉環或提帶,幫助穿靴時往上拉。這個隱喻衍生出更多用來形容無需外力、自我維持的過程的比喻。
根據 維基百科,
這個慣用語至少可追溯至 1834 年,當時出現在《Workingman’s Advocate》上:「據推測,墨菲先生現在將能夠靠著靴子上的帶子,把自己拉過坎伯蘭河或穀倉的籬笆。」
在 Merriam-Webster 上也有很好的整理。
Bug(錯誤)
今日涵義:程式碼或硬體中的缺陷。
起源不明!
與普遍的誤解相反,它早於葛麗絲·霍普在 Mark II 電腦中發現的那隻蟲。
這個詞在那之前很久就已被工程師使用;至少自 1870 年代起就已出現。它早於電子電腦與電腦軟體。湯瑪斯·愛迪生(Thomas Edison)在他的筆記中就曾使用「bug」一詞。參考資料
Bit(位元)
此術語的創造歸功於 John W. Tukey(約翰·W·圖基),他在 1947 年 1 月 9 日為 Bell Labs 撰寫的備忘錄中,將「binary information digit(二進位資訊位)」縮寫為「bit」。參考資料
Byte(位元組)
「byte」一詞最早由 Werner Buchholz(維爾納·布赫霍茲)於 1956 年 6 月提出。當時正值 IBM Stretch 電腦的初期設計階段。該電腦的設計可定址到個別的位元,並允許可變長度指令,位元組的大小就編碼在指令本身中。選擇拼寫為「byte」而非「bite」是刻意為之,以避免被意外誤改為「bit」。
Carriage Return and Line Feed(歸位與換行)
今日涵義:將游標移到下一行的開頭。
這兩個術語沿用自打字機。
字車(carriage)承載著紙張,隨著按鍵被按下,會從左向右移動以推進打字位置。它「承載」著紙張。歸位(carriage return)是指將字車移回紙張最左側原始位置的操作。
然而,僅僅將字車歸位並不足以開始新的一行,字車仍會停留在與先前相同的那一行上——只是在該行的開頭。要移到新的一行,需要一次換行(line feed)。它會將打字機內的紙張向上移動一行。
這兩個操作——歸位(CR)與換行(LF)——通常是透過推動歸位控制桿一次完成。

來源:piqsels
- 在 Unix 系統(如 Linux 或 macOS)上,
\n仍代表換行(ASCII 符號:LF)或新行(newline)。 - 在 CP/M、DOS 與 Windows 上,則使用
\r\n,其中\r代表歸位,\n代表換行(CR+LF)。 - 參考資料
以下是展示歸位與換行基本機械原理的舊影片:
Command 鍵符號(⌘)
今日涵義:在 Apple 電腦上提供額外鍵盤組合的輔助鍵。
直接引述維基百科(粗體為筆者所加):
⌘ 符號是在 Macintosh 專案的後期才加入的。開發團隊最初沿用舊有的 Apple 鍵,但賈伯斯發現當「蘋果」圖案在選單中與快速鍵並列填滿畫面時令人困擾,因為他覺得這是對公司標誌的過度使用。於是他決定改用不同的按鍵符號。在期限僅剩幾天時,團隊的點陣圖美術設計師 Susan Kare(蘇珊·凱爾)開始為 Apple 標誌的繼任者尋找靈感。她在翻閱符號字典時,發現了這個三葉草狀的符號,它在北歐國家普遍被用來標示文化地點與名勝(它是丹麥、芬蘭、冰島、挪威與瑞典官方用來標示觀光景點的道路標誌,而這個電腦按鍵在瑞典 Mac 使用者間常被稱為 Fornminne——古代遺跡——在丹麥使用者間則稱為 Seværdighedstegn)。當她向團隊其他成員展示時,大家都很喜歡,因此它便成為 1984 年 Macintosh 的 Command 鍵符號。蘇珊·凱爾表示,後來有人告訴她,該符號之所以因其斯堪地那維亞用法而被選中,是因為它俯視時的形狀類似一座帶有圓形角塔的方形城堡,特別是博格霍爾姆城堡。

來源:維基共享資源

來源:維基共享資源
參考資料:
- 維基百科:Command Key
- Cult of Mac:What Are The Mac’s Command ⌘ And Option ⌥ Symbols Supposed To Represent?
Cookie
今日涵義:從網站傳送並儲存在使用者網頁瀏覽器中的一小塊資料。
cookie 一詞由當年 23 歲的網頁瀏覽器程式設計師 Lou Montulli(盧·蒙圖利)於 1994 年秋天所創造。靈感來自 magic cookie一詞,這是 Unix 程式設計師用來指稱程式接收後會原封不動送回的一包資料。此詞彙又源自幸運餅乾(fortune cookie),一種內藏訊息紙條的餅乾。
蒙圖利使用 cookie 一詞來描述網頁瀏覽器接收後又原封不動送回給網頁伺服器的小封包資料。
「是啊,就是 cookie,」蒙圖利笑著說。「那是我人生中一週的工作,卻成了我做過最重要的事。」(參考資料)
Core Dump(核心傾印)
今日涵義:透過儲存程式的所有記憶體來取得(當機)程式狀態的快照,以供離線分析。
這個名稱來自磁芯記憶體(magnetic core memory),一種基於環形磁鐵網格的早期儲存機制。此技術現已過時,但這個術語至今仍用於取得電腦行程的快照。參考資料

來源:維基共享資源
Cursor(游標)
今日涵義:在視訊顯示器上指示位置(例如供資料輸入用)的視覺提示(如閃爍的垂直線)。Merriam-Webster
Cursor 在拉丁文中意為奔跑者(runner)。Cursor 原本是指計算尺上那片刻有細線的透明滑片,用來標記刻度上的點。這個詞之後透過類比被轉用到電腦上。參考資料

Daemon(常駐程式)
在電腦運算中,daemon 是一種在背景執行、處理如列印多工與檔案傳輸等服務請求的常駐行程。該術語由麻省理工學院的 Project MAC(Mathematics and Computation)的程式設計師於 1963 年創造。他們取用了馬克士威妖(Maxwell’s demon)之名,這是思想實驗中一種在背景中不斷工作、分類分子的假想生物。
麻省理工學院的程式設計師認為 demon 會是背景中不知疲倦地執行系統雜務的行程的合適名稱。但他們沒有使用 demon,而是使用了 daemon,這是該字的較古老拼法。(參考資料)
Dashboard(儀表板)
今日涵義:提供系統狀態快速總覽的使用者介面。
原本是指馬車前方的一塊木板,用來保護駕駛不受馬蹄向後揚起的泥濘噴濺。
當汽車被製造出來時,駕駛前方的那塊板子也被賦予了相同的名稱。那是放置必要儀表的合理位置,以便駕駛輕鬆查看。隨著時間推移,這個詞變得更常與儀表讀數相關,而非其原本的保護功能。參考資料

來源:維基共享資源
Firewall(防火牆)
今日涵義:在受信任的內部網路與不受信任的外部網路(如網際網路)之間建立屏障的網路安全系統。
防火牆主要用於連棟住宅,但也用於獨棟住宅建築。在發生火災時,它們可防止火勢與煙霧蔓延至建築物的另一部分,從而防止大火擴散。該術語在電腦領域自 80 年代起開始使用。參考資料

來源:維基共享資源
Firmware(韌體)
今日涵義:一類為裝置的特定硬體提供低階控制、且與其運行的硬體緊密結合的電腦軟體。
Ascher Opler(艾雪·歐普勒)在 1967 年的《Datamation》文章中創造了 firmware 一詞。如最初所用,firmware 與 hardware(CPU 本身)和 software(在 CPU 上執行的一般指令)相對。它存在於硬體與軟體之間的邊界上,因此得名「firmware」。原始文章可在 Internet Archive 上取得。參考資料
Foo and Bar
今日涵義:常見的佔位變數名稱。
該術語最初可能來自軍事術語 FUBAR。有幾種不同的說法,但常見的涵義是 FUBAR:「f***ed up beyond all recognition(糟到面目全非)」。
在程式設計情境中使用 foo 通常被認為源自麻省理工學院的 Tech Model Railroad Club(TMRC),約在 1960 年左右。在複雜的模型系統中,房間各處設有緊急開關(scram switches),當發生不欲見的狀況時,例如列車全速衝向障礙物,就可以扳動這些開關。
我的理解是,他們實際上在緊急按鈕上標示了 foo,只是因為沒有更好的名稱。也許與原本軍事用語 FUBAR 用來表示事情非常非常不對勁有關。

foo來源:維基共享資源
參考資料:
Freelancer(自由接案者)
今日涵義:不受特定雇主長期約束的自僱人士。
該術語首次出現在 Sir Walter Scott(華特·司各特爵士)的小說 Ivanhoe(《艾凡赫》)中。(該小說也對羅賓漢傳說產生了深遠的影響。)

來源:維基共享資源
在書中,一位領主向理查王提供他麾下有償的「自由長矛手(free lances)」軍隊:
我曾向理查提供我的自由長矛手部隊的服務,而他拒絕了——我將率領他們前往赫爾,奪取船隻,揚帆前往法蘭德斯;多虧這動盪的時局,有行動力的人總能找到工作。
因此,「free lancer」是指為出價最高者而戰的人。Free 並非指「無償」,而是指可為任何雇主工作的額外自由。參考資料
Hash(雜湊)
今日涵義:雜湊函式是指任何可將任意大小的資料對應至固定大小數值的函式。
根據維基百科,hash function 中「hash」一詞的用法是「透過與其非技術性涵義類比而來,即『切碎並混合』。事實上,典型的雜湊函式,如取餘數運算,會將輸入定義域『切碎』成許多子域,再將其『混合』到輸出範圍中,以改善鍵值分佈的均勻性。」
參考資料:
Log / Logfile(日誌/日誌檔)
今日涵義:記錄電腦程式或系統事件的檔案。
水手們曾使用所謂的測程繩(log lines)來測量船速。一塊扁平的木塊(即 log)被繫在一條長繩上。繩子上有等距的繩結。當木塊隨水漂離時,水手會計算在固定時間間隔內放出的繩結數量,這就是船速——以「節(knots)」為單位。
船速對航海至關重要,因此水手會將其記錄在一本書中,恰如其分地稱為航海日誌(log book),並一同記錄其他資訊以更準確地確定船位,例如地標目擊與天氣事件。後來,更多與船隻相關的一般資訊也被加入——或記錄(logged)——例如港口費用與異常的給養消耗。
參考資料。

來源:The Pilgrims & Plymouth Colony:1620 by Duane A. Cline

來源:The Pilgrims & Plymouth Colony:1620 by Duane A. Cline

來源:Navigation and Logbooks in the Age of Sail by Peter Reaveley
Patch(修補程式)
今日涵義:可套用於修正或改進電腦程式的一段程式碼。
在電腦歷史的早期,如果你在程式設計中犯了錯,就必須透過在孔洞上貼上補丁來修正紙帶或打孔卡。

來源:史密森尼檔案中心
Ping
今日涵義:一種透過網路檢查電腦可用性與回應時間的方法。
Ping 是最初由 Mike Muuss(麥克·穆斯)於 1983 年撰寫的終端機程式,包含在每一版的 UNIX、Windows 與 macOS 中。他以「聲納發出的聲音來命名,靈感來自整個回聲定位原理。[…] ping 使用定時的 IP/ICMP ECHO_REQUEST 與 ECHO_REPLY 封包來探測與目標機器之間的『距離』。」參考資料非常值得一讀。
Pixel(像素)
今日涵義:螢幕上所呈現影像中可控制的最小單位。
pixel 一詞是 pix(來自「pictures」,縮寫為「pics」)與 el(即「element」)的組合。類似地,voxel 是體積元素,texel 是紋理元素。參考資料
Shell(殼層)
今日涵義:用於與電腦系統互動的互動式、通常以文字為基礎的執行環境。
此術語的發明者 Louis Pouzin(路易·普贊)在其文章 The Origins of the Shell 中並未對名稱的由來做出解釋。不過,它可追溯至 Unix 的前身 Multics。在 Multics 詞彙表中是如此描述的:
[殼層]會被傳入一個由 listener 執行的命令列。
由 Eric S. Raymond(艾瑞克·S·雷蒙德) 所著的《The New Hacker’s Dictionary》(亦稱為《Jargon File》)中包含以下內容:
歷史註記:顯然,最初的 Multics 殼層(意義 1)之所以被稱為 shell,是因為它是殼層(意義 3);
其中意義 3 指的是
一個骨架程式,由人工或由另一個程式(如解析器產生器)建立,它提供執行某項任務所需的必要儀式與驅動其控制流程(有時會同義地使用 driver 一詞)。使用者需填入完成實際工作所需的程式碼。這種用法在 AI 與 Microsoft Windows 領域中很常見,並讓 Unix 駭客感到困惑。
遺憾的是,該書並未提供任何證據來支持此一說法。
我喜歡這個(可能在歷史上並不正確)以堅果作類比的說法:外層的殼保護著內部的核心(kernel)。
Slab allocator(Slab 配置器)
今日涵義:一種有效率的記憶體配置技術,會重複使用先前的配置。
Slab 配置由 John Bonwick(約翰·邦威克)(注意:PDF 檔案)於 1994 年發明,自此被應用於 Memcached 與 Linux 核心等服務中。
透過 slab 配置,針對某種特定類型或大小的資料物件的快取會擁有數個預先配置的「slab」記憶體;在每個 slab 內有大小固定的記憶體區塊,適合放置這些物件。(維基百科)
slab 這個名稱來自邦威克青少年時期的一位朋友。他在 Oracle 部落格上講述了這個故事:
當時他們一起看電視,Kellogg’s 的一則廣告出現,標語是「Can you pinch an inch?(你能捏起一吋嗎?)」
其含義是,如果你能捏起超過一吋的腰間贅肉,就代表你過重了——而吃一碗玉米片會有幫助。
湯米毫不猶豫地摸向自己的腰間,體重約 250 磅的他如此回應:「見鬼,我能抓起一整塊(slab)!」
十年後,邦威克在尋找一個詞來描述較大記憶體區塊的配置時,想起了這個詞。
以下是原始的 Kellogg’s 廣告:
Spam(垃圾訊息)
今日涵義:未經請求的電子通訊,例如大量發送電子郵件或在論壇與聊天室中洗版。
此術語可追溯至英國喜劇團體 Monty Python 於 1970 年的一齣短劇。在短劇中,一家咖啡館幾乎在每道菜中都加入了 Spam(一種罐裝熟豬肉品牌)。Spam 是 spiced 與 ham 的混成詞。劇中大量提及 Spam,是在影射二戰後英國普遍存在此類進口罐裝肉品的現象(當時正值英國配給時期),當時英國正努力重建其農業基礎。參考資料

來源:由使用者 Jamie (jbcurio) on flickr.com
Monty Pythons Flying Circus (1974) - SPAM 來自 Testing Tester 於 Vimeo。
Mainframe(大型主機)
今日涵義:一種大型電腦系統,常被大型組織使用。
最初,該術語指的是容納電腦主要元件的框架。主要元件包括 CPU、記憶體與 I/O 裝置。該術語在 1960 與 1970 年代電腦體積龐大、需要大量空間時被使用。
![此圖顯示 IBM 701 大型主機如何向外打開以便檢修電路。摘自 IBM《Type 701 EDPM [Electronic Data Processing Machine] 安裝手冊》。來自 Computer History Museum 檔案。](https://endler.dev/2020/folklore/mainframe.jpg)
可在 Ken Shirriff(肯·席瑞夫)的部落格上閱讀更多內容。
Radio Button(選項按鈕)
今日涵義:一種允許從一組互斥的預先定義選項中擇一的介面元件
「Radio buttons(選項按鈕)」之名來自收音機上類似的機械按鈕。這個介面概念後來被應用於錄音機、卡式錄音機與隨身聽(著名的「Walkman」及類似產品)上,之後又被用於錄影機與攝影機中。參考資料

來源:圖片來自 Matt Coady
Uppercase and lowercase(大寫與小寫)
今日涵義:鍵盤上大寫字母與小寫字母的區分。
在排版仍是手工過程、單個由鉛製成的字母被「排版」以組成單字與句子的年代,大寫與小寫字母被分開存放在不同的容器——或稱為 cases(字盤)——中,以讓這個相當繁瑣的過程稍微快一些。

來源:摘自 Daniel Berkeley Updike(丹尼爾·柏克萊·厄普代克),1860-1941,《Printing types, their history, forms, and use; a study in survivals》。 可在 archive.org 上免費取得。
值得一提
404
今日涵義:HTTP 狀態碼「找不到檔案」。
有個故事說,這個數字來自存放全球資訊網中央資料庫的伺服器機房。在那裡,管理員會手動尋找被請求的檔案,並透過網路將其傳送給請求者。如果檔案不存在,他們就會回傳錯誤訊息:「Room 404: file not found」。
然而,這似乎是個迷思,該狀態碼是根據當時已確立的 FTP 狀態碼相當隨意地選定的。參考資料
程式語言與縮寫
程式語言名稱與常見縮寫的語源大概值得另寫一篇文章,但在此我先記下一些我最喜歡的例子。
C++
C++ 是由 Bjarne Stroustrup(比雅尼·史特勞斯特魯普)基於 C 語言所開發的程式語言。其名稱是由史特勞斯特魯普的同事 Rick Mascitti(瑞克·馬斯契提)所取的一個程式設計師雙關語。++ 指的是許多類 C 語言中常見的後置遞增運算子。它會將變數的值增加 1。從這個意義上說,C++ 可被視為 C 語言在精神上的「後繼者」。參考資料
C Sharp
與 C++ 類似,C# 也是一種類似 C 的程式語言。其名稱同樣指涉在 C++ 之上的「遞增」改進。名稱中的 # 看起來像四個加號。因此 C# == (C++)++。除此之外,該名稱也受到樂譜中升記號的啟發,升記號表示書寫的音符應提高半音。參考資料
來源:維基共享資源
PNG
正式來說,PNG 代表 Portable Network Graphics(可攜式網路圖形)。它誕生於對 CompuServe 在 1994 年宣布支援 GIF 的程式將必須支付授權費用一事的失望。由駭客 Thomas Boutell(湯瑪斯·鮑特爾) 領導的工作小組建立了 .webp 檔案格式,作為 GIF 的無專利替代品。因此我更喜歡這個格式的非官方名稱:PNG’s Not GIF(PNG 不是 GIF)。這裡有一篇關於 PNG 歷史的精彩文章。參考資料
致謝
大部分內容來自維基百科等來源(已在適當處標註參考資料),但若你不知道該找什麼,這些解釋其實很難搜尋得到。
這是一份持續更新的文件,若有讀者投稿,我計畫會持續更新。
結論
你必須了解過去,才能理解現在。
— Dr. Carl Sagan(卡爾·薩根博士)(1980)
希望你喜歡這趟回憶之旅。現在輪到你了!
👉 你還知道其他故事嗎?傳訊息給我,我會把它加到這裡。
隨機一篇部落格