知識搬運工:設計是個了無章法的過程

這篇博客摘取於《代碼大全》第5.1章節——「設計是個了無章法的過程」。因爲做者在講述這一部份內容時詼諧有趣,語言簡潔卻頗有道理,所以忍不住給各位分享。幾乎徹底是原文照搬,無任何我的加工成分。網絡

--------------------正文分割線------------------------工具

軟件設計的成果應該是組織良好、乾淨利落的,然而造成這個設計的過程卻並不是如此清爽。編碼

說設計了無章法,是由於在此過程當中你會採起不少錯誤的步驟,屢次誤入歧途——你會犯不少的錯誤。事實上,犯錯正是設計的關鍵所在——在設計階段犯錯並加以改正,其代價要比在編碼以後才發現一樣的錯誤並完全修改低得多。說設計了無章法,還由於優、劣設計之間的差別旺旺很是微妙。spa

另外,說設計了無章法,還由於你很難判斷設計什麼時候算是「足夠好」了。設計到什麼細節纔算夠?有多少設計須要用形式化的設計符號完成,又有多少設計能夠留到編碼時再作?何時纔算完成?由於設計永無止境,所以對上述問題最多見的回答是:「到你沒時間再作了爲止」。設計

  • 設計就是肯定取捨和調整順序的過程

在一個理想的世界中,每一套系統都能即刻完成運行,不消耗任何存儲空間,不佔用任何網絡帶寬,沒有任何錯誤,也無須任何成本便可生成。而在現實世界裏,設計工做者的一個關鍵內容即是去衡量彼此衝突的各項設計特性,並盡力在其中尋求平衡。若是快速的反應速度比縮減開發時間更重要,那麼設計者會選區一套設計方案。而若是縮減開發時間更重要,那麼好的設計者又要巧妙地造成另外一套不一樣的設計方案。資源

  • 設計收到諸多限制

設計的要點,一部分是在創造可能發生的事情,而另外一部分又是在限制可能發生的事情。若是人們在建造房屋時擁有無限的時間、資源和空間,那麼你會看到房屋難以想象地因此蔓延,每幢樓都有上百間房子,一隻鞋子就能夠佔用一間屋子。若是毫無約束,軟件最後也會是這樣的結果。正是因爲建造房屋時有限資源的限制,纔會促使產生簡單的方案,並最終改善這一解決方案。軟件設計的目標也是如此。開發

  • 設計是不肯定的

若是你讓三我的去設計一套一樣的程序,他們極可能會作出三套大相徑庭的設計,而每套設計都很不錯。剝貓的皮可能有不止一種方法,但設計計算機程序卻一般有數十種方法。博客

  • 設計是一個啓發式的過程

正由於設計過程充滿了不肯定性,所以設計技術也趨於具備探索性——「經驗法則」或者「試試沒準能行的方法」——而不是保證能產生預期結果的可重複的過程。設計過程當中總會有試驗和犯錯誤。在一件工做或一件工做的某個方面十分奏效的設計工具或技術,不必定在下一個項目中適用。沒有任何工具是放之四海而皆準的。軟件

  • 設計是天然而然造成的

把設計的這些綜合特性概括起來,咱們能夠說設計是「天然而然造成的」。設計不是在誰的頭腦中直接跳出來的。它是在不斷的設計評估、非正式討論、寫試驗代碼以及修改試驗代碼中演化和完善的。程序

相關文章
相關標籤/搜索