精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹了五個簡單的總體概念 可輕松寫出寫出好代碼

機器學習算法與人工智能 ? 2018-01-10 14:00 ? 次閱讀

Bug 少,性能好,容易修改。好的代碼影響深遠,而且它可能是產生10 倍工作效率的開發者的主要原因。盡管好代碼十分重要,但開發新手卻不得要領。關于這一主題的技巧多而冗雜,讓新手們如何記得住?“Code Complete(《代碼大全》)” 是這個主題的經典,但內容多達 960 頁!

我認為應該建立起良好的心態,這樣,不管你用什么語言或者庫,都會自然而然的寫出高質量的代碼。這里我主要談到 5 個相關的概念。記住它們,輕松寫出寫出好代碼。

請避免特立獨行

當你讀到一些文章中的新技巧時,如醍醐灌頂,一定會想要寫點看起來很聰明的代碼,讓同行們眼前一亮。

問題是人們只是想修完 BUG,然后繼續處理其它事情。那些聰明的技巧常常只會成為一種消遣。我曾經在“將神經科學應用于軟件開發”中談到,當人們被迫花心思來理解你的某段代碼時,它們的“精神堆棧”會迅速填滿,因而難以理解其中深意。

介紹了五個簡單的總體概念 可輕松寫出寫出好代碼

[譯者注:圖片中的注釋內容:這在 C 語言中用于避免誤寫成 variable = null。最近它造成不少人困惑,但似乎并沒帶來多大好處]

不要在工作中使用太多可能需要額外解釋的個性化方式。

不要用“你的方式”來編寫代碼,只需要按照標準(的代碼規范)來編寫就好。再次強調,要寫讓人讀得明白,看得下去的代碼,讓人家能夠理解它。

分而治之

模塊化可以使復雜的代碼結構變得清晰,除此之外還有很多方法可以達到同樣的目的,而無需創建更多函數。將長長的條件表達式保存為一到兩個變量就是個不錯的方法,可以避免調用函數的開銷。這些變量可以用在其它地方,甚至可用于組合更復雜的條件。

拆解問題的方法在于盡可能的讓每個部分保持集中,只影響局部狀態,不要混入不相關的問題,要避免副作用。編程語言和庫通常會帶來各自相應的問題,避免這些問題可以讓你的代碼更專注于其表達的業務。單一責任原則就是通過集中代碼和局部化代碼帶來良好設計的例子。

[譯者注:圖中注釋內容:這是不需要額外函數開銷的一種模塊化方法]

我喜歡利用變量來進行邏輯劃分。

TDD(Test Driven Development,測試驅動開發)的成功實施表現出了它所帶來的好處,它迫使人們運用一些以前不受歡迎的準則。無狀態的代碼曾經被嫌棄又慢又沒必要(大部分老的 C/C++ 代碼中可以看到),然而現在每個人都在談論純函數。就算你不采用 TDD,你也應該學習它背后的原則。在新的模式下工作會讓你成為適應性極強的開發者。

分離代碼并使其可分別處理

你寫代碼的時候面臨著什么樣的困難,你的計算機和工具也面臨著同樣的困難。代碼的復雜性,與需要進行的預處理和需要處理的突發情況存在著或多或少的聯系。

現在暫時拋開那些額外的構建工具所帶來的好處。它們需要你使用特定領域的語言,比如自定義模板,或者復雜的動態數據結構,比如哈稀表。IDE 通常不善于處理這些東西,要找到相關的代碼段則更加困難。

盡量避免使用不能很好支持 IDE 的語言擴展和庫。它們給你的生產力帶來的好處,遠大于簡易配置和用簡潔語法保存擊鍵帶來的小便利。

[譯者注:圖中注釋內容:使用神奇的字體串可能造成 IDE 不能正確識別你的代碼]

ServiceLocator 是與 IDE 整合不佳的一個設計樣例。

另一個保持 IDE“整合度”的相關方法是避免編寫特殊的代碼。多數語言都提供了編寫動態代碼的能力。如果濫用這些特性,比如特殊的字符串、特殊的數組索引和自定義模板語言特性等,會產生難以連接的代碼庫[譯者注:這里的連接應該是指相互關聯的關系,連接最直接的影響是在使用 IDE 等工具進行重構的時候可以自動根據連接關系修改相關引用]。一般說來,那些只有你一個人才能看懂的特性會讓你摔跟頭的,因為如果 IDE 不能理解這些代碼,在你想進行結構調整的時候,IDE 就沒法幫你進行重構。

