写点什么

小波从此逝,江海寄余生,不但是文坛巨擘还是不世出的编程奇才,王小波离世 25 周年

  • 2022 年 4 月 11 日
  • 本文字数:3124 字

    阅读完需:约 10 分钟

小波从此逝,江海寄余生,不但是文坛巨擘还是不世出的编程奇才,王小波离世25周年

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_211


二十五年前的今天,王小波先生因病于北京逝世,享年四十四周岁。喜爱他的人,都知道他是一个特立独行的人,拥有谦虚与自豪并存的强大气质,并且留下无数传世作品,无可争议的文坛巨擘,他的力量、有趣,对媚众形式束缚的反抗,以及一以贯之的,对待生活无比真诚的态度都让我们为之倾倒。


然而,鲜为人知的是,他不仅仅在文学上造诣非凡,与此同时,他还是一位不世出的编程奇才。在整个九十年代,除了和文字跳舞,王小波还将他的才华通过键盘喷涌而出,天才的脑细胞幻化为一行一行的代码, 挥洒自如,回转如意。王小波在编程领域的惊人艺业,我们也许可以通过他的书信以及著作中的内容略窥一二。


1988 年 12 月,致好友刘晓阳:


回来之前我曾往人大一分校计算机站写过一封信,问他们可要带什么软件,主管的工程师回了封信,我没收到。回来之后人家还提到此事。现在国内软件一面混乱,又逐渐有形成市场之势。首先以年兄学统计这一事实来看,回来做事非有会用的软件不可。

Macintosh 根本就没打进中国市场,你非带几个可用的 IBM 微机软件回来不可。至于什么机器上能使倒不必太担心。我这个狗屁计算机室,IBMPS/2 就有二台。AT 机也不少。SAS SPSS Statistx 都有,可代表国内上等一般统计微机房的水平,可就是少了一种宜于作统计的语言。

年兄如有 APL(A Programming Language)之 IBM 微机本,可给我寄 copy 来。我在美还有一个户头,连 manual 复印费一并写支票给你们。Glim 我也没有,如年兄有便人可捎来。邮寄太贵,能省就省吧。


Macintosh 就是苹果电脑,1998 年后多被简称为 Mac,可见在八十年代刘晓阳就已经用上 mac 电脑了,但是国内还是以 IBM 计算机为主流。


信中提到的 SAS,SPSS,Statistx,Glim 都是统计学软件,其中 SAS 作为商业软件到现在依然被普遍使用。


而值得一提的是,APL (A Programming Language)是一个对二十一世纪的程序员来说不太寻常的计算机语言,APL 最著名的就是它使用一组非 ASCII 符号。这些符号比一般常见的代数和计算符号要多。有人开玩笑说,用两行这样的奇形怪状的符号就可以将所有航空控制的问题解决了。事实上,在一些 APL 版本中,用一行代码就可以将任何可计算的函数表达出来,再用一行代码就可以将这个函数的结构表达出来。由于它的精密的结构和非标准的符号,也有人将 APL 称为“只写语言”。除数学家外,其他人要读 APL 写的程序都感到非常困难。有些数学家觉得其它语言比 APL 难懂。由于 APL 使用不寻常的符号,许多专业程序员在写 APL 程序时使用专门的 APL 键盘。而王小波在八十年代就开始使用 APL 进行编程了。



1990 年 1 月,致好友刘晓阳:


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


整个八十年代,国内普通用户很难连上互联网,所以学习语言只能看书, 信中提到的 S 语言 是 1976 年由贝尔实验室设计的统计学编程语言。不过王小波提到的 S 语言可能指的是 1988 年以后的新版 S 语言。二十一世纪,在统计学领域中被广泛使用的 R 语言 是 S 语言的后继者。


R 语言递归实现斐波那契:


recurse_fibonacci <- function(n) {    if(n <= 1) {      return(n)    } else {      return(recurse_fibonacci(n-1) + recurse_fibonacci(n-2))    }  }
复制代码


1991 年 3 月,致好友刘晓阳:


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


信中提到的严氏 2.0 应该是当时某个中文输入和处理的软件。因为在其他信件中,王小波提到的 “WK” 是对严氏的仿制,而 WK 是王小波用 C 语言实现的,用来在电脑上写小说。


