日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

再读王垠的《编程的智慧》,有怎样的感想?

發(fā)布時(shí)間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再读王垠的《编程的智慧》,有怎样的感想? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?王垠老師的《編程的智慧》這篇文章已經(jīng)讀了最起碼5遍了,最近的項(xiàng)目做完一個(gè)階段,到了把他做干凈的時(shí)候,也就是優(yōu)化代碼,全面整理的階段,這個(gè)時(shí)候我又想起了這篇編程的智慧,有一些啟發(fā)與大家分享。

王垠老師的《編程的智慧》

王垠老師是誰(shuí)?想必很多朋友都有耳聞,不知道的也可以去查一查,首先是個(gè)真誠(chéng)的人,性情中人,他也是一個(gè)頗具爭(zhēng)議的人物,有過(guò)多次退學(xué)、辭職被封殺、噴教育制度等等一些爭(zhēng)議事件,但是毫無(wú)疑問(wèn),他在計(jì)算機(jī)的理解、個(gè)人精湛的技術(shù)方面是無(wú)可爭(zhēng)議的。

這里沒(méi)有對(duì)個(gè)人進(jìn)行正面或者負(fù)面的討論,主要是他對(duì)語(yǔ)言的理解和經(jīng)驗(yàn)讓我受益,而我也覺(jué)得看人就需要看他的優(yōu)點(diǎn)和對(duì)自己有益處的東西就行了,《編程的智慧》這篇文章真的可以仔細(xì)看看。

從第一次看這篇文章的時(shí)候就感覺(jué)這文章十分的厲害,不在我當(dāng)時(shí)的層次范圍里,甚至現(xiàn)在也不是,我也是漸漸的學(xué)習(xí)按照其中去做。把文中的習(xí)慣和好的做法融入到自己寫(xiě)的代碼中去但是很多時(shí)候總是找不得要領(lǐng),有點(diǎn)邯鄲學(xué)步,所以總是在想到的時(shí)候打開(kāi)看一遍。

這次再讀的時(shí)候覺(jué)得應(yīng)該整理一下,以自己的方式記錄出來(lái),與大家分享交流,形成一個(gè)直觀的概念。

編程的智慧表達(dá)了什么?

王垠老師提出過(guò)很多次的教條主義,這篇文章也是苦口婆心的說(shuō)了一些編程的知識(shí)與技巧,我們可能在編程的時(shí)候沒(méi)有那么多的創(chuàng)新與自己的見(jiàn)解,但是我們應(yīng)該知道什么時(shí)候干什么不該干什么,這是編程的共識(shí),也是編程的智慧。

反復(fù)推敲代碼

反復(fù)回頭推敲代碼真的很有益處,我認(rèn)為在寫(xiě)代碼之前就應(yīng)該想著怎么寫(xiě),一般來(lái)說(shuō),想的時(shí)間占比70%,寫(xiě)的時(shí)間30%即可。而在調(diào)試完成之后,更要回過(guò)頭推敲。

可能得以實(shí)現(xiàn)的功能你用了100行代碼搞定了,但是回頭來(lái)看可以刪掉不少的代碼,這就會(huì)漸漸的把我們的思路帶到精簡(jiǎn)的階段,會(huì)讓我們的水平得到一個(gè)提升。

古人也說(shuō)過(guò),溫故而知新,不僅是回頭看代碼,甚至是過(guò)段時(shí)間回過(guò)頭看這個(gè)項(xiàng)目,可能都會(huì)有新的東西,這種感覺(jué)是難得的,不然每次看別人的留下的代碼都會(huì)吐槽:臥槽這個(gè)傻逼寫(xiě)的什么代碼了。

寫(xiě)優(yōu)雅的代碼

優(yōu)雅在代碼中也可以體現(xiàn),這一點(diǎn)確實(shí)還是很有趣的,其實(shí)早就在很久之前,就聽(tīng)過(guò)雷軍的一句話(huà),寫(xiě)像詩(shī)一樣的代碼,我想這就是優(yōu)雅的一方面了。

