一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

什么是好代碼?

  1,定義

  讓我們來談?wù)劥a。

  代碼重要嗎?當(dāng)然,代碼就是設(shè)計(jì)(Jack W.Reeves, 1992);代碼是最有價(jià)值的交付物。

  我們需要好代碼嗎?在給“好代碼”下個(gè)定義之前,這個(gè)問題無法回答。

  那么,究竟什么是好代碼?

  聞到硝煙味了嗎?哦不,戰(zhàn)爭從來不是好東西。

  對(duì)我而言,好代碼就是 “整潔可用” 的代碼。

  好代碼首先必須是“可用”的代碼,“可用” 是指代碼做了它應(yīng)該做的事情,而且做得不錯(cuò)。 如果讓你寫求絕對(duì)值的代碼,你就不能寫成求平方根的;如果讓你做一個(gè)文本編輯器,OK,你做出來了,它不是一個(gè)圖片編輯器,它確確實(shí)實(shí)就是一個(gè)文本編輯器。但是用戶輸入一個(gè)字要一分鐘,這也不能稱之為“可用”,因?yàn)樗鼪]達(dá)到“不錯(cuò)”的標(biāo)準(zhǔn),當(dāng)然,如果這個(gè)文本編輯器是給“慢星人”用的,你有理由認(rèn)為它是 “不錯(cuò)”的。那么,究竟怎樣才叫“應(yīng)該做”,怎樣才叫“不錯(cuò)”呢?也許客戶(用戶)的反應(yīng)(評(píng)價(jià))是唯一的標(biāo)準(zhǔn)答案。

  其次它需要整潔

  整潔是一個(gè)相對(duì)的詞,在我看來,它唯一的作用就是令維護(hù)簡單。如果你寫的代碼不需維護(hù)(沒有BUG、完成之后永遠(yuǎn)不會(huì)做功能改動(dòng)、沒有任何其它代碼基于這些代碼編寫等等,顯然,如果滿足了這些條件,沒人“有必要”來閱讀你的代碼),比如用完即拋的很簡單的一次性用品,那么只要“可用”就行了,不需要“整潔”。值得注意的是, 這里隱含了一個(gè)假設(shè)的前提條件:不保持代碼整潔的情況下,你能夠寫出“可用”的代碼。

  現(xiàn)實(shí)生活中相當(dāng)一部分(也許我可以說大部分)代碼是需要維護(hù)的,也就意味著它們?nèi)绻氤蔀楹么a,必須要整潔。

