官术网_书友最值得收藏!

自 序
PREFACE

開發軟件離不開編寫代碼,但僅僅具備編程的技能也還不足以勝任開發軟件的工作。這就好比一個人會燒磚、砌墻,但要造一間可供人居住的屋子,他還得了解屋子的結構、不同房間的功能、水電管線的敷設、墻面地面的裝修等方面的知識。對軟件開發人員來說,編程領域的知識往往是最受關注的,它們確實也可以分為多個層次:編程語言本身的知識(如C、Java),編程范式和思想,面向對象編程和函數式編程,開發框架的知識(如Spring、AngularJS),等等。一個新人若想以軟件開發為職業,大概需要閱讀的范圍就會集中在以上方面。然而,當他開始項目開發時,就會發現還有許多實際的問題需要考慮和解決,軟件開發并不像編程教材上的代碼樣例和習題那樣專注于某個算法或思想。

不妨考慮一個典型的業務系統,它是一個圖形用戶界面的程序,因而需要采用某種GUI框架開發界面;用戶在界面上的操作通過事件機制調用相應的處理程序;用戶界面、事件處理程序和體現需求的業務邏輯必須組成某種合理的結構,否則系統會隨著功能的增加迅速變得難以理解和維護;系統越大,組件越多,越需要適當地保持它們之間的依賴關系,合理地應用接口是關鍵;這個業務系統顯然比所有數據都來自即時輸入的計算器復雜,許多信息要往返于數據庫;最后,這是一個多用戶使用的系統,必須適應不同用戶的權限需求。編程語言和范式的理論知識沒有觸及這些實際的問題,開發框架雖然涉及實踐,卻又局限在具體的方案中,不易讓人獲得對知識的一般理解。

軟件開發實踐中遇到的各個方面的問題往往缺乏系統的理論,程序員憑著各自的理解動手,或者知其然而不知其所以然,或者每個人的所以然有出入甚至矛盾。例如,針對接口編程就是盡量多用接口嗎?事件驅動編程的本質是什么?怎么樣算是應用了MVC架構?極簡主義就是越簡單越好嗎?文檔型數據庫和關系型數據庫的優劣各體現在什么地方?基于角色的存取控制系統是如何理解權限的?在主流的軟件開發理念之外能否另辟蹊徑?客戶端和瀏覽器之間的競爭究竟意味著什么?對這類實踐中涉及的概念和遇到的問題,如果追根溯源,多思考一些是什么、為什么和怎么做,達到融會貫通的理解,既對實際開發有幫助,又有益于在紛繁多變的技術浪潮中看清技術的本質、把握解決問題的方向。

本書從以上思路出發,逐個討論軟件開發實踐中的重要主題。第1章辨析對象間的依賴和針對接口編程。第2章討論事件驅動編程的方方面面。第3章分析MVC架構的思想和實現。第4章比較圖形用戶界面的一些相關或對立的思想和技術,并介紹極簡主義潮流。第5章分析熱門的文檔型數據庫,并和關系型數據庫做對比。第6章討論存取控制的各個環節,分析基于角色的和基于屬性的存取控制的優缺點。第7章介紹快速的Lotus Notes程序開發。第8章探討軟件的興衰和客戶端的潮流。順序上靠前的章節內容具有一般性,不會依賴其后的部分,靠后的章節有可能應用前文的知識。編寫風格上每章力圖從主題的源頭和本質入手,遵循邏輯層層展開,盡量全面地遍歷主題涉及的方方面面。書中代碼為正在討論的理念和問題服務,只是示意性地勾勒出核心的部分,無關和繁冗的部分被省略。

野人獻曝,未免貽笑大方;愚者千慮,或有一得可鑒。

是為序。

作者

2018年5月

主站蜘蛛池模板: 南投市| 江孜县| 太仓市| 德庆县| 定陶县| 孟连| 开阳县| 云南省| 咸丰县| 富锦市| 嘉峪关市| 彭州市| 敦化市| 岚皋县| 商水县| 景宁| 中山市| 永和县| 咸阳市| 微山县| 乐业县| 微博| 龙门县| 渭源县| 依安县| 桂东县| 广南县| 龙江县| 尚义县| 黑河市| 泗阳县| 绿春县| 徐水县| 塔河县| 临猗县| 苗栗县| 珲春市| 克什克腾旗| 彝良县| 民乐县| 云林县|