《人月神話》作者Frederick P. Brooks, Jr.論設計原本

  很少有人像Frederick P. Brooks, Jr. 一樣對軟件開發的實踐(而不是學術理論)產生那麼大的影響。他在《人月神話》中記錄了他作爲IBM System/360計算機以及Operating System/360項目領導者的經驗,這些經驗不斷地促使我們形成項目管理的觀念。很難找到比他的“沒有銀彈:軟件工程中的根本問題和次要問題” (《Information Processing 1986, Proceedings of the IFIPS Tenth World Computer Conference》,H.-J. Kugler編輯。Amsterdam: Elsevier Science, 1069-1076)一文被引用更多的文章。“銀彈”的概念代表了對困難的軟件和編程問題的某種近乎神奇的解決方案,這是我們的詞彙表中不可缺少的一個詞。
Brooks的這本新書《設計原本》 (The Design of Design)拓展了他以前的思想,添加了對設計的本質和重要性的新領悟。毫無疑問, 《設計原本》 將會成爲所有專業開發者書架上必備的書籍。
 《設計原本》 的副書名是“計算機科學巨匠Frederick P. Brooks的思考”。書中包含了可以作爲獨立的文章進行閱讀的20章,每一章與其他章的耦合都比較鬆散。這是好事,因爲大多數讀者都希望閱讀本書的每一 章(不一定要按順序),然後在繼續下一章閱讀之前思考一下所講的內容。除了這些文章外,這本書還提供了8個案例,涉及的範圍從海灘小屋的設計到IBM System/360的架構。這些案例闡釋了本書中的一些重要概念。
什麼是設計?Dorothy Sayers(英國作家和戲劇家,Brooks引用了他的話)說設計有3個階段:概念構造的形成,在真實媒質上的實現,與真正用戶的交互。Brooks在 他的“銀彈”一文中指出,第一個階段(即概念構造)是軟件工程最困難的階段。但在1986年時,“概念構造”似乎更側重計算機在執行指令時內部發生了什 麼。在這本新書中,關注的重點更多地轉移到架構、外觀,以及程序工件與環境的交互上。有趣的是,Brooks在第1章的開始引用了培根的話:
(新思想來自於)將一門藝術中的領悟聯繫並應用到另一門藝術中,歷經若干次這樣的經歷而有所悟,腦海裏自然就孕育出了“新思想”。
這清晰地表達了跨學科的靈感和鍛鍊。Brooks沒有深入這個概念,即使在後面的內容中討論如何“創造”了不起的設計師時,他也沒這樣做。
有幾章討論了設計和設計過程的模型。Brooks在這裏嚴厲批評了流行的“理性主義者”設計模型(讀者可能最熟悉的就是“瀑布方法”),並斷 言“理性模型過於簡單”。書中指出了理性模型的諸多缺陷,包括“對理性模型的最具破壞性的批評可能是,最有經驗的設計完全不是這樣工作的”。(在本書中提 到David Parnas多次,但沒有提到他的著名文章“The Rational Design Process: How and why to fake it”,這篇文章也對理性模型提出了嚴厲批評。)本書對其他一些設計模型也進行了討論,包括:

  • 迭代演進式開發,與此最接近的是Brooks對敏捷方法的討論。
  • Boehm的螺旋模型。
  • 開源的、Raymond的“集市模型”。

  這些討論的結論是:設計需要某種過程以及該過程的模型(主要是爲了溝通並支持協作),Barry Boehm的螺旋模型是Brooks認爲最有希望的模型。
