我的外婆是個程序員
我是家里的第三代女程序員:我的外婆是***代程序員,我的媽媽隨著她也選擇成為了程序員,而我延續了這個傳統。在50年前的蘇聯,外婆開始了她的程序員生涯,下面我會講述這段往事。
1954-1959.高等教育
我的外婆出生在烏克蘭中部的(位于烏克蘭第聶伯河畔的港口城市)。為了得到更好的高等教育,她不得不選擇其它城市。在考察了入學參考書上的所有大學、院系和專業之后,她選擇了基輔塔拉斯·舍甫琴科國立大學并搬到了基輔生活。那個年代的入學競爭非常激烈,但由于外婆是高中的優秀畢業生(在蘇聯國家這被稱作“銀制獎章”),因此只做了簡短介紹就通過了入學考試。
1969年之前,還沒有控制論專業;當時,由力學和數學系負責培養數學和理論物理人才以及后來的程序員。經過2年的學習之后,學生可以選擇他們的專業。我的外婆正好趕上了***屆“計算數學”專業招生。專業課中包括一些全新的理論課程:程序設計、模擬和數字電腦設計、計算方法(大多數是求解微分方程和線性代數問題)等等。參加課程的不僅有學生,還有烏克蘭蘇維埃社會主義共和國科學院科學計算中心的研究員,除了這里一般不會有其它地方教授這方面的知識。
要得到實際的練習機會更加困難。當時的計算機(那時叫“電子計算機”)體積龐大而且非常昂貴,大學買不起計算機。也就是為什么在學校里只教授理論,在暑假期間學生會被派到有計算機的地方實習。
大學三年級的暑假,外婆被分配到基輔電工研究所實習,那里有一臺叫做MESM的計算機。當然,學生們不會被分配解決實際問題。事實上,我毫不懷疑MESM的工程師會拒絕讓學生參與MESM的研制工作。因為在實習初期,一些富有同情心的學生看到設備不夠整潔就將上面的灰塵擦掉了,結果所有被擦干凈的晶體管都發生了問題需要重新調試。接下來學生們只能做一些練習任務,包括“游戲開發” ——一個學生選擇一款游戲,像是三連棋游戲,從雜志上找一些游戲算法然后編程。接著會把程序放到計算機上運行查看結果。
大學四年級的時候,外婆被派到莫斯科國立大學實習,那里有一臺大學自己的計算機——Strela。那里分配的任務比之前要重要一點,但主要還是類似線性代數計算的教學課題。
在西方世界發明了***代高級編程語言Algol和Fortran之后,基輔的計算機界在格羅希柯夫的課上知道這一成果,但是他們并沒有采用。此時,所有的程序都用特定計算機的機器語言編寫。
譯注:
MESM計算機:歐洲大陸***臺通用可編程電子計算機,由下謝爾蓋·阿列克謝耶維奇列別捷夫領導的科學家團隊在基輔電工研究所(現烏克蘭)發明。MESM于1950年開始運作,大約有6000個真空管,功耗25千瓦,可以執行大約每分鐘3000操作。
三連棋游戲:兩人輪流在一有九格方盤上劃加字或圓圈, 誰先把三個同一記號排成橫線、直線、斜線, 即是勝者。
Strela計算機(俄語“箭頭”):蘇聯制造的大型機(mainframe)系列,于1953年開始制造。擁有6200真空管和60000半導體二極管,每秒可執行2000次操作,支持浮點運算。
維克多·格羅希柯夫:烏克蘭的計算機先驅,負責領導研制出烏克蘭的***臺大型計算機“基輔”(Kiev 1959年),1961年又開發出了晶體管的通用控制計算機“第聶伯”Dnepr。
1959 – 1965. 烏克蘭蘇維埃社會主義共和國科學院科學計算中心
畢業之后,外婆去了計算中心上班——開始當一名工程師,接著晉升為高級工程師,***成為了***工程師。當時計算中心大約有300名員工:程序員、技術員、模擬計算機專家(大多數人工作使用的事數字計算機)以及測試人員,其中測試人員負責對比對比程序運行結果和使用Rheinmetalls(德國電動機械計算機)手工計算結果。
其中一些人忙于設計新型計算機,其他人(包括外婆)做的事情現在叫做外包。計算中心為公司解決某些需要數值分析的實際問題,公司代表會為問題給出一個正式的定義,中心的工程師求解問題后進行編程。例如,其中一個任務就是計算貝塞麥(轉爐)煉鋼法的***模式,外婆則關注解決結構力學問題。
計算中心自主研發出一系列計算機——首先是“基輔”(”Kiev”),然后是BESM。在此之前,使用的是機器碼、打孔卡(在此之前使用的是由曝光后的電影膠卷制作的打卡磁帶)以及很多今天從未聽說過的設備。人們緊張地把成堆的待打孔的卡片運來,這些卡片的主人則會報以狂躁的反應。那些對計算機沒有概念的人會接受定期的培訓,這些培訓旨在解釋計算機的基本原理。曾經有個人一直重復問同一個問題,老師在再一次做出解答之后憤怒一觸即發,就在這時那個人大聲抗議道:“不要再解釋我已經理解了,但是它”,他平靜地指著嗡嗡作響的機器說,“它理解了嗎?”
計算機資源總是很寶貴的,因此程序員通常要等到很晚才能抓到一些額外的上機時間,然而打孔卡實驗室(人們可以在那里用傳統的機械方式修改他們的卡片)那個時候已經關門了。深夜里他們只能手工修改自己的卡片——將多余的孔裁掉,然后(利用白天打孔剩下的卡片)把新的孔用紙帶補上。技師們反對這種做法 ——雖然可以容許額外打孔,但是粘上去的卡片是非常危險的——這些卡片會掉進輸入設備損壞機器。這類斗爭,勝利總是會站在弱勢的程序員這邊。
1965 – 1988. 實驗性設計地區科學研究所(RSRIED —— 這不是官方認可的縮寫,只在本文使用)
1988 – 1996. 建筑與城市規劃理論科學研究所(SRIAUPT —— 同上)
1965年外婆以***專家身份加入了RSIED,后來擔任***設計工程師。這個機構主要做自己的任務而不是給企業做外包,工作的內容有公寓和公共建筑設計、結構化建模方法編程以及設計任務自動化(也就是開發類似AutoCAD的專用繪圖工具)。
有限的上機時間仍然是個問題。一部分上機時間租用的是前文提到的計算中心機器,一部分用的是RSRIED自己的計算機Nairi。這臺機器來自亞美尼亞,它不僅支持機器代碼還支持一種內部編程語言——Cyrillic(西里爾字母),但又有所區別。這種區別源自下面這件軼事。一組程序寫完并經過調試以后,就可以發布使用。程序被匯總出版打印成冊,接下來會依據這份手冊將程序轉換成其它機器語言或者授權給其它公司內部使用。出版這些程序手冊是一件非常重要的事情,所以通常在交付印刷之前他們會非常仔細地進行校對。有一次,一個對工程師的俄語水品非常不屑且對編程一知半解的人校對一批用 Cyrillic寫成的Nairi程序。校對的結果,雖然“校正過的”文本沒有語法錯誤,但是這批Nairi程序完全不能運行。
譯注:西里爾字母:源于希臘字母的格拉哥里字母,被斯拉夫民族廣泛采用,因此有時也稱為斯拉夫字母。
程序員通常需要出差——到蘇聯的各個城市拜訪客戶(確認客戶要解決的問題)和去其他國家分享經驗。當然,大多數人只愿意在蘇聯范圍之內出差,所有與資本主義國家的交流都在***級別的管制之下。當時,去保加利亞、匈牙利和捷克斯洛伐克出差是日常生活的很好的調劑。
在外人看來,很難說程序員這種職業有什么特別——外公和外婆的朋友都是程序員或是從事相關的職業。女性程序員也沒有特別之處——很多女性從事這項職業,不足為奇。很明顯,“喔,這個女孩會編程”這樣的聲音是在后來才出現的:-)
英文原文:Mariya Mykhailova