这里王小波提到 WK 用 B 树实现了词组查询,应该是为了方便自己中文常用词组输入。事实上,在那个年代,懂得用 B-tree 优化查找效率的人应该是凤毛麟角,而王小波恰恰是其中一位,这说明王小波在 90 年代初就懂得使用算法和数据结构来优化自己的程序了,他可能不会想到,2022 年的今天,会有数以万计的程序员会在一个叫做 leetcode 的平台上苦练算法和数据机构,以期一个研发职位。



1992 年 1 月,致好友刘晓阳:


编译程序一盘(有说明书,见 shou),源程序一盘。我的音典与严氏同名内容不同。功能上与严氏的近似,但是多了改进拼音字典的功能。按 F4 后可以把拼音重定义。也可加字,在拼音拣字时,按 enter,就进入国标拣字,拣到的字加入字典。 这个软件由五个 c 语言(另有两个头文件)和一个汇编语言文件组成,可用 turboc 编译。

假如你用过其它 c 软件,有一点要提醒你,turbo.c 有一种极讨厌的特性,就是你在一个函数内 alloc 的内存,退出该函数时不会自动释放;还有一点也很糟,就是模型问题,在大模型下写的程序,到了小模型上一概不能用,我的程序是在 compact 模型下写的,就不能用 small 来编译,这两条是可以气死人的。据说可以用 far,near 之类的前缀说明指针,其实是屁用不管。我干了一年多 c,得到的结论是微机 c 还不能使人快乐,有时叫人怀念汇编。


这封信他提到 WK 要用 Turbo C 这个 C 编译器来构建。Turbo C 是 Borland 公司 1987 年发布的 C 语言集成开发环境,Turbo C 这样的老 C 编译器是面向 DOS 的,因此提供了不同的内存模式。简单来说就是不同模式下指针基础偏移不同,compact 中的指针在 small 环境下可能会指向错误的地址,所以“大模型下写的程序,到了小模型上一概不能用”。现代程序员如果在应用层开发功能,底层只需要考虑内存溢出问题,而在那个遥远的年代,程序员不仅仅需要考虑整体内存容量问题,还需要解决内存单位的布局问题,这对于现代程序员来说,其复杂度是难以想象的。


最后,王小波在其著作《革命时期的爱情》第三章第四节有如下记述:


锁在房子里时,精力能够集中。所以我编的第一批软件极有诗意。

李后主有词云: 红豆啄残鹦鹉粒。 我的软件就曲折和弹性而言,达到了此句的境界。

后主又有残句云: 细雨流湿光。

我的软件就有这么简约,别人编十行,我只用一行。等到交活时,教授看了吃一惊:这么短!能跑(run)吗?我说你试试嘛。试完了他和我握手道:谢谢!但是到了开支时,我的钱比别人都少。原来是按行算钱,真把我气死了。

等到交第二批软件时,我就吃棉花屙线屎。

古诗云: 一个和尚独自归, 关门闭户掩柴扉。

我的第二批软件到了这种境界。简言之,别人编一行,我就编了二十行。等到交活时,教授根本不问能不能 run,只说:你这是捣蛋!就打回来让我改短。

资本主义就是这么虚伪。等到拿了学位,我毫不犹豫就回国来。这是因为我从骨子里来说是个浪漫诗人,作画时是个颜色诗人,写程序时是个软件诗人。干瘪无味的资本主义社会哪里容得下浪漫诗人。


这一段简直就是现代编码风格的圭臬,戏谑和深刻齐飞,让人忍俊不禁,乐而忘返。能将感性的唐诗宋词和理性的机械代码相结合,还出落的如羚羊挂角无迹可寻的圆润,恐怕,普天之下,也只有王小波可以做到了。


结语:


他拥有诗意而有趣的灵魂,他用文字对抗虚无,他用代码实现理念, 他用行动践行了自己的誓言,并一直战斗到死。他的身前是万家灯火,他的身后是繁星闪烁,我们都在守候,我们却又都在送别,小波从此逝,江海寄余生。


原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_211

发布于: 刚刚阅读数: 3
用户头像

专注技术,凝聚意志,解决问题 v3u.cn 2020.12.21 加入

还未添加个人简介

评论

发布
暂无评论
小波从此逝,江海寄余生,不但是文坛巨擘还是不世出的编程奇才,王小波离世25周年_编码习惯_刘悦的技术博客_InfoQ写作平台