第一章:简介 — ANSI Common Lisp 中文版

新的方法 (New Approach)¶

本书的目标之一是不仅是教授 Lisp 语言,而是教授一种新的编程方法,这种方法因为有了 Lisp 而有可能实现。这是一种你在未来会见得更多的方法。随着开发环境变得更强大,程序语言变得更抽象, Lisp 的编程风格正逐渐取代旧的规划-然后-实现 (plan-and-implement)的模式。

在旧的模式中,错误永远不应该出现。事前辛苦订出缜密的规格说明,确保程序完美的运行。理论上听起来不错。不幸地,规格说明是人写的,也是人来实现的。实际上结果是, 规划-然后-实现 模型不太有效。

身为 OS/360 的项目经理, Frederick Brooks 非常熟悉这种传统的模式。他也非常熟悉它的后果:

任何 OS/360 的用户很快的意识到它应该做得更好...再者,产品推迟,用了更多的内存,成本是估计的好几倍,效能一直不好,直到第一版后的好几个版本更新,效能才算还可以。

而这却描述了那个时代最成功系统之一。

旧模式的问题是它忽略了人的局限性。在旧模式中,你打赌规格说明不会有严重的缺失,实现它们不过是把规格转成代码的简单事情。经验显示这实在是非常坏的赌注。打赌规格说明是误导的,程序到处都是臭虫 (bug) 会更保险一点。

这其实就是新的编程模式所假设的。设法尽量降低错误的成本,而不是希望人们不犯错。错误的成本是修补它所花费的时间。使用强大的语言跟好的开发环境,这种成本会大幅地降低。编程风格可以更多地依靠探索,较少地依靠事前规划。

规划是一种必要之恶。它是评估风险的指标:越是危险,预先规划就显得更重要。强大的工具降低了风险,也降低了规划的需求。程序的设计可以从最有用的信息来源中受益:过去实作程序的经验。

新的方法 (New Approach)¶相关推荐

  1. Java 8中的新BigInteger方法

    对JDK 8中的新功能的关注理所当然地主要集中在新的语言功能和语法上. 但是,对库和API进行了一些不错的添加,在本文中,我介绍了BigInteger类中添加的四个新方法: longValueExac ...

  2. UI设计实用素材|寻找一种新的方法来设计网站,单页网站

    寻找一种新的方法来设计网站? 如果设计得当,单页网站可以为访问者创造更令人难忘的体验. 明智的设计选择可以帮助减少疲劳和沮丧,否则人们会感到使用网络. web设计者有很多方法可以减少分心.信息过载和分 ...

  3. Spring4 对Bean Validation规范的新支持(方法级别验证)

    Bean Validation standardizes constraint definition, declaration and validation for the Java platform ...

  4. js页面跳转 和 js打开新窗口方法

    js页面跳转 和 js打开新窗口 方法 Js返回上一页: 1. Javascript 返回上一页 history.go(-1), 返回两个页面: history.go(-2); 2. history. ...

  5. R语言创建新变量方法

    R语言创建新变量方法 在数据分析中,可能需要对数据进行求和.求均值等处理,并且将处理后的数据重新保存到原来的数据框中,这里提供三种可供解决的方法: 数据框$变量名 <- 表达式.若原数据框中含有 ...

  6. Jlink新版驱动安装目录无JLinkDevices.xml添加新器件方法

    Jlink新版本驱动添加新器件方法 事情的起因是最近重装了系统,正好顺路更新下工具链.IAR9.30的黑色很不错. 安装最新版Jlink驱动V7.70E(2022/09/07)后由于需要使用几颗国产M ...

  7. 怎么给当前计算机添加一个用户,如何在win7中添加新账户 2种创建win7新用户方法总结...

    对于很多家庭电脑或者共用电脑用户来说,往往会在电脑中创建多个登录用户,以满足不同用户不同桌面需求.那么在日常电脑使用过程中,我们应该如何计算机添加新账户呢?接下来脚本之家编辑针对时下最流行的Win7系 ...

  8. 台式电脑计算机能创建新磁盘吗,如何把旧硬盘加到新电脑上 旧机械硬盘装到新台式电脑方法...

    旧电脑换新电脑的时候,如果旧的机械硬盘没坏,相信很多用户,还是会选择把旧电脑上的机械硬盘拆卸下来,安装在新电脑上,当作一个普通存储盘继续用,直到硬盘出现坏道才弃用.但是很多小白不知道怎么操作,这里小编 ...

  9. VUE打开新页面方法

    VUE打开新页面方法 我们知道,我们可以通过<a href='***' target='_blank'>*****</a>或window.open(strUrl, strWin ...

最新文章

  1. VCenter电源报警
  2. java commons.util_Java — CommonUtil
  3. QQ会员2018春节红包抵扣券项目背后的故事
  4. Java Enum 使用
  5. Mysql读写分离php脚本
  6. mr图像翻转的原因_MRI图像常见问题及对策
  7. ivew 的ajax,iView-Upload组件分析
  8. Windows GDI和GDI+编程实例剖析(1)
  9. 手把手教你如何免费且光荣地使用专业版IntelliJ IDEA
  10. STM32学习——TIM基本定时器
  11. MySQL/MariaDB表表达式(3):视图
  12. postgresql 用户安全配置
  13. 【字符串】面试题之奇偶字符串分离
  14. SharePoint 2013 Step by Step——使用自定义的List Template
  15. 【优化算法】Tent混沌映射的粒子群算法【含Matlab源码 940期】
  16. 什么是信用评分分析?
  17. 【机器学习】监督学习的分类:判别/生成模型,概率/非概率模型、参数/非参数模型
  18. 计算机博士有哪些专业方向,国内计算机专业博士研究方向-20210619140356.docx-原创力文档...
  19. 苹果白屏一直显示苹果_苹果手机出现白屏要如何修复
  20. Android-PickerView系列之源码解析篇(二)

热门文章

  1. OpenSSL常用命令快速上手
  2. MySQL系列:性能优化
  3. 廖Python学习笔记一
  4. Mysql 百万级数据优化资料
  5. Spark生态顶级项目汇总
  6. ECMAScript 6 未来前景
  7. Eclipse下配置struts很让我痛苦
  8. 在linux下安装星际译王
  9. Android ListView异步加载图片乱序问题,原因分析及解决方案
  10. 跳转到保护模式并显示一个LOGO