天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

  英文原文:Reading Code Is Hard

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

  EScalation的工程師JeremyK在他的博客中問(wèn)到:

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

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

  首先,我同意你的看法,幾乎很少有人能讀代碼但不會(huì)寫代碼。這不像自然書面語(yǔ)或口語(yǔ),理解他人的意思并不需要去理解他們?yōu)槭裁匆菢诱f(shuō)。比如,如果我說(shuō):

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

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

  因此,我又回到那個(gè)問(wèn)題了,有些人需要快速切入代碼,但不需要?jiǎng)邮謱懘a,那我們?nèi)绾尉帉戇m合這些人的代碼?

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

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

  當(dāng)然,我實(shí)際上根本沒有回答Jeremy的問(wèn)題——如何調(diào)試不是我寫的代碼?

  這取決于我的目的。如果我只是因?yàn)橐粋€(gè)bug,而深挖一段具體的代碼,我會(huì)在調(diào)試器中逐步跟蹤所有代碼,寫下我“走過(guò)”的調(diào)用分支,記錄下哪些方法是特定數(shù)據(jù)結(jié)構(gòu)的“生產(chǎn)者”,哪些方法是“消費(fèi)者”;我也會(huì)仔細(xì)盯著輸出窗口,查看出現(xiàn)的有用信息;還要打開異常捕捉器,因?yàn)楫惓MǔJ菃?wèn)題所在。設(shè)置斷點(diǎn);我會(huì)記錄所有和我上面建議相反的地方,因?yàn)檫@些東西很可能誤導(dǎo)了我。

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

 

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

  原文作者:Eric Lippert  編譯:伯樂在線 敏捷翻譯組 - 關(guān)關(guān)

  如需轉(zhuǎn)載,但請(qǐng)注明原文/譯文出處、譯文超鏈接和譯者等信息,否則視為侵權(quán),謝謝合作!

it知識(shí)庫(kù)微軟資深軟件工程師:閱讀代碼真的很難,轉(zhuǎn)載需保留來(lái)源!

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

主站蜘蛛池模板: 8X拨牐拨牐X8免费视频8 | 亚洲精品国产一区二区贰佰信息网 | 亚洲婷婷天堂综合国产剧情 | 国产精品久久久久影院色老大 | 欧美肥胖女人bbwbbw视频 | 国产成人在线观看免费网站 | 挠黑色超薄丝袜脚心vk40分钟 | 日本无卡无吗在线 | 高清无码色大片中文 | 幸福草电视剧演员表介绍 | 91在线一区二区 | 99精品影院 | 挺进绝色老师的紧窄小肉六 | 久久精品久精品99热 | 在线观看免费视频播放视频 | chinese极品嫩模videos | 狠狠躁天天躁小说 | 色戒2小时38分在线观看 | 欧美一区二区三区男同 | 欧美午夜理伦三级在线观看 | 国产高清视频青青青在线 | 久青草国产在线观看视频 | 欧美黄色xxx | 亚洲精品在线不卡 | 亚洲永久在线观看 | 人善交XUANWEN200喷水 | 亚洲免费在线播放 | 精品国产福利在线视频 | 日日做夜夜欢狠狠免费软件 | 久久亚洲AV成人无码动态图 | 浪潮AV色综合久久天堂 | 2022一本久道久久综合狂躁 | 四虎精品久久 | 亲伦在线观看 | 日日摸夜夜添无码AVA片 | 欧美日韩视频高清一区 | 日本国产成人精品无码区在线网站 | 成人区在线观看免费视频 | 日本三级床震 | 欧美 亚洲 日韩 中文2019 | 男人吃奶摸下挵进去啪啪 |