護者。不過這是很艱難的一件事。數字計算機有兩種狀態,開或者關,所以它只能對只包含1(開)和0(關)的二進位制的訊息做出響應。程式中的所有元素最終必須使用這兩個數字表示出來,這樣使得即使普通的數*算也很容易變得很複雜,令人眼花繚亂。正如一個觀察家所說的,在20世紀40年代後期,為計算機程式設計是“令人發瘋一般地困難”。
不久以後,程式設計師們找到了更簡單的方法來產生二進位制串。他們首先設計了特殊的打字機,可以自動輸出二進位制程式碼。後來,他們轉移到更友好的“彙編”語言,用字元和符號來代表1和0。使用匯編寫程式是一大進步,但是還需要嚴格遵循晦澀的計算機指令集。程式設計師必須深刻理解指令集才能寫出高效的彙編程式碼。而且,不同型號的計算機使用的指令集是不同的,取決於它們的微處理器是如何設計的。這意味著一旦某種計算機廢棄不用了,那麼程式設計師費盡力氣學會的這種組合語言知識就會變得一錢不值了。
到20世紀50年代,嚴重依賴計算機的各種機構開始意識到了軟體是令人頭痛的事,而且是代價很高的,其中最主要的機構就是美國軍方的三大分支。站在計算機領域前沿的程式設計師們開始尋找方法,以便可以更簡單地編寫出高效的程式。在1951年,格蕾絲?莫里?赫伯(Grace Murray Hopper),美國海軍軍械儲備局的一名數學家,構思出了一種名為編譯器的程式,它可以把程式設計師的指令翻譯成二進位制串,也就是最終控制計算機的機器語言。從理論上來說,編譯器正是可以把程式設計師從硬體的限制和使大腦麻木的二進位制程式碼中解放出來的東西。
赫伯的成果催生了無數人的努力,來降低編寫程式碼的難度。或許,最主要的當屬IBM開發的稱為公式翻譯器(Formula Translation)的編譯器,也就是Fortran。它包含了三十二條指令,諸如PUNCH(打孔)、READ DRUM(讀取磁鼓)和IF DIVIDE CHECK(除法檢查),它們來源於計算機硬體需要的二進位制術語。截止到20世紀50年代後期,Fortran產生了巨大的影響。“現在,任何人只要具有好的邏輯思維和願望就可以學習計算機程式設計”。一個計算機歷史學家曾經這樣寫道:“你不再必須是熟悉計算機內部原理和組合語言的專家。使用Fortran的簡單命令,你可以讓計算機聽從你的吩咐,而且編譯器會自動地把你的指令翻譯為高效的機器程式碼。”
儘管Fortran讓程式設計師使用同一套指令來為任意數量的計算機程式設計,但是要在不同的機器上執行Fortran程式,經常還需要修改。而且,Fortran是針對科學計算和工程問題的。於是針對其他目標的其他語言出現了,比如面向商業的通用語言(mon Business�Oriented Language; Cobol)。沒過多久,便有很多種語言可供程式設計師選擇了。而且,很多時候他們的職業路線就是由他們所選擇和學習的最好的程式語言所決定的。
赫伯深信克服因為計算機語言激增而導致的困難將成為未來最大的技術挑戰之一。“對我來說,程式設計不僅是一種重要的實踐技術,”她在1961發表的一次講演中說,“它還需要在基礎知識方面做巨大的投入。”有些出乎意料的是,她擔心最大的前進障礙會來自程式設計師自己。就像轉變到一種新的宗教信仰一樣,他們經常表現出思想保守,掩蓋了他們的狂熱。“程式設計師是非常古怪的一個群體,”她觀察發現。
第1章 程式碼勇士(6)
他們成長得非常迅速,在很短時間內就變得很專業,而且很快就感染上了一定程度的抵制改變的毛病。有一個程式設計師,我聽說他差點和客戶吵起來,因為他不想修改他的系統,他幾次走進我的辦公室說:“我們一直是使用這種方法來做事的。”正是因為這個原因,現在我在我的辦公室裡掛了一個逆時針方向走動的鐘。
在20世紀60年代初期,IBM嘗試在軟體領域掀起一場革命,能讓同一個程式在任意數量的計算機上執行。IBM計劃開發一系列機器,這些機器覆蓋了大多數市場,它們是由一個作業系統控制的。這個耗資五億美元開發的System/360產品線取得了巨大的成功。但是它的產生過程是很痛苦的,主要是因為建立軟體的難度和成本被大大低估了。第一臺360硬體是在1964年問世的,直到五年後它的所有軟體才能夠很好地執行。到那時,IBM在編寫軟體方面所花的錢已經差不多與設計硬體一樣多。這使I