日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

complete_code_Chapter2

發(fā)布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 complete_code_Chapter2 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

《代碼大全》讀書筆記

Chapter2 Mataphors for a Richer Understanding of Software Development

第 2 章 用隱喻來更充分地理解軟件開發(fā)


2.1 The importance of Metaphors

2.1 隱喻的重要性

通過把你不太理解的東西和一些你較為理解、且十分類似的東西做比較,你可以對這些不太理解的東西產(chǎn)生更深刻的理解。這種使用隱喻的方法叫做“建模(modeling)”.

2.2 How to Use Software Metaphors

2.2 如何使用軟件隱喻*

算法和隱喻的區(qū)別

  • 算法是一套定義明確的指令,使你能完成某個特定的任務(wù)。
  • 算法是可預(yù)測的(predictable)、確定性的(deterministic)、不易變化的(not subject to chance)。
  • 啟發(fā)式方法(試探法)是一種幫助你尋求答案的技術(shù),但它給出的答案是具有偶然性的(subject to chance),因為啟發(fā)式方法僅僅告訴你該如何去找,而沒有告訴你要找什么。
  • 一個告訴你如何從A點到B點的算法,不會讓你繞路,不會讓你額外地經(jīng)過D、E、F等地方,更不會讓你停下來聞聞玫瑰花或喝咖啡。
  • 啟發(fā)式方法并不會告訴你該如何直接從A點到達(dá)B點,它甚至可能連A點和B點在哪里都不知道。

舉個例子來說,駕駛汽車到達(dá)某人的家,寫成算法是這樣的: 沿167號告訴公路往南行至Puyllap;從South Hill Mall出口出來后往山上開4.5英里;在一個雜物店旁邊的紅綠燈路口右轉(zhuǎn),接著在第一個路口左轉(zhuǎn);從左邊褐色大房子的車道進去,就是North Cedar路714號。

用啟發(fā)式方法是這樣的: 找出上一次我們寄給你的信,照著信上的寄出地址開車到這個鎮(zhèn);到了之后你問一下我們的房子在哪里。這里每個人都認(rèn)識我們——肯定會有人愿意幫你的:如果你找不到人,那就找個公共電話亭給我們打電話,我們會出來接你。

那么該如何使用軟件中的隱喻呢?應(yīng)該用它來提高你對編程問題和編程過程的洞察力;用它來幫助你思考編程過程中的活動,想象出更好的做事情的方法。你不可能看到一行代碼并說它違反了本章所描述的某個隱喻。但隨著時間的流逝,人們會發(fā)現(xiàn),相對于不善于運用隱喻的人來說,那些使用隱喻來照亮自己的軟件開發(fā)過程的人,他對于編程的理解會更好,并且能夠更快的寫出更好的代碼。

2.3 Common Software Metaphors

2.3 常見的軟件隱喻

Software Penmanship:Writing Code

軟件中的書法:寫作代碼

對于個人規(guī)模的工作乃至小型的項目來說,這種寫信的隱喻已經(jīng)足夠了,然而對于其他場合而言,這個隱喻還遠(yuǎn)遠(yuǎn)不夠——它沒有完整的、充分刻地刻畫軟件開發(fā)工作。

Software Farming:Growing System

軟件的耕作法:培植系統(tǒng)

Software Oyster Farming:System Accertion

軟件的牡蠣養(yǎng)殖觀點:系統(tǒng)生長

你需要學(xué)會如何一次為軟件系統(tǒng)增加一個小部分。跟“生長”密切相關(guān)的另一些詞語有:“增量的(incremental)”、“迭代的(iterative)”、“自適應(yīng)的(adaptive)”、以及“嚴(yán)謹(jǐn)?shù)?evolutionary)”。以增量的方式進行設(shè)計、編譯和測試,都是目前已知的最強有力的軟件開發(fā)概念。 在進行增量式開發(fā)時,我們先做出軟件系統(tǒng)的一個盡可能簡單、但能運行的版本。它不必接受真實的輸入,也無須對數(shù)據(jù)進行真正的處理,更不用產(chǎn)生真實的輸出——它僅僅需要構(gòu)成一個足夠強壯的骨架,支撐起未來將要開發(fā)的真實系統(tǒng)。對于你標(biāo)志出的每一項基本功能,可能僅需要調(diào)用虛假的類(dummy class)。這個最基本的起點,就像牡蠣開始孕育珍珠的那顆細(xì)小沙粒。 在骨架形成之后,你要一點點地在其上附著肌肉和皮膚:把每個虛假的類替換為真正的類;不再假裝接受輸入,而是把接收真實輸入的代碼替換進去;不再假裝產(chǎn)生輸出,而是把產(chǎn)生真實輸出的代碼替換進去。你一次增加一小部分代碼,直到得到一個完全可以工作的系統(tǒng)。

