成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從業(yè) 20 年的程序員,“盤”出來(lái)的五種編程經(jīng)驗(yàn)

新聞 前端
一個(gè)擁有 20 年編程經(jīng)驗(yàn)的“熟手”,編程干貨有多少?本文作者是一名從業(yè) 20 年的程序員,他分享了自己這 20 年來(lái)學(xué)到的 5 種編程經(jīng)驗(yàn)。

一個(gè)擁有 20 年編程經(jīng)驗(yàn)的“熟手”,編程干貨有多少?本文作者是一名從業(yè) 20 年的程序員,他分享了自己這 20 年來(lái)學(xué)到的 5 種編程經(jīng)驗(yàn):重復(fù)的知識(shí)最糟糕、把代碼當(dāng)成一種債務(wù)、信任高級(jí)開(kāi)發(fā)人員信任但要驗(yàn)證、使用 TDD、用“證據(jù)”證明自己的代碼更好。下文是關(guān)于這 5 種經(jīng)驗(yàn)的具體描述。

今年,我對(duì)DEV開(kāi)發(fā)平臺(tái)越來(lái)越熟悉。眾多激憤的 Reddit 評(píng)論者和“不過(guò)如此”的鑒賞家們構(gòu)成了一片荒漠,在這片荒漠之中,DEV 已經(jīng)成為令人耳目一新且充滿積極力量的綠洲。

這個(gè)社區(qū)有著很有趣的一面,它似乎非常注重初學(xué)者。我經(jīng)常在這里看到行業(yè)新手寫的帖子。我所說(shuō)的新手是指那些在訓(xùn)練營(yíng)中尋找入門級(jí)工作,或者那些在不幸的“初級(jí)”程序員崗位上工作且有抱負(fù)的程序員。

我感覺(jué)這很有趣,新手通常會(huì)對(duì)這個(gè)行業(yè)充滿熱情,這種激情富有感染力。他們的激情也讓我認(rèn)識(shí)到自己在這個(gè)行業(yè)的定位——熟手(老人兒)。

在過(guò)去四、五十年里,行業(yè)對(duì)程序員的需求急劇增長(zhǎng),以至于程序員的數(shù)量總是每五年翻一番。因此,擁有 5 年經(jīng)驗(yàn)的程序員占據(jù)著整個(gè)行業(yè)一半以上的職位。我在這個(gè)行業(yè)已經(jīng)快 20 年了。其中 10 年,我的主要職責(zé)是編寫代碼。另外10 年是管理者,指導(dǎo)新人、向組織咨詢?nèi)绾喂芾聿⑹┬写a庫(kù)評(píng)估實(shí)踐以及當(dāng)前從事的內(nèi)容營(yíng)銷。

于是,我問(wèn)自己,“如果我能把自己的經(jīng)歷進(jìn)行簡(jiǎn)明扼要地總結(jié)(假設(shè)真的有人關(guān)心的話),我會(huì)向新手們提些什么建議呢?”

[[284975]]

所以,就產(chǎn)生了這篇文章。以下是我認(rèn)為自己在 20 年編程生涯中最重要的經(jīng)驗(yàn)和收獲。

1. 重復(fù)的知識(shí)最糟糕

“避免復(fù)制粘貼式編程!”

當(dāng)你在應(yīng)用程序中復(fù)制、粘貼代碼,然后調(diào)來(lái)調(diào)去的時(shí)候 (“復(fù)制、粘貼、調(diào)整”反模式),如果沒(méi)有人打你的手,那么現(xiàn)在就考慮舉起“戒尺“吧。因?yàn)檫@種做法很糟糕,也很隨意。

[[284976]]

假設(shè),你有一個(gè)用得好好的 CalculateBill() 方法,但是產(chǎn)品經(jīng)理卻走過(guò)來(lái)說(shuō):“我們正在墨西哥接待新客戶,與你那個(gè)計(jì)費(fèi)的方式有點(diǎn)不同。”因此,你復(fù)制了當(dāng)前的這個(gè)方法,也粘貼了它,將其重命名為 CalculateBillMexico(),并根據(jù)需要對(duì)其進(jìn)行調(diào)整。

