0%

程序员王小波

这里是「朝花夕拾」第十四期,这一期我要聊一聊「王小波」。20200411是王小波逝世 23 周年祭日,我们对他的第一印象是他那奇妙诡谲的小说,是他那汪洋恣肆的杂文,是他和李银河的爱情故事。我依稀记得他写过自己的软件,知道今天我看到这个,我开始了对王小波的重新认识。他是一个真正的斜杠青年,比我上次说到的 Damien Riehl 老哥还要厉害。

斜杠青年

这是我在维基百科上看到的他的经历:

  • 1952年5月13日出生于北京一个知识分子家庭。
  • 1968~1970年云南农场知青。这段经历成为他最著名的作品《黄金时代》的背景。
  • 1971~1972年山东牟平插队;后作民办教师
  • 1972~1973年北京牛街教学仪器厂工人
  • 1974~1978年北京西城区半导体厂工人。工人生活是他《革命时期的爱情》等小说的写作背景。
  • 1977年与当时在《光明日报》担任编辑的李银河相识相恋,后结合。
  • 1980年王小波和李银河结婚,同年发表处女作《地久天长》。
  • 1978~1982年中国人民大学贸易经济系本科学生。就读于贸易经济商品学专业。
  • 1982~1984年中国人民大学一分校教师。开始写作《黄金时代》。
  • 1984~1988年美国匹兹堡大学东亚研究中心研究生,获硕士学位。开始写作以唐传奇为蓝本的小说,其间得到许倬云先生的指点。
  • 在美留学期间,游历了美国各地,并利用1986年暑假游历了西欧诸国。
  • 1988~1991年北京大学社会学系讲师
  • 1991~1992年中国人民大学会计系讲师教授统计学。
  • 1992~1997年自由撰稿人,他的唯一一部电影剧本《东宫西宫》获阿根廷国际电影节最佳编剧奖,并且入围1997年戛纳国际电影节。
  • 1997年4月11日因心脏病逝世于北京。

是的,仅仅只是这些经历,就已经非常惊人了:知青民办教师半导体厂工人经济学社会学会计编剧小说家。但是,神奇的王小波并不止步于此,看看他自己的描述:

我现在既不是化学家,也不是数学家,更不是物理学家。我靠写文章为生,与科技绝缘——只是有时弄弄计算机。这个行当我会得不少,从最低等的汇编语言到最新潮的C++全会写,硬件知识也有一些。但从我自己的利益来看,我还不如一点都不会,省得整夜不睡,鼓捣我的电脑,删东加西,最后把整个系统弄垮,手头又没有软件备份。

是的,他不仅仅在人文社科上作出了很多的成绩,还是一个理科 Geek,精通统计学,软硬兼修的程序员。为了写文章,他先是学会了FORTRAN,汇编,C等各种语言,接着又要学习数据结构,算法的相关知识,还有编译原理。在做出了自己的中文编辑器和输入法后,他觉得写软件可以赚钱,写小说同样也可以赚钱。

这是知乎上的一个评论:

王小波可以算的上是个GEEK。大学学的贸易,后来又学化学,再后来转到了数学系。他的同学形容他解数学题就像杀猪一样,特别来劲,一道一道解决,那感觉可能就像打CS拿人头一样爽。不过解多了也觉得没意思。

王小波小说里的男主角基本都是理工男,除了天天意淫还有一些奇怪的想法。其中一些还有自己的发明,比如《未来世界》里的王二是个工程师,整天想着和单位一起研制的永动机,还有《红拂夜奔》里的李靖发明过一个巨大的开跟号机器,在战场上,这台机器运转起来挥舞着杠杆边开跟攻击敌人,有的人死在根号3下,有的人倒在了根号5下。这些都只有GEEK才会想得出来。

程序员时间线

下面是王小波和他朋友的书信中关于计算机内容的汇总。

1988.12

