王小波:作家身份面世的第一代GEEK
喜歡讀書的人,對王小波都不陌生,他是中國最富創(chuàng)造性的作家之一,他是中國近半世紀(jì)的苦難和荒謬所結(jié)晶出來的天才,他英年早逝。他的作品對我們生活 中所有的荒謬和苦難作出最徹底的反諷刺。他還做了從來沒有人想做和做也沒才力做到的事:他唾棄中國現(xiàn)代文學(xué)那種“軟”以及傷感和諂媚的傳統(tǒng),而秉承羅素、 伊塔洛·卡爾維諾他們的批判、思考的精神,同時把這個傳統(tǒng)和中國古代小說的游戲精神作了一個創(chuàng)造性的銜接。
對于王小波也就讀過一本《一只特立獨行的豬》,讓我對王小波產(chǎn)生興趣的是在讀到《Mac Talk》這本書里寫到王小波除了作家的身份外,還是一名程序員,并且是一名很牛的程序員。以下是一些王小波和程序相關(guān)的故事。
多數(shù)人知道王小波是小說家,部分人分不清財經(jīng)作家吳曉波和小說家王小波是不是一回事兒。卻很少有人知道王小波可以算的上中國早期的程序員,在 90 年代初的時候因為國內(nèi)應(yīng)用軟件缺乏,愛搗鼓東西的王小波利用閑暇時間學(xué)習(xí)了匯編和C語言,編了中文編輯器和輸入法。中文編輯器和輸入法任何一個都是大牛級 的 GEEK 才會去嘗試的東西,比如求伯君。王小波通過賣軟件還掙了些錢,當(dāng)時很多中觀村的老板要拉他入伙,當(dāng)然寫代碼這種來錢快的活對屌絲王小波還是有吸引力的,所 幸他還是拒絕了人家。
王小波一個寫小說的為什么淪落(/升級)成了程序員?這還得慢慢說。王小波大學(xué)在人大學(xué)的是貿(mào)易,畢業(yè)后在人大當(dāng)了幾年老師。后來去了美國匹茨堡大 學(xué)讀經(jīng)濟(jì)的研究生,到那老師跟他說你就是一寫作的奇才,以后必能稱霸話語文壇。老師又說你在我這什么都不用干了,好吃好住,畢業(yè)證照發(fā),抓緊時間寫小說。 學(xué)成歸國,王小波接著又回到人大做統(tǒng)計學(xué)的講師。
因為做統(tǒng)計,各種分析工具是必不可少的,以前人手工計算,有了計算機(jī)當(dāng)然最好使用計算機(jī),基本理工科的都知道用 MATLAB 做個畢設(shè)和作業(yè)是多么重要。所以當(dāng)時計算機(jī)對王小波的工作是相當(dāng)重要的,但是 90 年的時候,軟件相當(dāng)稀缺,電腦又相當(dāng)不智能。王小波不得不自己寫軟件,當(dāng)然開發(fā)軟件也不是那么簡單,所以他先是學(xué)會了 FORTRAN,匯編,C等各種語言,接著又要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),算法的相關(guān)知識,還有編譯原理。
在做出中文編輯器和輸入法,解決了自己的需求之后,王小波對寫軟件的興趣已經(jīng)沒有多少了。因為他覺得寫軟件可以賺錢,寫小說同樣也可以賺錢。處于一 個程序員的修養(yǎng),王小波還是不斷地從數(shù)據(jù)結(jié)構(gòu)和算法來優(yōu)化這兩個軟件。93 年的時候,王小波買了一臺 286,這在當(dāng)時是一臺奢華無比的機(jī)子了,他自己也是這些認(rèn)為的,高興得一塌糊涂。不過這臺頂配機(jī)子還是滿足不了王小波的要求,后來他把時間花在了不斷地 去優(yōu)化這臺機(jī)子上面。
王小波可以算的上是個 GEEK。大學(xué)學(xué)的貿(mào)易,后來又學(xué)化學(xué),再后來轉(zhuǎn)到了數(shù)學(xué)系。他的同學(xué)形容他解數(shù)學(xué)題就像殺豬一樣,特別來勁,一道一道解決,那感覺可能就像打 CS 拿人頭一樣爽。不過解多了也覺得沒意思。
王小波小說里的男主角基本都是理工男,除了天天意淫還有一些奇怪的想法。其中一些還有自己的發(fā)明,比如《未來世界》里的王二是個工程師,整天想著和 單位一起研制的永動機(jī),還有《紅拂夜奔》里的李靖發(fā)明過一個巨大的開跟號機(jī)器,在戰(zhàn)場上,這臺機(jī)器運轉(zhuǎn)起來揮舞著杠桿邊開跟攻擊敵人,有的人死在根號 3 下,有的人倒在了根號 5 下。這些都只有 GEEK 才會想得出來。
王小波干過很多事情,下過鄉(xiāng),考過大學(xué),出過國,學(xué)過經(jīng)濟(jì),打過代碼,成了小說家,去世的那一年完成了心愿做了編劇??傊还芩闪耸裁矗砩献屛覀冏鹬氐倪€是獨立之精神,自由之思想。
以下內(nèi)容是從王小波和朋友的書信里收集了他所做軟件的各種信息,匯集起來,可以了解小波在軟件方面的造詣。順序按照原文的書信順序,應(yīng)該也就是時間順序。
1988 年 12 月。
回來之前我曾往人大一分校計算機(jī)站寫過一封信,問他們可要帶什么軟件,主管的工程師回了封信,我沒收到?;貋碇笕思疫€提到此事?,F(xiàn)在國內(nèi)軟件一面 混亂,又逐漸有形成市場之勢。首先以年兄學(xué)統(tǒng)計這一事實來看,回來做事非有會用的軟件不可。Macintosh 根本就沒打進(jìn)中國市場,你非帶幾個可用的 IBM 微機(jī)軟件回來不可。至于什么機(jī)器上能使倒不必太擔(dān)心。我這個狗屁計算機(jī)室,IBMPS/2 就有二臺。AT 機(jī)也不少。
SASSPSSStatistx 都有,可代表國內(nèi)上等一般統(tǒng)計微機(jī)房的水平,可就是少了一種宜于作統(tǒng)計的語言。年兄如有 APL (Aprogramminglanguage)之 IBM 微機(jī)本,可給我寄 copy 來。我在美還有一個戶頭,連 manual 復(fù)印費一并寫支票給你們。Glim 我也沒有,如年兄有便人可捎來。郵寄太貴,能省就省吧。
1990 年 1 月。
我現(xiàn)在正給北大社會學(xué)所做統(tǒng)計,手上除 SPSS 沒有可用的軟件,國內(nèi)這方面很差。我現(xiàn)在會用 FORTRAN,編統(tǒng)計程序不方便。聞兄談起你們用S語言,不知是否好用。工具書也不知好找不。不管好歹,煩兄找個拷貝給我,要就算了。照我看只要能解決 各種矩陣運算就夠:當(dāng)然也要有各種分布函數(shù)。反正也是瞎胡混,我就算努把力,少混點吧。
1990 年 5 月。
曉陽到底也加入了 IBM 的行列。照我看,蘋果機(jī)還是買不得。因為 IBM-PC 的兼容機(jī)隊伍龐大。INTEL 又總能推出新一代 CPU,將來還有大發(fā)展。買微機(jī)錢的投資是大事,時間、精力投資更為巨大,買 386 兼容機(jī)是明智之舉。 我最近可能調(diào)入人大,投奔班長。最近胡思亂想想出了個理論來,還沒認(rèn)真推導(dǎo),大抵是設(shè)立多個 Dummy (兩分變量)構(gòu)成的聯(lián)合分布,其合計樣本點構(gòu)成一球面,點到點的距離以總誤差計算。所以一樣本點的對點就是它的否,誤差最大。其余的正在想。
1991 年 2 月。
兄談及 IBM 中文軟件不可用,估計是圖像版有問題,可至有 Colormonitor 之機(jī)器上一試。Mac 機(jī)國內(nèi)亦有,唯不及美國多也。
1991 年 3 月。
你寄來的嚴(yán)氏 2.0A 我也收到,還沒用。因為一者是 3 盤要倒,二者我自己寫的 WK 也有重大進(jìn)展。我也自做了詞組功能,是棵B樹,我覺得自寫的軟件自用,感覺是最好的。詞組用處不是很大,主要用于定義人地名等專有名詞,但是嚴(yán)氏軟件對我 還是有重大啟示,拼音加四聲是個極好的主意,寫起東西來聲韻鏗鏘,與其他軟件大不一樣。自寫一遍,從分頁到編輯鍵分配,都能合乎自家習(xí)慣,不是存心狗尾續(xù) 貂也。如能見到嚴(yán)氏,可代為致意。
1991 年 5 月。
前次寄來軟件,上機(jī)一試發(fā)現(xiàn)非有浮點處理機(jī)不能運轉(zhuǎn)。因為缺少軟件,國內(nèi)機(jī)器一般不裝協(xié)處理機(jī),冷不丁撞出您這一件來,搞得不大有辦法。
1991 年 5 月。
閑著沒事搞了個發(fā)明。原有中文軟件是用線掃描方式出漢字。我做了一個用調(diào)整字模發(fā)生器方法出漢字的系統(tǒng),自以為很優(yōu)越,可惜還未找到用戶。用此法可以很容易地在西文軟件上出中文窗口,還在 SPSS 上加了幾句罵娘的話。
1991 年 9 月。
曉陽托人帶來軟件,周轉(zhuǎn)很多日才到手里,軟盤有些污損,壞一片爛一套,不可用矣。但是十分感念曉陽的好意。去年托人帶來的中文軟件(嚴(yán)氏 By×),我用著尚好,而且又用C語言仿編了一個,程序是我的,拼音字典是人家的,執(zhí)此招搖撞騙,騙了一些錢。干這個事,熟悉了C語言,都是拜小陽所賜。
1991 年 9 月。
不過現(xiàn)在我對微機(jī)已無興趣,因為發(fā)現(xiàn)寫小說也可賺到錢。
1992 年 1 月。
編譯程序一盤(有說明書,見 shou),源程序一盤。我的音典與嚴(yán)氏同名內(nèi)容不同。功能上與嚴(yán)氏的近似,但是多了改進(jìn)拼音字典的功能。按 F4 后可以把拼音重定義。也可加字,在拼音揀字時,按 enter,就進(jìn)入國標(biāo)揀字,揀到的字加入字典。這個軟件由五個c語言(另有兩個頭文件)和一個匯編語言文件組成,可用 turboc 編譯,但是匯編部分不必重匯了,可以把匯編文件寫成的部分形成的 obj (我的磁盤上叫 wk5.obj)放到硬盤上,與其它c語言文件分開,用 turboc 的 commandline 編譯器編一下,命令如下:tcc-mc-ewka:wk*.ca:wk5.objgraphics.lib 形成 wk.exe,但是必須有 yindian,cclib,egavga.bgi 三文件支持才工作。*.bgi 是圖象板參數(shù)表,可以包括到*.exe 內(nèi)的。但是要改改程序。你的機(jī)器好。我還用個老掉牙的 XT 機(jī),簡直落伍了。
turbo.c 你一定能找到。假如你用過其它c軟件,有一點要提醒你,turbo.c 有一種極討厭的特性,就是你在一個函數(shù)內(nèi) alloc 的內(nèi)存,退出該函數(shù)時不會自動釋放;還有一點也很糟,就是模型問題,在大模型下寫的程序,到了小模型上一概不能用,我的程序是在 compact 模型下寫的,就不能用 small 來編譯,這兩條是可以氣死人的。
據(jù)說可以用 far,near 之類的前綴說明指針,其實是屁用不管。我干了一年多c,得到的結(jié)論是微機(jī)c還不能使人快樂,有時叫人懷念匯編。
f1 是提示鍵。我的打印機(jī)有漢卡,F(xiàn)5 你恐不能用。這個打印機(jī)是人家借給我的,性能非常之好,(美國 amt-525);但是不知能用多久。這個程序我還在修改中。與嚴(yán)氏的軟件比,在硬的方面的優(yōu)點是達(dá)到了很好的緊湊性,現(xiàn)在編譯后是 55k,擴(kuò)展余地大。缺點是圖象更新沒他的快(在我的老爺機(jī)上可以看出區(qū)別),不知他是怎么搞的,我很佩服。我的圖像部分也是匯編寫的,反復(fù)優(yōu)化,也達(dá)不 到他的水平,不得不承認(rèn)技不如人。另外,磁盤文件的處理,我也寫不好。還要請陽公指教。
1992 年 7 月。
小陽的信又用 MAC 機(jī),看來你的機(jī)器不少,可喜可賀。我這一臺老 PC/XT,用了六年換不下來,太慚愧,近來老想狠狠心,花幾百塊買個 286 主板換上,老婆又不同意,真是要命了。 我自編軟件又有進(jìn)展,把一部分程序遞歸化,出現(xiàn)了很新奇的特征。等我換了 286,就需要能寫虛址方式的C語言了,未知曉陽能否找到?
1992 年 9 月。
你給我寄的軟件因為是三寸盤,在這里很不通用,所以我也沒用。盤上有什么,至今不知。我用C編的軟件已經(jīng)用熟,并做出了各種寫小說的工具,別人的軟件已不用了。現(xiàn)在主要是寫書賺錢。從今年初開始寫長篇,首先做了寫長篇的專用軟件,現(xiàn)在基本調(diào)通,開始寫了。
1992 年 9 月。
遞歸論我沒學(xué)過。我哥哥大概懂一些。我和你說的大概是計算機(jī)內(nèi)的遞歸算法。我在美國讀的書都是關(guān)于機(jī)器的。有關(guān)算法、數(shù)據(jù)結(jié)構(gòu)等等,全在國內(nèi)看的, 也不知英文叫什么。在C語言里是指在一個函數(shù)(相當(dāng)于其他語言的 subprocedure)內(nèi)調(diào)用同一個函數(shù)。一般程序書里都能查到。
所謂保護(hù)方式,是指 286protectedmode。因為一般的 IBM 機(jī)器,不管是 386,486,只要是 dos 操作系統(tǒng),實際能操作的內(nèi)存只是 640K,相當(dāng)于一個較快的 PC 機(jī)。想要用到 640K 以外的e×tendmemory,只有用 pretectmode 才能用上,我打算換 286,還是想用多于 640K 的內(nèi)存。這就要有比現(xiàn)在的C更好的編程工具。
當(dāng)然,我也不一定要用到保護(hù)方式,有各種 EMS 軟件,不過我還是想往多里撈摸,多留一手。MSC 我只見過 5.0 版,7.0 版的性能還不知道。不過我猜現(xiàn)在流行的C應(yīng)該有這些手段,到這時候了。 我有一段時間很關(guān)心 personalcomputer 的發(fā)展,屬于想玩玩不到過干癮的那種。這路東西的發(fā)展都是由處理機(jī)片芯的發(fā)展開始。從 8088 到 286,386 看文獻(xiàn)就知道快了很多。
從實用的角度來看,286 多了虛存保護(hù),386 又多了很多用戶多任務(wù)手段。486 據(jù)說把 386,387,和 64K 的高速緩存集成到一個片子上,不但整數(shù)運算快,浮點也快多了。不過不做科學(xué)運算,意義就小了。586 還不知道是個什么東西,想必有驚人之處。不過到了我手上用作文字處理,也是暴殄天物。我有個 286 用用就算行了。太好的東西我也使不出來。 聽說美國微機(jī)多媒體搞得甚火,微機(jī)接電視,音響,vedio 等等。這玩藝聽上去倒是蠻有意思的。
1992 年 10 月。
當(dāng)時不知道你為什么這么干,原來是機(jī)器壞了。居然叫人敲去 150dollars,老兄真是有錢。這種事叫我遇上,肯定自己修了?,F(xiàn)在的微機(jī)修理都是換線換板,機(jī)器一壞,先找塊表量量是不是電源壞了。只要不是電源 壞,估摸是哪部分不好,就去買塊版換上。送出去也是這么修,還要敲你手工錢。我看 150 什么板子都能買來。萬一自己故障沒找對,就說人家的板子不好,退給他。我的機(jī)器里什么牌子的板子都有了,都像你那樣挨人敲,還玩得起嗎?這么弄,還能有點 樂趣。比方說,你愛 486,就去買塊 486 主機(jī)板,把自己的主機(jī)板換下來,這種搞法不怕雜牌水貨,壞了再換,反正便宜。我的問題在于這么搞都搞不起。
1992 年 10 月。
我現(xiàn)在從我哥哥那里弄了一套 TurboC++,軟件方面暫時沒有問題了。只是 286 還沒買,因為聽說中國要加入關(guān)貿(mào)總協(xié)定,這類東西要掉價;有錢先買家具。無論如何,我是用不到 486 的,因為要 286 也不是為了追求高速度,主要是要解決內(nèi)存問題。我現(xiàn)在軟件寫得出神入化,大概 8088 上能做到的一切,我都做到了。自己覺得該告一段落,去寫小說了。
1992 年 11 月。
先有朋友把你寄來的軟盤倒了一下,看看是數(shù)字,就沒動它。記得原來有一套干這種事的軟件,是你給的,但是盤壞過,再也找不到了。今天寫了個小程序倒出來,拜讀了大作,甚是有趣。
1993 年 3 月。
我終于下決心買了一臺 286,這些日子在改造軟件,作了不少匯編工作。其核心是它在虛擬保護(hù)方式(virtualaddressprotected)下工作,以便利擴(kuò)展內(nèi)存 (expandedmemory)?,F(xiàn)在終于完全成功,我的軟件現(xiàn)在可以編輯 400K 長的文件,可以把一部長篇小說全部調(diào)到內(nèi)存里編寫了。只可惜我這個機(jī)器還是低級,只有 1MRAM,并且沒有硬盤,所以也就到此為止了。這個程序的缺點是太低級,有大量對端口(port)的操作,雖然效率是高的,兼容性不會太好。我的 XT 機(jī)給山妻用了,算起來我用那臺機(jī)器已經(jīng)七年,就如一位老友,驟然割愛,如心頭割肉。
年份不詳。
我們的 pc 機(jī)還沒有和 Internet 連上。本來中國有幾個國內(nèi)網(wǎng)發(fā)展得很快,現(xiàn)在又出了問題,誰要上 Internet,必須到有關(guān)部門去登記,留個案底,以備當(dāng)局監(jiān)控,很有一點監(jiān)獄的氣味。我還不想找這份麻煩,再說,通過 Chinanet 聯(lián)網(wǎng),每月也要交七八百的月費,我也沒有這么多的錢。既然×反對信息時代,我們就不進(jìn)這個時代罷,有什么法子。所以還是寫信好了。