第一代程式設計師王小波

發表於2014-07-29

喜歡讀書的人,對王小波都不陌生,他是中國最富創造性的作家之一,他是中國近半世紀的苦難和荒謬所結晶出來的天才,他英年早逝。他的作品對我們生活中所有的荒謬和苦難作出最徹底的反諷刺。他還做了從來沒有人想做和做也沒才力做到的事:他唾棄中國現代文學那種“軟”以及傷感和諂媚的傳統,而秉承羅素、伊塔洛·卡爾維諾他們的批判、思考的精神,同時把這個傳統和中國古代小說的遊戲精神作了一個創造性的銜接。

wangxiaobo

 

對於王小波也就讀過一本《一隻特立獨行的豬》,讓我對王小波產生興趣的是在讀到《Mac Talk》這本書裡寫到王小波除了作家的身份外,還是一名程式設計師,並且是一名很牛的程式設計師。以下是一些王小波和程式相關的故事。

多數人知道王小波是小說家,部分人分不清財經作家吳曉波和小說家王小波是不是一回事兒。卻很少有人知道王小波可以算的上中國早期的程式設計師,在90年代初的時候因為國內應用軟體缺乏,愛搗鼓東西的王小波利用閒暇時間學習了彙編和C語言,編了中文編輯器和輸入法。中文編輯器和輸入法任何一個都是大牛級的GEEK才會去嘗試的東西,比如求伯君。王小波通過賣軟體還掙了些錢,當時很多中觀村的老闆要拉他入夥,當然寫程式碼這種來錢快的活對屌絲王小波還是有吸引力的,所幸他還是拒絕了人家。

王小波一個寫小說的為什麼淪落(/升級)成了程式設計師?這還得慢慢說。王小波大學在人大學的是貿易,畢業後在人大當了幾年老師。後來去了美國匹茨堡大學讀經濟的研究生,到那老師跟他說你就是一寫作的奇才,以後必能稱霸話語文壇。老師又說你在我這什麼都不用幹了,好吃好住,畢業證照發,抓緊時間寫小說。學成歸國,王小波接著又回到人大做統計學的講師。

因為做統計,各種分析工具是必不可少的,以前人手工計算,有了計算機當然最好使用計算機,基本理工科的都知道用MATLAB做個畢設和作業是多麼重要。所以當時計算機對王小波的工作是相當重要的,但是90年的時候,軟體相當稀缺,電腦又相當不智慧。王小波不得不自己寫軟體,當然開發軟體也不是那麼簡單,所以他先是學會了FORTRAN,彙編,C等各種語言,接著又要學習資料結構,演算法的相關知識,還有編譯原理。

在做出中文編輯器和輸入法,解決了自己的需求之後,王小波對寫軟體的興趣已經沒有多少了。因為他覺得寫軟體可以賺錢,寫小說同樣也可以賺錢。處於一個程式設計師的修養,王小波還是不斷地從資料結構和演算法來優化這兩個軟體。93年的時候,王小波買了一臺286,這在當時是一臺奢華無比的機子了,他自己也是這些認為的,高興得一塌糊塗。不過這臺頂配機子還是滿足不了王小波的要求,後來他把時間花在了不斷地去優化這臺機子上面。

王小波可以算的上是個GEEK。大學學的貿易,後來又學化學,再後來轉到了數學系。他的同學形容他解數學題就像殺豬一樣,特別來勁,一道一道解決,那感覺可能就像打CS拿人頭一樣爽。不過解多了也覺得沒意思。

王小波小說裡的男主角基本都是理工男,除了天天意淫還有一些奇怪的想法。其中一些還有自己的發明,比如《未來世界》裡的王二是個工程師,整天想著和單位一起研製的永動機,還有《紅拂夜奔》裡的李靖發明過一個巨大的開跟號機器,在戰場上,這臺機器運轉起來揮舞著槓桿邊開跟攻擊敵人,有的人死在根號3下,有的人倒在了根號5下。這些都只有GEEK才會想得出來。