回来之前我曾往人大一分校计算机站写过一封信,问他们可要带什么软件,主管的工程师回了封信,我没收到。回来之后人家还提到此事。现在国内软件一面混乱,又逐渐有形成市场之势。首先以年兄学统计这一事实来看,回来做事非有会用的软件不可。Macintosh根本就没打进中国市场,你非带几个可用的IBM微机软件回来不可。至于什么机器上能使倒不必太担心。我这个狗屁计算机室,IBMPS/2就有二台。AT机也不少。SAS SPSS Statistx都有,可代表国内上等一般统计微机房的水平,可就是少了一种宜于作统计的语言。年兄如有APL(A Programming Language)之IBM微机本,可给我寄copy来。我在美还有一个户头,连manual复印费一并写支票给你们。Glim我也没有,如年兄有便人可捎来。邮寄太贵,能省就省吧。

  • Macintosh 在 1984 年1月24日发布,到 1988 年还没打开市场
  • 那个时候,王小波用的还是 IBM PS/2 和 IBM PC/AT,AT机1984 年发布,他创造了 PC(Personal Computer)的概念
  • SPSS 是 IBM 1984 年推出的统计分析软件,迄今仍在被广泛使用。SAS,Statistx 也同样是那个时代推出的软件。
  • APL是哈佛大学的肯尼斯·艾佛于 1962 年设计开发,为此他获得了 1979 年的图灵奖。

1990.01

我现在正给北大社会学所做统计,手上除SPSS没有可用的软件,国内这方面很差。我现在会用FORTRAN,编统计程序不方便。闻兄谈起你们用S语言,不知是否好用。工具书也不知好找不。不管好歹,烦兄找个拷贝给我,要就算了。照我看只要能解决各种矩阵运算就够:当然也要有各种分布函数。反正也是瞎胡混,我就算努把力,少混点吧。

  • FORTRAN是世界上第一个被正式推广使用的高级语言,1954年被提出来。
  • S 语言是贝尔实验室的John Chambers等于1976年共同开发的一种用来进行统计分析的解释型语言,R 语言被认为是S 语言的一个分支。

1990.05

晓阳到底也加入了IBM的行列。照我看,苹果机还是买不得。因为IBM-PC的兼容机队伍庞大。INTEL又总能推出新一代CPU,将来还有大发展。买微机钱的投资是大事,时间、精力投资更为巨大,买386兼容机是明智之举。 我最近可能调入人大,投奔班长。最近胡思乱想想出了个理论来,还没认真推导,大抵是设立多个Dummy(两分变量)构成的联合分布,其合计样本点构成一球面,点到点的距离以总误差计算。所以一样本点的对点就是它的否,误差最大。其余的正在想。

  • 1985年,Intel 386 CPU 推出
  • 1989年,Intel 486 CPU 推出

1991.02

兄谈及IBM中文软件不可用,估计是图像版有问题,可至有Color Monitor之机器上一试。Mac机国内亦有,唯不及美国多也。

1991.03

你寄来的严氏2.0A我也收到,还没用。因为一者是3盘要倒,二者我自己写的WK也有重大进展。我也自做了词组功能,是棵B树我觉得自写的软件自用,感觉是最好的。词组用处不是很大,主要用于定义人地名等专有名词,但是严氏软件对我还是有重大启示,拼音加四声是个极好的主意,写起东西来声韵铿锵,与其他软件大不一样。自写一遍,从分页到编辑键分配,都能合乎自家习惯,不是存心狗尾续貂也。如能见到严氏,可代为致意。

  • 是的,B 树,你没看错,王小波将 B 树用于词组功能
  • 1991 年就自己开发中文输入法软件,那年雷军刚刚毕业来到北京,认识求伯君

1991.05

前次寄来软件,上机一试发现非有浮点处理机不能运转。因为缺少软件,国内机器一般不装协处理机,冷不丁撞出您这一件来,搞得不大有办法。

