這次主要讀了建構之法的第十一章:分析和設計方法
其實在上課的時候,就特别想了解這一章節的主要内容了。當時老師講到了雞兔同籠的問題,這種問題的解法其實很多,這就考驗了我們分析問題的能力。如果仔細去思考,除了列出公式之外,小時候還曾聽過這樣的方法:就是讓所有動物先立起一隻腳,将所有腳的數量減一,再立起一隻腳,再減一。因為兔子有四隻腳,而雞隻有兩隻腳,是以這時,雞就已經一屁股坐到地上,而兔子沒有,這樣一來,剩下的所有腳便都是兔子的了。
問題雖然簡單,其實裡面有一個很淺顯的道理。隻要思路找到了,便可以将複雜的問題簡化。列出公式和矩陣就是思路的建構方法之一。是以我們要學會去分析問題,在解決問題的時候分析問題和設計思路往往最為重要。但是,我認為,如果要有這樣的能力,首先,應該積累覺絕對的代碼量。其次,應該掌握一定的方法,方法和經驗往往是解決問題最快的出路。第三,理應有一顆熱衷于探索并且不屈不撓的心。以下是我從書裡找到的一些分析和設計的方法:
圖形模組化表達實體和實體之間的關系:
1.思維導圖:“一圖勝千言”,人們經常用圖形來幫助他們了解概念,強化記憶。思維導圖是其中的一個例子。思維導圖沒有嚴格的文法定義,一般來說是從圖形的正中開始寫下一個概念,然後按照繪圖者所關心的屬性擴充,幾乎每個人都能馬上開始畫圖。這個看似簡單的工具其實很适合團隊一起讨論和了解核心概念——例如,我們的主要使用者有什麼特點、什麼需求。
2.實體關系圖:如果我們着重于表達現實世界中的實體和它們之間的關系,那麼實體關系圖ERD是最自然的表達方式。
書中所提到的一些設計方法:
1.形式化的方法
很多軟體需求(例如計算機語言的編譯器)可以抽象為對符号的運算和變換,很多軟體的某些核心功能需要嚴密地驗證,保證沒有問題。一些科學家一直在努力,希望用無歧義的、形式化的語言描述我們要解決的問題,然後用嚴密的數學推理和變換一步一步把軟體實作出來,或者證明我們的實作的确完整和正确地解決了問題。在這個領域一個比較成熟和經過實踐考驗的方法是Vienna DevelopmentMethod(VDM)
2. 文學化程式設計
程式員在寫程式的時候,要了解在文檔中的需求,同時還要在程式裡寫相關的注釋,這些不同目的的“寫作”各有價值,但是一旦需求或程式發生變化,這些不同的文檔很難保持同步。更不用說程式員最常見的毛病“我以後會加上注釋的……”Donald Knuth在20世紀70年代末開始嘗試并提倡Literate Programming的思想并在自己的軟體項目中身體力行。這一方法和常見的“寫程式,時不時加上一些注釋”相反,它是“寫文檔,時不時有些代碼”。它使用了宏(Macro)來進行抽象和資訊隐藏。通過工具的支援,它的源代碼可以提取出讓計算機編譯執行的部分以及文檔。
對于建構之法這本書自然隻是學了一些皮毛,不過在接下來的時間裡,必然細細研讀,這對于正走在程式員之路上的我來說,必定獲益匪淺。