`
kidneyball
  • 浏览: 326855 次
  • 性别: Icon_minigender_1
  • 来自: 南太平洋
社区版块
存档分类
最新评论

SICP读书笔记(2)——扉页,序

阅读更多
最容易被忽略的最重要的话(扉页)
“我认为,在计算机科学中保持计算中的趣味性是特别重要的事情。这一学科在起步时饱含着趣味性。当然,那些付钱的客户们时常会觉得被我们敷衍了。一段时间之后,我们开始信以为真。我们开始觉得,自己真的像是要负起成功地、无差错地、完美地使用这些机器的责任。我不以为然。我认为我们的责任是去拓展这一领域,将其发展到新的方向,并在私底下保持趣味性。我希望计算机科学领域绝不要丧失其趣味意识。最重要的是,我希望我们不要变成传道士,不要认为你是兜售圣经的人,世界上这种人已经太多了。你所知道的有关计算的东西,其他人也都能学到。绝不要认为成功计算的钥匙只掌握在你的手里。我认为并希望,你所掌握的是智慧:那种当你第一次站在这一机器面前时就能看到它的本质的能力,这样你才能将它推向前进。” ———— Alan J. Perlis (生于1922年4月1日,卒于1990年2月7日),第一位图灵奖(1966年)获得者,ALGOL语言的设计者之一。

引文参考了英文原文与中文版译文后,可能根据自己的理解重写。不保证与中文版内容一致,下同。

师傅常说的一句话:“我是在玩编程!”。当前市面上却有太多的编程传道士和编程工人。房价和通涨让我们难以成为职业玩家,问题是我们如何在“私底下”玩。

序 (还是Alan J. Perlis)

“本书中要讨论的各种问题都牵涉到三类需要关注的对象:人的大脑、计算机程序的集合以及计算机本身。每一个计算机程序都是现实中的或者精神中的某个过程的一个模型,通过人的头脑孵化出来。这些过程出现在人们的经验或者思维之中,数量上数不胜数,详情琐碎繁杂,任何时候人们都只能部分地理解它们。我们很少能通过自己的程序将这种过程模拟到永远令人满意的程度。正因为如此,即使我们写出的程序是一集经过仔细雕琢的离散符号,是交织在一起的一组函数,它们也需要不断的演化:当我们对于模型的认识更深入、更扩大、更广泛时,就需要去修改程序,直至这一模型最终达到了一种亚稳定状态。而在这时,程序中又会出现另一个需要我们去为之奋斗的模型。 计算机程序设计领域之令人兴奋的源泉,就在于它所引起连绵不绝的发现,在我们的头脑之中,在由程序所表达的计算机制之中,以及在由此所导致的认识爆炸之中。 如果说艺术解释了我们的梦想,那么计算机就是以程序的名义执行着它们。
...
“区分出上述三类需要关注的对象,并不仅仅是为了策略上的便利。即使有人说它不过是人头脑里的东西,这种逻辑区分加快了这些关注焦点之间的符号化的交流,它们在人们经验中的丰富性、活力和潜力,只能由现实生活本身的不断演化去超越。我们至多只能说,这些关注焦点之间的关系是基本稳定的。计算机永远都不够大也不够快。硬件技术的每一次突破都带来了更大规模的程序设计事业,新的组织原理,以及更加丰富的抽象模型。每个读者都应该反复问自己”到哪儿才是头儿,到哪儿才是头儿?”————但是不要问得过于频繁,以免忽略了程序设计的乐趣,使自己陷入一种喜忧参半的呆滞状态中。”


你现在,今天,还会因为计算机程序设计所引起的连绵不绝的发现而兴奋吗?不会?尽快转行。一个新技术,新框架出现,你是会一边关注,一边问“到哪里才是头儿”,还是“麻木,飘过”,还是只会不停地问“哪里才是头儿”直到陷入呆滞状态中……

“不幸的是,随着程序变得更大更复杂(实际上它们几乎总是如此),这种描述(用谓词演算描述程序功能)本身的适宜性、一致性和正确性也都变得非常值得怀疑了。因此,很少能够看到有关大程序正确性的完全形式化的论证。因为大的程序是从小东西成长起来的,开发出一个标准化的程序结构的武器库,并保证其中每种结构的正确性————我们称它们为“惯用法”(idiom),再学会如何利用一些已经证明很有价值的组织技术,将这些结构组合成更强大的结构,这些都是至关重要的。…… 理解这些技术,对于参与这种被称为程序设计的具有创造性的事业是最最本质的。特别值得提出的是,发现并掌握强有力的组织技术,将提升我们构造大型的重要程序的能力。反过来说,因为写大程序非常耗时费力,这也推动着我们去发明新方法,减轻由于大程序的功能和细节而引起的沉重负担。”
这就是各种类库、设计模式、框架的本质。

“很难找到这样的两种语言(Pascal和Lisp),它们能如此清晰地代表着围绕这两种语言而聚集起来的两种差异巨大的文化。Pascal是为了构造金字塔————壮丽而辉煌、令人震撼,是由各就其位的沉重巨石筑起的静态结构。而Lisp则是为了构造有机体————同样的壮丽辉煌并令人震撼,由各就其位但却永不静止的无数简单的有机体片段构成动态结构。在两种语言里都采用了同样的组织原则,除了其中特别重要的一点不同之外:托付给Lisp程序员个人可用的自由支配权,要远远超过那些使用Pascal的公司。Lisp程序大大抬高了函数库的地位,使其可用性超越了催生它们的那些具体应用。…… 而在Pascal里,数据结构的过度声明导致函数的专用性,阻碍并惩罚临时性的合作,(在Pascal中)采用100个函数在一种数据结构上操作,远远优于用10个函数在10种数据结构上操作。作为这些情况的必然后果,金字塔矗立在那里千年不变,而有机体则必须演化,否则就会死亡。”

关于动态语言与静态语言差异的精彩论述,可惜三年前我完全跳过了序言,不然这段话可以用在上次的PPT里。
2
0
分享到:
评论
1 楼 lord_is_layuping 2015-05-30  
“很难找到这样的两种语言(Pascal和Lisp),它们能如此清晰地代表着围绕这两种语言而聚集起来的两种差异巨大的文化。Pascal是为了构造金字塔————壮丽而辉煌、令人震撼,是由各就其位的沉重巨石筑起的静态结构。而Lisp则是为了构造有机体————同样的壮丽辉煌并令人震撼,由各就其位但却永不静止的无数简单的有机体片段构成动态结构。在两种语言里都采用了同样的组织原则,除了其中特别重要的一点不同之外:托付给Lisp程序员个人可用的自由支配权,要远远超过那些使用Pascal的公司。Lisp程序大大抬高了函数库的地位,使其可用性超越了催生它们的那些具体应用。…… 而在Pascal里,数据结构的过度声明导致函数的专用性,阻碍并惩罚临时性的合作,(在Pascal中)采用100个函数在一种数据结构上操作,远远优于用10个函数在10种数据结构上操作。作为这些情况的必然后果,金字塔矗立在那里千年不变,而有机体则必须演化,否则就会死亡。”

相关推荐

Global site tag (gtag.js) - Google Analytics