讓程序可讀

致力于可預測的架構。這種架構下你的隊友要進行某項查找就會很容易,可以節約不少時間。一旦你為項目確定了一個整體的架構,就一定要把主要元素放在顯眼的位置。使用 MVC?把模型、視圖和控制器放在他們自己的目錄下,不要放在三個深層次的目錄中,也不要放在幾個不同的地方。

我在前面談到了模塊化。也存在過度的模塊化,讓定位代碼這種事情變得艱難無比。IDE 可能會帶來一些幫助,但通常你往往會讓 IDE 忽略庫目錄,因為其中有很多不相關的代碼,或者它的索引需要人工處理一些問題,就會造成兩敗俱傷的局面。盡量使用較少的庫,選用那些盡可能多覆蓋你需求的庫。

庫和工具也可能成為新人的障礙。我最近使用 EcmaScript 7 (babel) 構建了一個項目,后來我才意識到我們的初級開發人員一直因為想搞明白它而卡在那里,這對團隊的生產力造成了巨大損失。我低估了這對一個新手所帶來的壓力。不要使用對當前來說太難掌握的工具,等時機成熟再使用。

介紹了五個簡單的總體概念 可輕松寫出寫出好代碼

這是我寫的一個 makefile 中的真實代碼。新手不需掌握過多的新技術。

讓代碼易于理解

如果你已經做到了這一點,那我們來解決更重要的問題——選擇好名字,這是軟件開發中的重要部分。構建工具在這方面不能提供幫助,原因很簡單,計算機不會真正知道解決方案背后的邏輯。你得通過文檔來解釋代碼,而與主題相關,且符合上下文,體現變量和功能的名稱就能很好做到這一點。語義化的名稱甚至可以減少對文檔的需求。

在名稱中使用前綴對理解它們很有幫助。這在過去是一種流行的做法,我認為對這種作法的誤用導致了它的消亡。像匈牙利命名法這樣的前綴系統最初只是為了增加意義,但最后用于其中的上下文越來越少,終于少得只剩類型信息

介紹了五個簡單的總體概念 可輕松寫出寫出好代碼

[譯者注:圖中的注釋內容:使用名稱來表達意圖,不要利用語言來耍小聰明]

近來,Fluent 接口經常被濫用。

最后要說說老生常談的回溯復雜度。簡單地說就是要盡可能減少條件分支的數目。每多一個分支都會增加縮進,同時降低可讀性。不過更重要的是,增加的東西越多,你需要跟蹤的東西就越多。

結論

本文介紹了五個簡單的總體概念,我希望你能從中輕松的學習到組織代碼的方法。

實踐是最好的老師,用編程來鞏固理論。如果你還沒有這樣做,我誠摯向你推薦代碼大全。它帶來了大量的示例,幾乎剖析了你可能遇到的每一種問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4747

    瀏覽量

    68348

原文標題:編寫良好的代碼:如何減少代碼的認知負荷