所以在這種方式的操作下,產(chǎn)生了這些問(wèn)題:

  1. 如果將來(lái)的變更需要對(duì)核心邏輯進(jìn)行調(diào)整,現(xiàn)在必須額外修改這兩個(gè)方法。
  2. 在做此類變更時(shí),可能引入了兩個(gè) bug 。
  3. 你現(xiàn)在已經(jīng)建立了一個(gè)“設(shè)計(jì)模式”,隨著在全球的繼續(xù)擴(kuò)展,你的代碼更新需要一個(gè)又一個(gè)新的、冗余的方法。
  4. 你的工作量將會(huì)急劇增加。
  5. 忘記修改需要修改的地方,從而引入 bug,這種情況的出現(xiàn)只是時(shí)間問(wèn)題。
  6. 最終,所有這些方法都會(huì)有一定的差異,這些差異足以令你無(wú)法合理地將它們合并起來(lái)修復(fù)這種混亂,但是差異又沒(méi)有大到可以避免有人在更新一條計(jì)費(fèi)規(guī)則時(shí)改上 20 次。

這是一個(gè)爛攤子。然而,復(fù)制粘貼只是表層問(wèn)題。

復(fù)制粘貼只是開(kāi)始

真正的問(wèn)題是系統(tǒng)中的知識(shí)重復(fù)。

在你的系統(tǒng)中,知識(shí)的復(fù)制可以以多種方式出現(xiàn),蹩腳的復(fù)制 - 粘貼是最明顯和最笨拙的。看看其他知識(shí)重復(fù)的例子:

  • 一個(gè) for 循環(huán),在它的正上方有一個(gè)解釋開(kāi)始、結(jié)束和遞增的代碼注釋。
  • 為一個(gè)全局變量?jī)?nèi)聯(lián)賦值,然后 (可能) 從配置文件中取一個(gè)值重新賦給它。
  • 包含“PretaxTotal”、“Tax”和“Total”列的數(shù)據(jù)庫(kù)表
  • 一個(gè)范圍很廣的 ERP 系統(tǒng),它將客戶存儲(chǔ)在 CRM 模塊中,然后再存儲(chǔ)在計(jì)費(fèi)模塊中。

有了以上這些,最好的情況是有適當(dāng)流程和系統(tǒng)來(lái)努力跟蹤副本,并確保及時(shí)更新。如果缺乏代碼注釋,可能團(tuán)隊(duì)的首席嘮叨官更新代碼時(shí)就會(huì)一直在你耳邊念叨:檢查注釋、檢查注釋······

或者,以ERP系統(tǒng)為例,這可能是一個(gè)嚴(yán)格的部門備忘錄,告訴銷售和會(huì)計(jì),他們都需要發(fā)送正式的電子郵件,以確保客戶信息保持同步。

[[284977]]

記住,以上這些已經(jīng)是最好的情況。當(dāng)開(kāi)始構(gòu)建復(fù)雜的邏輯以確保同步時(shí),會(huì)出現(xiàn)更糟糕的情況。

也許你可以實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)觸發(fā)器,在“total”列發(fā)生更改時(shí)確保 PretaxTotal + Tax 仍然等于 total。或者,你可以編寫一些笨拙的狀態(tài)檢查邏輯,當(dāng)默認(rèn)的全局變量值與配置文件中的值不匹配時(shí),記錄一個(gè)警告。

最糟糕的情況是數(shù)據(jù)不同步。那么,作為一名程序員,可能不用擔(dān)心它,因?yàn)槟隳玫哪欠莨べY所要承擔(dān)的工作不包括搞清楚為什么你們從來(lái)沒(méi)有給客戶開(kāi)過(guò)發(fā)票,或者為什么多年來(lái)一直多收客戶的錢。

