彭民德:《電子計算60年》 (20) UNIX一本經典著作的生命力

彭民德發表於2016-08-29

人生有時候會偶然遇到好的機遇,我這裡講的就算一件。1984年春天,美國在中國辦書展,地點不是北京上海而是長沙。開幕那天我早早到了五一路新華書店等候,開門後一下子就看到了由UNIX和C語言的核心人物B.W.Kernighan等寫的新書《The UNIX Programming Environment》,著名的出版商PRENTICE-HALL.INC 當年剛剛出版。我如獲至寶,深信這是當時最有價值的計算機圖書之一,便立即向工作人員提出,希望展會結束時把書留下賣給我。

enter image description here

拿到書後我馬上請院圖書館幫我們膠印若干份,便於周圍的同事們學習使用。接著同事們在我們的DUAL 68000機器上邊看邊跟著做。我邊學邊筆記,以後在此基礎上,給研究生和部分青年教師用此書開了《UNIX程式設計環境》課。同時請周圍老師跟我一起翻譯,擬出版跟全國同仁們共享。

這本書的到來,使我們對於UNIX的認識,或者說對於整個計算機的認識,再次發生飛躍。因為它主要不是討論核心,而是講圍繞核心的一個程式執行和開發環境,是面向程式設計師的。有利於系統掌握UNIX程式設計環境,提高程式開發速度和質量。它正好與前面關於核心分析工作相互補充,並且它離使用者更近、更實用。整本書都可以坐在計算機旁,邊讀邊跟著實踐,在300多頁書中有大量前所未見的高質量程式,我們大部分都一一跟著做,沒有發現任何差錯。

本書問世於UNIX主要開發者獲得圖靈獎的時候,書中深入淺出地介紹了UNIX當時新版本很有創意的程式設計環境。有了這個環境,程式設計師開發自己的程式時有很多現成的東西可用,方便多了,輕鬆多了。

比如,UNIX核心向上提供了上百條系統呼叫,程式設計師寫程式的時候,可以不加說明地引用。有了這個機制,被作業系統隔離的,計算機的許多資源,程式設計時都可以用了。因為這種呼叫是作業系統負責執行的,所以又是安全的。

又比如,UNIX提供了輸入輸出重定向機制,使得編寫任何程式,都可以以標準輸入為輸入,以標準輸出為輸出。通常以鍵盤作為標準輸入裝置,以顯示器為標準輸出裝置,這大大簡化了程式的I/O控制。必須從其它地方——比如說某個檔案——輸入輸出時,程式不必做任何改動,只要在啟動執行該程式的地方,引用一個指向那個檔案的輸入輸出重定向就行了。

系統提供了一組過濾程式(grep家族)、一組排序程式(sort家族)等工具性程式,讓你可以從輸入流或某個檔案中,選擇一些東西,或濾去一些東西。

程式設計師只要編寫一些基於標準I/O的簡單程式,藉助於管道和重定向機制,適當地運用過濾程式,就可以組織一條管道流水線達到目的。只要會適當地裁剪,就可以得到功能強大的程式。

UNIX還提供一套shell,它既是命令解釋程式,又是高階程式語言。它以變數和可執行的程式為自己加工的基本元素,或者說以變數和程式為構件,又有類似於其它高階語言的控制流,可以用它來編寫新的程式。這種程式由shell解釋執行,被叫做shell程式。我們在學習shell的時候,就用它編寫過一些短小而又有用的程式,比如電話號碼查詢程式、翻頁列印程式等。我在《計算機作業系統》(清華大學出版社 2006.10)第9章講UNIX例項時就選擇羅列了幾個。

UNIX的程式設計環境,後來被國際標準化組織作為藍本,制定了作業系統的標準:《ISO/IEC DIS 9945 1.2 計算機環境的可移植作業系統介面 POSIX.1》(中軟總公司譯,電子工業出版社1991年5月)。《The UNIX Programming Environment》這本書給了我們很好的機遇,優先得到它,是我們的緣分。

人生有時候又把握不了到來的機會。在這裡,我也不能不回顧本書譯文出版的不幸。1984年,我們首先跟陝西科技出版社聯絡,他們經過認真向其他出版社查重後決定出中譯本。後來考慮到在長沙出版更方便些,經由我們與陝西方以及湖南科技出版社三方一起商定,轉由湖南科技出版社出。我們很快翻譯並用方格子工整抄寫,當年就交了稿。湖南科技出版社當時還是比較重視電子類圖書出版的,立即同意列入了自己的出版計劃(附:該出版社已經列入出版計劃的函件)。本書責編是一位資深的周編輯,他一直把本書和孫玉芳寫的一本C語言,作為姐妹篇,口頭上很重視。可是他們有一個不很有把握又不好跟我們明說的看法,認為UNIX和C語言在計算機界當時只是陽春白雪,擔心書的銷量上不去,故一年拖一年。後來還要我們把其中用手寫的那許多程式都改成列印格式,我們又按他的要求花了很多時間列印了,並且整個稿子重新謄寫把程式剪貼上去。我們曾經向周編輯催促過好幾次,這樣一本好書不出太可惜。而且告訴他們,北京、西安都有單位經媒體釋出廣告在出售,譯文和原文膠印本都有售,市場都被別人搶去了。他們說不要緊,我們此前做過查重工作,別人不會公開出版。後來孫玉芳不耐煩把他的書稿撤走,不讓他們出了。

過了幾年當我們再去找周編輯時,他已退休,說我們的書稿在他們建新樓搬家時弄丟了,他倒還認可收了我們的稿子,願意向社裡申報給以補償,但是手頭沒了稿子,希望我們把最初那份稿子再給他,作為申報補償的依據。以往我們沒有法律意識,既無合同,又無收稿憑據,估計補償也很可憐,而且還要原稿,手續很繁瑣,後來沒有再去找他。一直都為這麼好的書耽擱在我們手裡,沒有能夠讓我國同仁們及時共享而感到遺憾,也為這本經典著作的命運感到不平。

經典著作自有它的生命力。15年之後的1999年,華章出版集團把這本書當作重點精品圖書之一,由北大陳向群教授翻譯,由機械工業出版社還是把這本《UNIX程式設計環境》出了。武衛東先生帶一批好書到長沙推介,其中也有這一本。我很感謝他們所做的工作,讚賞武先生們的眼光。我認為,這麼好的書總不會過時,為計算機界的同仁們書架上又多了一本經典著作而慶幸。我跟他講起15年來這本譯著的波折,同行們本來可以早就得到這本好書的,可是好端端的一件事,硬是被耽擱了。講到我們白白付出的辛勞,兩人不由唏噓感嘆一番。

enter image description here

(本文內容也可參看 彭民德《電子計算60年》第4章 電子工業出版社)

相關文章