Skip to content

Latest commit

 

History

History

foreword

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

序的作者 Alan J. Perlis 因其在 Algol 语言的贡献,获得首届(1966 年)图灵奖。在 1960 年,Alan 发表了 Algol 60 的报告。Algol 表示 ALGOrithmic Language,在 1960 年发布,因而叫 Algol 60。Algol 60 前身叫 Algol 58,在 1958 年发布。 Algol 60 是程序设计语言发展史上的一个里程碑,它标志着程序设计语言成为一门独立的科学学科。

有另外几个图灵奖得主跟 Algol 有关,John Backus(Fortran 发明人,1977 年图灵奖)在 Algol 58 的报告中初次使用 BNF 范式。Peter Naur(2005 年图灵奖)参与 Algol 60 开发,改进了 BNF 范式,用在 Algol 60 的报告中。Edsger W. Dijkstra(1972 年图灵奖)实现了第一个 Algol 60 的编译器。

Algol 60 影响了很多编程语言。序言中有提到

在语义结构上,Scheme 更接近于 Algol 60 而不是早期的 Lisp。Algol 60 已经不可能再变为活的语言了,但它还活在 Scheme 和 Pascal 的基因里。


本书中要讨论的各种问题都牵渉到三类需要关注的对象:人的大脑、计算机程序的集合以及计算机本身。

分析和理解问题,在头脑中抽象出概念模型,通过程序去表达头脑中的概念,计算机执行程序。在此过程中,会对问题有更深的理解,对头脑中的概念对应修正和完善,进而修改程序。


每个读者都应该反复地问自己“到哪里才是头儿,到哪里才是头儿?”——但是不要问得过于频繁,以免忽略了程序设计的乐趣,使自己陷入一种喜忧参半的呆滞状态中。

联想到 “怕什么真理无穷,进一寸有一寸的欢喜” 这句话。


Pascal是为了建造金字塔——壮丽辉煌、令人震憾,是由各就其位的沉重巨石筑起的静态结构。而Lisp则是为了构造有机体——同样的壮丽辉煌并令人震憾。

一个精妙的比喻,静态语言和动态语言的两个极端。Lisp 程序更容易演化。MIT 的文化是偏 Lisp 这一边的,开发过 Lisp Machine。


发明并调整,调整恰当后再去发明!让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的 Lisp 程序员。

Invent and fit; have fits and reinvent! We toast the Lisp programmer who pens his thoughts within nests of parentheses.

Invent and fit; have fits and reinvent! 表达了 REPL 的思想。REPL 最早用于描述 Lisp Machine 的交互环境,现在是脚本语言的标配。

Lisp 有很多括号。有个笑话是,一个黑客说自己从 NASA 的主机盗取了一个用 Lisp 编写的核心程序,为了证明自己说的是真话,他打印出了程序的最后一页:

))))))))))))))))))))))))))))) 
)))))))) 
)))))))))))))))))))))))))))))))))))))))) 
)))))))))))))))))))))))))))))))) 

英文原文中的 pens 是用笔书写的意思,程序是一种表达方式,用 Lisp 书写头脑中的思想。中文丢失了这个隐含意思。

第1版前言

引言作者 Marvin Minsky(1969 年图灵奖) 是人工智能先驱,跟 John McCarthy(Lisp 发明人,1971 年图灵奖)一起创建了 MIT 人工智能实验室。

要理解媒介(Medium)这个词。

我们头脑中有某种想法,想将其传递给其他人。但我们并不能直接读取思想,只能将思想用某种媒介表达出来,其他人读取这个媒介,在头脑中重新构成这个想法。A 将想法,编码到媒介,通过某种方法将媒介传给 B,B 解码媒介,将想法还原出来。Medium 这个词,本身就有中间过程的意思。

有什么可用于表达思想的媒介呢,有口语、文字、数学公式、绘画、音乐。这篇前言中,强调程序设计也是一种表达思想的媒介。

一个计算机语言并不仅仅是让计算机去执行操作的一种方式,更重要的,它是一种表述有关方法学的思想的新颖的形式化媒介。因此,程序必须写得能够供人们阅读,偶尔地去供计算机执行。