田春:走在Lisp的岔路上图灵访谈

图灵社区:你好,田春,可能大家更熟悉的还是你的网名“冰河”,先向社区的读者介绍一下自己,好吗?

田春:大家好。首先,关于敝人的网名,其实是自小学起就在使用的笔名或昵称,只是一个名字而已。但需要解释的是,敝人跟传说中的冰河木马没有任何关系,重名纯属巧合。

我从小学五年级开始学习计算机,早年在NOI信息学竞赛上只有一点小成绩,初高中阶段沉迷游戏和DOS/Windows编程,学习成绩很一般,高考时超常发挥才有幸考入浙大一个非计算机专业。大学期间自学了包括Linux和Lisp在内的多种计算机知识,毕业后凭借在校期间Linux方面的声望进入网易公司从事系统管理,工作期间继续学习CommonLisp,在该领域写过开源项目、发表过国际会议论文、翻译过经典英文教材,最后因机缘巧合接触到国外的古老商业Lisp软件,经过两年多的努力,目前以维护该软件为生。

田春:在我计算机生涯的前十年,其实完全没有想过将来会以此谋生。我选择计算机领域的具体学习方向几乎完全是兴趣导向的。早期的时候,信息相对封闭,我和当时其他同行一样走的是从DOS到Windows,从BASIC到C或Pascal再到VisualStudio系列,这样一个循规蹈矩的学习路线。后来到杭州读大学,不久就开始学习Linux和Lisp。

我的Lisp经历可以分为N个阶段:

1)人工智能编程语言阶段——小学五年级和六年级。那时有一本书,叫做《计算机应用指南》,里面讲述了1994年时整个计算机领域的状况,其中“人工智能与专家系统”那章里着重强调了Lisp和Prolog这两种AI语言的应用。这是我最早的Lisp印象。

2)GNU和Emacs阶段——大学第一年。GNU工程的创始人R.Stallman早独立完成了两大自由软件:GCC和Emacs,后者使用一种EmacsLisp语言来扩展Emacs环境。Stallman本身也是Lisp黑客,在Lisp机上写过真正的Lisp程序,还参与过CommonLisp语言第一版(CLTL1)的标准制订工作。按理说所有学习Linux的人都多少会受到一些Lisp方面的熏陶,遗憾的是,最终多数人只是停留在Emacs和elisp层面上,我算是少数顺着这条Lisp道路一直走向终极(CommonLisp)的那些人。

3)Scheme阶段——大学的第三年。通过SICP一书和MITOpenCourseWare的配套视频来学习,那个时候广泛接触了Linux系统自带的各种Scheme软件包,在学习计算机一般理论的同时学习Scheme语言。我逐渐发现Scheme语言本身太简单了,具体的实现又非常多,互相之间区别很大。很多人最终停留在Scheme阶段,其中少数有能力的人又自己创造了许多新的Scheme实现。但我没有停下来,继续向前走。

4)CommonLisp阶段I——大学第三年晚期和第四年。学习Debian系统自带的onlisp和*CommonLisptheLanguage*电子书,然后用Debian自带的CMUCommonLisp,SteelBankCommonLisp,GNUCommonLisp以及GNUCLISP等环境来进行CommonLisp编程实践。

Debian里还有几个很大的CommonLisp写出的软件,包括Maxima和Axiom两种数学符号计算系统。CMUCommonLisp(cmucl)的软件包文档里有TheEvolutionofLisp这篇著名的论文。我读完以后,顺藤摸瓜通过学校内网的ACMDigitalLibrary等论文渠道,把关于Lisp语言发展史的关键论文几乎全看了一遍。不过,这个时候还没写出一个像样的CommonLisp程序,完全是在学习。

5)CommonLisp阶段II——主要是发起自己的开源项目(cl-net-snmp),试图翻译各种Lisp资料——最主要的就是OnLisp一书。我认为这是一个领域的新手通常会做的两件事。

我现在处在一个新的阶段,并且也走向了Lisp领域一条冷门的岔路上:维护前人留下的古老商业Lisp软件。我不认为这是一条终极道路,相反这是一条歧途,但我必须去做,因为如果我不做的话,这些有价值的东西就可能失传。我现在的工作与其说是为了谋生和个人兴趣,还不如说是像一个历史学家一样,在努力地行使保护历史文物的职责。Lisp领域可谓是浩如烟海,没有其他任何语言具有像Lisp这样的深度和广度,也没有哪个语言的程序员可以像Lisp程序员那样热爱自己的语言。这是我的观点,但它的真正内涵需要人们自己去体会。