但是,面對(duì)藏身于系統(tǒng)各處的問(wèn)題,根除和積極抵制可以幫你避免所有這些問(wèn)題。

2. 代碼是一種債務(wù)

作為開(kāi)發(fā)人員,我們要學(xué)會(huì)熱愛(ài)代碼。編寫代碼感覺(jué)很好,創(chuàng)造些什么出來(lái)也很令人興奮。

此外,我們尋找新的語(yǔ)言、范例、框架、堆棧、工具、api 和庫(kù)來(lái)學(xué)習(xí)。我們沉浸在自己的世界里,因?yàn)樵谶@種狀態(tài)下,我們可以愉快地生產(chǎn)代碼。

[[284978]]

一些極端的開(kāi)發(fā)者甚至把每小時(shí)生成的代碼行數(shù)作為生產(chǎn)力的度量標(biāo)準(zhǔn)。即使沒(méi)有達(dá)到這個(gè)程度,也很容易認(rèn)為代碼越多越好。代碼是殺手級(jí)應(yīng)用程序和業(yè)務(wù)的 DNA,公司認(rèn)為它是有價(jià)值的知識(shí)產(chǎn)權(quán)。

但是,代碼完全就是一種債務(wù)。

少即是多

你知道有什么比“用 10 行代碼來(lái)編寫別人用 100 行代碼才能完成的事情”更好的嗎?那就是用 0 行代碼。

寫這么一行代碼:

  1. printf("Hello World!"); 

你認(rèn)為有多少事情會(huì)出錯(cuò)?

  • 這段代碼會(huì)在允許控制臺(tái)打印的環(huán)境中運(yùn)行嗎?
  • 那段神奇的字符串以后不會(huì)成為問(wèn)題嗎?
  • 你不應(yīng)該記錄日志嗎?這是一條最佳實(shí)踐。
  • 你有沒(méi)有想過(guò)這對(duì)安全的影響?

保守地說(shuō),這行代碼中有 10 個(gè)地方可能出錯(cuò)。現(xiàn)在,我們加上第二行。

那么,你會(huì)覺(jué)得這將導(dǎo)致總共 20 件可能出錯(cuò)的事情嗎?

我認(rèn)為幾乎得有 100 件。你可以叫我悲觀主義者,但我認(rèn)為潛在問(wèn)題與代碼行之間的關(guān)系更接近組合而非線性的關(guān)系。

[[284979]]

實(shí)際上,我做過(guò)幾年管理顧問(wèn),看過(guò)、分析并收集了大量代碼庫(kù)的統(tǒng)計(jì)數(shù)據(jù)如果算上在客戶那兒自動(dòng)分析的代碼庫(kù),我已經(jīng)收集了 1000 多個(gè)代碼庫(kù)的詳細(xì)統(tǒng)計(jì)信息。然后,為了尋找相關(guān)性我對(duì)這些數(shù)據(jù)進(jìn)行了回歸分析。

所以,你知道與不良代碼庫(kù)的相關(guān)性更強(qiáng)的是什么嗎?那就是代碼庫(kù)的大小

[[284980]]

幾乎關(guān)于代碼庫(kù)的所有壞事都與代碼庫(kù)的大小有很大的關(guān)系(以代碼的邏輯行來(lái)衡量)。

我愛(ài)代碼,我喜歡寫它、研究它、分析它,以及用它做東西。但毫無(wú)疑問(wèn)的是,代碼是一個(gè)巨大的債務(wù),我們應(yīng)該去努力用盡可能少的代碼來(lái)做每件事。

3. 高級(jí)開(kāi)發(fā)人員:信任但驗(yàn)證

在我 23 歲時(shí)做了第一份軟件工程工作,當(dāng)時(shí)我對(duì)高級(jí)開(kāi)發(fā)人員懷有一種崇敬,我從他們身上學(xué)到了很多。如果你是這個(gè)行業(yè)的新手,你可能會(huì)像我一樣,認(rèn)為團(tuán)隊(duì)中資深開(kāi)發(fā)人員的每一句話都是智慧的結(jié)晶。而且,如果你幸運(yùn)的話,他們中的很多人的確是這樣,特別是在一開(kāi)始的時(shí)候。

