zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    关于Ext tabpanel 自定义active 样式/iconCls
    关于vue使用 npm run dev报错原因
    vue学习笔记(1)
    BeanCreationNotAllowedException: Error creating bean with name 'cxf' 的原因和解决方案
    js做四则运算时,精度丢失问题及解决方法
    java word/doc/docx文档转PDF 加水印
    HTML学习笔记
    (小白疑问求大神解答)可否理解为数据库就是excel表格的封装?
    excel表格加减法
    基础算法思想
  • 原文地址:https://www.cnblogs.com/yuanchongjie/p/4759217.html
Copyright © 2011-2022 走看看