《設計原本》中的其他章節關注了以下幾個問題:

  • 協作與團隊設計,包括遠程協作所引發的問題。
  • 關於“理性主義”與“經驗主義”的討論,Brooks自認是一個經驗主義者。
  • 約束條件的價值。其中印證了許多“設計”文獻,這些文獻來自工業、產品和圖形設計師。設計草案(用於啓動設計過程的文檔)必須足夠模糊,允許自由思考和表達,但必須清楚定義所有的約束條件。約束條件勾畫出邊界,創造性的、有想像力的、創新的設計將在這個邊界之內發生。
  • 討論美與風格。
  • 一些關於設計技術和實踐的討論,Brooks發現它們是有價值的。
  • 需求、罪過與合約。
  • 一個案例,講述了爲什麼任務控制語言(Job Control Language, JCL,如果你沒有在大主機上工作的愉快經歷的話)可能是“有史以來最糟糕的編程語言”!

  本書末尾用兩章的篇幅討論卓越的設計和卓越的設計師的問題。Brooks果斷指出,卓越的設計來自卓越的設計師,而非卓越的設計過程。 Brooks說,我們教育和培訓軟件專業人員的方式無助於培養出卓越的設計師。他指出,培養卓越的設計師的一個主要障礙就是缺少持續的實踐和批評。

InfoQ有機會對Brooks提出了一些跟進問題,本文包括了這次訪談的內容。問題與回答如下:
開發項目有一個生命週期,要麼是經典的線性瀑布式,要麼是迭代增量式(敏捷)。設計是在生命週期特定階段發生的事情,還是分佈在所有階段?
它集中發生在迭×××發的前面幾次循環,但有時候發生在所有迭代中。

 如果設計發生在所有的開發階段中,是否在每個階段中具有不同的形式、實質或要點?
當然是這樣的!在第一次迭代中,總體架構是中心問題。在接下來的迭代中,設計工作集中於更精細的層面,除非是在滿足最後期限之後的回溯,或者人們意識到需求的改變或新的機會。

  約束條件在設計過程中扮演什麼角色?(本問題的背景知識:其他領域的設計師常常依賴一份“草案”,他們預期/需要草案中有模糊之處,以便能夠自由地“設計”,但他們需要清楚表達約束條件,這些約束條件定義了目標區域,最優設計只能在這個區域中產生。)
它們既促成了整體架構,又在較小程度上促成了細節設計。

是否有明顯可以確定的設計“錯誤”,它們是否能在犯下時就可以意識到?(或者,這樣的錯誤是否像代碼中的缺陷,通常需要在犯下之後許久才發現?)
大錯是在開始時犯下的,而且很少意識到。如果最終被發現,通常是在現場實施之後。較小的錯誤是在編碼開始時出現,或者是在第一個真正的用戶測試原型時被發現。

大多數設計師認爲他們的活動是高度協作的,至少是客戶與設計師之間的協作,但設計更多時候涉及一個團隊。您是否同意設計是一種協作?如果是這樣,設計團隊的地理分佈或臨時分佈會帶來什麼影響?(顯然,在今天的離岸外包環境中尋求並行設計,以應對軟件開發的一般挑戰。)
我用了兩章討論協作和遠程協作。是的,今天大多數的設計都涉及團隊。通用產品的設計不涉及與客戶的協作,如iPad。對於爲一個客戶設計定製 的產品,我非常喜歡對原型和代用品(如建築的虛擬環境模型)儘早地、激烈地、頻繁地、不斷地進行用戶測試。但是,我不認爲這是與用戶和客戶進行協作設計。

您是否有一份清單,例如6點建議,可以總結您的書向設計者提供的最重要的經驗?
1)專心研究以前設計者的工作,看看他們如何解決問題。
2)嘗試弄明白他們爲什麼做出那樣的設計決定,這是對你自己最有啓發性的問題。
3)仔細研究以前設計者的風格。最好的方式是嘗試用他們的一些風格勾畫設計草圖。
4)保存一本“草圖本”,將您的想法、設計和局部設計記錄下來,不論使用何種媒質。
5)在開始設計時,寫下您對用戶和使用方式的假定。
6)設計、設計、設計!

在您的“銀彈”文章中,您談到了“概念構建”和人類在頭腦中完成這項工作時遇到的巨大困難。您覺得在這本書中一些思想是否關注並解決了概念構造這一基本困難?
肯定關注了,肯定沒解決。

在第3章中,您漂亮地批評了理性設計過程,特別是瀑布式方法所包含的理性設計思想,並指出這種思想是有害的,必須拋棄。您對這種有害模型的持 續存在有何看法?是否人們就是很倔強?或者儘管開發者更瞭解,但管理層會犯錯?是否有一些文化上的偏見(尤其是西方文化上的偏見)阻礙人們拋棄瀑布模型?
第4章討論了軟件工程中的瀑布模型的持續存在(在其他學科中並不常見)是因爲設計者過早期望得到有約束力的合同和確定的需求。

