1. 程式人生 > >《構建之法》讀後感

《構建之法》讀後感

關鍵字 分析 解決 編程技術 幫助 ren 質量管理 bsp 藝術

編程是藝術,開發是工程
比起一門編程語言,軟件工程的入門過程,要難得多。蓋因一門語言,其語法、關鍵字、系統庫和常用工具,總是確定而有限的。
而軟件工程,作為工程學的一個門類,它肩負著在軟件開發的過程中,將種種條件確定下來,將資源安排妥當,使工作過程確定清晰,產出穩定可靠的責任。
這其中的微妙和復雜,往往在經典的教材中也不能充分表達。其中大量與人的協作,與時間的較量,其經驗和體會,都是要在實踐中才能慢慢積累起來。
這就使得軟件工程課程,在學習過程中,常常處於一個尷尬的位置。一方面我們都會宣稱它非常重要,另一方面,我們卻很難從中得到收益。一方面我們都反對形式主義的軟件工程,另一方面因為難以落實,使得我們最終總是在實踐中流於形式。
軟件工程,作為軟件開發的一個基礎的知識領域,它的學習過程,也迫切需要一個啟動的支點。
在這樣的背景下,得到鄒欣老師的《構建之法》,對我來說是非常驚喜的事情。這本書很好的解決的這個知識領域“從零到一”的問題。如果你是一個在校生,剛剛開始學習軟件工程,那麽你就是這本書潛在的目標讀者。
Build To Learn 到 Build To Win
Build To Win 是 《構建之法》一書的英文名。這本書很好的闡述了如何逐步改進軟件開發過程,鄒欣老師將不同的階段和形態形象的區分為:
? Build To Learn:開發軟件,構建系統的目的是做進一步的試驗,試圖發現客觀規律或某個試驗方法的優點與缺點。這些項目經常是科研論文的基礎工作。
? Build To Show:為了突出地展現某個技術的作用,開發一些演示為目的的軟件,這些項目很吸引眼球,經常獲得新聞報道,但是功能未必全面。
? Build To Serve:為了服務一定範圍的目標用戶而構建的工具等,有時以公開的SDK形式發布。
? Build To Win:以在市場上贏得用戶為目標而構建的軟件。這也是種種科學發現,技術突破最好的試金石。這是我在研究院之外的十余年中做的最多的項目類型,也是這本書的英文名字。
書中有針對性的設計了一個十六周的課表,可以供學校授課時使用,也可以供個人學習者或企業團隊實踐中估算學習用時。這本書是作者多年在高校實際進行軟件工程教學——我們這些同行,都很喜歡看鄒欣老師在微博上與學生的互動——的經驗總結,可以作為一門課程,在一個學期內完成。獨立的學習者,也可以遵循類似的時間線,即從環境和知識準備(代碼倉庫-測試工具等)到項目規劃和組織(由個人軟件開發過程開始,引入結對和團隊項目形態,以及相關的項目管理和測試工具),再到質量管理、發布、跟蹤維護、總結和改進等,循序漸進。
和我以前閱讀的其他軟件工程書籍一個很大的區別在於,作為教材,《構建之法》的啟動過程非常的平滑。有一些讀物是按照經典的瀑布模型,從需求分析,概要設計開始——是的,我教過這樣的教材。而本書則是從一個微型項目最有可能的起步過程開始:組建團隊、準備工具。
從經驗來講,版本管理工具和單元測試工具,也確實是非常適合上手的,這兩種工具見效快,學習相對簡單,一旦學會,學習者會迅速體驗到工程化開發帶來的好處:可回溯、可控制、可管理。
在其後,大量的章節用於討論協作、項目跟蹤和控制等環節,書中基本跳過了關於UML的討論,也沒有細致的討論一個完整的軟件項目可能會用到的所有技術。這種取舍非常有必要,也把握的很好。如果深入編程語言或UML這樣的方向討論,會迅速脫離整個軟件工程的大範疇,陷入某個局部或者範疇外的某處,難以自拔。
即使對於學校外的學習者,也不應該將這本書視為完整的學習一個項目開發過程的指導,而應該按照這個過程去執行一個自己選擇的項目來學習。這樣的設定保證了全書的內容專註於軟件工程本身的學習,不至於失之繁冗,也可以讓學習者從一個技術上對自己比較有利的項目。這個項目所需的技術對於讀者應該盡可能比較熟悉,盡量不需要學習太多。畢竟這裏我們要學習的是軟件工程,而不是編程技術。
書中一個很有意思的地方在於,每一個假設的情景都很活潑形象。事實上我多年以前讀過的另一本微軟出版的技術書籍,就曾經著重介紹過故事卡片在微軟開發過程中的使用。微軟的優秀團隊很擅長使用這個工具。從我的經驗來講,故事卡也是一個很實用的軟件工程手段。它可以作為需求分析的草稿,也可以用來引導思考,建立用例圖和概要設計等。即使不將故事卡作為正規工具的團隊,個人在工作過程中,建立故事卡也可以很有效的幫助自己。但是其實這項技能是可以練習的。

讀完這本書後,我回顧了自己大一的生活,大一c語言課雖然有上機實驗課,但是大多數問題都是自己百度,用一個模板來解決這些問題,沒有自己的思路和方法,其實也就是生搬硬套別的人的方法,我感覺這對自己的程序設計能力沒有任何的提高。通過閱讀構建之法,書中更多的是教給讀者怎麽去用一些工具去自主設計自己的程序,在練習中學習,在練習中找到自己的知識盲區。我想在以後大學三年裏,作為一個軟件工程的學生,良好的程序設計能力是我所必備的,我要勤於練習,在練習中找不足,找到屬於自己的程序設計風格,提高自己的代碼能力,向一名優秀的JAVA工程師努力。

《構建之法》讀後感