Re: [問卦] 在卡上打洞寫程式是什麼感覺

看板Gossiping作者 (松鼠)時間2年前 (2021/04/23 06:37), 2年前編輯推噓396(397133)
留言431則, 416人參與, 2年前最新討論串2/2 (看更多)
※ 引述《LaAc (深淵戰士)》之銘言: : 看關鍵少數那些人學程式就是用卡打洞 : 打完後放進電腦讓它跑 : 這樣連印個Hello world都超難吧 : 如果不小心手殘少打什麼要debug484會瘋掉 : 有沒有卦? 剛好我需要跟學生解釋為何 Linux 核心原始程式碼的風格規範 [1] 中,限制一行至多 80 個字元,其典故跟「打孔卡」(punched card) 有關。 : The preferred limit on the length of a single line is 80 columns. 1890 年代,美國人口普查就使用新發明的穿孔卡及機器,僅用 6 週就完成統計,對比 1880 年代全人工進行的普查,歷時 8 年。這個劃時代的發明出自德裔美籍的 Herman Hollerith,後者以打孔卡技術,建構出打孔卡片製表機 (Tabulation Machine) [2], 由於美國人口普查的成功,他創立名為 Tabulating Machine Company 的新事業 [4], 向全世界的人口統計局兜售自家的產品,並成功獲得多國採納,1911 年,華爾街的金融 大亨 Charles Ranlett Flint 買下 Herman Hollerith 創立的 Tabulating Machine Company,將其併入到 CTR (Computing Tabulating Recording) 公司,著眼於大量的 打孔卡背後巨量的資料處理。 因 CTR 公司經營不善,業務一直停滯,於是 Flint 在 1914 年雇用 Thomas J. Watson 來扭轉業績。 > Thomas J. Watson 在 1943 年有句名言: > "I think there is a world market for maybe five computers." 此前 Watson 曾因壟斷罪而吃了一年牢飯,瞧不起 Watson 的 CTR 董事會 只讓他擔任職務不大的經理,不過 Watson 忍辱負重,不僅使 CTR 業績成長,最終成為 該公司實際的經營者,然後就是人們熟知的 IBM 公司。Watson 到 CTR 任職的第一件事 是向銀行貸款 5 萬美元 (相當於今日的 134 萬美元!),採用出租機器的嶄新銷售手法, 刺激業務量。1914 年 Watson 長子 Thomas Watson Jr. (IBM 的第二任總裁) 出生,也 是第一次世界大戰的起點,儘管主要戰場在歐洲,但列強的相互牽制下,美國無法脫身, 而戰爭結束時,製表需求激增,幾乎每間大型保險公司和鐵路公司都用得到 CTR 公司的 打孔卡片製表機器,1919 年 CTR 公司的營業額高達 1300 萬美元。1924 年,身為 CTR 公司總經理的 Watson 將公司更名為 IBM,打孔卡相關的產品持續改變這世界。 1928 年,IBM 發明 80 欄、12 列格式的矩形孔卡片 [3],是用耐溼、耐皺、又耐熱的 絕緣質料紙張製成,長 7 又 3/8 吋、寬 3 又 1/4 吋,以美國壹圓紙鈔的尺吋為準, 每張卡片的每欄代表一個文字、數字或特殊符號,12 列的排列順序由上而下,其中卡片 下端的 0 到 9 共 10 列,稱為數字打孔位置,凡在數字位置上打孔就代表該數字。卡片 上端的 0, 11, 12 等三列稱為區域打孔位置,為打英文字母或特殊符號時配合之用。 這個 IBM 發明的格式很快就成為業界標準,且伴隨著該公司在電腦主機的成功,使得 早期的電腦普遍採用事先透過打孔機已輸入資訊的打孔卡,當做電腦程式和資料的主要 輸入媒介,這也是為何年紀偏長的人會回憶「寫程式到打孔卡」,因為打孔卡就是當時 業界標準的輸入媒介,而為何把 programming 稱為「寫」程式呢?因為早期的程式開發 者需要事先謄寫程式碼和資料在紙上,交付給電腦中心的人員,批次透過人工操作打字 機式的鍵盤,將前述程式碼和資料「輸入」到打孔卡。 IBM 的打孔卡格式是業界標準的事實,使得 80 欄這樣的打孔卡寬度限制,成為蟄伏在 電腦演化過程中的「枷鎖」,就算今日我們用了更大更好更漂亮的電腦螢幕,當我們啟動 終端機 (Terminal) 視窗時,仍會見到 80 個字元寬度的預設值。 我們來觀賞以下短片,感受 IBM 打孔卡機器的運作,和當時人們如何「寫」程式: https://youtu.be/YnnGbcM-H8c
影片可見 IBM 029 型打孔機 [6]。1964 年 IBM 銷售 System/360 大型電腦 [5],一度 壟斷大型電腦市場,而 IBM 029 型打孔機則伴隨 System/360 主機,作為配件銷售。 電影《關鍵少數》(Hidden Figure) 讓世人理解在 1960 年代,"computer" 一詞指真的 負責計算 (compute) 的人,這群英雄負責替工程師計算驗證複雜的數學算式。此外,這 部電影也讓我們看到,幫助美國太空總署 (NASA) 在美蘇冷戰時期,完成首次太空船載人 繞行地球任務 (Project Mercury [8]) 的另一功臣:IBM 7090 處理器 [7],後者也是 全球第一台電晶體計算機,每秒可執行 229,000 道運算,亦是大型主機的始袓。以農神 火箭實際發射登月太空船之前,NASA 已利用 IBM 7090 執行過數千次的模擬飛行,在 1969 年,NASA 更以五套 IBM System/360 執行任務控管,使得阿波羅 11 號成功得以 成功地執行登月任務。 IBM 029 型打孔機搭配 Standard Modular System (SMS) 卡 [9] 時,可做到當時非常 先進的功能,像是數字區自動填補左側的 0 —— 當設定數字區域長度為 6 欄時,打孔 機操作員只要輸入 "43",打孔機就會自動填充起始位置開頭的 4 個 '0',於是最終輸出 "00043"。詳細資訊可見哥倫比亞大學的網站: http://www.columbia.edu/cu/computinghistory/029.html 也許你會認為,IBM 029 型打孔機大概只在 1960 年代活躍,之後程式設計師就改用其他 輸入媒介,像是 UNIX 共同發明者 Ken Thompson 和 Dennis M. Ritchie [10] 在 1972 年於 DEC PDP-11 主機前,透過 teletyper (電傳打字機,可簡稱 TTY) 和主機互動的狀況: https://www.bell-labs.com/usr/dmr/www/picture.html 上圖可見,Ken Thompson 似乎很成熟 (我不好意思說他少年老成),但他發展 UNIX 時僅 26 歲,而且他與身旁 Dennis Ritchie 協作的過程,沒用到螢幕或顯示器?! 1963 年麻省理工學院的科學記者採訪當時計算中心,並與 Fernando J. Corbató教授 對話,後者是世界上第一個分時多工作業系統 Compatible Time-Sharing System (CTSS) 的主導設計者,Corbató教授在 CTSS 獲得巨大成功後,帶領 MIT 團隊,和通用電氣及 Bell Labs 發展 MULTICS 作業系統,許多慣例和概念一路從 CTSS, MULTICS,到後來的 UNIX 作業系統。可參見以下短片: https://youtu.be/Q07PhW5sCEk
在這部短片中,Corbató教授談及過往批次處理系統的限制,並快速回顧電腦運作原理及 如何實作分時多工、依據優先權進行排程等等,是此,電腦猶如電話交換機,同時為多個 使用者所操作,每位使用者都能依據需求使用終端機,存取到運算和儲存資源,不會和 其他使用系統的人有所衝突。另外,也不難從影片中看到形似打字機、可和電腦對話互動 的裝置,那就是 TTY —— 早期的電腦沒有配備螢幕,而是透過 TTY,藉由訊號連線, 建立人機互動的終端機 (console),現在受到 UNIX 影響的作業系統,像是 Linux 和 macOS,都保有 tty 子系統,其名稱和功能就來自 teletype —— 存在 50 年以上的 「活化石」。 值得注意的是,TTY 和打孔卡幾乎一樣古老,且 1970 年代,程式設計師仍用打孔卡作為 程式和資料輸入的媒介,配合批次任務的執行,畢竟物美價廉的儲存設備還不存在,打孔 卡還是持續風行。TTY 適合「線上」(指操作員和電腦主機連線互動) 操作,而打孔卡則 適合程式設計師「線下」撰寫程式碼和準備資料。 打孔卡對程式設計的影響不可小覷,甚至讓 COBOL 和 FORTRAN 這樣早期的程式語言, 需要特別考慮到標誌 (labeling) 在特定位置的作用。1960 年代,打孔卡不僅沒專用 的編號 (試想要是操作員將這些卡片散落一地,該如何正確地重排呢?),也沒浮水印, 於是用於 COBOL 程式的打孔卡會將最後的 8 欄保留給標誌使用,以決定卡片間的順序, 卡片中間還特別設計其他標誌,判斷是否用二張或更多卡片來表達單一敘述 (即今日程式 設計常見的跨行程式敘述)。FORTRAN 程式語言也有類似的考量,該語言發明的年代還 沒有今天我們意義上的鍵盤與螢幕,程式碼必須使用打孔機,於是特定的欄位和行也被 保留為識別用途。 [1] Linux kernel coding style: https://www.kernel.org/doc/html/latest/process/coding-style.html [2] Tabulating machine: https://en.wikipedia.org/wiki/Tabulating_machine [3] IBM 80-column format and character codes: https://en.wikipedia.org/wiki/Punched_card#IBM_80-column_format_and_character_codes [4] Herman Hollerith 的生平和事業,可見泛科學網站: https://pansci.asia/archives/189683 [5] IBM System/360: https://www.ibm.com/ibm/history/ibm100/us/en/icons/system360/ [6] IBM 029 Card Punch: https://en.wikipedia.org/wiki/Keypunch#IBM_029_Card_Punch [7] IBM 7090: https://en.wikipedia.org/wiki/IBM_7090 儘管 IBM 7090 是全球第一台電晶體計算機,但其二進位系統跟我們今日所見的電腦 有極大的差異,可參見拙作〈解讀計算機編碼〉: https://hackmd.io/@sysprog/binary-representation [8] Project Mercury: https://en.wikipedia.org/wiki/Project_Mercury [9] IBM Standard Modular System: https://en.wikipedia.org/wiki/IBM_Standard_Modular_System [10] Dennis M. Ritchie 已在 2011 年離開人世,生前只在一間公司工作,直到退休, 即 Bell Labs。Ritchie 晚年十分低調。以至於在他離開這個世界時,不為眾人 所知,但他創造的 UNIX 作業系統和 C 語言,直接地改變我們所處的世界。 https://www.bell-labs.com/usr/dmr/www/ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.246.163 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1619131060.A.3B7.html

