原文转载自「刘悦的技术博客」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