SICP0:序,前沿的筆記

昨天晚上花了一點時間,讀了SICP的序和前言部分。做以下簡單的紀錄。這兩天,我連續上了UCB的SICP課程的前兩個Lecture,也花了點時間看了一下MIT的OCW的相關信息,並下載了所需要的資料。

發現很多學校,特別是MIT,UCB,Standford等這些名校都是採用SICP作爲計算學科學低年級本科生的入門教材,他到底有什麼特殊之處呢?所以我花了一點時間重讀了SICP的序和前言,總結如下:

 

你需要讀或者寫計算機程序,而且需要大量的做。與程序重要的是,他們的性能如何,在用於構造更大的程序時,能否與其他程序平滑銜接。

 

程序設計所關注的是:程序的創建,執行,和研究。

 

三類關注的對象:人的大腦,計算機程序的集合,以及計算機本身。

 

程序應該不斷的修改,直至這一模型最終達到一種亞穩定狀態。

 

慣用法 :因爲大程序是從小東西成長起來的,開發出一個標準化的程序結構的武器庫,並保證其中每種機構的正確性。再學會如何利用一些已經證明很有價值的組織技術,將這種結構組成更大的結構。

 

(最小的物理開關元件在量子力學裏建模,量子力學又是一組微分方程描述,微分方程的細節行爲可以由數值區近似,這種數據近似又由計算機程序所描述,計算機程序的組成...)

 

程序的最佳行爲的兩個參數:執行的時間,和對數據存儲的需求。(算法和慣用法)

 

Pascal是爲了建造金字塔:是由各就其位的沉重巨石築起的靜態結構。

 

Lisp是爲了構造有機體:由各就其位但去永不停止的無數簡單的有機體片斷構成的動態結構。Lisp程序大大的擡高了函數庫的地位。作爲Lisp的重要數據結構:表對於這種可用性地提升其中重要的作用。

 

 

第二版前言:

計算模型裏對於時間的處理所起的中心作用:帶有狀態的對象、併發程序設計、函數式程序設計、惰性求值、非確定性程序設計

 

第一版前言:

馬文明斯基的小提琴比喻。

 

MIT的EECS的四門公共核心課程:SICP,兩門電路和線性系統,數字系統設計。

 

爲什麼設立?

建立一個看法:一個計算機語言並不僅僅是讓計算紙去執行操作的一種方式,各重要的是,它是一種表達有關方法學的思想的新穎的形式化媒介。因此程序必須寫得能夠供人們閱讀,偶爾的去供計算機執行。

其次,我們相信,在這一層的課程裏,最基本的材料並不是特定程序設計語言的語法,不是有效計算某種功能的巧妙的算法,也不是算法的數學分析和計算的本質基礎,而是一些能夠用於控制大型軟件系統的智力

複雜性的技術。

 

通過創建抽象去控制性複雜性

創立約定的界面,以便能以一種混合和匹配的方式組合起一些標準的已經很好理解的片段,去控制複雜性。

建立一些新的語言去描述各種設計,每種語言強調設計中的一個特定方面並降低其他方面的重要性,以控制複雜性。

 

計算機科學並不是科學,而且其重要性也與計算機本身無太大關係。計算機革命是有關我們如何去思考,以及我們如何去表達自己的思考的一個革命。-----過程性認識論 的現象。如何從一種命令式的觀點去研究知識的結構。數學爲精確處理是什麼提供了一種框架,而計算則爲精確處理怎麼做的概念提供了一種框架。

 

Lisp的優點:

更多的能用於以模塊化的方式分解程序的大規模戰略,

我們可以做過程性抽象和數據抽象。

可以通過高階函數抓住公公的使用模式。

可以用賦值和數據操作去模擬局部狀態,

可以用流和延時求值連接七億個程序裏的各個部分

可以很容易的實現嵌入式語言。

 

Scheme從Lisp語言那裏取得元語言的威力,簡單的語法形式,程序和數據對象的統一表示,帶有廢料收集的堆分配數據。

從Algol取得詞法作用域,和塊結構。

 

致謝:

本課程是有關程序設計語言學和Lambda演算的一門美妙課程,MIT的EECS強調工程設計的原理。

 

"應該避免控制中的複雜性,將精力集中到數據的組織上,以反映所模擬世界的真實結構"

 

"計算是一種探索各種表達思想的表達方式和手段"

 

"程序設計有許多樂趣,應該認真的支持程序設計的趣味性。"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章