《冒號課堂》讀書筆記(一)

 

1. 對於一個軟件開發者,會經歷的四個階段:程序員

 

學會不如會學,會學不如會用,會用不如被用。web

 

學會(知其所然)掌握一些具體的編程知識的初級程序員算法

會學(知因此然)能快速而深入的理解技術並觸類旁通的程序員編程

會用(人爲我用)能將所學靈活運用到實際編程設計之中的高級程序員設計模式

被用(我爲人用)能設計出廣爲人用的應用程序、庫、工具包、框架等的系統分析師和架構師安全

 

2. 知識之上是思想,思想之上是精神。服務器

 

3. 一個優秀的程序員,除了要快速掌握知識,善於領悟思想外,還必須具有務實與研究精神,獨立與合做精神,批判與自省精神。網絡

 

4. 好的語言就是適合編程者和解決對象的語言。架構

 

5. 計算機語言按其發展歷程一般分爲5代。併發

 

第1代語言:機器語言

第2代語言:彙編語言——IA-32 Assembly, SPARC Assembly etc

第3代語言:高級語言——Fortran, Pascal, C, C++, Java, VB etc

第4代語言:面向問題語言—— SQL, SAS, SPSS etc (第4代語言 更專一 業務邏輯 和 問題領域)

第5代語言:人工智能語言——Prolog, Mercury, OPS5 etc

 

6. 得形而忘意,無異於捨本逐末; 得意而忘形, 方能遊刃有餘。

 

7. 編程範式是抽象的,必須經過具體的編程語言來體現。它表明的世界觀每每體如今語言的核心概念中,表明的方法論每每體如今語言的表達機制中。

 

8. 自覺得懂的未必真的懂,自覺得不懂的未必真的不懂。

 

9. 框架

 

框架是一組協同工做的類,它們爲特定類型的軟件構築了一個可重用的設計。與庫和工具包不一樣之處在於前者側重設計重用然後者側重代碼重用。

 

框架並不限於OOP, 能夠是協同工做的類,也能夠是協同工做的函數。一個足夠複雜的應用軟件開發,爲確保快速有效,一般採用的方式是:在宏觀管理上選取一些框架以控制總體的結構和流程;在微觀實現上利用庫和工具包來解決具體的細節問題。框架的意義在於使設計者在特定的領域的總體設計上沒必要從新造輪子;庫和工具包的意義在於使開發者擺脫底層編碼,專一於問題和業務邏輯。

 

10. 庫和工具包最大的差異在於截然相反的設計理念,庫和工具包是爲程序員帶來自由的,框架是爲程序員帶來約束的。

 

11. 同框架與庫和工具包不一樣,設計模式和架構不是軟件產品,而是軟件思想。設計模式是軟件的戰術思想,架構是軟件的戰略決策。

 

 

 

 

常見的編程範式

 

 

1. 命令式/過程式 (Imperative/Procedural)

 

表明語言:Fortran/Pascal/C

核心概念:命令/過程(Command/Procedure)

運行機制:命令執行

關鍵突破:突破單一主程序和非結構化程序的限制

實現原理:引入邏輯控制和子程序

主要目的:模擬機器思惟,實現自頂向下的模塊設計

經常使用應用:交互式、事件驅動型系統、數值計算等

 

 

2. 函數式/應用式 (Functional/Applicative)

 

表明語言:Scheme/Haskell

核心概念:函數(Function)

運行機制:表達式計算

關鍵突破:突破機器思惟的限制

實現原理:引入高階函數,將函數做爲數據處理

主要目的:模擬數學思惟,簡化代碼,減小反作用

經常使用應用:微積分計算、數學邏輯、博弈等

 

 

3. 邏輯式 (Logic)

 

表明語言:Prolog/Mercury

核心概念:斷言(Predicate)

運行機制:邏輯推理

關鍵突破:突破邏輯與控制粘合的限制

實現原理:利用推理引擎在已知的事實和規則的基礎上進行邏輯推斷

主要目的:專一邏輯分析,減小控制代碼

經常使用應用:機器證實、專家系統、天然語言處理、語義網(semantic web)、決策分析、業務規則管理等

 

4. 對象式 (Object-Oriented)

 

表明語言:Smalltalk/Java

核心概念:對象(Object)

運行機制:對象間信息交換

關鍵突破:突破數據和代碼分離的限制

實現原理:引入封裝、繼承和多態機制

主要目的:迎合人類認知模式,提升軟件的易用性和重用性

經常使用應用:大型複雜交互式系統等

 

5. 併發式/並行式 (Concurrent/Parallel)

 

表明語言:Erlang/Oz

核心概念:進程/線程 (Process/Thread)

運行機制:進程/線程間通訊與同步

關鍵突破:突破串行的限制

實現原理:引入並行的線程模塊及模塊間的通訊與同步機制

主要目的:充分利用資源、提升運行效率、提升軟件的響應能力

經常使用應用:圖形用戶界面, I/O處理, 多任務系統如操做系統,網絡服務器等,實施系統,嵌入式系統,計算密集型系統如科學計算機、人工智能等

 

6. 範型式 (Generic)

 

表明語言:Ada/Eiffel/C++

核心概念:算法(Algorithm)

運行機制:算法實例化(多發生於編譯期)

關鍵突破:突破靜態類型語言的限制

實現原理:利用模版推遲類型指定

主要目的:提升算法的普適性

經常使用應用:普適性算法如排序、搜索等,集合類容器等

 

7. 元編程 (Metaprogramming)

 

表明語言:Lisp/Ruby/JavaScript

核心概念:元程序(Metaprogram)

運行機制:動態生成代碼或自動修改執行指令

關鍵突破:突破語言的常規語法限制

實現原理:利用代碼生成或語言內建的反射(reflection)、動態等機制,將程序語言做爲數據來處理

主要目的:減小手工編碼,提高語言級別

經常使用應用:自動代碼生成、定義結構化配置文件、IDE、編譯器、解釋器、人工智能、模型驅動架構(MDA)、領域特定語言(DSL)等

 

8. 切面式 (Aspect-Oriented)

 

表明語言:AspectJ/AspectC++

核心概念:切面(Aspect)

運行機制:在接入點處執行建議

關鍵突破:突破橫切關注點沒法模塊化的限制

實現原理:經過編織(weaving)將附加行爲嵌入主體程序

主要目的:實現橫切關注點分離

經常使用應用:日誌輸出、代碼跟蹤、性能監控、異常處理、安全檢查、事務管理等

 

9. 事件驅動 (Event-Driven)

 

表明語言:C#/VB.NET

核心概念:事件(Event)

運行機制:監聽器收到事件通知後做出響應

關鍵突破:突破順序、同步的流程控制

實現原理:引入控制反轉和異步機制

主要目的:調用者與被調用者在代碼和時間上雙重解耦

經常使用應用:圖形用戶界面、網絡應用、服務器、操做系統、IoC框架、異步輸入、DOM等

相關文章
相關標籤/搜索