Software Construction:Building Software

軟件構(gòu)建:建造軟件

建造軟件的這一說法暗示了軟件開發(fā)過程中存在著諸多階段,如計劃、準(zhǔn)備及執(zhí)行等,根據(jù)所建造軟件的不同,這些階段的種類和程度可能會發(fā)生變化。進一步研究這一隱喻時,你還會發(fā)現(xiàn)許多其他方面的相似之處。 當(dāng)開發(fā)軟件時,你會大量使用高級語言所提供的功能,而不會自己去編寫操作系統(tǒng)層面的代碼。你可能還要用些現(xiàn)成的程序庫,比如說一些容器類(constainer class),科學(xué)計算函數(shù)、用戶潔面組件、數(shù)據(jù)庫訪問組件,等到。總之,自己編寫那些能買得到的現(xiàn)成的代碼通常是沒有意義的。 精心計劃,并非意味著事無巨細(xì)的計劃或過度的計劃。你可以把房屋結(jié)構(gòu)性的支撐(structural support)規(guī)劃清楚,而在日后再決定是用木地板還是地毯,墻面漆成什么顏色,屋頂使用什么材料,等等。一項規(guī)劃得當(dāng)?shù)捻椖磕軌蛱嵘恪霸诤笃诟淖兗?xì)節(jié)(設(shè)計)的能力”。你對同類軟件的開發(fā)經(jīng)驗越豐富,(在開發(fā)新軟件時)就能認(rèn)準(zhǔn)更多的細(xì)節(jié)。你只需要保證已經(jīng)做了足夠的計劃,不會到后來因為計劃上不足而引發(fā)重大問題。

Applying Software Techniques:The Intellectual Toolbox

應(yīng)用軟件技術(shù):智慧工具箱

技術(shù)并不是規(guī)矩(rule),它只是分析工具(analytical tools).好的工匠知道完成某項工作要用哪樣工具,也知道該怎樣正確地使用。程序員也該這樣。編程方面的知識學(xué)的越多,你腦中的工具箱中就會有更多的分析工具,也會知道該在何時用這些工具,以及怎樣正確地使用它們。 在軟件領(lǐng)域里,專業(yè)的咨詢?nèi)藛T有時會讓你用某種軟件開發(fā)方法而遠(yuǎn)離其他方法。這樣并不妥當(dāng),因為當(dāng)你百分之百地依賴于某一方法論時,你就只會用一種方法去看世界了。某些情況下,對于你所面臨的問題還有其他更好的方法,你可能錯失良機。這種“工具箱隱喻”能夠幫助你把所有的方法、技術(shù)以及技巧留在腦海中——合適的時候即可拿來就用。

Key Points

要點

  • 隱喻是啟示而不是算法。因此它們往往有一點隨意(sloppy).
  • 隱喻把軟件開發(fā)過程中其他你熟悉的活動聯(lián)系在一起,幫助你更好地理解。
  • 有些隱喻比其他一些隱喻更貼切。
  • 通過把軟件的構(gòu)建過程比做是房屋的建設(shè)過程,我們可以發(fā)現(xiàn),仔細(xì)地準(zhǔn)備是必要的,而大型項目和小型項目之間也是有差異的。
  • 通過把軟件開發(fā)過程中的實踐比做是智慧工具箱中的工具,我們又發(fā)現(xiàn),每位程序員都有許多工具,但并不存在任何一個能適用于所有工作的工具,因地制宜地選擇正確工具是成為能有效編程的程序員的關(guān)鍵。
  • 不同的隱喻彼此并不排斥,應(yīng)當(dāng)使用對你最有益處的某種隱喻組合。

轉(zhuǎn)載于:https://my.oschina.net/u/1771419/blog/1922187

總結(jié)

以上是生活随笔為你收集整理的complete_code_Chapter2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。