关于阅读SCIP序的笔记(SCIP笔记1)

阅读SICP序的笔记

从小到大,我们习惯于被人规划生活。在家中,父母长辈给我们规划生活;在学校,老师给我们规划整天的学习任务;工作后,由上司给我们分配工作任务。一直被规划的我们,现在可以做一件自己进行规划的事,那就是编程。

  解决大规模问题需要进行一系列规划,正如进行较大项目就需要前期进行大量规划与设计,否则会导致更大的问题。同时,要进行计算机程序设计,需要大量的读或者写程序。有关这些程序具体的、服务于哪类应用等等情况并不重要,重要的是它们的性能如何,在用于更大的程序时能否与其他程序平滑衔接。程序员们必须同时追求具体部分的完美和汇合的适宜性。本书使用“程序设计”一词,关注程序的创建、执行和研究,使用Lisp语言书写。(国内估计学过此语言的凤毛麟角,大概都如我般学的是C)

  本书主要关注三类对象,人的大脑计算机程序的集合以及计算机本身

  ①人的大脑  

  每个计算机程序都是现实中的或者精神中的某个过程的一个模型,通过人的头脑孵化出来的。这些过程出现在人们的经验或思维中。

  ②计算机程序的集合

  计算机是一位一丝不苟的工匠:它的程序必须正确,我们希望说的所有东西,都必须表述到每一点细节。同样,程序需要检验认证。但是,当程序变得更大更复杂后,这种描述本身的适宜性、一致性和正确性都变得非常值得怀疑了。很少看到关于大程序正确性的完全形式的论证。因为大的程序是从小东西成长起来的,开发一个程序结构的武器库,并保证每种结构的正确性  我们称它们为惯用法,再学会如何利用一些已经证明很有价值的组织技术,将这些结构组合成更大的结构,这些都是至关重要的。理解这些技术,对于参加这种被称为程序设计的具有创造性的事业是最最本质的。特别值得提出的是,发现并掌握强有力的组织技术,将提升我们构造大型的重要程序的能力。反过来说,因为写大程序非常耗时耗力,这也推动着我们去发明新方法,减轻由于大程序的功能和细节而引起的沉重负担。

  ③计算机本身

  与程序不同,计算机必须遵守物理定律。如果它们要快速执行-----几个纳秒做一次状态转换-------那么就必须在很短的距离内传导电子(最多1.5英尺,难怪电路板一般都小于45cm)。必须消除由于大量元器件而产生的热量集中(已找到平衡点)。在任何情况下,硬件都在比我们编程时所需关心的层次更低的层次上操作的。将我们的Lisp程序变换到“机器”程序的过程本身也是抽象模型,是通过程序设计做出来的。研究和构造它们,能使人更加深刻地理解与任何模型的程序设计有关的程序组织问题。当然,计算机本身也可以这样模拟。请想一想:最小的物理开关元件在量子力学里建模,而量子力学又由一组微分方程描述,微分方程的细节行为可以由数值去近似,这种数值又由计算机程序所描述,计算机程序的组成.....

  区分出上述三类需要关注的对象(指代人的大脑计算机程序的集合以及计算机本身),并不是仅仅为了策略上的便利。即使有人说它不过是人头脑里的东西,这种逻辑区分也引起了这些关注焦点之间符号流动的加速,它们在人们经验中的丰富性、活力和潜力,只能由现实生活中的不断演化去超越。我们至多说,这些关注焦点之间的关系是基本稳定的。计算机永远都不够大也不够快。硬件技术的每一次突破,都会带来更大规模的程序设计事业,新的组织原理,以及更加丰富的抽样模型。(别问到哪里才是头,我估计到了cpu频率达到光速就是极限了。。)

  在我们写的程序里,有些程序执行了某个精确的数学函数(但是绝对不够精确),例如排序,或者找出一系列数中的最大元,去顶素数性,或者找出平方根。我们这种程序称为算法,关于它们的最佳行为已经有了许多认识,特别是关于两个重要的参数:执行时间和对数据存储的需求(时间复杂度和空间复杂度之间的矛盾)。程序员应该追求好的算法和惯用法。即使某些程序难以精确的描述,程序员也有责任去估计它们的性能,并要继续设法去改进之。

  Lisp是一个幸存者,已经使用了四分之一世纪(上世纪90年代)。Fortran比它时间更长一些。Fortran用于科学与工程计算(爆咋的哥伦比亚号就使用此语言),Lisp用于人工智能。

  Lisp一直在改变。Lisp程序员获得个人可用的自由支配权。Lisp程序大大抬高了函数库的地位,使其可用性超越了催生它们的那些具体应用。作为Lisp的内在数据结构,表对于这种可用性的提升起着最重要的作用。表的简单结构和自然可用性反应到函数里,就使它们具有了一种奇异的普适性。

                                                                   bear2flymoon  2015-03-15

时间: 2024-09-30 12:58:26

关于阅读SCIP序的笔记(SCIP笔记1)的相关文章

《代码阅读方法与实践之读书笔记之一》