在繼續(xù)探討“整潔”話題之前,也許有必要先談?wù)?ldquo;復(fù)雜度”。

  2,復(fù)雜度

  什么是復(fù)雜度? 在本文中,我們所談及的復(fù)雜度是指軟件開發(fā)中的復(fù)雜度,很難給出精確的數(shù)學(xué)定義,雖然業(yè)界已經(jīng)有了各種相對(duì)嚴(yán)格的測量方法,但根據(jù)本文需要,這里只簡單的給出自己的定義:復(fù)雜度是事物復(fù)雜程度的量化描述,其大概等價(jià)于使軟件達(dá)到可用所需耗費(fèi)的勞動(dòng)(智力+體力)的總和。

  當(dāng)然,上述定義又引出了對(duì)“勞動(dòng)”的量化需求,本文更多的只需要對(duì)“復(fù)雜度“做相對(duì)的評(píng)估,不需要絕對(duì)的量化,所以這里簡單地用通用的行業(yè)描述:勞動(dòng) = 人月。

  無疑,(現(xiàn)有事實(shí)證明)軟件開發(fā)是復(fù)雜度很高的活動(dòng),我們有各種方法論、工具、最佳實(shí)踐等等等,其本質(zhì)都是為了降低軟件開發(fā)的復(fù)雜度,也就是:第一,使軟件達(dá)到可用的標(biāo)準(zhǔn);第二,盡可能地減少所需勞動(dòng)。

  那么,軟件開發(fā)為什么這么復(fù)雜呢?《沒有銀彈》給出了它的回答:所有軟件活動(dòng)包括根本任務(wù)——打造由抽象軟件實(shí)體構(gòu)成的復(fù)雜(現(xiàn)實(shí))概念結(jié)構(gòu),次要任務(wù)——使用編程語言表達(dá)這些抽象實(shí)體,在時(shí)間和空間限制內(nèi)將它們映射成機(jī)器語言。相應(yīng)的,軟件開發(fā)的復(fù)雜度由兩部分構(gòu)成:

  1) 來自根本任務(wù):根本困難——對(duì)復(fù)雜現(xiàn)實(shí)情況的抽象,這是軟件開發(fā)中固有的困難。

  2) 來自次要任務(wù):次要困難——通過特定表達(dá)方式讓計(jì)算機(jī)理解。這是受限于目前生產(chǎn)(方法、工具)的并非與生俱來的困難。

  更具體一些,軟件的復(fù)雜度來自這些:

  1) 規(guī)模:軟件實(shí)體可能比人類有史以來創(chuàng)造的其他任何實(shí)體都要復(fù)雜,計(jì)算機(jī)本身就比人類建造的大多數(shù)東西復(fù)雜,它擁有大量狀態(tài),這使得構(gòu)思、描述和測試都很困難,而軟件系統(tǒng)狀態(tài)又比計(jì)算機(jī)狀態(tài)多幾個(gè)數(shù)量級(jí)。同時(shí),軟件沒有兩個(gè)部分是相同的,至少在語句級(jí)別上,如果有,我們會(huì)將它合并成一個(gè)子函數(shù),在這個(gè)方面,軟件系統(tǒng)和建筑、汽車大不相同,后者存在大量重復(fù)的部分。另外它不僅僅導(dǎo)致技術(shù)上的困難,還引發(fā)了許多管理上的問題,它使全面理解變得很困難,從而妨礙了概念上的 完整性;它使所有離散出口難以尋找和控制;它引發(fā)了大量學(xué)習(xí)和理解上的負(fù)擔(dān),使開發(fā)慢慢地演變成一場災(zāi)難

  2)(容易)變化:軟件天生就是易變的,第一,因?yàn)槿藗兊南敕ū旧砣菀桩a(chǎn)生變化;第二,人們可能有這樣的錯(cuò)覺:軟件很容易變化——不需要太高的代價(jià),相對(duì)其他產(chǎn)品來說;第三,軟件必須演變才能成功。軟件實(shí)體的擴(kuò)展不是簡單元素的重復(fù)添加,而必須是不同元素實(shí)體的添加,大多數(shù)情況下,這些元素以非線性遞增的方式交互,因此整個(gè)軟件的復(fù)雜度以更大的非線性級(jí)數(shù)增長。

  3)(缺乏)一致性:物理學(xué)家和數(shù)學(xué)家都堅(jiān)信本源的存在,所有復(fù)雜的表象之下都必有簡單的一致的本源存在,如基本粒子,如通用原理。軟件工程師可能缺乏這種信念,他必須處理不同用戶習(xí)慣以及隨時(shí)間推移而變化的接口,這些變化是無規(guī)律的,僅僅由于不同的人——而不是上帝——設(shè)計(jì)的結(jié)果;另外他們還需要處理各種歷史遺留系統(tǒng)的兼容性所帶來的問題,這往往需要保持接口和歷史接口的一致性。從本質(zhì)上來說,這些都是不必要的,但軟件工程師必須處理它們——以及它們帶來的復(fù)雜度。

  4) 不可見性:幾何抽象是強(qiáng)大的工具,建筑平面圖、機(jī)械制圖、分子模型都幫助相關(guān)工作人員更好的理解及工作,軟件的客觀存在不具有空間的形體特性,因此沒有已有的表達(dá)方式能恰如其分的描述軟件。當(dāng)我們?cè)噲D用圖形描述軟件結(jié)構(gòu)時(shí),我們發(fā)現(xiàn)它不止包含一個(gè),而是很多相互關(guān)聯(lián)、重疊在一起的圖形,現(xiàn)有的描述方式都是強(qiáng)制將關(guān)聯(lián)分割,直到可以層次化一個(gè)或多個(gè)圖形(形成某種扁平結(jié)構(gòu))。這種缺憾限制了個(gè)人的設(shè)計(jì)過程,同時(shí)也嚴(yán)重阻礙了相互之間的交流。

  3,整潔

  日常生活中我們談起整潔,頭腦中大概會(huì)浮現(xiàn)出這樣的場景:每樣物品都有序地?cái)[放在它應(yīng)該在的地方,一目了然,并且一塵不染,非常干凈,令人愉快;同時(shí),不那么明顯的,整潔往往暗示著沒有多余的東西,東西越少,越容易保持整潔。

  整潔的代碼有同樣的特征:

  1) 有序,各得其所,模塊的歸模塊,接口的歸接口,實(shí)現(xiàn)的歸實(shí)現(xiàn)。

  處理對(duì)于人腦來說過于復(fù)雜的東西,自古以來有效的辦法就是分解,將大的分解成小的,使人腦在某一時(shí)刻只需要思考小的部分。要做到這點(diǎn),除了分解,還需要保持模塊和模塊之間聯(lián)系盡可能少,只有這樣你才能專注思考眼前這一塊,而不必過于擔(dān)心它和其它模塊的相互影響。同樣,只有這樣,當(dāng)軟件發(fā)生變動(dòng)的時(shí)候,你才不至于陷入焦油坑。

  相關(guān)術(shù)語:結(jié)構(gòu)化、分層、抽象、解耦、正交、降低依賴、大量原則(SRP、OCP、LSP…)

  2) 一目了然。

  流暢,沒有障礙,它應(yīng)該就是這個(gè)樣子,而不是別的樣子。任何維護(hù)工作的第一件事是什么?讀代碼。

  相關(guān)術(shù)語可讀、文字化編程(Kunth)、自解釋。

  3) 一塵不染。

  重點(diǎn)是保持。如果一直保持干凈,一旦出現(xiàn)污點(diǎn),將會(huì)顯得非常刺眼,自然會(huì)被清除。相反,一扇窗戶破了,若無人關(guān)心,最終整條街道都會(huì)腐化。

  相關(guān)術(shù)語:重構(gòu)、溫水煮青蛙。

  4) 只做必要的事,保持簡單。

  從奧卡姆開始,到建筑,到飛機(jī)制造。“完成”不是指不能再往里塞東西,而是指不能再往外拿任何東西。

  相關(guān)術(shù)語:KISS、敏捷。

  5) 令人愉快。

  成功永遠(yuǎn)令人愉快,美永遠(yuǎn)令人愉快。

  相關(guān)術(shù)語:詩歌

  4,其它

  也許你已經(jīng)發(fā)現(xiàn)了,如果保持代碼整潔,似乎就可以應(yīng)對(duì)多種復(fù)雜度(但不是所有),這也是為什么好代碼除了可用,還需要整潔

  本文只是描述我心目中的好代碼,并不打算說明如何編寫好代碼,那需要太多的篇幅(和太多的爭議)。所以,至此為止。