04/23 06:38, 2年前 , 1F
大神先推
04/23 06:38, 1F

04/23 06:39, 2年前 , 2F
阿鬼您還是講中文ㄅ…
04/23 06:39, 2F

04/23 06:44, 2年前 , 3F
有神快拜
04/23 06:44, 3F

04/23 06:45, 2年前 , 4F
等等補推
04/23 06:45, 4F

04/23 06:47, 2年前 , 5F
漲姿勢了
04/23 06:47, 5F

04/23 06:47, 2年前 , 6F
@Costco5566, 對不起,我的中文程度不夠好
04/23 06:47, 6F

04/23 06:47, 2年前 , 7F
04/23 06:47, 7F

04/23 06:47, 2年前 , 8F
講的淺顯易懂
04/23 06:47, 8F
※ 編輯: jserv (140.116.246.163 臺灣), 04/23/2021 06:49:56

04/23 06:49, 2年前 , 9F
文組
04/23 06:49, 9F

04/23 06:49, 2年前 , 10F
04/23 06:49, 10F

04/23 06:50, 2年前 , 11F
@syldsk, 我每年都要寫論文,「文」組無誤
04/23 06:50, 11F

04/23 06:53, 2年前 , 12F
哇~讚啦
04/23 06:53, 12F

04/23 06:55, 2年前 , 13F
04/23 06:55, 13F