王小波幹過很多事情,下過鄉,考過大學,出過國,學過經濟,打過程式碼,成了小說家,去世的那一年完成了心願做了編劇。總之不管他幹了什麼,他身上讓我們尊重的還是獨立之精神,自由之思想。

以下內容是從王小波和朋友的書信裡收集了他所做軟體的各種資訊,彙集起來,可以瞭解小波在軟體方面的造詣。順序按照原文的書信順序,應該也就是時間順序。

  • 1988年12月。回來之前我曾往人大一分校計算機站寫過一封信,問他們可要帶什麼軟體,主管的工程師回了封信,我沒收到。回來之後人家還提到此事。現在國內軟體一面混亂,又逐漸有形成市場之勢。首先以年兄學統計這一事實來看,回來做事非有會用的軟體不可。Macintosh根本就沒打進中國市場,你非帶幾個可用的IBM微機軟體回來不可。至於什麼機器上能使倒不必太擔心。我這個狗屁計算機室,IBMPS/2就有二臺。AT機也不少。SASSPSSStatistx都有,可代表國內上等一般統計微機房的水平,可就是少了一種宜於作統計的語言。年兄如有APL(Aprogramminglanguage)之IBM微機本,可給我寄copy來。我在美還有一個戶頭,連manual影印費一併寫支票給你們。Glim我也沒有,如年兄有便人可捎來。郵寄太貴,能省就省吧。
  • 1990年1月。我現在正給北大社會學所做統計,手上除SPSS沒有可用的軟體,國內這方面很差。我現在會用FORTRAN,編統計程式不方便。聞兄談起你們用S語言,不知是否好用。工具書也不知好找不。不管好歹,煩兄找個拷貝給我,要就算了。照我看只要能解決各種矩陣運算就夠:當然也要有各種分佈函式。反正也是瞎胡混,我就算努把力,少混點吧。
  • 1990年5月。曉陽到底也加入了IBM的行列。照我看,蘋果機還是買不得。因為IBM-PC的相容機隊伍龐大。INTEL又總能推出新一代CPU,將來還有大發展。買微機錢的投資是大事,時間、精力投資更為巨大,買386相容機是明智之舉。 我最近可能調入人大,投奔班長。最近胡思亂想想出了個理論來,還沒認真推導,大抵是設立多個Dummy(兩分變數)構成的聯合分佈,其合計樣本點構成一球面,點到點的距離以總誤差計算。所以一樣本點的對點就是它的否,誤差最大。其餘的正在想。
  • 1991年2月。兄談及IBM中文軟體不可用,估計是影象版有問題,可至有Colormonitor之機器上一試。Mac機國內亦有,唯不及美國多也。
  • 1991年3月。你寄來的嚴氏2.0A我也收到,還沒用。因為一者是3盤要倒,二者我自己寫的WK也有重大進展。我也自做了片語功能,是棵B樹,我覺得自寫的軟體自用,感覺是最好的。片語用處不是很大,主要用於定義人地名等專有名詞,但是嚴氏軟體對我還是有重大啟示,拼音加四聲是個極好的主意,寫起東西來聲韻鏗鏘,與其他軟體大不一樣。自寫一遍,從分頁到編輯鍵分配,都能合乎自家習慣,不是存心狗尾續貂也。如能見到嚴氏,可代為致意。
  • 1991年5月。前次寄來軟體,上機一試發現非有浮點處理機不能運轉。因為缺少軟體,國內機器一般不裝協處理機,冷不丁撞出您這一件來,搞得不大有辦法。
  • 1991年5月。閒著沒事搞了個發明。原有中文軟體是用線掃描方式出漢字。我做了一個用調整字模發生器方法出漢字的系統,自以為很優越,可惜還未找到使用者。用此法可以很容易地在西文軟體上出中文視窗,還在SPSS上加了幾句罵孃的話。
  • 1991年9月。曉陽託人帶來軟體,週轉很多日才到手裡,軟盤有些汙損,壞一片爛一套,不可用矣。但是十分感念曉陽的好意。去年託人帶來的中文軟體(嚴氏By×),我用著尚好,而且又用C語言仿編了一個,程式是我的,拼音字典是人家的,執此招搖撞騙,騙了一些錢。幹這個事,熟悉了C語言,都是拜小陽所賜。
  • 1991年9月。不過現在我對微機已無興趣,因為發現寫小說也可賺到錢。
  • 1992年1月。編譯程式一盤(有說明書,見shou),源程式一盤。我的音典與嚴氏同名內容不同。功能上與嚴氏的近似,但是多了改進拼音字典的功能。按F4後可以把拼音重定義。也可加字,在拼音揀字時,按enter,就進入國標揀字,揀到的字加入字典。這個軟體由五個c語言(另有兩個標頭檔案)和一個組合語言檔案組成,可用turboc編譯,但是彙編部分不必重匯了,可以把彙編檔案寫成的部分形成的obj(我的磁碟上叫wk5.obj)放到硬碟上,與其它c語言檔案分開,用turboc的commandline編譯器編一下,命令如下: tcc-mc-ewka:wk*.ca:wk5.objgraphics.lib 形成wk.exe,但是必須有yindian,cclib,egavga.bgi三檔案支援才工作。*.bgi是圖象板參數列,可以包括到*.exe內的。但是要改改程式。你的機器好。我還用個老掉牙的XT機,簡直落伍了。turbo.c你一定能找到。假如你用過其它c軟體,有一點要提醒你,turbo.c有一種極討厭的特性,就是你在一個函式內alloc的記憶體,退出該函式時不會自動釋放;還有一點也很糟,就是模型問題,在大模型下寫的程式,到了小模型上一概不能用,我的程式是在compact模型下寫的,就不能用small來編譯,這兩條是可以氣死人的。據說可以用far,near之類的字首說明指標,其實是屁用不管。我幹了一年多c,得到的結論是微機c還不能使人快樂,有時叫人懷念彙編。 f1是提示鍵。我的印表機有漢卡,F5你恐不能用。這個印表機是人家借給我的,效能非常之好,(美國amt-525);但是不知能用多久。這個程式我還在修改中。與嚴氏的軟體比,在硬的方面的優點是達到了很好的緊湊性,現在編譯後是55k,擴充套件餘地大。缺點是圖象更新沒他的快(在我的老爺機上可以看出區別),不知他是怎麼搞的,我很佩服。我的影象部分也是彙編寫的,反覆優化,也達不到他的水平,不得不承認技不如人。另外,磁碟檔案的處理,我也寫不好。還要請陽公指教。
  • 1992年7月。小陽的信又用MAC機,看來你的機器不少,可喜可賀。我這一臺老PC/XT,用了六年換不下來,太慚愧,近來老想狠狠心,花幾百塊買個286主機板換上,老婆又不同意,真是要命了。 我自編軟體又有進展,把一部分程式遞迴化,出現了很新奇的特徵。等我換了286,就需要能寫虛址方式的C語言了,未知曉陽能否找到?
  • 1992年9月。你給我寄的軟體因為是三寸盤,在這裡很不通用,所以我也沒用。盤上有什麼,至今不知。我用C編的軟體已經用熟,並做出了各種寫小說的工具,別人的軟體已不用了。現在主要是寫書賺錢。從今年初開始寫長篇,首先做了寫長篇的專用軟體,現在基本調通,開始寫了。
  • 1992年9月。遞迴論我沒學過。我哥哥大概懂一些。我和你說的大概是計算機內的遞迴演算法。我在美國讀的書都是關於機器的。有關演算法、資料結構等等,全在國內看的,也不知英文叫什麼。在C語言裡是指在一個函式(相當於其他語言的subprocedure)內呼叫同一個函式。一般程式書裡都能查到。 所謂保護方式,是指286protectedmode。因為一般的IBM機器,不管是386,486,只要是dos作業系統,實際能操作的記憶體只是640K,相當於一個較快的PC機。想要用到640K以外的e×tendmemory,只有用pretectmode才能用上,我打算換286,還是想用多於640K的記憶體。這就要有比現在的C更好的程式設計工具。當然,我也不一定要用到保護方式,有各種EMS軟體,不過我還是想往多裡撈摸,多留一手。MSC我只見過5.0版,7.0版的效能還不知道。不過我猜現在流行的C應該有這些手段,到這時候了。 我有一段時間很關心personalcomputer的發展,屬於想玩玩不到過乾癮的那種。這路東西的發展都是由處理機片芯的發展開始。從8088到286,386看文獻就知道快了很多。從實用的角度來看,286多了虛存保護,386又多了很多使用者多工手段。486據說把386,387,和64K的快取記憶體整合到一個片子上,不但整數運算快,浮點也快多了。不過不做科學運算,意義就小了。586還不知道是個什麼東西,想必有驚人之處。不過到了我手上用作文書處理,也是暴殄天物。我有個286用用就算行了。太好的東西我也使不出來。 聽說美國微機多媒體搞得甚火,微機接電視,音響,vedio等等。這玩藝聽上去倒是蠻有意思的。
  • 1992年10月。當時不知道你為什麼這麼幹,原來是機器壞了。居然叫人敲去150dollars,老兄真是有錢。這種事叫我遇上,肯定自己修了。現在的微機修理都是換線換板,機器一壞,先找塊表量量是不是電源壞了。只要不是電源壞,估摸是哪部分不好,就去買塊版換上。送出去也是這麼修,還要敲你手工錢。我看150什麼板子都能買來。萬一自己故障沒找對,就說人家的板子不好,退給他。我的機器裡什麼牌子的板子都有了,都像你那樣挨人敲,還玩得起嗎?這麼弄,還能有點樂趣。比方說,你愛486,就去買塊486主機板,把自己的主機板換下來,這種搞法不怕雜牌水貨,壞了再換,反正便宜。我的問題在於這麼搞都搞不起。
  • 1992年10月。我現在從我哥哥那裡弄了一套TurboC++,軟體方面暫時沒有問題了。只是286還沒買,因為聽說中國要加入關貿總協定,這類東西要掉價;有錢先買傢俱。無論如何,我是用不到486的,因為要286也不是為了追求高速度,主要是要解決記憶體問題。我現在軟體寫得出神入化,大概8088上能做到的一切,我都做到了。自己覺得該告一段落,去寫小說了。
  • 1992年11月。先有朋友把你寄來的軟盤倒了一下,看看是數字,就沒動它。記得原來有一套幹這種事的軟體,是你給的,但是盤壞過,再也找不到了。今天寫了個小程式倒出來,拜讀了大作,甚是有趣.
  • 1993年3月。我終於下決心買了一臺286,這些日子在改造軟體,作了不少彙編工作。其核心是它在虛擬保護方式(virtualaddressprotected)下工作,以便利擴充套件記憶體(expandedmemory)。現在終於完全成功,我的軟體現在可以編輯400K長的檔案,可以把一部長篇小說全部調到記憶體裡編寫了。只可惜我這個機器還是低階,只有1MRAM,並且沒有硬碟,所以也就到此為止了。這個程式的缺點是太低階,有大量對埠(port)的操作,雖然效率是高的,相容性不會太好。我的XT機給山妻用了,算起來我用那臺機器已經七年,就如一位老友,驟然割愛,如心頭割肉。
  • 年份不詳。我們的pc機還沒有和Internet連上。本來中國有幾個國內網發展得很快,現在又出了問題,誰要上Internet,必須到有關部門去登記,留個案底,以備當局監控,很有一點監獄的氣味。我還不想找這份麻煩,再說,通過Chinanet聯網,每月也要交七八百的月費,我也沒有這麼多的錢。既然×反對資訊時代,我們就不進這個時代罷,有什麼法子。所以還是寫信好了。

筆記來源地址:http://91biji.com/social/leon/framebook/notes/note/9174/

相關文章