乐趣区

关于编程:小波从此逝江海寄余生不但是文坛巨擘还是不世出的编程奇才王小波离世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

退出移动版