04/23 07:02, 2年前 , 14F
神人
04/23 07:02, 14F

04/23 07:03, 2年前 , 15F
老師早
04/23 07:03, 15F

04/23 07:05, 2年前 , 16F
推推
04/23 07:05, 16F

04/23 07:07, 2年前 , 17F
老師起得真早
04/23 07:07, 17F

04/23 07:08, 2年前 , 18F
大神推
04/23 07:08, 18F

04/23 07:12, 2年前 , 19F
先膜拜大神
04/23 07:12, 19F

04/23 07:14, 2年前 , 20F
長知識了
04/23 07:14, 20F

04/23 07:16, 2年前 , 21F
04/23 07:16, 21F

04/23 07:16, 2年前 , 22F
有神快拜 神都不用睡覺
04/23 07:16, 22F

04/23 07:19, 2年前 , 23F
未看先推
04/23 07:19, 23F

04/23 07:21, 2年前 , 24F
長知識了 謝謝
04/23 07:21, 24F

04/23 07:21, 2年前 , 25F
04/23 07:21, 25F

04/23 07:27, 2年前 , 26F
好懷念!我當年上計概老師也是教這個!
04/23 07:27, 26F

04/23 07:29, 2年前 , 27F
老師早~
04/23 07:29, 27F

04/23 07:30, 2年前 , 28F
神奇
04/23 07:30, 28F

04/23 07:30, 2年前 , 29F
嗚嗚嗚
04/23 07:30, 29F

04/23 07:31, 2年前 , 30F
04/23 07:31, 30F

