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目录结构
常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼 ...
随机推荐
- (转).net开发者对android开发一周的学习体会
春节期间,相对比较闲,上班时也没什么事情做.利用这一周的时间,简单的学习了一下移动方面的开发.主要是针对android,其实我对IOS更感兴趣 (因为我用iphone),苦于暂时没有苹果电脑,只能把它 ...
- DataTable转json字符串,jQuery.parseJSON()把json字符串转为标准的json对象格式
1.string res = DataTableToJson.DataTable2Json(dt);讲DataTable转换为json字符串 http://www.365mini.com/page/j ...
- javascript 概述及基础知识点(变量,常量,运算符,数据类型)
JavaScript概述 1.1 什么是JavaScript: javaScript(简称js),是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言.同时也是一种广泛用于客户端Web开发的脚本语 ...
- 7 RandomAccessFile读取文件内容保存--简单例子(需要验证)
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; /** * 读取动态产生的文件内容 */ publ ...
- 大家来找茬-SpringMVC中Tomcat正常启动,始终访问不了Controller,出404错
创建了一个空的SpringMVC项目,Tomcat可以正常启动,但是运行的时候,始终进不了Controller,并且报404错误. 百度各种查,结果也是查不到原因.各个群里面各种求,各种贴源码,也没有 ...
- unique &unique_copy
unique (ForwardIterator first, ForwardIterator last); unique (ForwardIterator first, ForwardIterat ...
- Python 学习日记(第二周)
从这周开始我就正式学习Python 语言了.以后每周都会有一篇有关于学习Python的见闻与大家分享! Python的安装 学习的第一步首先要有一个运行的环境.所以接下来介绍一下安装的步骤. 通过Py ...
- 【6】python核心编程 第九章-文件和输入输出
1.文件对象的内建方法列表 文件对象的方法 操作 file.close() 关闭文件 file.fileno() 返回文件的描述符(file descriptor ,FD, 整数值) file.flu ...
- NSScanner-备
注意:在扫描的时候,如果 空格是不需要扫描的,那么将会忽略空格. 如下代码: 1 NSString *string = @"my age is d 23 34.0"; ...
- 10个经典的Android开源项目(附源码包)
最近在抽空学习Android系统开发,对Android学习也比较感兴趣,刚开始学就试着在网上找几个项目源码研究看下,以下就将找到的Android项目源码列出,希望对正在或准备学习Android系统开发 ...