2. 前言

小技巧

这篇前言在第二版及第三版的《The Little LISPer》中出现过。

我们经过作者的允许,将之放在了本书里。

PS:

《The Little LISPer》为《The Little Schemer》的前身。

在1976年,我参加了一门摄影入门课程。大部分学生(包括我自己)学这门课程的原因是希望自己能够富有创造力,比如拍出我所景仰的艺术家Edward Weston水准的照片。在第一天,老师耐心的罗列并解释了他将在这学期要教授我们的一长串摄影技巧。其中一个重点是 亚当斯区域曝光理论(Ansel Adams’ “Zone System”) ,用来预视觉化(previsualizing, 在影片抓取前初步生成影片拍摄镜头或者序列镜头的预览效果) 打印值(最后成像的光量),并且知道如何从拍摄场景中的光强获取该值。想要掌握这种技巧,我们必须学会使用曝光表(测光表)测量光强、控制曝光时长、控制冲洗时间来控制图片的黑标准和对比度。但是这些技巧又需要更底层的技巧的支撑,比如:装胶卷、冲洗、打印和各种混合化学试剂。一个人必须需要花费数年的时间持之以恒地练习冲洗感光胶卷,才能达到稳定一致的冲洗效果。还记得我第一次专注投入的实验课程,最终就记得滑滑的显影剂和恶心的定影剂。

那关于创造力呢?为了能够有创造力,一个人必须要掌握产生创造力的媒介。就像一个人连拍张照片的技能都没有,那他甚至都不会想到自己要拍出伟大的摄影作品。在工程领域,就像其它富有创造性的艺术一样,我们必须学会系统分析来成就我们的综合成果。就像一个人没有钢筋混凝土的相关知识、足够多的用来计算大桥结构的数学知识,那么他是无论如何都造不出既雄伟又实用的大桥的。类似的,一个人如果对“预视觉化”他所写的代码的执行过程没有深入的理解,那么他也不可能创造出优雅的计算机系统(译者:应该指系统软件)。

一些摄影家在摄影时选择使用8×10的黑白倒影板,另一些却选择35mm的反转片, 其中每一种都有其各自的优缺点。像摄影一样,编程也需要选择媒介。Lisp 就是这样一种媒介,它能够让人享受到自由自在的编程体验。Lisp 最初是用于递归理论和符号代数的理论载体。它现在已经发展成为一个独一无二的强大且灵活的软件开发工具体系,为软件系统的快速原型开发提供了全方位的支持。和其它编程语言一样, Lisp 能够利用社区成员提供的大量的封装好的第三库,就像胶水把东西粘起来一样容易。在 Lisp 中,函数被当作第一类公民,它能够当作参数传入到其它函数,当作其它函数的返回值,或者保存在数据结构里面。这种灵活是无与伦比的,但最重要的是,它提供了形式化、命名、重用(工程设计中必不可少的常见中使用模式)机制。另外, Lisp程序很容易处理Lisp程序的表示形式(译者:应该指语法)。这种特性推动一大堆程序推演与分析结构工具的出现,比如 cross-referencers

The Little LISPer 开辟一条独特的途径来挖掘 Lisp 中隐藏的创造性编程技能。它上手无痛,充满令人深思的智慧,如果要学习用它来构造递归过程和操作递归数据结构则需要大量的钻研和实践。The Little LISPer 对于学习Lisp编程的学生而言, 就像Hanon的指法练习或者Czerny的练习曲对于学钢琴的学生。

注解

本篇翻译部分参考了Z.X.L的 the little schemer 笔记