在第20章中,您批評了我們的教育系統(溫和,但確是事實),並建議設計者需要參與“批評性實踐”。Richard Gabriel長期以來一直主張計算機科學/軟件工程大綱應該採用他在取得詩歌碩士學位時一樣的大綱(他在很久之前獲得了計算機科學博士學位):大量的練 習(每天至少一首詩)、大量的批評(來自同學和導師)、勤奮學習大師和大師的詩歌、不斷自省、週期性的反省。這似乎與您的建議相似,那麼您是否主張大學提 供一個“軟件好藝術碩士”學位?
不。熊恩在《the Education of the Reflective Practitioner》一書中提出了同樣的建議,還有例子,更適合設計。所有的工程學大綱都應該強調這種方式。

哪些其他領域的研究將有助於畢業生變成卓越的軟件設計師?
1)算法和數據結構是最重要的基礎課程。
2)計算機硬件架構。
3)應用領域,特別是商業數據處理、數據庫技術和數據挖掘。
4)心理學,特別是知覺心理學,因爲用戶是最重要的。

理性設計過程,實際上是所有計算機科學和軟件工程,有意識地採用了宇宙的基本模型(20世紀的物理學),即確定性的、機械的、理性的宇宙。如 果那就是自然或現實,那麼理性的、搜索樹式的設計過程模型就很有意義。如果宇宙實際上是複雜的適應性系統,那麼理性模型就會失效。您是否走得更遠,奠定了 複雜系統的設計或修改過程的基礎,如文化或商務企業?
我不會自大到建議這樣的東西。

IDEO是一家非常有名的設計公司,它的總裁Tom Kelly寫了一些關於設計、設計過程和設計思考的書。他最好的一本書是《Ten Faces of Innovation》,其中他確定了每個設計團隊需要的10個角色(人類學家、實驗員、嫁接能手、跨欄運動員、合作者、指導者、用戶體驗設計師、佈景 師、專業護理人員和講故事的人)。如果您知道這本書,是否類似的角色應該出現在軟件設計團隊中?怎樣做到?
我不瞭解這本書。聽起來有趣,而且有用。

您提到了Christopher Alexander和他的影響並在註釋中提到了《The Synthesis of Form and A Pattern Language》一書。那代表了“理性的Alexander”,但“Timeless Way of Building”和他的傑作“Opus, Nature of Order”卻更爲“神祕化”。“神祕的Alexander”是否對您的設計和設計過程思想有所影響?
我受到了《The Timeless Way of Building》一書的影響。

軟件領域的設計將大多數注意力放在人工製品上,即執行程序的計算機。越來越多的實踐(但學術界還沒開始)開始關注“用戶體驗設計”,即計算機所處的系統和生態環境。對於用戶體驗設計者如何從本書中獲益,您是否有一些建議?
我覺得前面給出的建議同樣適用於用戶體驗設計,但這個領域與軟件工程領域相比,自由式教育更爲重要。

您能列舉出值得所有人學習的3名設計大師(任何領域)和3名軟件設計大師,4至5個設計傑作,並簡單說明爲什麼嗎?

  • 巴赫,作曲家
  • 倫勃朗,畫家
  • Seymour Cray,超級計算機設計師
  • Christopher Wren,建築,特別是他在倫敦設計的教堂
  • Nicholas Wirth,計算機語言
  • Donald Knuth,算法

  我不認爲所有的人都應該學習同樣的例子。人們需要接受範例的設計原則方面的基本教育,這樣才能深入研究一個範例,欣賞這些設計問題和解決方案。但是,即使是門外漢也能欣賞一致性和設計概念的統一性。

原文網址:http://www.infoq.com/articles/brooks-design-book-review

《設計原本:計算機科學巨匠Frederick P. Brooks的思考》中英文版同步上市,中文版預訂前500名享65折優惠!

搶購地址:http://www.china-pub.com/197442

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