complete_code_Chapter2
2019獨角獸企業重金招聘Python工程師標準>>>
《代碼大全》讀書筆記
Chapter2 Mataphors for a Richer Understanding of Software Development
第 2 章 用隱喻來更充分地理解軟件開發
2.1 The importance of Metaphors
2.1 隱喻的重要性
通過把你不太理解的東西和一些你較為理解、且十分類似的東西做比較,你可以對這些不太理解的東西產生更深刻的理解。這種使用隱喻的方法叫做“建模(modeling)”.
2.2 How to Use Software Metaphors
2.2 如何使用軟件隱喻*
算法和隱喻的區別
- 算法是一套定義明確的指令,使你能完成某個特定的任務。
- 算法是可預測的(predictable)、確定性的(deterministic)、不易變化的(not subject to chance)。
- 啟發式方法(試探法)是一種幫助你尋求答案的技術,但它給出的答案是具有偶然性的(subject to chance),因為啟發式方法僅僅告訴你該如何去找,而沒有告訴你要找什么。
- 一個告訴你如何從A點到B點的算法,不會讓你繞路,不會讓你額外地經過D、E、F等地方,更不會讓你停下來聞聞玫瑰花或喝咖啡。
- 啟發式方法并不會告訴你該如何直接從A點到達B點,它甚至可能連A點和B點在哪里都不知道。
舉個例子來說,駕駛汽車到達某人的家,寫成算法是這樣的: 沿167號告訴公路往南行至Puyllap;從South Hill Mall出口出來后往山上開4.5英里;在一個雜物店旁邊的紅綠燈路口右轉,接著在第一個路口左轉;從左邊褐色大房子的車道進去,就是North Cedar路714號。
用啟發式方法是這樣的: 找出上一次我們寄給你的信,照著信上的寄出地址開車到這個鎮;到了之后你問一下我們的房子在哪里。這里每個人都認識我們——肯定會有人愿意幫你的:如果你找不到人,那就找個公共電話亭給我們打電話,我們會出來接你。
那么該如何使用軟件中的隱喻呢?應該用它來提高你對編程問題和編程過程的洞察力;用它來幫助你思考編程過程中的活動,想象出更好的做事情的方法。你不可能看到一行代碼并說它違反了本章所描述的某個隱喻。但隨著時間的流逝,人們會發現,相對于不善于運用隱喻的人來說,那些使用隱喻來照亮自己的軟件開發過程的人,他對于編程的理解會更好,并且能夠更快的寫出更好的代碼。
2.3 Common Software Metaphors
2.3 常見的軟件隱喻
Software Penmanship:Writing Code
軟件中的書法:寫作代碼
對于個人規模的工作乃至小型的項目來說,這種寫信的隱喻已經足夠了,然而對于其他場合而言,這個隱喻還遠遠不夠——它沒有完整的、充分刻地刻畫軟件開發工作。
Software Farming:Growing System
軟件的耕作法:培植系統
Software Oyster Farming:System Accertion
軟件的牡蠣養殖觀點:系統生長
你需要學會如何一次為軟件系統增加一個小部分。跟“生長”密切相關的另一些詞語有:“增量的(incremental)”、“迭代的(iterative)”、“自適應的(adaptive)”、以及“嚴謹的(evolutionary)”。以增量的方式進行設計、編譯和測試,都是目前已知的最強有力的軟件開發概念。 在進行增量式開發時,我們先做出軟件系統的一個盡可能簡單、但能運行的版本。它不必接受真實的輸入,也無須對數據進行真正的處理,更不用產生真實的輸出——它僅僅需要構成一個足夠強壯的骨架,支撐起未來將要開發的真實系統。對于你標志出的每一項基本功能,可能僅需要調用虛假的類(dummy class)。這個最基本的起點,就像牡蠣開始孕育珍珠的那顆細小沙粒。 在骨架形成之后,你要一點點地在其上附著肌肉和皮膚:把每個虛假的類替換為真正的類;不再假裝接受輸入,而是把接收真實輸入的代碼替換進去;不再假裝產生輸出,而是把產生真實輸出的代碼替換進去。你一次增加一小部分代碼,直到得到一個完全可以工作的系統。
Software Construction:Building Software
軟件構建:建造軟件
建造軟件的這一說法暗示了軟件開發過程中存在著諸多階段,如計劃、準備及執行等,根據所建造軟件的不同,這些階段的種類和程度可能會發生變化。進一步研究這一隱喻時,你還會發現許多其他方面的相似之處。 當開發軟件時,你會大量使用高級語言所提供的功能,而不會自己去編寫操作系統層面的代碼。你可能還要用些現成的程序庫,比如說一些容器類(constainer class),科學計算函數、用戶潔面組件、數據庫訪問組件,等到。總之,自己編寫那些能買得到的現成的代碼通常是沒有意義的。 精心計劃,并非意味著事無巨細的計劃或過度的計劃。你可以把房屋結構性的支撐(structural support)規劃清楚,而在日后再決定是用木地板還是地毯,墻面漆成什么顏色,屋頂使用什么材料,等等。一項規劃得當的項目能夠提升你“在后期改變細節(設計)的能力”。你對同類軟件的開發經驗越豐富,(在開發新軟件時)就能認準更多的細節。你只需要保證已經做了足夠的計劃,不會到后來因為計劃上不足而引發重大問題。
Applying Software Techniques:The Intellectual Toolbox
應用軟件技術:智慧工具箱
技術并不是規矩(rule),它只是分析工具(analytical tools).好的工匠知道完成某項工作要用哪樣工具,也知道該怎樣正確地使用。程序員也該這樣。編程方面的知識學的越多,你腦中的工具箱中就會有更多的分析工具,也會知道該在何時用這些工具,以及怎樣正確地使用它們。 在軟件領域里,專業的咨詢人員有時會讓你用某種軟件開發方法而遠離其他方法。這樣并不妥當,因為當你百分之百地依賴于某一方法論時,你就只會用一種方法去看世界了。某些情況下,對于你所面臨的問題還有其他更好的方法,你可能錯失良機。這種“工具箱隱喻”能夠幫助你把所有的方法、技術以及技巧留在腦海中——合適的時候即可拿來就用。
Key Points
要點
- 隱喻是啟示而不是算法。因此它們往往有一點隨意(sloppy).
- 隱喻把軟件開發過程中其他你熟悉的活動聯系在一起,幫助你更好地理解。
- 有些隱喻比其他一些隱喻更貼切。
- 通過把軟件的構建過程比做是房屋的建設過程,我們可以發現,仔細地準備是必要的,而大型項目和小型項目之間也是有差異的。
- 通過把軟件開發過程中的實踐比做是智慧工具箱中的工具,我們又發現,每位程序員都有許多工具,但并不存在任何一個能適用于所有工作的工具,因地制宜地選擇正確工具是成為能有效編程的程序員的關鍵。
- 不同的隱喻彼此并不排斥,應當使用對你最有益處的某種隱喻組合。
轉載于:https://my.oschina.net/u/1771419/blog/1922187
總結
以上是生活随笔為你收集整理的complete_code_Chapter2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【云吞铺子之专家来了】CDN缓存解读和配
- 下一篇: Apache httpd Server