* [[http://xuanji.appspot.com/isicp/|Structure and Interpretation of Computer Programs Interactive Version]] * 讀到第三章即可,之後改讀 [[http://www.ccs.neu.edu/home/matthias/BTLS/|The Little Schemer]]。 * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_sec_1.1|1.1 The Elements of Programming]] * 程式語言必須提供底下三種功能: * primitive expressions * means of combination * means of abstraction * [[http://blog.csdn.net/nomasp/article/details/44229147|【SICP归纳】1 过程和代换模型]] * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2|1.2 Procedures and the Processes They Generate]] * When we discuss the implementation of procedures on register machines in chapter 5, we will see that any iterative process can be realized “in hardware” as a machine that has a fixed set of registers and no auxiliary memory. In contrast, realizing a recursive process requires a machine that uses an auxiliary data structure known as a stack. * 機器上的暫存器 (register) 和棧 (stack),分別用來實現迭代 ([[wp>iteration]]) 和遞迴 ([[wp>recursion]])。 * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-12.html#%_sec_1.3|1.3 Formulating Abstractions with Higher-Order Procedures]] * 將函式 (procedure) 視為資料 (data)。因此函式可以作為函式的參數或返回值。 * Lambda 表達式 (Lambda expression),又稱匿名函式 ([[wp>Anonymous function]])。 * Lambda 表達式可以在某處需要函式的地方,直接定義該函式,故稱 in-place anonymous procedure。 * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2|2.2 Hierarchical Data and the Closure Property]] * 閉包 ([[wp>Closure (computer programming)|Closure]]) 允許我們建構階層式的資料結構 (串列,樹,...)。 * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-19.html#%_chap_3|3. Modularity, Objects, and State]] * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#%_sec_3.1|3.1 Assignment and Local State]] * 以物件的觀點對系統建模。程式語言必須提供賦值語句改變物件的狀態。 * 完全不使用賦值語句的編程,稱為函數式編程 ([[wp>Functional programming]]); 與之相對的,稱為指令式編程 ([[wp>Imperative programming]])。因為程序員需要親自處理狀態,指令式編程較有機會出現錯誤。 * [[https://msdn.microsoft.com/en-us/library/bb669144.aspx|Functional Programming vs. Imperative Programming]] * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-21.html#%_sec_3.2|3.2 The Environment Model of Evaluation]] * 在引入賦值語句後,函式調用從 substitution model of evaluation 換成 environment model of evaluation。在 environment model of evaluation,採用 frame 保存本地狀態。 * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-22.html#%_sec_3.3|3.3 Modeling with Mutable Data]] * 資料可以修改後 (mutable),可以用來創建佇列,表,... 等資料結構。 * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-23.html#%_sec_3.4|3.4 Concurrency: Time Is of the Essence]] * 在引入賦值語句後,程序員必須面對可隨時間改變的狀態。這在同步情況下又會引發一系列問題,主要原因在於不同進程可以透過賦值語句改變狀態,引入不確定性。 * 針對存取共享變數,引入 serializer。 * [[https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5|3.5 Streams]] ====== 其它 ====== * [[Assembly]] * [[Boost]] * [[C++]] * [[Python]] * [[Haskell]] * [[Bash]] * [[Java]] * [[Parallel Programming]] * [[Embedded Programming]] * [[Linux Programming]] * [[Windows Programming]] * [[Network Programming]] * [[Lex & Yacc]] * [[Cygwin]] * [[Language Workbench]] * [[UTF8]]