闲着没事搞了个发明。原有中文软件是用线扫描方式出汉字。我做了一个用调整字模发生器方法出汉字的系统,自以为很优越,可惜还未找到用户。用此法可以很容易地在西文软件上出中文窗口,还在SPSS上加了几句骂娘的话。

1991.09

晓阳托人带来软件,周转很多日才到手里,软盘有些污损,坏一片烂一套,不可用矣。但是十分感念晓阳的好意。去年托人带来的中文软件(严氏By×),我用着尚好,而且又用C语言仿编了一个,程序是我的,拼音字典是人家的,执此招摇撞骗,骗了一些钱。干这个事,熟悉了C语言,都是拜小阳所赐。

不过现在我对微机已无兴趣,因为发现写小说也可赚到钱。

1992.01

编译程序一盘(有说明书,见shou),源程序一盘。我的音典与严氏同名内容不同。功能上与严氏的近似,但是多了改进拼音字典的功能。按F4后可以把拼音重定义。也可加字,在拼音拣字时,按enter,就进入国标拣字,拣到的字加入字典。这个软件由五个c语言(另有两个头文件)和一个汇编语言文件组成,可用turboc编译,但是汇编部分不必重汇了,可以把汇编文件写成的部分形成的obj(我的磁盘上叫wk5.obj)放到硬盘上,与其它c语言文件分开,用turboc的command line编译器编一下,命令如下: tcc-mc-ewka:wk*.ca:wk5.obj graphics.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,扩展余地大。缺点是图象更新没他的快(在我的老爷机上可以看出区别),不知他是怎么搞的,我很佩服。我的图像部分也是汇编写的,反复优化,也达不到他的水平,不得不承认技不如人。另外,磁盘文件的处理,我也写不好。还要请阳公指教。

  • Turbo C是美国Borland公司1987年推出的一款集成开发环境(IDE)

1992.07

小阳的信又用MAC机,看来你的机器不少,可喜可贺。我这一台老PC/ⅩT,用了六年换不下来,太惭愧,近来老想狠狠心,花几百块买个286主板换上,老婆又不同意,真是要命了。 我自编软件又有进展,把一部分程序递归化,出现了很新奇的特征。等我换了286,就需要能写虚址方式的C语言了,未知晓阳能否找到?

1992.09

你给我寄的软件因为是三寸盘,在这里很不通用,所以我也没用。盘上有什么,至今不知。我用C编的软件已经用熟,并做出了各种写小说的工具,别人的软件已不用了。现在主要是写书赚钱。从今年初开始写长篇,首先做了写长篇的专用软件,现在基本调通,开始写了。

递归论我没学过。我哥哥大概懂一些。我和你说的大概是计算机内的递归算法。我在美国读的书都是关于机器的。有关算法数据结构等等,全在国内看的,也不知英文叫什么。在C语言里是指在一个函数(相当于其他语言的subprocedure)内调用同一个函数。一般程序书里都能查到。 所谓保护方式,是指286 protected mode。因为一般的IBM机器,不管是386,486,只要是dos操作系统,实际能操作的内存只是640K,相当于一个较快的PC机。想要用到640K以外的extend memory,只有用protect mode才能用上,我打算换286,还是想用多于640K的内存。这就要有比现在的C更好的编程工具。当然,我也不一定要用到保护方式,有各种EMS软件,不过我还是想往多里捞摸,多留一手。MSC我只见过5.0版,7.0版的性能还不知道。不过我猜现在流行的C应该有这些手段,到这时候了。 我有一段时间很关心personal computer的发展,属于想玩玩不到过干瘾的那种。这路东西的发展都是由处理机片芯的发展开始。从8088到286,386看文献就知道快了很多。从实用的角度来看,286多了虚存保护,386又多了很多用户多任务手段。486据说把386,387,和64K的高速缓存集成到一个片子上,不但整数运算快,浮点也快多了。不过不做科学运算,意义就小了。586还不知道是个什么东西,想必有惊人之处。不过到了我手上用作文字处理,也是暴殄天物。我有个286用用就算行了。太好的东西我也使不出来。 听说美国微机多媒体搞得甚火,微机接电视,音响,video等等。这玩艺听上去倒是蛮有意思的。

  • 微软的windows 95直到1995年发布以后,才成为了真正意义上的图形界面的操作系统,有了图形用户界面
  • Linux 的第一个版本在 1991 年发布
  • 王小波那年用的还是 DOS 操作系统