但,并不是所有的高級(jí)開(kāi)發(fā)人員都如此。

回想起來(lái),有些人不是技術(shù)專長(zhǎng),而是在那兒很長(zhǎng)一段時(shí)間無(wú)所事事,設(shè)法不被解雇,并靠混資歷晉升為“資深”或“高級(jí)”之類的頭銜。

這種現(xiàn)象非常普遍,幾年前我編造了一個(gè)詞來(lái)描述它,現(xiàn)在每個(gè)月都有數(shù)百條谷歌搜索。當(dāng)我時(shí)創(chuàng)造了“專家級(jí)初學(xué)者”這個(gè)術(shù)語(yǔ),它引起了人們的強(qiáng)烈共鳴。

[[284981]]

所以,當(dāng)你是新人的時(shí)候,要相信前輩的說(shuō)法,尊重他們,但不要想當(dāng)然地認(rèn)為他們說(shuō)的就是對(duì)的。自己得驗(yàn)證一下,當(dāng)然了,最好不要當(dāng)著他們的面驗(yàn)證。

4. TDD 真的行,它改變了游戲規(guī)則

當(dāng)涉及到任何編程,甚至只要是與技術(shù)相關(guān)的事情時(shí),我們往往會(huì)帶有偏見(jiàn)的主觀選擇。

  • IDE 與輕量級(jí)編輯器的討論?
  • 蘋果、Windows 還是 Linux?
  • 你怎么看 PHP?
  • 制表符(tab)還是空格(space)?

拿出其中任何一個(gè),就能看到那些持明確觀點(diǎn)的人的爭(zhēng)吵。因此,考慮到所有這些,我意識(shí)到自己正在陷入類似的境地,那就是“做 TDD 還是不做 ”。

我的目的不是說(shuō)教,而是分享我自己的經(jīng)驗(yàn)。

大約 10 年前,我是 TDD 懷疑論者。我并不是單元測(cè)試的懷疑論者,事實(shí)上,我從一開(kāi)始就接受了它,并將其作為一種有用的實(shí)踐,但對(duì)TDD不太確定。

甚至,那時(shí)候的我決定寫一篇博客,來(lái)解釋為什么 TDD 沒(méi)那么好。

但我不想就這件事寫一篇站不住腳又蹩腳透頂?shù)脑u(píng)論文章。所以我決定做一個(gè)嚴(yán)格遵循 TDD 的小型客戶項(xiàng)目 (順便一提,固定價(jià)格),這樣我就可以寫一篇文章,但這篇文章的前提是“我真的去花費(fèi)幾周的時(shí)間做純粹的 TDD,并發(fā)現(xiàn)它不好的事實(shí)”。

實(shí)際上,整個(gè)過(guò)程可能是好幾天。我做每件事都需要花很長(zhǎng)時(shí)間,做每件事都很麻煩,也很不自然。我一樁一樁地把它們記錄下來(lái),以證明為什么TDD是一種糟糕的做事方式。

然而,我對(duì)這個(gè)范例很著迷,以至于在某一天花了4到5個(gè)小時(shí)編寫代碼,卻沒(méi)有實(shí)際運(yùn)行應(yīng)用程序來(lái)檢查更改是否有效。(通常,我會(huì)每隔 10 分鐘左右運(yùn)行一次應(yīng)用程序,以檢查更改是否真正有效。)

意識(shí)到自己已經(jīng)工作了幾個(gè)小時(shí),我啟動(dòng)了應(yīng)用程序,感覺(jué)必須要再調(diào)試幾個(gè)小時(shí)。畢竟,以前至少需要調(diào)試 30 多回。但是,一切都能正常運(yùn)轉(zhuǎn),第一次沒(méi)有任何異常。我花了幾個(gè)小時(shí)編寫代碼,沒(méi)有查看自己的 GUI,也沒(méi)有在運(yùn)行時(shí)驗(yàn)證任何東西,但所有的一切都運(yùn)轉(zhuǎn)正常。

