SICP《计算机程序的结构与解释》序言

教育者、将领、饮食专家、心理学家,以及父母们,皆编程(规划)。士兵、学生和某些社群,皆被编程(规划)。攻克大型问题,要使用一系列程序,其中大部分产生于求解问题的途中。程序充斥着各种状况,于着手的问题,状况各异。编程作为一项智力活动,为了自个儿能领会,你必须开始使用计算机去编程;你必须阅读、书写大量的计算机程序。程序是怎样的,又是干什么的,这些都不大重要。重要的是,执行有多快,在构造更大规模的程序过程中,配合其他程序有多流畅。 程序员必须努力寻求部分的完善性以及整体的融洽性。本书中,”程序设计(program)”一词的使用将集中于程序的创建、执行和研究,这些程序用Lisp方言写就,运行于数字式计算机。使用该方言,不会限制我们的编程范围,这仅是程序的一种描述记号罢了。

纵观本书主旨,我们将涉及三大关键点:人的思维方式,计算机程序集,以及计算机本身。程序皆模型,它诞生于人的心智,是真实世界或精神世界的进程。此些进程,起于人的经验和思考,数目巨大,细节复杂,无论何时,都仅能被部分理解。进程通过计算机程序进行模拟,并不能一劳永逸。即便程序是精雕细琢的离散符号集,是交织嵌套的函数,它们依然需要不断演化:当对模型的理解深化了,扩大了,推广了,我们就修改模型,直到取得相对稳定的状态。接着,又得探寻另一个更好的模型。用计算机编程的欢欣之源,在于思维的不断拓展,在于计算机装置的程序表示,在于其激发的理解力之飞升 。艺术诠释梦想,计算机化用程序,实现梦想!

尽管计算机功能强大,它却是个苛刻的工头。它要求程序必须正确,我们的表述必须精细无误。正如其他使用符号的场合,通过论证,我们也将相信程序的正确性。Lisp本身就能被赋予一套语义(也就是另一个模型),如果将程序的函数加以规范化,那么就能用逻辑学的证明方法——谓词演算,来做经得起考验的论证。遗憾的是,一直以来,程序都在变大、变复杂,规范本身的适用性、兼容性,以及正确性也变得值得怀疑。因此,正确性的完全形式化论证很少出现在大型程序中。由于大型程序源于小程序,那么,建立正确性业已确定的、标准化的程序结构的仓库就显得尤其重要了。我们称其为惯用语。接着学习将其组合成更大型的结构,而这就要利用到有价值的组织技术。这些技术都充分展现在本书中,理解它们,对于投入编程这项创造性事业来说,是不可或缺的。最为重要的是,发现并掌握强有力的组织技术,以增进我们创建大型、重要之程序的能力。反过来说,正是因写大型程序太过费力,才刺激我们去发明新方法,来减少大型程序中的大量函数和细节。

与程序不同,计算机必须遵守物理定律。如果计算机想快速执行——几个纳秒一次状态转换,那么传输的电子就必须限制在小距离内(最多1.5英尺)。热量因大量元器件而产生并汇聚,这必须消除。精湛的工程技艺的开发,平衡了功能多样性与器件密集性间的矛盾。不论何种情况,硬件都比我们所关注的软件工作在更底层。将Lisp程序转换为“机器”程序的过程,本身就是用程序所设计的抽象模型。对此过程的研究和创建,为设计其他模型的相关组织技术提供了大量真知灼见。当然,计算机本身亦能被如此建模。试想:最小的物理开关元件用量子力学建模,量子力学可用微分方程组来描述,微分方程的的细节特性能用数值逼近获得,数值逼近能用计算机上执行的程序来表示,计算机程序由……组成 ,……!