一面說(shuō)到,我們書(shū)寫(xiě)的格式以及大體結(jié)構(gòu)上需要整齊,有好的分支與傳遞,還有在嵌套或者縮進(jìn)方面都需要注意。我相信好的結(jié)構(gòu)可以使我們的理解更加清晰,也會(huì)讓我們的邏輯更加緊密。

另一面就是我們寫(xiě)代碼的時(shí)候,需要注意一些用法,比如使用if語(yǔ)句的時(shí)候,else分支里面有可能出現(xiàn)少量重復(fù)的代碼,但是這樣的結(jié)構(gòu)卻是更加嚴(yán)密的。

寫(xiě)模塊化的代碼

什么是模塊化?大家都知道我發(fā)過(guò)很多模塊化的文章,但是真正的模塊化,并不是文本意義上的,而是邏輯意義上的。

精選匯總 | 模塊化編程 也講到了很多。這里最讓我收獲大的一句話(huà)就是:每個(gè)函數(shù)只做一件簡(jiǎn)單的事情。

寫(xiě)可讀的代碼

每當(dāng)我們看代碼的時(shí)候,總是會(huì)說(shuō)這個(gè)人寫(xiě)的代碼連注釋都沒(méi)有,讓人怎么看。或者這么多注釋,表達(dá)的也不清晰或者錯(cuò)位了,可能讓我們產(chǎn)生更大的誤解了,不但沒(méi)有更可讀反而成了障礙。

所以注釋不是主要原因,真正可讀的代碼體現(xiàn)在每個(gè)細(xì)節(jié)上面。王垠老師說(shuō)到:真正優(yōu)雅可讀的代碼,是幾乎不需要注釋的。這一點(diǎn)我可能還沒(méi)體會(huì)到,有時(shí)候還是需要一些語(yǔ)言來(lái)輔助一下。

但是其說(shuō)到各種命名、合理?yè)Q行、局部變量的使用、把復(fù)雜的邏輯提取出去,做成幫助函數(shù)、把復(fù)雜的表達(dá)式提取出去,做成中間變量,這些思想與做法真的是難能可貴的。

寫(xiě)簡(jiǎn)單的代碼

隨著時(shí)代發(fā)展,語(yǔ)言也漸漸的變得豐富起來(lái),也就是寫(xiě)法變得更多了,支持更多特性了,有些代碼變得短小精悍了但是依然可以解決當(dāng)前的問(wèn)題,這些特性往往是一些難以直觀理解的代碼。

的確,豐富的特性在一些特殊的場(chǎng)合是很耐用的,但是我們不能盲目去追求,去標(biāo)新立異并以此為榮。我們需要寫(xiě)簡(jiǎn)單的代碼,免得在后續(xù)讓整個(gè)邏輯看起來(lái)沒(méi)問(wèn)題實(shí)際上正是這種特性使我們變得模糊,比如這個(gè)少了花括號(hào)。

if?(...)?action1();

這個(gè)判斷沒(méi)使用{},可是這其實(shí)經(jīng)常引起奇怪的問(wèn)題。比如,你后來(lái)想要加一句話(huà)action2()到這個(gè) if 里面,于是你就把代碼改成這樣,不用說(shuō),這肯定是有問(wèn)題的,而往往我們可以避免。

if?(...)?action1();action2();

寫(xiě)直觀的代碼

王垠老師說(shuō)到:寫(xiě)代碼有一條重要的原則:如果有更加直接,更加清晰的寫(xiě)法,就選擇它,即使它看起來(lái)更長(zhǎng),更笨,也一樣選擇它。

假如一段代碼寫(xiě)出以下樣式,你看得出想表達(dá)的是什么意思嗎?

if?(action1()?||?action2()?&&?action3())?{... }

這種寫(xiě)法是濫用了邏輯操作&&的短路特性,這種累加的判斷會(huì)讓人很費(fèi)腦,而隨著代碼或者邏輯復(fù)雜度的增加,這樣的代碼就很容易出現(xiàn)錯(cuò)誤了。其實(shí)很簡(jiǎn)單的就可以改成以下代碼,會(huì)清晰很多。

if?(!action1())?{if?(action2())?{action3();} }

