谷动谷力

标题: 中国第一代程序员王小波,最会编程的作家 [打印本页]

作者: 鸣涧    时间: 2022-8-5 21:31
标题: 中国第一代程序员王小波,最会编程的作家
中国第一代程序员王小波,最会编程的作家

今天是著名作家王小波逝世24周年的日子。大家都知道王小波是作家,却很少有人知道他是个程序员。很多人都听过那句“你好哇,李银河。”却不知道程序员人生中第一个代码是“Hello world”。但写出:“那一天我21岁,在我人生中的黄金时代。我有好多奢望,我想爱,想吃,还想在一瞬间变成天上半明半暗的云”的就是那个特立独行的且会自己写程序的王小波。

“我闲着没事搞了个发明。”1991年5月,王小波在自己的博客上写下了这句话。他可能是中国最早写科技博客的人,也是中国第一代程序员。
他的这个发明,是自行研发的输入法。这只是王小波所写的软件之一,他对自己写的软件很得意:我现在软件写得出神入化,并做出了各种写小说的工具,别人的软件已不用了。

他就是用这套软件写出了名垂中国当代文学史的《王二风流史》和《红拂夜奔》。
王小波大学在人大学的是贸易,毕业后在人大当了几年老师,后来去了美国匹茨堡大学读经济的研究生。学成归国,王小波接着又回到人大做统计学的讲师。

因为做统计,各种分析工具是必不可少的,以前人手工计算,有了计算机当然最好使用计算机。

90年的时候,软件相当稀缺,电脑又相当不智能。王小波不得不自己写软件,当然开发软件也不是那么简单,所以他先是学会了FORTRAN,汇编,C等各种语言,接着又要学习数据结构,算法的相关知识,还有编译原理。

在做出中文编辑器和输入法,解决了自己的需求之后,王小波对写软件的兴趣已经没有多少了。因为他觉得写软件可以赚钱,写小说同样也可以赚钱。出于一个程序员的修养,王小波还是不断地从数据结构和算法来优化这两个软件。

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

以下内容是从王小波和朋友的书信里收集了他所做软件的各种信息,汇集起来,可以了解小波在软件方面的造诣。
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连上。通过Chinanet联网,每月也要交七八百的月费,我也没有这么多的钱。所以还是写信好了。
-END-



0.jpg (497 Bytes, 下载次数: 103)

0.jpg





欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2