我媽 1969 年學編程,那時候程序員是怎樣寫代碼的
前段時間,人類登月 50 周年,我們推送阿波羅飛船制導軟件的負責人 Margaret Hamilton 的文章,她是上世紀六七十年代的先鋒人物。
此外,我們還在微博發了另外一個阿波羅計劃女程序員的故事,母女兩代都是程序員。
(有人誤解成 Lin Clark 的媽媽是 Margaret,其實不是)
今天在 Reddit/programming 看到一篇熱文,看標題的第一眼,我以為又是和阿波羅計劃相關的故事。
打開后發現,雖然不像阿波羅計劃故事那樣偉大,但還也是一個兩代都是程序員的故事。那個時代,大學里都沒有編程課,我們可以從中了解到當年第一批程序員是怎么樣學習和工作流程……
原作者 Emil Ernerfeldt 是一個瑞典斯德哥爾摩程序員,他媽媽 Marianne Ernerfeldt 出生于 1947 年,高中沒畢業時就想當程序員。該文是 Emil 在 2018 年 12 月采訪媽媽所寫。
為什么你想當程序員?
大約是 1965~1966 年,我決定成為一名程序員。我讀過一篇文章,上面有一幅流程圖,看到我就想“這個適合我”。
1967 年我高中畢業,那時候的大學還沒有教編程,但索爾納有一個為期 6 個月的課程,后來變成了 12 個月的課程。而且我有資格申請學生貸款,于是我就申請了。
與此同時,瑞典的國有鐵路公司 SJ 發布了招聘實習生的廣告,提供為期一年的帶薪培訓項目,你可以學習了解 SJ 運營的所有不同部門。SJ 有一個計算機部門,所以我也申請了,希望能進。
然而,SJ 的 50 個實習生名額,結果有 700 人申請,所以有一個復雜的篩選過程和各種各樣的測試。最終我進去了!
還要說一句,當 SJ 管理層發現實習生項目手冊同時發給了男學生和女學生時,他們非常不高興!被錄取的女性并不多,但我們是少數。
在培訓期間,我們參觀了 SJ 的所有部門,了解了從火車和鐵路到通信工作原理(SJ有自己的電線和電話線)。一年之后,我從實習生轉正了,但那是一份無聊的工作。
終于在 1969 年,我聽說 SJ 開始了一個內部編程培訓項目,所以我申請了。經過更多的測試,我和另外三個人在 1969 年開始編程培訓。我們是兩個女生和兩個男生。
(1976 年的 IBM System/370 )
編程培訓是怎么樣的?
首先,我們參觀了 SJ 公司的計算機部門,并拿到了計算機是什么的綱要等材料。然后我們在 IBM 上課,IBM 在斯德哥爾摩的一棟大樓里有一臺“訓練機”。我們班上大概有50~100人,但我們被分開了,每個教室里有 8 個人。教室前面有 2 個電視屏幕。老師在另一個房間,每個老師大概對應 10 個教室,每個教室的人都可以用按鈕吸引注意力,然后用麥克風提問。超現代的!
首先我們學習了一些關于 IBM OS 的知識,然后我們學習了 PL/I,這是 IBM 自己的編程語言。它是 Cobol 的一個更現代的版本,具有 Cobol 還沒有(但以后會有)的特性,比如生成表和查詢。所以 PL/I 在當時是一種更好的編程語言,也更簡單。可以使用英語單詞編寫代碼,比如 DO WHILE 等。它是一個非常好的編程語言!
在瑞典,政府機構處于數據處理的最前沿,銀行和其他機構遠遠落后。因此,在 IBM 的課程中,雖然大多數是來自其他機構的人員,但 SJ 處于最前沿。
在學完第一個 IBM 課程之后,我回到了 SJ,開始了我的第一個實踐項目。我們四個人做了一個約會程序,你可以輸入男性和女性的特征,然后用我們自己發明的算法計算匹配,然后我們開始編寫項目代碼!
后來我學了更多的課程,比如匯編。我們有一位主管在工作中幫助我們。
(我畫流程圖的模板)
你的工作怎么樣?
我們先畫流程圖,然后用鉛筆寫代碼。然后把代碼交給打孔機,代碼將被打孔到打孔卡上。打孔卡有 80 列,其中 72 列用于代碼,8 列用于排序,所以每一行代碼最多可以有 72 個字符寬。
(程序員的那些事 注:打孔卡有 80 列,這個 80 是不是很熟悉呢? 現在有些編程規范中,仍然在強調每行代碼不要 80 個字符。)
你必須把代碼寫清楚,這樣操作打孔機的女性才能讀懂。在 SJ 工作了幾年之后,我們找到了幾個專門負責讀取我們代碼的人,他們真是幫了大忙。他們主要會打數據卡:來自 SJ 的時間報告、每節火車車廂行駛了多遠等等。打孔機看起來像一臺普通的打字機,可以在卡片上打孔。在每一列上面,它還將以明文輸入字母。
(IBM 的打孔卡)
我們也曾經在打孔卡上放蛋糕,所以打孔卡的用途很廣的。
剛開始的時候,程序很小,但后來可能變成幾米長的卡片盒。每一行代碼都變成了一張打孔卡。每一行和每一張卡片有一條指令。所以打孔機會把程序(成千上萬張卡片)還給我們。
我們還必須創建“控制卡”,由它來決定某個穿孔卡是要編譯還是要執行,以及它是什么語言等等。控制卡有一個單獨的顏色。第一張卡片是一張工作卡,上面有我的名字,所以打孔機操作員知道該把東西還給誰。
我們把打孔卡盒放在一張特殊的桌子上。操作員穿著白大褂來了,拿著盒子去運行程序。
有時候,我們每天只有一次運行程序的機會,因為我們程序員在機器大廳中的優先級最低。所以我們不得不同時做幾個項目,以保持忙碌,不至于閑著。
最后,這些卡片連同“睡衣紙”一起送還,其中包含錯誤代碼和行號。
(Pajama paper /睡衣紙)
我們有機會打幾個孔,這樣我們就可以自己做一些小的修正。
然后我們必須創建測試文件,看看程序是否產生了預期的結果。如果沒有,你就會坐下來做“桌面測試”(用筆和紙思考),試著想想“到底出了什么問題?” 因此,要使程序正確運行,可能需要相當長的時間。
我們有幾臺機器。我們從一開始就有 IBM 360 大型機,還有一些更老的機器。后來我們得到了 IBM 370。
在 70 年代末,公司有了 Alfaskop 終端機,但我們沒有個人的終端機,而是共用一個終端機室。如果我們想要對程序進行更改時,不得不爭用終端機的時間。程序會在屏幕上出現,我們可以修改。在 1979 年離開 SJ 之前,我從未擁有過自己的終端機。
Alfaskop 3700
說說你的同事
SJ 的計算機部門大約有 40 名程序員和系統工程師。我所有的同事都像我一樣,在公司內部接受培訓,只有少數例外:有幾個和我年齡相仿的人參加了我之前提到的索爾納為期 6 個月的課程。但除此之外,沒有其他的方法來學習編程——因為這是一個全新的職業!有些同事曾經是司機!大多數人甚至沒有高中文憑。
系統工程師的工作主要與規格、程序的輸入和輸出等有關。作為程序員,我們是問題的解決者,我們制作流程圖并找出解決問題的方法。
在機器大廳里大約有 10 名機器操作員。他們穿著白大褂,處理磁帶存儲、磁盤和打孔卡。我們很少被允許進入機器大廳的內室。入口處有一個“關門”的牌子。
機器大廳很大。早期的機器(IBM 1400)占地約 10~20 m²,但后來的機器是小冰箱那樣的體積。
打孔卡部門由 50 名年輕女性組成。如果 SJ 其他部門想拜訪計算機部門,最有趣的肯定是打孔卡部門,因為在 SJ 的大多數人是男性咯!
在我們 40 名程序員中,只有 5~6 個女性。我是這群年輕人中的一員,但大多數程序員都比我大 10 歲左右(我出生于 1947 年)。在 70 年代末,我們招了一些新員工,他們接受了為期 12 個月的培訓。
你做了什么?
1969 年春天,SJ 在線預訂服務推出了,24/7 運行時間。它在當時非常先進,完全是用匯編程序編寫的。這是 SJ 非常出色的一點,在瑞典沒有其他公司能和我們相提并論。我很幸運能在這樣一家敢于冒險的公司接受教育!
我們創建程序,一旦完成并經過測試,就把交給別人。其他人負責維護,我們負責編寫新的程序!主要是收集關于鐵路運營的統計數據(例如工資單),然后這些程序將定期運行(例如每個月)。
1979 年,在 SJ 工作了十年之后,我跳槽去了銀行部門工作。