每週一薦:程序設計語言原理、英國組曲

來自:http://game-lab.org/?p=181

書籍:《程序設計語言原理》

【簡介】

本書從爲什麼學習程序設計語言入手,深入細緻地講解了命令式語言的主要結構及其設計與實現,內容涉及變量、數據類型、表達式和賦值語句、控制語句、子程序、數據抽象機制、支持面向對象程序設計(繼承和動態方法綁定)、併發和異常處理等方面。最後兩章介紹了函數式程序設計語言和邏輯程序設計語言。

【筆記】

作爲一個程序員,一般只有精通一門程序設計語言就可以勝任當前的工作了。當往往進入一個新的項目,或者重新選擇一份工作,或者自己發現當前的所使用的程序語言對於有些問題的解決,用着不是那麼方便,這個時候我們就傾向於去尋求一種合適的語言。比如,我最近在工作過程中,發現當前項目其實缺少很多工具,我們開發主要用的是C++,一個個對於C++不能說的上精通,但各種語法與庫也瞭然於胸,用C++去寫一些工具的時候就發現細枝末節太多、太煩人,數據庫、XML文件解析、字串處理雖說都有庫支持,但總感覺用着不那麼順手,速度也沒那麼快,還不如找一個腳本語言快速開發一個,Python正和我意。

程序語言之間有很多共同之處,往往當你精通一門之後,學習其它語言就觸類旁通了。需要做的事情就是熟悉它的語法,如果能看懂相應的BNF(巴克斯——勞爾範式)那就更好了,遇到模棱兩可的語法問題,多去查查就好了。語義一般都大同小異,當你知道了程序言的各種機制的實現之後,對其語義的理解就更加深刻了。《程序設計語言原理》這邊書相當於程序語言各種機制的總結,同時對於我們去學習新語言也指出一條清晰的思路,對現在正在用的語言也有更加深刻的認識了。

程序語言的分類:

  • 命令式語言:使用最多的,如:C/C++/Java/VB/Pascal等所有主流語言。主要是因爲馮諾依曼計算機模型(處理器負責計算,內存負責存儲中間結果)。
  • 面嚮對象語言:基於數據抽象的封裝,提出類、對象、繼承、動態綁定等概念,用來模擬問題領域出現的事物。C++/Java最好的例子了。
  • 函數式語言:這種類型的語言是基於阿隆佐·邱器(Alozo Church,阿蘭·圖靈的師傅)提出的lamda演算,語言中一切皆函數。Lisp就是典型的函數式語言。
  • 邏輯語言:基於謂詞演算,可以進行邏輯推理的語言,如:Prolog(這種類型的語言至今還沒用過,只是聽說過大名~~)

命令式語言的學習思路:

  1. 名字、變量、綁定
    • 名字是否大小寫敏感?那些是關鍵字?那些是保留字?
    • 變量六個基本屬性:名字、地址、類型、值、生存期(時間)、作用域(空間)
    • 變量類型檢查?強類型嗎?
    • 變量的作用域如何?靜態作用域、快、動態作用域?
    • 變量的生存期如何?精通變量、棧動態變量、顯示堆動態變量、隱式堆動態變量(垃圾回收)?
  2. 數據類型
    • 基本類型:數值類型(整數、浮點數、複數、小數)、布爾類型、字符類型
    • 字符串類型
    • 序數類型:枚舉、子範圍類型
    • 數組類型
    • 關聯數組
    • 記錄類型
    • 聯合類型
    • 指針類型
    • 引用類型
  3. 表達式與賦值語句
    • 算術表達式
    • 關係表達式
    • 布爾表達式
    • 操作符號的優先級、結合性
    • 操作符號的重載
    • 賦值語句:簡單賦值、條件目標、符合複合賦值操作符、列表賦值、混合模式賦值
  4. 控制結構
    • 選擇語句:雙向選擇語句(if… else …)、多向選擇語句(switch .. case ..)
    • 循環語句:計數器循環(for …)、邏輯控制循環(while)、用戶定位的控制循環(break、continue)
    • 無條件跳轉(goto)
  5. 子程序(過程抽象)
    • 過程
    • 函數
    • 參數傳遞語義模式:輸入形、輸出型、輸入輸出型
    • 參數傳遞實現模式:按值傳遞、按結果傳遞、按值與結果傳遞、按引用傳遞
    • 參數的類型檢查
    • 局部引用環境:局部變量、嵌套子程序
    • 重載子程序
    • 通用子程序(如:C++函數模板)
  6. 面向對象的程序設計(數據抽象)
    • 抽象數據類型
    • 繼承
    • 動態綁定

以上大概列舉了一個語言的所有特性,有些語言支持、有些語言不支持。語法不盡相同,但語義一般都是相同的。只要按着上面列舉的順序,確定好某一種語言的語法形式,我相信你我都會很容易學會一門新的語言。上述的僅僅是學會了一門程序設計語言,爲了解決實際問題其實我們還面臨着無盡的長路,問題的模式和相應的程序語言庫等都需要慢慢去熟悉和學習。

所以我認爲,精通一門語言並不代表着你會用那種語言寫一些不算糟糕的程序,還意味着必須知道常見的問題模式及其對應的程序庫,並且爛熟於心,遇到問題時候很自然地就會用到它。當然每種語言還有它獨有的一些技巧和使用注意事項,對這些也要必須有所瞭解。千萬不要自稱:“我精通xxx語言”,其實我們只是“會”用它寫一些程序而已,所謂的精通者必定對這門語言有着極其深刻的理解和認識、甚至編譯器效率,各種細微之處也瞭然於胸。(以上僅爲個人觀點)

音樂:巴赫的《英國組曲》

【簡介】

巴赫的英國組曲是17世紀鍵盤名作,根據最新考證應該寫於巴赫服務魏瑪宮廷時期(1708-1717)。各曲都充滿協奏曲的華麗精神,具有典型的德國風格,因爲巴赫將樂譜獻給某英國貴族,所以被稱之爲《英國組曲》。《英國組曲》共有六號,在規模、表現力以及情感上都比巴赫的同類鍵盤作品《法國組曲》要龐大。這些組曲有的短小但意境廣博,有的具有浪漫的氣息,有的清新內斂,有的莊嚴肅穆。用現代鋼琴來演奏這部巴洛克的復調作品更有一番迷人的風韻。明朗、快樂又清澄的第一號;華麗卻流露出女性般的柔美與優雅的第二號,而陰暗感傷味較沈的第三號,流露牧歌氣氛的華麗組曲的第四號,有威嚴威、作曲法很用心的第五號,隱藏陰暗熱情的第六號。

【評價】

聽着很舒服,很安靜,特別是晚上一個人的時候。看着書,聽着bach的音樂,思考一些問題。

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