阅读代码是程序员的基本技能,同时也是软件开发.维护.演进.审查和重用过程中不可或缺的组成部分.<代码阅读方法与实践之读书笔记之一>这本书围绕代码阅读,详细论述了相关的知识与技能.我希望通过仔细阅读并学习本书,可以快速地提高我的代码阅读的技能与技巧,进而从现有的优秀代码.算法.构架.设计中汲取营养,提高自身的开发与设计能力.此次读了此书的前四章,以下是我从中汲取到的宝贵养分: 从第一章<导论>一节中我体会到了我们要养成一个经常花时间阅读别人编写的高品质代码的习惯,因为阅读高品质的代码

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要二

今天继续分享我的阅读<LEARNING HARD C#学习笔记>知识点总结与摘要二,仍然是基础知识,但可温故而知新. 七.面向对象 三大基本特性: 封装:把客观事物封装成类,并隐藏类的内部实现细节,仅开放相关的访问属性.方法等 继承:通过继承可以复用父类的代码: 多态:1.允许将子对象赋值给父对象,2.同方法在不同的对象上有不同的实现方式: 子类初始化顺序:初始化类的实例字段à调用父类构造函数à调用子类构造函数: 重写:父类声明为virtual或abstract的类成员(属性.方法),在子类继

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三

最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些不足,我在以下的博文中都有说明,大家如果有这本书的可以对照着知识点及书本相结合的方式来看,没有这本本书的也可以对照着我整理的知识要点进行实际编码测试与学习,希望能对大家有所帮助,如果觉得可以的话,还请推荐哦,谢谢! 阅读<LEARNING HARD C#学习笔记>知识点总结与摘要系列文章从这篇博文

初入 CLR - 阅读《CLR via C#》笔记

最近买了一本书<CLR via C#>阅读了第一章 - CLR 的执行模型,对 .NET 一直提到的 CLR 和 .NET Framework 有了一个大致的了解.我理解主要体现在: ■ 各种术语有了一个大致的体会:CTS CLS 和 CLI .CLR 与 .NET Framework. IL(Intermediate Language) .CIL(Common Intermediate Language)和 托管代码(Managed Code). ■ 用 C# 写完一个程序被编译成应用程序后

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要一

本人有幸在Learning Hard举行的整点抢书活动<Learninghard C#学习笔记>回馈网友,免费送书5本中免费获得了一本<LEARNING HARD C#学习笔记>,我(梦在旅途)虽然从事.NET开发多年,但一直都没有能好好的系统学习,特别是C#5.0的知识,现如今有幸得到这本书,可以好好的温习.巩固和提升, 非常感谢Learning Hard! 我在收到该书后,花了约两周的时间就看完了,主要是集中在晚上及周末时间,因为本书是从浅入深讲解C#知识,我虽谈不上什么高手,

《代码阅读方法与实践》读书笔记3

许多数据结构——如树和堆,操作——如类型推断和类型合一.数学实体——如斐波那契数和分形图,以及算法,如快速排序.树遍历和递归下降分析,都采用递归定义.实体和操作的递归定义用它自身来定义它的对象.虽然这些定义咋看起来好像是无限循环,但实际上并非如此,这是因为基准范例的定义,一般会定义一个特例,他不依赖于递归定义.例如,虽然整数N的阶乘N!,可以定义为N(N-1)!,我们还定义一个基准范例0!=1. 采用递归定义的算法和数据结构经常用递归的函数定义来实现. 递归下降分析器——这种方法经常用于分析相对

《代码阅读方法与实践之读书笔记之二》

我从本书的第五章<高级控制流程>中总结出一下重点内容以及相应的见解:采用递归定义的算法和数据结构经常用递归的函数定义来实现:在推理递归函数时, 要从基准落伍测试开始, 并认证每次递归调用如何逐渐接近非递归基准范例代码:尾递归调用等同于一个回到函数开始处的循环:将throws子句从方法的定义中移除, 然后运行Java编译器对类的源代码进行编译, 就可以容易地找到那些可能隐式地生成异常的方法:工作群并行模型用于在多个处理器间分配工作, 或者创建一个任务池, 然后将大量需要处理标准化的工作进行分配:

1230.2——iOS准备(阅读开发者文档时的笔记)

1.程序启动的过程    .在桌面找到相应的应用的图标 点击图标    .main函数 UIApplication类Every app has exactly one instance of UIApplication每个应用程序都只有一个UIApplication类的实例对象运行起来的应用程序就是一个UIApplication对象. UIApplicationMain创建UIAppication对象的一个单例对象(singleton) The role of your app’s applic

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要四

又是一个周末,刚好有时间,又继续复习与总结了,希望能让大家受益,不足之处欢迎指正,谢谢! 十八. Lambda 1.Lambda表达式:匿名方法的另一种表现形式,它可以包含表达式和语句,且用于创建委托或转换为表达式树,定义语法:(形参列表)=>{方法体}; 单个参数时,可以省略括号 2.Lambda表达式树是用来表示Lambda表达式逻辑的一种数据结构,它将代码表示成一个对象树,而非可执行的代码,定义语法如(a+b): Experssion<Func<int,int,int>>