1992.10

当时不知道你为什么这么干,原来是机器坏了。居然叫人敲去150dollars,老兄真是有钱。这种事叫我遇上,肯定自己修了。现在的微机修理都是换线换板,机器一坏,先找块表量量是不是电源坏了。只要不是电源坏,估摸是哪部分不好,就去买块版换上。送出去也是这么修,还要敲你手工钱。我看150什么板子都能买来。万一自己故障没找对,就说人家的板子不好,退给他。我的机器里什么牌子的板子都有了,都像你那样挨人敲,还玩得起吗?这么弄,还能有点乐趣。比方说,你爱486,就去买块486主机板,把自己的主机板换下来,这种搞法不怕杂牌水货,坏了再换,反正便宜。我的问题在于这么搞都搞不起。

我现在从我哥哥那里弄了一套TurboC++,软件方面暂时没有问题了。只是286还没买,因为听说中国要加入关贸总协定,这类东西要掉价;有钱先买家具。无论如何,我是用不到486的,因为要286也不是为了追求高速度,主要是要解决内存问题。我现在软件写得出神入化,大概8088上能做到的一切,我都做到了。自己觉得该告一段落,去写小说了。

  • 是的,王小波对计算机硬件也有很多了解
  • C++ 90 年代才有了第一次标准化,王小波 92 年开始玩 C++了。

1992.11

先有朋友把你寄来的软盘倒了一下,看看是数字,就没动它。记得原来有一套干这种事的软件,是你给的,但是盘坏过,再也找不到了。今天写了个小程序倒出来,拜读了大作,甚是有趣。

1993.03

我终于下决心买了一台286,这些日子在改造软件,作了不少汇编工作。其核心是它在虚拟保护方式(virtual address protected)下工作,以便利扩展内存(expanded memory)。现在终于完全成功,我的软件现在可以编辑400K长的文件,可以把一部长篇小说全部调到内存里编写了。只可惜我这个机器还是低级,只有1M RAM,并且没有硬盘,所以也就到此为止了。这个程序的缺点是太低级,有大量对端口(port)的操作,虽然效率是高的,兼容性不会太好。我的XT机给山妻用了,算起来我用那台机器已经七年,就如一位老友,骤然割爱,如心头割肉。

年份不详

我们的pc机还没有和Internet连上。本来中国有几个国内网发展得很快,现在又出了问题,谁要上Internet,必须到有关部门去登记,留个案底,以备当局监控,很有一点监狱的气味。我还不想找这份麻烦,再说,通过Chinanet联网,每月也要交七八百的月费,我也没有这么多的钱。既然×反对信息时代,我们就不进这个时代罢,有什么法子。所以还是写信好了。

写在后面

我是跪着一条一条读着一条有一条的书信的,里面出现了太多太多的熟悉的名词。涉及到基础的数据结构 B 树,涉及到基本的编程语言,涉及到从 8086 到 80286 兼容的保护模式,扩展内存,涉及到统计学分布知识。

这些,都是媒体上广为传播他和李银河美丽爱情同时发生的事情(为什么媒体就知道炒那些爱情故事呢,王小波这么多的传奇都不说一下)

本科的时候草草翻过他的杂文集,当时就觉得很有趣,但是小说没太看懂。我觉得,是时候重新认识王小波了,过段时间再把他的书找回来读一读。

参考资料