图灵社区:关于编程语言的学习,你有一个很有意思的观点——C和Lisp是编程语言的两个极端。可否就此谈谈,并对如何学习编程语言提供一些建议?

“我认为目前为止只有两种真正干净利落,始终如一的编程模式:C语言模式和Lisp语言模式。此二者就像两座高地,在它们中间是尤如沼泽的低地。随着计算机变得越来越强大,新开发的语言一直在坚定地趋向于Lisp模式。二十年来,开发新编程语言的一个流行的秘决是,取C语言的计算模式,逐渐地往上加Lisp模式的特性,例如运行时类型和无用单元收集。”

我是在同意PaulGraham的上述观点的基础上,做出了“C和Lisp是编程语言的两个极端”这一评价的。但我的依据除了两种语言的语法风格迥异以外,还考虑了C程序和Lisp程序截然不同的运行方式:C程序总是一些零零散散的独立可执行文件,由操作系统把它们拼接在一起;而Lisp程序本质上是对Lisp环境和Lisp语言本身的扩展,Lisp环境就像一个虚拟机一样,行使着操作系统的职责,把其中加载的所有Lisp代码运行起来(Emacs又何尝不是如此呢)。纵观其他所有语言,我看不出还有本质上的第三种方式了。

图灵社区:我们知道CommonLisp是Lisp的一门方言,对这门方言的实际应用和未来前景,你有什么看法呢?

田春:CommonLisp是Lisp语言家族中唯一具有工业强度的大型语言,它本身就是为了把之前所有真正用来一般性软件的Lisp语言统一起来,尽量兼容它们并消除不一致的地方,最后得到一个完美的集大成体。这个目标事实上确实实现了。1991年,CommonLisp发布第一版,至今所有代码几乎可以不经任何修改,就运行在目前还在流行的至少10种不同的CommonLisp环境上,整整二十年来Lisp程序员的成果一直可以正常运行,这对Lisp程序员无疑是一种巨大的鼓励。相比之下,其他的语言要么消失了,要么已被改得面目全非。

我的看法是,一个追求卓越的程序员应该广泛尝试多种语言,但如何他真的这样做了,他一定会在遇到CommonLisp时停下来,因为他发现这门语言是最强的,也是最美的,并且学习过程也是最艰难的,艰难到以至于学成之后,再没有精力也没有必要去学其他语言了。然后他就会想尽办法让一切编程事务都用CommonLisp来做,最后会奇迹般地发现CommonLisp什么都可以干,而且没有哪个领域是干不了的,甚至于没有哪个领域是尚未有Lisp程序员踏足的。

至于前景,就像我在《实用CommonLisp编程》一书译者序里表达的:一门语言能安全地存活50年,那么它就一定可以存活100年。人生宝贵,如果希望自己的劳动成果长久流传于世,那么选用CommonLisp来表达自己的思想是最稳妥的。

图灵社区:《实用CommonLisp编程》的作者,强调了Lisp的“可编程性”和“适合探索性编程”。就这本书,他是如何体现这些特色的?这些带来怎样的阅读体验呢?

田春:主要体现在贯穿于书中的实践性章节里。在很多其他语言的类似实践性章节里,可能是把程序的最终版本逐个部分地向读者做解释,比如这个函数将会完成哪些功能,那个类是做什么用的,诸如此类。但在学习者把所有代码输入电脑之前,程序是几乎跑不起来的。而在《实用CommonLisp编程》一书里,作者借助Lisp语言本身的强大优势,采用真正的循序渐进教学法:每一个函数,都从直接可以运行并完成实际功能的简单版本开始,然后再根据逐渐复杂的需求被不断改写;或者单个函数规模变大以后,再添加新的子函数,诸如此类。这样能够确保学习者每次都能取得阶段性成果,同时演示了Lisp程序员们真正写程序时,是如何从零开始,边设计边施工,最后一路积累千上万行代码的。

我自己也写过超过1万行代码规模的cl-net-snmp项目——一个完整的SNMP协议实现。在这个项目里,我甚至做出了MIB编译器,把MIB定义转译成Lisp,然后要么解释要么编译加载。这个项目就是从零开始,先解决ASN.1各种基本数据类型的BER编解码,然后封装SNMP数据包,再做MIB的语法解析,直到整个服务器和客户端都正常跑起来。CommonLisp开源社区的同行对我的成果极为称赞,虽然我的代码质量和程序效率还不行,但人们普遍惊讶我可以用Lisp,将一个看似简单的网络协议以最复杂也最贴近Lisp的方式成功实现。学完这本书的实践部分,就可以掌握编写Lisp程序的正统思路。然后无论多么复杂的程序,都可以用同样的思路逐渐写出来。

