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

微軟資深軟件工程師:閱讀代碼真的很難

  英文原文:Reading Code Is Hard

  編者按:原文作者EricLippert是一名資深軟件設計工程師,從1996年起一直在微軟開發部門任職,協助設計并實現VBScript、JScript、JScript.NET、Windows Script Host、Visual Studio Tools for Office 和 C#。

  EScalation的工程師JeremyK在他的博客中問到:

你是怎么教人們快速深入挖掘不熟悉的代碼(不是自己所寫的)?我學習如何編程的方法很傳統 —— 自己動手編碼。但我現在很糾結:到底是集中精神閱讀源碼,還是自己編寫。對我而言,似乎唯一有效的方法就是自己寫過。

  不是和Jeremy開玩笑,寫代碼的確沒有讀代碼難。

  首先,我同意你的看法,幾乎很少有人能讀代碼但不會寫代碼。這不像自然書面語或口語,理解他人的意思并不需要去理解他們為什么要那樣說。比如,如果我說:

  “寫代碼有兩種方式:一種嚴格且詳細,另一種模糊且草率。前者生成簡潔分層的婚禮蛋糕,后者卻是意大利面條。”

  上面這句話產生一個平衡且幽默的效果,但即使聽眾和讀者不理解我使用“零照應”和“并列句”這樣的文字技巧,也會理解我要說的意思。但是說到代碼,既要從代碼本身中理解代碼作者的意圖,又要理解代碼產生的預計效果,這兩者都極為重要。

  因此,我又回到那個問題了,有些人需要快速切入代碼,但不需要動手寫代碼,那我們如何編寫適合這些人的代碼?

  下面是我在編寫代碼時,盡力去做的事,目的就是使其他人能輕松閱讀:

  • 使代碼遵從工具。Object Browsers和Intellisense雖然很好,但我告訴你,我是守舊派。如果找不到我想要的,我會不高興。什么使得代碼成為可查詢的呢?
    • 像"i"這樣的變量名不好。如果沒有明確的錯誤提示,你就無法輕易查找代碼。
    • 避免使用是其他名字前綴的名字。比如,在代碼中有個“perfExecuteManifest”,如果再有一個“perfExecuteManifestInitialize”,這就會讓我抓狂,因為每次在源碼中查詢前者時,我不得不費力地過濾掉后者所有的實例。
    • “臨時傳遞數據”(tramp data)應使用相同的名字。所謂“臨時傳遞數據”(tramp data),就是指那些傳遞給方法A的變量,還要傳給方法B的變量。這兩類變量實際上是相同的,所以如果它們有著相同的名字,則更好。
    • 別用宏來重命名東西。如果有個方法叫get_MousePosition,那別這樣GETTER(MousePosition)來聲明該方法。因為我會找不到實際的方法名。
    • Shadowing會引起很多問題,請不要用它。
  • 堅持使用一種命名模式。如果你打算用匈牙利命名法,那就堅持并廣泛使用,否則將適得其反。使用匈牙利命名法來記錄數據,而不是存儲類型;記錄普遍事實,而不是臨時條件。
  • 使用斷言來記錄先決條件(preconditions)和后置條件(postconditions)。
  • 別縮寫英文單詞。確切來說,別縮寫成稀奇古怪的形式。在腳本引擎中,有個變量名叫“NME”,這讓我非常抓狂!它應當叫“VariableName”。
  • C語言標準運行時庫的設計不是很優秀。別去效仿它。
  • 別寫“聰明”的代碼;當代碼出現問題,維護代碼的程序員沒時間去理解你的聰慧。
  • 理解編程語言特性的設計初衷,使用這些特性去做它們適合完成的工作,而不是它們能做到的工作。例如:別把異常當做一般的流控制機制來使用(即便你能做到),而應該用它們來報告錯誤。別強制把接口指針轉換成類指針,即便你知道這樣沒問題。
  • 按功能單元劃分源碼樹,而不是按組織結構。比如:我目前所在團隊中,有2個根子目錄的名字是“Frameworks”和“Integration”,這是兩個團隊的名字。不巧的是,Frameworks團隊名下有一個叫“Adaptor”的子目錄,而“Adaptor”卻是Integration的子目錄,這就非常令人迷惑。同理,(如果)有著相同子目錄的不同的子樹,有些是客戶端的組件,有些是服務端的組件;有些是管理組件,有些是非管理組件;有些是處理型組件,有些是非處理型組件;有些是零售組件,有些內部測試工具。這就會亂七八糟的。

  當然,我實際上根本沒有回答Jeremy的問題——如何調試不是我寫的代碼?

  這取決于我的目的。如果我只是因為一個bug,而深挖一段具體的代碼,我會在調試器中逐步跟蹤所有代碼,寫下我“走過”的調用分支,記錄下哪些方法是特定數據結構的“生產者”,哪些方法是“消費者”;我也會仔細盯著輸出窗口,查看出現的有用信息;還要打開異常捕捉器,因為異常通常是問題所在。設置斷點;我會記錄所有和我上面建議相反的地方,因為這些東西很可能誤導了我。

  如果我想在理解一段代碼后修改它,我通常是從代碼頭部開始,或者先查找公共方法。我要知道類是如何實現的,它是如何擴展的,它的作用,它是如何嵌入整個代碼中的?我會盡力理解這些東西后,才去了解這些特定部分(代碼)是如何實現的。這耗時雖更長些,但如果你準備改動復雜代碼,你應當那樣做。

 

  譯文出處:伯樂在線 - 職場博客
  譯文鏈接:http://www.jobbole.com/entry.php/438

  原文作者:Eric Lippert  編譯:伯樂在線 敏捷翻譯組 - 關關

  如需轉載,但請注明原文/譯文出處、譯文超鏈接和譯者等信息,否則視為侵權,謝謝合作!

it知識庫微軟資深軟件工程師:閱讀代碼真的很難,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品中文字幕一区二区三区四区 | 高清视频黄色录像免费 | 有码中文字幕在线观看 | 国产馆手机在线观看 | 日本高清色www网站色 | 国产精品一区二区三区高清在线 | 成人污视频在线观看 | 成年黄网站色视频免费观看 | 欧美日韩一区二区三区久久 | 亚洲综合网在线 | 日产精品一区二区三区免费 | 久久久久久久久久久大尺度免费视频 | 99综合之综合久久伊人 | 在线免费观看国产精品 | 日本高清色惰www在线视频 | 伊人五月婷 | 丁香六月综合 | 亚洲精品国产综合久久一线 | 国产精品久久久久久一区二区 | 伊人久久五月天 | 五月婷婷在线观看 | 激情成人综合网 | 91大神免费视频 | 国产区图片区小说区亚洲区 | 久久丝袜精品综合网站 | 一区二区视频在线观看 | 欧美经典成人在观看线视频 | 91网在线观看 | 国产拍拍视频一二三四区 | 亚洲乱码在线播放 | 97人人在线观看 | 亚洲欧美日韩精品在线 | 337p欧美超大胆日本人术艺术 | 69视频免费观看l | 成人在线观看视频免费 | 国产色婷婷精品综合在线观看 | 久久久高清日本道免费观看 | 国产成人精品亚洲午夜麻豆 | 亚洲狠狠婷婷综合久久久久图片 | 色婷婷影院在线视频免费播放 | 天天干天 |