文章出處:【微信號:machinelearningai,微信公眾號:機器學習算法與人工智能】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    何為高質量的代碼?如何寫出高質量代碼

    懂得“數據結構與算法” 寫出高效的代碼,懂得“設計模式”寫出高質量的代碼
    發表于 08-02 09:44 ?777次閱讀
    何為高質量的<b class='flag-5'>代碼</b>?如何<b class='flag-5'>寫出</b>高質量<b class='flag-5'>代碼</b>?

    如何寫出好代碼?高質量代碼的三要素

    膾炙人口的詩"春有百花秋有月,夏有涼風冬有雪",意境唯美,簡明易懂。好的代碼也是讓人陶醉的,那么如何寫出好代碼
    的頭像 發表于 01-05 11:29 ?1183次閱讀
    如何<b class='flag-5'>寫出好</b>的<b class='flag-5'>代碼</b>?高質量<b class='flag-5'>代碼</b>的三要素

    如何寫出時序最優的HDL代碼?如何寫出時序裕量足夠的代碼

    你想寫出可以跑出700M以上的代碼嗎,直逼FPGA內部PLL的極限。
    的頭像 發表于 03-12 09:59 ?804次閱讀
    如何<b class='flag-5'>寫出</b>時序最優的HDL<b class='flag-5'>代碼</b>?如何<b class='flag-5'>寫出</b>時序裕量足夠的<b class='flag-5'>代碼</b>?

    【明天會更好】程序員如何在面試時寫出高水平代碼

    面試時寫出代碼能夠把將來需求可能的變化都考慮進去,在需求發生變化時能夠盡量減少代碼改動的風險,那他就向面試官展示自己對程序擴展性和可維
    發表于 04-18 16:47

    了解c的缺陷才能寫出好的程序

    了解c的缺陷才能寫出好的程序PCB打樣找華強 http://www.hqpcb.com 樣板2天出貨
    發表于 12-06 14:52

    寫出利用Labview自動生成ARM Cortex代碼的過程?

    寫出利用Labview自動生成ARM Cortex代碼的過程?
    發表于 11-14 15:13

    FPGA寫出來的代碼質量差

    前幾天草草看了點Verilog語法書,今天自己試著建了一工程 (數碼管顯示 每秒加1)一 很簡答的程序 在FPGA中卻寫了一堆(相對應單片機程序) 而且出現一大堆always可讀性非常差這是由于我是一
    發表于 04-01 04:41

    用verilog寫出代碼

    題目描述:設計一電路,使用時序邏輯對一單bit信號進行毛刺濾除操作。高電平或者低電平寬度小于4時鐘周期的為毛刺。用verilog寫出代碼
    發表于 07-22 09:18

    使用C語言寫出的九九乘法表

    本文檔的主要內容詳細介紹的是使用C語言寫出的九九乘法表資料合集免費下載。
    發表于 07-10 08:00 ?1次下載

    這么秀的代碼,你能寫出來嗎?

    這么秀的代碼,你能寫出來嗎? 技術主管來了都不好使,main函數里第一函數必須是這個。 佛祖保佑版: void godBless(void) { // _ooOoo_ // o8888888o
    的頭像 發表于 04-04 18:06 ?1641次閱讀

    為什么有時候會寫出代碼

    寫出來了呢?其實還是因為有些知識沒那么扎實~就容易被忽略,于是我在團隊群里面強調了一下這個問題: 所以,本文主要是關于BeanUtils工具的屬性拷貝以及深拷貝、淺拷貝等問題的。好了開始正文,
    的頭像 發表于 08-27 10:23 ?1329次閱讀
    為什么有時候會<b class='flag-5'>寫出</b>爛<b class='flag-5'>代碼</b>

    一本教你怎么寫出讓同事無法維護的代碼

    ?對,你沒看錯,本文就是教你怎么寫出讓同事無法維護的代碼。一、程序命名 容易輸入的變量名 。比如:Fred,asdf 單字母的變量名 。比如:a,b,c, x,y,z(如果不夠用,可以考慮a1,a2
    的頭像 發表于 10-11 15:45 ?1159次閱讀

    教你如何寫出性能更高的SystemVerilog代碼

    本文旨在幫助大家降低在編碼過程中寫出低性能和耗內存的概率,只要大家在寫代碼時稍注意下,積少成多。
    的頭像 發表于 07-26 17:31 ?890次閱讀
    教你如何<b class='flag-5'>寫出</b>性能更高的SystemVerilog<b class='flag-5'>代碼</b>

    如何寫出高效優美的C語言代碼

    電子發燒友網站提供《如何寫出高效優美的C語言代碼.pdf》資料免費下載
    發表于 11-18 10:55 ?0次下載
    如何<b class='flag-5'>寫出</b>高效優美的C語言<b class='flag-5'>代碼</b>

    如何寫出穩定的單片機代碼

    這篇文章分享怎么寫出穩定的單片機代碼。? ?? 我對優秀代碼的理解,大體分為兩部分:高效和穩定。 ? 兩者都能做到很好的,如果靠自己摸索,沒有刻意去練習,可能需要花10年,甚至更久
    的頭像 發表于 11-15 16:40 ?271次閱讀
    如何<b class='flag-5'>寫出</b>穩定的單片機<b class='flag-5'>代碼</b>