图灵社区:能不能向有志于学习CommonLisp的初学者,介绍一些网络资源呢?

田春:所有最重要的网络资源,都写在这本书的最后一章里。但我认为对于初学者来说,看书是最重要的。CommonLisptheLanguage(CLTL2)是最重要的CommonLisp语言大全。说起来,《实用CommonLisp编程》一书只涵盖整个语言不到一半的特性。要想写出最专业的代码,必须了解并且灵活组合运用这门语言所给予程序员的所有东西。因此CLTL2是一定要看完的,遗憾的是仔细看完这本书至少需要半年。

无论如何,我不推荐人们过早地去参与各种线上讨论,因为Lisp社区对新手并不友好,国外的社区尤其是这样,贸然去问各种无聊的问题只会自取其辱。

图灵社区:跟你合作本书的过程中,图灵的编辑都获益良多。在这次的合作之后,你对技术图书的出版,又有哪些看法和建议呢?

田春:这本书得以顺利出版,还是要感谢图灵的编辑们的。尽管这本书8月份的时候离出版还遥遥无期,我当时采取了一个手段威胁你们(笑)。不过,有几点我还是不太满意的:一是排版用Word太不专业,推荐用LaTex排版;二是这本书的最后没有索引,其实索引对这本书比较重要,因为所有粗体的字都是CommonLisp的关键字,写代码的人想用某个语句的时候,可以通过索引来查询;三是出版周期还是太长。

对话国外知名技术作者,讲述国内码农精彩人生。你听得见他们,他们也听得见你。