寫(xiě)無(wú)懈可擊的代碼

無(wú)懈可擊的代碼其實(shí)是很難的,以前在上語(yǔ)文課的時(shí)候,老師說(shuō)過(guò)好的詩(shī)句沒(méi)有一個(gè)字是多余的,甚至沒(méi)有哪一個(gè)字是可以替代的,但是代碼不盡相同。

王垠老師想表達(dá)的應(yīng)該是讓代碼不容易出現(xiàn)疏忽和漏洞,比如if語(yǔ)句分支最好考慮到極端狀況,也就是說(shuō)最好要有else,在里面處理一些東西。比如下面s缺省為 null,如果x<5,那么把它等于ok,如果不成立,你需要往上面看,才能知道s的值是什么。

String?s?=?""; if?(x?<?5)?{s?=?"ok"; }

那么將代碼改成下面的形式,雖然多打了兩個(gè)字,然而它卻更加清晰。

String?s; if?(x?<?5)?{s?=?"ok"; }?else?{s?=?""; }

正確處理錯(cuò)誤

在異常出現(xiàn)的當(dāng)時(shí)就作出處理,不要丟回給調(diào)用者。

這是給我印象最深的一句話(huà),一旦有錯(cuò)誤,就應(yīng)該立即處理,即使是任何一種可能會(huì)出現(xiàn)的情況,都可能產(chǎn)生意想不到的災(zāi)難性結(jié)果。

我在項(xiàng)目中經(jīng)常遇到這樣的情況,為了趕項(xiàng)目進(jìn)度,這種方法實(shí)現(xiàn)不了或者實(shí)現(xiàn)的不是那么靈活,就放任不管,而繼續(xù)做下去。進(jìn)度是趕上了,但是總會(huì)出現(xiàn)一些莫名其妙的錯(cuò)誤,或者當(dāng)需要更改一些功能的時(shí)候,這一塊代碼又出現(xiàn)問(wèn)題了,你不得不重新去解決,所以不要逃避錯(cuò)誤,每個(gè)錯(cuò)誤都不容放過(guò)。

防止過(guò)度工程

只說(shuō)三點(diǎn),直擊要害

  • 先把眼前的問(wèn)題解決掉,解決好,再考慮將來(lái)的擴(kuò)展問(wèn)題。

  • 先寫(xiě)出可用的代碼,反復(fù)推敲,再考慮是否需要重用的問(wèn)題。

  • 先寫(xiě)出可用,簡(jiǎn)單,明顯沒(méi)有 bug 的代碼,再考慮測(cè)試的問(wèn)題

  • Over engineering在我看來(lái)就是一個(gè)過(guò)度裝逼的設(shè)計(jì),我在工作中也遇到過(guò)這樣的同事,一副架構(gòu)師的樣式指點(diǎn)江山,但實(shí)際上最重要的還是眼前的問(wèn)題,解決掉!

    最后

    我認(rèn)為王垠老師身上最讓我缺少的就是:對(duì)權(quán)威以及先行者敢于質(zhì)疑,對(duì)編程語(yǔ)言原理、框架、概念等等理解的深度,以及他的鉆研精神,不論怎么樣,我都收獲了很多。

    愿我們都可以看到他人的閃光點(diǎn),同樣的這篇《編程的智慧》真的值得我們好好讀一下。

    ???????????????? ?END ?????????????????


    推薦閱讀:

    專(zhuān)輯|Linux文章匯總

    專(zhuān)輯|程序人生

    專(zhuān)輯|C語(yǔ)言

    我的知識(shí)小密圈

    關(guān)注公眾號(hào),后臺(tái)回復(fù)「1024」獲取學(xué)習(xí)資料網(wǎng)盤(pán)鏈接。

    歡迎點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā),在看,您的每一次鼓勵(lì),我都將銘記于心~

    嵌入式Linux

    微信掃描二維碼,關(guān)注我的公眾號(hào)


    點(diǎn)擊“閱讀原文”查看更多分享。

    總結(jié)

    以上是生活随笔為你收集整理的再读王垠的《编程的智慧》,有怎样的感想?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。