04/23 07:33, 2年前 , 31F
已收藏 老師早
04/23 07:33, 31F

04/23 07:33, 2年前 , 32F
先推免得被發現我看不懂
04/23 07:33, 32F

04/23 07:33, 2年前 , 33F
都是中文,但是看某.....
04/23 07:33, 33F

04/23 07:34, 2年前 , 34F
04/23 07:34, 34F

04/23 07:34, 2年前 , 35F
04/23 07:34, 35F

04/23 07:34, 2年前 , 36F
好險沒經歷過這些東西
04/23 07:34, 36F

04/23 07:35, 2年前 , 37F
知識大爆發啦!好文
04/23 07:35, 37F

04/23 07:36, 2年前 , 38F
大神
04/23 07:36, 38F
還有 353 則推文
04/23 13:55, 2年前 , 392F
推完整
04/23 13:55, 392F

04/23 14:04, 2年前 , 393F
太神了
04/23 14:04, 393F

04/23 14:15, 2年前 , 394F
好酷
04/23 14:15, 394F

04/23 14:30, 2年前 , 395F
04/23 14:30, 395F

04/23 14:50, 2年前 , 396F
老師好
04/23 14:50, 396F

04/23 15:04, 2年前 , 397F
這些程式語言的名稱好幾十年沒聽到了...Pascal也是
04/23 15:04, 397F

04/23 15:05, 2年前 , 398F
電腦閱卷那個2B鉛筆描答案格也是仿打孔卡的意思
04/23 15:05, 398F

04/23 15:16, 2年前 , 399F
04/23 15:16, 399F

04/23 15:37, 2年前 , 400F
推認真
04/23 15:37, 400F

04/23 15:47, 2年前 , 401F
長知識
04/23 15:47, 401F

04/23 16:00, 2年前 , 402F
04/23 16:00, 402F

04/23 16:12, 2年前 , 403F
幹 去排隊啦 又打錯洞了
04/23 16:12, 403F

04/23 16:13, 2年前 , 404F
太神啦
04/23 16:13, 404F

04/23 16:29, 2年前 , 405F
太長!先推
04/23 16:29, 405F

04/23 16:40, 2年前 , 406F
04/23 16:40, 406F

04/23 16:51, 2年前 , 407F
可以不要這麼多字嗎 我理組看不懂
04/23 16:51, 407F

04/23 16:53, 2年前 , 408F
先推,怎麼辦我看不懂
04/23 16:53, 408F

04/23 17:08, 2年前 , 409F
媽我在這看上帝
04/23 17:08, 409F

04/23 17:32, 2年前 , 410F
又跪了...
04/23 17:32, 410F

04/23 17:55, 2年前 , 411F
推推推
04/23 17:55, 411F

04/23 17:57, 2年前 , 412F
好神啊,到底要多有熱忱
04/23 17:57, 412F

04/23 18:27, 2年前 , 413F
大神
04/23 18:27, 413F

04/23 18:36, 2年前 , 414F
04/23 18:36, 414F

04/23 19:04, 2年前 , 415F
推杰色夫大神 ... m(__ __)m
04/23 19:04, 415F

04/23 19:07, 2年前 , 416F
04/23 19:07, 416F

04/23 19:19, 2年前 , 417F
朝聖推
04/23 19:19, 417F

04/23 20:12, 2年前 , 418F
04/23 20:12, 418F

04/23 21:13, 2年前 , 419F
04/23 21:13, 419F

04/23 21:22, 2年前 , 420F
04/23 21:22, 420F

04/23 21:26, 2年前 , 421F
04/23 21:26, 421F

04/23 23:29, 2年前 , 422F
推大神
04/23 23:29, 422F

04/23 23:39, 2年前 , 423F
神…
04/23 23:39, 423F

04/24 01:58, 2年前 , 424F
04/24 01:58, 424F

04/24 03:27, 2年前 , 425F
神…拜託保佑我機房的機器乖乖無事
04/24 03:27, 425F

04/24 03:49, 2年前 , 426F
04/24 03:49, 426F

04/24 05:38, 2年前 , 427F
ctrl + alt + F1 還是可以去 tty1 看一下,但我是用 l
04/24 05:38, 427F

04/24 05:38, 2年前 , 428F
inux
04/24 05:38, 428F

04/24 07:48, 2年前 , 429F
04/24 07:48, 429F

04/24 08:22, 2年前 , 430F
老師出現了
04/24 08:22, 430F

04/24 21:46, 2年前 , 431F
計概.. 116大神教授 辛苦您整理了
04/24 21:46, 431F
文章代碼(AID): #1WWVgqEt (Gossiping)
文章代碼(AID): #1WWVgqEt (Gossiping)