瘋狂的孩子你慢一點(diǎn),

把電話摘下然后消失一會(huì)兒,

對(duì)了,你可以放松一兩天,

你何時(shí)意識(shí)到……維也納在等著你?

        ——《陌生人》(The Stranger)  Bill Joel

it知識(shí)庫什么是好代碼?,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费激情网站 | 亚洲94vvv男人的天堂五月 | www.丁香| 一区二区成人国产精品 | 天天精品视频在线观看资源 | 四虎永久在线精品免费影视 | 免费看一区二区三区 | 91成人高清在线播放 | 69国产精品视频免费 | 久久精品伊人网 | 亚洲精品大片 | 综合久久影院 | 国产吧在线视频 | 五月婷婷七月丁香 | 精品久久久一二三区 | 激情综合网址 | 真实子伦视频不卡 | 成人在线观看视频免费 | 久久国产精品国产自线拍免费 | 色老板视频 | 伊人久久久久久久久久 | 亚洲国产精品免费视频 | 欧美高清狂热视频60一70 | 五月伊人婷婷 | 亚洲免费视频一区二区三区 | 中文字幕一区在线观看 | 亚洲成a人片77777群色 | 精品在线观看一区 | 色哟哟在线观看视频 | www.色婷婷 | 国产香蕉成人综合精品视频 | 一区视频在线 | 日韩一区二区在线播放 | 九一福利视频 | 亚洲一区二区成人 | 成人情趣视频无遮掩免费 | 成年人黄色网址 | 在线免费视频一区二区 | 成人开心激情 | 久久91精品综合国产首页 | 色妞精品一区二区 |