于是,我學(xué)習(xí)了這種技術(shù),掌握了它,還講授了相關(guān)課程,做了相關(guān)咨詢。除此之外,我調(diào)查了單元測(cè)試對(duì)代碼庫(kù)的影響,發(fā)現(xiàn)這些影響無(wú)疑都是好的。

5. 證據(jù)為王

到目前為止,在這篇文章中,我已經(jīng)提到了自己的代碼庫(kù)評(píng)估實(shí)踐,并討論了經(jīng)驗(yàn)數(shù)據(jù)。所以,讓我們正式聊聊,在我目前職業(yè)生涯中收獲的最后一點(diǎn)經(jīng)驗(yàn):證據(jù)就是一切!

代碼評(píng)審可以作為一種教育性的賦能活動(dòng),或者稱他們可以處決你的靈魂。然而,代碼評(píng)審很可能會(huì)在啟發(fā)性的體驗(yàn)和無(wú)意義的爭(zhēng)吵之間來(lái)回?fù)u擺。

你會(huì)聽(tīng)到諸如“那不是一個(gè)好的設(shè)計(jì)”或“那沒(méi)有效率”之類的話,你可能也會(huì)說(shuō)這些話。而且,你很可能在沒(méi)有任何證據(jù)的情況下聽(tīng)到或說(shuō)出這些話。

那么,怎樣去解決這個(gè)問(wèn)題呢?

證據(jù)的重要性

如果在代碼評(píng)審過(guò)程中,或者在團(tuán)隊(duì)、組織內(nèi)協(xié)作時(shí),有人對(duì)你橫加指責(zé),那么證據(jù)就是最好的說(shuō)明。如果試圖向管理層或領(lǐng)導(dǎo)層解釋任何事情,證據(jù)也是最好的說(shuō)明。我的意思是,在代碼庫(kù)中找到有全局聲明和沒(méi)有全局聲明的模塊,然后將 JIRA 問(wèn)題單的事故率或者其他數(shù)據(jù)作為參考依據(jù)。

[[284982]]

你的團(tuán)隊(duì)中是否有人要求你使用與你選擇不同的庫(kù)或 API,因?yàn)樗鼈兙哂?ldquo;無(wú)憑無(wú)據(jù)”的良好性能?那么,你接受他所說(shuō)的嗎?

如果不接受,那就去證明他說(shuō)的是錯(cuò)的。比如,進(jìn)行實(shí)際的時(shí)間測(cè)試。

讓你自己習(xí)慣于做實(shí)驗(yàn),而不是大聲地表達(dá)和重復(fù)觀點(diǎn)。用實(shí)證驗(yàn)證想法,這種做法具有直接價(jià)值。

當(dāng)面對(duì)質(zhì)疑時(shí),有時(shí)你會(huì)發(fā)現(xiàn)自己是對(duì)的,而有時(shí)會(huì)意識(shí)到自己是錯(cuò)的。哪怕通過(guò)證明是錯(cuò)的,也很有價(jià)值。

除此之外,你會(huì)開(kāi)始用一種其他人無(wú)法匹敵的方式進(jìn)行辯論,從而樹立起自己的品牌,那就是勤奮和正確。這可以幫助你克服一些看似不可逾越的障礙,比如“我只是個(gè)初學(xué)者,而他是個(gè)專家”。其實(shí),他不過(guò)是一個(gè)專家級(jí)初學(xué)者而已。

如果將眼光再放長(zhǎng)遠(yuǎn)一點(diǎn)來(lái)看,這種操作,會(huì)讓你在事業(yè)上有更好的發(fā)展。能夠編寫代碼確保你會(huì)有一個(gè)回報(bào)豐厚的職業(yè)生涯,能夠編寫代碼并使用證據(jù)來(lái)為行動(dòng)過(guò)程提供技術(shù)和業(yè)務(wù)用例,將確保你的事業(yè)蒸蒸日上。

