乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      為什么高級(jí)程序員寫的代碼都是傻瓜式的?

       蘭亭文藝 2019-05-26
      AI 前線導(dǎo)讀: 當(dāng)我還是菜雞程序員時(shí),我看到資深程序員們寫的代碼會(huì)覺(jué)得:“這也太傻了吧,毫無(wú)特點(diǎn)。”當(dāng)我工作經(jīng)驗(yàn)漸長(zhǎng)后,才發(fā)現(xiàn)自己還是太年輕,naive。

      更多優(yōu)質(zhì)內(nèi)容請(qǐng)關(guān)注微信公眾號(hào)“AI 前線”(ID:ai-front)

      Brian Goetz 是 Java 領(lǐng)域的技術(shù)大牛,同時(shí)也是《Java 并發(fā)實(shí)踐》一書(shū)的作者之一。我最喜歡的一句名言就是他講的。這句話出現(xiàn)在甲骨文公司以《編寫傻瓜式代碼》為題發(fā)表的訪談當(dāng)中,當(dāng)時(shí)記者問(wèn)到 Goetz 如何才能編寫出性能良好的代碼。以下是他給出的睿智回應(yīng):

      一般來(lái)說(shuō),在 Java 應(yīng)用程序當(dāng)中快速編寫代碼的方法,就是先寫點(diǎn)傻瓜式代碼——這類代碼簡(jiǎn)單、干凈,而且遵循最明確的面向?qū)ο笤瓌t。

      在接下來(lái)的發(fā)言中,他一直在具體解釋:為什么嘗試優(yōu)化代碼并試圖讓代碼看起來(lái)不那么傻瓜,正是程序員群體中的一種常見(jiàn)錯(cuò)誤。而在我看來(lái),這更多是一種新手程序員常犯的錯(cuò)誤。

      高級(jí)開(kāi)發(fā)者的代碼

      如果大家像我一樣,也經(jīng)歷過(guò)初窺門徑的過(guò)程,那么各位應(yīng)該還記得自己第一次看到高級(jí)開(kāi)發(fā)者寫出的代碼時(shí),心里想的是:

      “這玩意兒我也寫得出來(lái),為什么我就不是高級(jí)開(kāi)發(fā)者呢?”

      此后,我花了不少時(shí)間想寫出相類似的代碼,最后發(fā)現(xiàn)我根本就做不到。

      關(guān)于“高級(jí)開(kāi)發(fā)者”的疑問(wèn),并不在于我無(wú)法理解代碼當(dāng)中的特征。相反,我一眼就能明白他們寫的代碼在說(shuō)些什么,因?yàn)檫@些代碼從根本層面上就是在走傻瓜式路線,誰(shuí)還看不懂啊。但除此之外,似乎還有更多不同。我記得當(dāng)時(shí)我在想,“這「更多的」究竟是什么?又是怎么做到的?”

      從那時(shí)起,我逐漸學(xué)會(huì)了編寫傻瓜式代碼的所有原則與質(zhì)量保證方法,包括:YAGNI 原則 (You Ain’t Gonna Need It);單一責(zé)任原則;DRY 原則(Don't Repeat Yourself);單一級(jí)別抽象原則;低耦合等等。我自己,也慢慢成了“高級(jí)開(kāi)發(fā)者”。(我其實(shí)很討厭「高級(jí)開(kāi)發(fā)者」這種說(shuō)法,因此我始終堅(jiān)持稱自己為「軟件工程師」,但這又是另一個(gè)故事了。)

      我學(xué)到的最重要的經(jīng)驗(yàn)就是:

      編寫傻瓜式代碼實(shí)際上非常困難,但一旦實(shí)現(xiàn)則會(huì)帶來(lái)遠(yuǎn)超預(yù)期的回報(bào)。

      如何從一里外認(rèn)出菜雞程序員

      在《重構(gòu):改進(jìn)現(xiàn)有代碼設(shè)計(jì)》當(dāng)中,Kent Beck 指出:

      任何傻瓜都能夠編寫出計(jì)算機(jī)可以理解的代碼,但只有優(yōu)秀的程序員能夠編寫出人類可以理解的代碼。

      如果大家遇到精妙無(wú)比的單一代碼行,以及模糊的抽象及 / 或語(yǔ)言特征時(shí),其背后幾乎總會(huì)有一位初級(jí)開(kāi)發(fā)者。說(shuō)實(shí)話,后一種情況尤其常見(jiàn)??吹竭@些代碼,我仿佛就看到這位程序員在強(qiáng)調(diào):

      “快來(lái)看我!我真的很懂這門編程語(yǔ)言!我在使用默認(rèn)接口同步本地線程 JavaBean 復(fù)制構(gòu)造函數(shù),并配合自定義通用未檢查異常以及跨函數(shù)安全強(qiáng)化 JAXB Lombok 代碼生成!看我厲不厲害!”

      以上場(chǎng)景純屬胡說(shuō)八道,但相信大家能夠明白我的意思。這類代碼往往來(lái)自那些只關(guān)注計(jì)算機(jī)理解,而不重視人類理解的程序員。

      代碼的本質(zhì),在于向其他人交流并向計(jì)算機(jī)發(fā)出指令;但相較于后者,目前代碼的前一項(xiàng)作用顯得尤其重要,因?yàn)橛芯幾g器負(fù)責(zé)將程序員編寫的內(nèi)容翻譯成機(jī)器語(yǔ)言。一般來(lái)講,這種轉(zhuǎn)換會(huì)分多層實(shí)現(xiàn),例如在將 Java 編譯為 ByteCode 時(shí),Java 代碼首先由 Java 虛擬機(jī)在運(yùn)行中讀取,并最終將內(nèi)容翻譯為 0 和 1 的形式。

      不過(guò)代碼代表的仍然是人類的語(yǔ)言,除了指導(dǎo)計(jì)算機(jī)之外,必須也能夠表達(dá)任務(wù)當(dāng)中的誰(shuí)、什么、何時(shí)、哪里、如何以及為什么等問(wèn)題。再舉個(gè)例子,即使你的公司被收購(gòu)了五年多,這些代碼也仍然得具有實(shí)際意義,并確保之前從未見(jiàn)過(guò)這些代碼的新團(tuán)隊(duì)能夠快速打開(kāi)并進(jìn)行功能增強(qiáng) / 錯(cuò)誤修復(fù)。

      是的,編寫傻瓜式代碼非常困難。隨著時(shí)間的推移,我覺(jué)得我越來(lái)越喜歡這種編程風(fēng)格了。當(dāng)我在代碼評(píng)論中收到“這代碼真干凈!”之類的評(píng)語(yǔ)時(shí),我真的感到非常欣慰。我知道我能為整個(gè)團(tuán)隊(duì)、乃至未來(lái)的代碼維護(hù)者們做的最好的事情,就是編寫傻瓜式代碼。

      需知:

      道路千萬(wàn)條,維護(hù)第一條。代碼不規(guī)范,運(yùn)維兩行淚。

      作為結(jié)尾,我再列出 Dave Carhart 的一些觀點(diǎn),只為博君一笑:


      你也「在看」嗎???

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多