THE END
1.100本Python精品书籍(附pdf电子书下载)python核心编程pdf电子书 python核心编程第三版中文版PDF,python进阶教程,包含正则,网络编程,数据库编程,GUI,Django,爬虫,云计算假设等内容,实乃居家旅行,疯狂写码,必备良书! Python是一种不复杂但很健全的编程语言。它不光具备传统编译型程序设计语言强大的功能和复杂性,还在某种程度上具备比较简单的脚本和解释型程序https://www.bilibili.com/read/cv35022334
2.13个免费电子书下载网站,实现阅读自由!安全非常良心的是,图灵社区除了提供电子书的下载地址,同时还提供了纸质书的购买链接,收录的图书虽然只有几千本,不过每本都是高清版,非常良心。 3.淘链客 这是一个主要收集文档类资源下载链接的聚合型搜索引擎网站,它的高校教科书资源非常丰富,也收集大量的优秀论文,非常适合大学生群体下载资料。 http://www.seoxiehui.cn/article-492627-1.html
3.绝对干货!42个国内外免费电子书资源网站合集免费的线上繁体中文图书馆,可在线阅读及下载,可下载的格式有:updb,pdb,prc,epub。 7、图灵社区 网址:http://www.ituring.com.cn/ 图灵社区主要专注于科技书籍的出版,包括计算机、数学统计、科普等领域,提供免费和付费的电子书。用户可以使用网银或者支付宝的购买方式,大部分电子书同时提供了三种阅读方式:在线阅读、https://www.douban.com/note/720494185
4.干货推荐!程序员必备的13个免费技术电子书网站51CTO博客每日都会有电子书更新,通过网盘下载,也是我最常用的之一 6、图灵社区 传送门:https://www.ituring.com.cn 专为码农提供的电子书下载网站,有些是需要付费的,有些是免费的 很多小伙伴还是有一个问题:我就想看那些收费的电子书怎么办? 7、冰点文库 冰点文库可以无积分、免登陆自由下载百度文库、豆丁网、丁香网、https://blog.51cto.com/u_14787961/3199526
5.2024最全国内外免费电子书资源网站汇总11.图灵社区 网站地址:https://m.ituring.com.cn/ 图灵社区主要专注于科技书籍的出版,包括计算机、数学统计、科普等领域,提供免费和付费的电子书。用户可以使用网银或者支付宝的购买方式,大部分电子书同时提供了三种阅读方式:在线阅读、MOBI 推送、PDF 下载,部分书籍只提供其中部分格式。 12.Mox-moe 网站地址:httpshttps://www.extrabux.cn/chs/guide/6812927
6.十八书屋网站自由阅读的小说网大金号免费的在线繁体中文图书馆,可以在线阅读和下载。可下载的格式有:updb、pdb、prc、epub。 7.图灵社区 网站:http://www.ituring.com.cn/ 图灵社区主要专注于科技图书的出版,包括计算机、数理统计、科普等领域,提供免费和付费电子书。用户可以使用网上银行或支付宝。大多数电子书同时提供三种阅读方式:在线阅读、MOBI推送https://www.rzrc.com.cn/dj/772002.html
7.喜欢的5大编程资源下载网站,一般人不知道!图灵社区编程电子书种类丰富,包含了Python、JavaScript、机器学习、Java、算法、数学、C语言、 Linux等。 其中,有些电子可以在线阅读,有些可以直接免费下载。 3、Csdn CSDN包含了多种下载,比如文档类下载、工具类下载、代码类下载。 不少的经典的编程电子书都可以在这上面下载。 https://cloud.tencent.com/developer/news/187456
8.图灵社区:图书:电子书内容简介:本书全面介绍了Go语言的特点、安装部署环境、工程规范、工具链、语言语法、并发编程模型以及在多个编程实战中的应用,重点阐述了Go语言并发编程模型和机制。本书共分为四个部分,介绍了Go语言编程环境搭建、Go语言基础编程、Go语言并发编程方法及其原理,以及使用Go语言开发[…] http://www.360doc.com/content/15/0310/19/5147242_454119748.shtml
9.有了这十二个电子书资源99%的书都可以找到哈喽比特这里的电子书籍可以直接保存到百度网盘, 阿里云盘, 然后通过云盘直接阅读, 或者下载到Kindle和手机里面, 没有广告。 图灵社区 计算机方面的书籍比较多, 理工男不要错过了, Kindle格式的电子书, 支持分类搜索, 有免费和收费, 自行选择。 Kindle漫画 非常好的一个漫画更新网址, 追漫画可以看这里, 有中文, 日文, 英https://www.codingsky.com/m/news/2022-02-10/157007.html
10.全网最全程序员学习网站汇总,还不赶快收藏地址:图灵社区 简介:书籍比较全面的图书社区,电子书的价格是纸质书的一半。 推荐指数:? 2、博文视点 地址:博文视点 简介:博文视点也是有少量好书的。 推荐指数: 3、书栈网 地址:书栈网 简介:电子书门类比较全,支持在线查看和下载。 https://www.songma.com/news/txtlist_i66992v.html
11.图灵社区综合性的科技社区和在线学习平台图灵社区还设有多个社交媒体账号,如微博和微信公众号,用于发布好书、活动播报和电子书消息等内容。此外,读者可以通过电子邮件联系编辑或译者,也可以在图灵社区参与讨论。 总之,图灵社区不仅提供丰富的技术资源和学习机会,还为读者提供了便捷的交流平台和自出版的机会,是一个集电子书发售、在线写作、读者互动于一体的综合https://www.bgrdh.com/sites/9303.html
12.图灵社区的微博ü 简介: 【图灵电子书】上线啦 http://www.ituring.com.cn/book/ebook?sort=updated【图灵教育】微信号@turingbooks T 友情链接 图灵社区 图灵社区纸质书预售 图灵最新电子书 成为作者 诚招译者 图灵社区免费电子书 更多a 直属机构 图灵文化 国内优秀的IT图书出版商。业务涵盖外版书翻译、 +关https://weibo.com/ituring
13.建议收藏22个适合程序员多逛逛的网站1、图灵社区 网站地址:https://www.ituring.com.cn/ 网站简介:该网站能够下载编程书籍种类丰富,Java、算法、JavaScript、机器学习、C语言、Linux、Python等领域的电子书。部分全部免费下载。 2、摩鸠搜书 网站地址:https://www.jiumodiary.com/ 网站简介:摩鸠搜书也是搜索书籍的好去处。 https://blog.csdn.net/o9109003234/article/details/109281746
14.深度学习高手笔记卷1:基础算法微信扫码关注【异步社区】微信公众号,回复“e59609”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。 内容提要 本书通过扎实、详细的内容和清晰的结构,从算法理论、算法源码、实验结果等方面对深度学习算法进行分析和介绍。本书共三篇,第一篇主要介绍深度学习在计算机视觉方向的一些卷积神经网络,从https://www.epubit.com/bookDetails?id=UB7d8623610d375
15.图灵社区没kindle怎么办可以用邮箱推送至手机或平板查看,mboi格式文件不止kindle电子书能阅读,手机静读天下专业版APP也能够阅读。首先在图灵社区“个人信息”一栏中填写您的“推送邮箱”。 注意,现在只能填写普通邮箱,无法支持kindle邮箱。网页右上角“我的空间”。。然后点击“会员信息”-“修改信息“。填写推送邮箱。然后在https://zhidao.baidu.com/question/1861602892378063587.html