第一代程序員王小波

第一代程序員王小波

我閒著沒事搞了個發明。

1991年5月,王小波在自己的博客上寫下了這句話。他可能是中國最早寫科技博客的人也是中國第一代程序員。

他的這個發明,是自行研發的輸入法,改變了舊有輸入法的系統機制,不但率先實現了在英文環境下,輸入中文更加無縫接入,居然還有後續版本和優化更新:比如加入了自定義拼音字庫,以及輸入後再修改等“高級功能”。

多數人知道王小波是小說家,部分人分不清財經作家吳曉波和小說家王小波是不是一回事兒。卻很少有人知道王小波可以算的上中國早期的程序員,在 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 聯網,每月也要交七八百的月費,我也沒有這麼多的錢。既然×反對信息時代,我們就不進這個時代罷,有什麼法子。所以還是寫信好了。

————

明明可以用代碼的手藝當互聯網時代的開拓者,成為張朝陽、李彥宏之類的互聯網巨頭,卻自顧自的要寫小說,這樣的優秀之處,實在是叫人佩服。


分享到:


相關文章: