SICP阅读笔记(一)
2015-08-25 008 Foreword
QUOTE: I think that it's extraordinarily important that we in computer science keep fun in computing...... What's in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.
My understanding: One of the most important things as a programmer is to keep passion. We always need to learn new things in this dynamic field, if we lose interest, the process will turn into a suffer. One big threat is, while we learn more and more about one certain domain, we tend to use the same tool to solve different problems, and subconsciously refuse to accept the idea that there are other ways to try and other interesting things deserve to learn. So the mindset that machine is always more capable than you thought can be a constant reminder, driving us to be more open and naturally keep our curiosity as child or layman.
QUOTE: To appreciate programming as an intellectual activity in its own right you must turn to computer programming; you must read and write computer programs—many of them. It doen't matter much what the programs are about or what applications they serve.
My understanding: The ability of programming on an abstract level can be improved as long as you are reading and writing good code, no matter how unique the problem domain is or how traditional the business is.
QUOTE: Thus even though our programs are carefully handcrafted discrete collections of symbols, mosaics of interlocking functions, they continually evolve: we change them as our perception of the model deepens, enlarges, generalizes until the model ultimately attains a metastable place within still another model with which we struggle.
My understanding: This remind me of the description in Code Complete: "Designing is a heuristic process." Building a complex model needs to try, to estimate, to retry, to destroy and to create. We may never reach the point of fully perfection, but we can reach the point of fulfillment and satisfaction.
2015-08-26 009 Forword
QUOTE: Since large programs grow from small ones, it is crucial that we develop an arsenal of standard program structures of whose correctness we have become sure—we call them idioms—and learn to combine them into larger structures using organizational techniques of proven value. These techniques are treated at length in this book and understanding them is essential to participation in the Promethean enterprise called programming.
My understanding: Be familiar with a set of idioms on a sufficient scale is only the basic skill for a programmer. To be senior, one need to know about the art of organization and combination.
QUOTE: At best, relationships between the foci are metastable. The computers are never large enough or fast enough. Each breakthrough in hardware technology leads to more massive programming enterprises, new organizational principles, and an enrichment of abstract models.
My understanding: Again, the rapid growth of hardware technology indicates how mutable the programming methodology can be. We as a programmer need to adapt to it.
QUOTE: We call such programs algorithms, and a great deal is known of their optimal behavior, particularly with respect to the two important parameters of execution time and data storage requirement.
My understanding: Time and space are the most fundamental and the most crucial elements in algorithm. In modern time, the CPU is so fast and the memory is so big that sometimes we have the illusion that we no longer have to deal with these things any more, but that is not true.
2015-08-27 010 Foreword
QUOTE: Pascal is for building pyramids—imposing, breathtaking, static structures built by armies pushing heavy blocks into place. Lisp is for building organisms—imposing, breathtaking, dynamic structures built by squads fitting fluctuating myriads of simpler organisms into place.
My understanding: What a beautiful description of these two old languages! The summary is simple, but the insight here is impressive.
QUOTE: In Pascal the plethora of declarable data structures induces a specialization withing functions that inhibits and penalizes casual cooperation. It is better to have 100 functions operate on one data structure than to have 10 function operate on 10 data structures. As a result the pyramid must stand unchanged for a millennium; the organism must evolve or perish.
My understanding: I can't really get the idea of this paragraph yet. Does it mean that we shouldn't create so many data structures? Does it mean we should always try to think at a higher abstract level? After I finish this book, I may return and find out the meaning beneath these sentences.
QUOTE: Indeed, in any very large programming task a useful organizing principle is to control and isolate traffic within the task modules via the invention of language.
My understanding: This is the first time that I see a reasonable explanation about the fact that there are so many programming languages. The needs to modulize and analyse on different abstraction level determine the essential needs of multiple language. It is simply irrational to argue that which programming language is the best.
QUOTE: Finally, it is this very simplicity of syntax and semantics that is responsible for the burden and freedom borne by all Lisp programmers. No Lisp program of any size beyond a few lines can be written without being saturated with discretionary functions.
My understanding: The concept syntax and semantics always goes hand in hand, what's the similarities and differences between these two words?
2015-08-27 012 Preface
QUOTE: This edition emphasizes several new themes. The most important of these is the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming, lazy evaluation, and nondeterministic programming.
My understanding: There are so many approaches to handle concurrency! OO is terrific, but OO cannot solve everything. Regarding concurrency, OO may even cause more bad then good.
QUOTE: First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.
My understanding: As I have already read in Code Complete, readability is always mentioned most times. Writing code which can be understand by computer is very easy, writing code which can be understand by human is very hard. The skill to write organised and clear code can not be overemphasized.
QUOTE: Second, we believe that the essential material to be addressed by a subject at this level is not the syntax of particular programming-language constructs, nor clever algorithms for computing particular functions efficiently, nor even the mathematical analysis of algorithms and the foundations of computing, but rather the techniques used to control the intellectual complexity of large software system.
My understanding: Again, this subject is also described in Code Complete as the highest priority in programming activities is control complexity. Two important books, one is practical and the other one is academic, introduce the same idea, thus it must be very compelling. This is also the reason why I choose this book as the second extension reading material.
QUOTE: We control complexity by building abstractions that hide details when appropriate. We control complexity by establishing conventional interfaces that enable us to construct systems by combining standard, well-understood pieces in a "mix and match" way. We control complexity by establishing new languages for describing a design, each of which emphasizes particular aspects of the design and deemphasizes others.
My understanding: This is the best summmaries about different skills to control complexity. Some are insightful definition for concept such as encapsulation and modulization.
2015-08-27 013 Preface
QUOTE: The essence of this change is the emergence of what might best be called procedural epistemology—the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classiccal mathematical subjects.
My understanding: This paragraph leads to some important concept, such as procedure oriented, imperative programming and declarative programming.
QUOTE: Mathematics provides a framework for dealing precisely with notions of "what is." Computation provides a framework for dealing precisely with notions of "how to".
My understanding: This is a brief introduction on the concept mentioned above. Most language we use, such as C and Java, is imperative programming language. Nowadays we also see the trends for declarative programming is growing.
QUOTE: After a short time we forget about syntactic details of the language(because there are none) and get on with the real issues—figuring out what we want to compute, how we will decompose problems into manageable parts, and how we will work on the parts.
My understanding: This reminds me of the quote in Code Complete: "Program into Your Language, Not in It".
QUOTE: We can make procedural and data abstractions, we can use higher-order functions to capture common patterns of usage, we can model local state using assignment and data mutation, we can link parts of a program with streams and delayed evaluation, and we can easily implement embedded languages.
My understanding: Modern languages such Java limit us the ability to manipulate different aspects of programming, which is a benefit for engineering. Meanwhile, looking into a different kind of language which offer us the fully capability to program can give us some sense about the nature of programming.
QUOTE: From Lisp we take the metalinguistic power that derives from the simple syntax, the uniform representation of programs as data objects, and the garbage-collected heap-allocated data. From Algol we take lexical scoping and block structure, which are gifts from the pioneers of programming-language design who were on the Algol committee.
My understanding: As Mathematics, some basic concept which in our eyes are just natural, ordinary things don't come out all of a sudden. They evolved and developed for a long time by the top minds in the world. So when we use them today, we must be grateful and show our gratitude toward pioneers in this field.
SICP阅读笔记(一)的更多相关文章
- SICP 阅读笔记(二)
Chapter 1: Building Abstractions with Procedures 2015-09-29 016 Preface of this chapter QUOTE: The a ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
- Hadoop阅读笔记(七)——代理模式
关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...
- Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable
酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...
- Hadoop阅读笔记(五)——重返Hadoop目录结构
常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼 ...
随机推荐
- 为什么memset不能将数组元素初始化为1?
原型:extern void *memset(void *buffer, int c, int count); 功能:把buffer所指内存区域的前count个字节设置成字符c. 包含头文件:< ...
- UVa10651(记忆化搜索)
题意: 给一串-和o组成的字符串,你可以把“-oo"变成”o--",可以把“oo-”变成“--o",问最后最少有多少个o. 状态压缩 ,记忆化搜索 code: #incl ...
- python文件_批量改名
#! /usr/bin/env python #coding=gbk #文件操作实例--将文件夹下所有图片名称加上'_test' import re,os,time #str.split(path) ...
- EF有外键的查询
modelBuilder.Entity<ActionMenu>().ToTable("ActionMenu"); modelBuilder.Entity<Acti ...
- Angular2 - Starter - Pipes, Custom Pipes
在Angular2 模板中,我们在显示数据时,可以使用通道将数据转换成相应的格式的值的形式来显示,而且这不改变源数据.比如,我们可以使用date通道来转换时间显示的格式: {{date | date: ...
- JS window对象的top、parent、opener含义
.top 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. .opener opener用于在window.open的页面引用执行该window ...
- C语言读写伯克利DB 3
gcc -o channeldb channel.c -db -Wall # -Wall参数等价于执行lint,即:进行代码的静态分析,它可以指出未初始化的变量,未使用的变量 #include < ...
- C和C++的学习过程总结
总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复. 一家之言,欢迎拍砖哈. 1.可以考虑先学习C. 大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而 ...
- Unity3D使用NGUI做个弹窗
主要函数: NGUITools.AddChild(gameobj, prefab);//gameobj为父对象,prefab为要显示的窗体对象预制 然后写个方法,限制出现多个即可
- VS2010的调试参数/Zi /DEBUG
/DEBUG只是是否要生成调试信息的开关.这个命令行选项在链接器页面那里 /Zi只是生成的调试信息的格式,这个格式是.pdb文件.当然还有好几种格式.这个命令行在编译页那里 如果上面的选项没有设置对, ...