以健康的方式使用 (或不使用) 這些

寫這篇文章的時(shí)候,我覺(jué)得自己富有哲理。事實(shí)上,如果你足夠努力地做過(guò)嘗試,我想你可以反駁這些觀點(diǎn)。

我并沒(méi)有把這些作為一成不變的編程法則或某種專業(yè)的行為準(zhǔn)則,我只是把它們作為職業(yè)生涯中自己學(xué)到的經(jīng)驗(yàn)教訓(xùn)提供給大家,它們只是我的個(gè)人觀點(diǎn),請(qǐng)大家謹(jǐn)慎選擇。

希望這些觀點(diǎn)能對(duì)你們有所幫助,使你們能夠根據(jù)自己的需要以健康的方式采用或者不采用它們。

作者介紹

Erik Dietrich,DaedTech LLC 的創(chuàng)始人、程序員、架構(gòu)師、IT 管理顧問(wèn)、作者和技術(shù)人員。 

 

責(zé)任編輯:張燕妮 來(lái)源: AI前線
相關(guān)推薦

2015-08-26 10:50:12

資深程序員編程經(jīng)驗(yàn)

2011-12-26 17:18:25

程序員

2019-06-25 10:02:44

程序員經(jīng)驗(yàn)編程

2015-09-08 10:49:35

程序員編程經(jīng)驗(yàn)

2013-04-25 14:40:08

編程

2020-06-17 15:59:06

程序員技術(shù)開(kāi)發(fā)

2013-04-19 09:50:51

編程編程語(yǔ)言編程經(jīng)驗(yàn)

2024-05-21 13:41:17

2017-11-17 08:00:03

軟件開(kāi)發(fā)程序員前輩經(jīng)驗(yàn)

2015-05-20 12:58:43

程序員經(jīng)驗(yàn)教訓(xùn)

2015-03-10 14:28:46

程序員編程知識(shí)經(jīng)驗(yàn)總結(jié)

2020-02-25 10:25:13

Python 開(kāi)發(fā)編程語(yǔ)言

2021-02-18 00:19:40

編程語(yǔ)言程序員工具

2019-08-19 08:42:44

程序員技能開(kāi)發(fā)者

2017-11-09 07:58:07

程序員編程代碼

2021-10-09 14:11:52

程序員經(jīng)驗(yàn)軟件工程師

2016-12-08 10:53:46

程序員編程

2022-05-23 07:56:19

語(yǔ)言DSLClojure

2015-10-28 09:33:31

程序員崩潰編程語(yǔ)言

2017-12-12 18:10:30

程序員工作經(jīng)驗(yàn)技能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国内av在线| 久久人人网 | 国产日韩欧美二区 | 色婷婷综合久久久中文字幕 | 国产综合久久 | 日本精品久久 | 伊伊综合网 | 久久精品二区亚洲w码 | 青青激情网 | 国产精品久久久久久一区二区三区 | 中文字幕 国产精品 | 粉嫩在线 | 欧美性大战久久久久久久蜜臀 | 黄色av网站在线观看 | 国产激情片在线观看 | 日本三级网站在线观看 | 一区二区高清 | 91久久| 五月激情婷婷网 | 精品少妇v888av | 欧美一级久久 | 精品在线一区 | 亚洲一区精品视频 | 成人午夜影院 | 欧美激情综合五月色丁香小说 | 国产高清视频一区 | 亚洲一一在线 | 国产区免费视频 | 亚洲国产一区二区三区在线观看 | 日韩亚洲欧美综合 | 成人欧美一区二区三区在线播放 | 中文在线а√在线8 | 人人干人人干人人干 | 国产日韩欧美电影 | 国产激情免费视频 | 久久国产精品-国产精品 | 全免费a级毛片免费看视频免 | 欧美成人一区二区三区 | 最新日韩精品 | 欧美一区二区三区视频 | 色综合久久久久 |