区分上述三大关键点,不仅是为了方法上的便捷。虽然有人说它们皆存于自然人之头脑,但逻辑上的划分导致三者间符号流动的加速。这使得它们的丰富性、鲜活性,以及无限可能性远胜于其在人类实践中的自然演化(Even though, as they say, it's all in the head, this logical separation induces an acceleration of symbolic traffic between these foci whose richness, vitality, and potential is exceeded in human experience only by the evolution of life itself.)。在最好情况下,三者间的关系是相对稳定的。计算机内存永远不够大,计算速度永远不够快。每一次硬件技术的突破都产生更大规模的程序设计产业,产生新的组织技术,产生更丰富的抽象模型。每个读者都应定期反问自己,“到哪儿才是头,到哪才是头?”——但不要问得太频繁,不然这会让你泥淖在悲喜交加之中,从而丧失编程的乐趣。

我们所写的程序中,有些(但不够多)具有精确的数学的功能。比如:数列排序,找出数列中的的最大值,素数检验,或者计算平方根。我们称如上述的程序为算法,其中大量的因其具有最优性能而被大家所熟知,这里要特别提及两个重要性能参数,程序的执行时间和数据存储要求。程序员应该追求良好的算法和惯用法。虽然有些程序难以精确描述,但程序员有责任去估计并不断地设法改进程序的性能。

Lisp是个幸存者,已被使用了约四分之一世纪。在用的语言中,只有Fortran比它久远。这两语言都支持某些重要的应用领域的程序设计需要。Fortran用于科学和工程计算,Lisp用于人工智能。这两领域将一如既往地重要,其中程序员是如此倾心于Lisp和Fortran,以致它们可能继续被活跃使用至少四分之一世纪。

Lisp一直在改变着。本书使用的方言Scheme就是演化自最初的Lisp,并与后者在若干重要方面有所不同,包括变量约束的静态作用域,以及允许函数生成函数作为函数值。在语义结构方面,与早期Lisp族相比,Scheme更加接近于Algol 60。Algol 60再也不能重新流行了,只能存活在Scheme和Pascal的基因里。 比起萦绕其周围的其他语言,很难找到像这样两种语言去更好地沟通两个差异如此之巨大的文化。(It would be difficult to find two languages that are the communicating coin of two more different cultures than those gathered around these two languages.)Pascal是用来建造金字塔的——由大群人推笨重的大石到指定地点,壮丽辉煌、令人震撼、静态的结构。Lisp是用来建造有机体的——由小分队把无数更简单的处于变化之中的有机体安置在指定位置,壮丽辉煌、令人震撼、动态的结构。组织原理在两语言中是相同的,除了极其重要的一点不同外:把自由输出功能托付给Lisp程序员个体。这在Pascal程序员那里也能找到,却降低了不止一个数量级。Lisp程序大大充实了函数库,这些函数的实用性超过了催生它们的应用。表,Lisp的固有数据结构,为函数实用性的提升贡献巨大。表的简单结构和天然的适用性反映在函数,就是函数那令人惊讶的普适性。而在Pascal,数据结构的过度声明导致函数的专用性,这阻碍并恶化了函数间的临时配合。拥有100个函数,工作在1个数据结构之上,好过拥有10个函数,工作在10种数据结构之上。结果,金字塔必定是矗立千年而不变,有机体要么演化,要么死亡。

为了看清上述差异,请试着比较Pascal入门书与本书对材料和练习的处理方法。不要困于假象,说,这是本仅适用于MIT的教科书,它的独特性只不过是因为它出自MIT.准确地说,任何一本Lisp编程书籍都应该如本书,无论其学生是谁,书本在何处使用。

注意,本书是关于程序设计的,异于大多数Lisp书籍,因那些书是为人工智能准备的。总之,随着被研究的系统的不断扩大,程序设计的关键问题,在软件工程和人工智能之间将趋于统一。这就解释了为何在人工智能领域之外,对Lisp的兴趣也正不断地在提高。

从人工智能的目标出发,可以预见,其研究将产生大量有意义的程序设计问题。在其他程序设计文化里,这一连串的问题将引生新的语言。诚然,在任何极大型的程序设计工作中,一个有效的组织原理就是控制并隔离任务(作业)模块间的信息流动,而这要通过新语言的发明方可实现。当人们接近到与之最常交互的系统的边界时,这些语言趋于变得高级。结果,这些系统就包含了大量重复的复杂的语言处理功能。Lisp拥有简洁的语法和语义,这使得语法分析被看作是一项基本任务。这使得语法分析技术在Lisp程序里几乎没有地位,同时使得语言处理器的构造对大型Lisp系统的发展变更速度而言,鲜有阻碍。最后,正是语法和语义的极端简洁性,导致了Lisp程序员的自由以及负担。任何规模的Lisp程序,除了寥寥数行的之外,无不充盈着各类函数。发明函数,组装函数;得到函数,再利用之发明函数(Invent and fit; have fits and reinvent!)!让我们举杯庆贺那些将思想写进层层括号之巢的Lisp程序员吧。

Alan J. Perlis

纽黑文市,康涅狄格

举报

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 第一部分Common Lisp介绍第1章 介绍一下Lisp你在学的时候觉得已经明白了,写的时候更加确信了解了,教别...
    geoeee阅读 2,833评论 5 8
  • 计算机编程语言可用于将指令传达给计算机。它们基于某些句法和语义规则,定义了编程语言中每种结构的含义。 现在我得到了...
    幻凌风阅读 8,106评论 1 26
  • 原文链接:https://github.com/EasyKotlin 值就是函数,函数就是值。所有函数都消费函数,...
    JackChen1024阅读 5,917评论 1 17
  • 深圳速度是越来越快,想起小时候总喜欢说长大想要当科学家、发明家,想着世界可以便利起来,然而如今的社会面貌在一步一步...
    妮小阅读 193评论 1 1
  • 葡萄枝下的寓言活了, 月梢上的眷念烈了, 喜鹊登空自成一径。 星,脱掉沉睡者的壳, 把忧愁丢进遥远的山谷。 一颗星...
    王大橘阅读 206评论 0 4