亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

高級Python工程師教你如何正確寫代碼

我接手的第一樣東西就是React UI。我們有一個主要組件,它容納了其他所有組件。我喜歡在代碼中加入一點幽默感,我想把它命名為GodComponent。在code review的時候,我才明白為什么命名是一件很難的事情。

計算機科學有兩個難點:緩存失效,給變量命名,以及差一錯誤。

我經(jīng)手的每一段代碼都帶有隱喻意。GodComponent?那時用來盛放所有那些我不知道該放到哪里的的爛代碼的。它包羅萬象。如果我將一個變量命名為LayoutComponent,未來我會知道,它所做的只是規(guī)劃布局,而不涉及任何狀態(tài)。

我發(fā)現(xiàn)的另一個好處是:如果它看起來太大了,就像包含大量業(yè)務邏輯的LayoutComponent一樣,我知道是時候重構(gòu)了,因為業(yè)務邏輯不應當屬于那部分。而如果使用GodComponent這個名稱,那對里面的業(yè)務邏輯就不會產(chǎn)生任何影響。

命名你的集群?根據(jù)在它上面運行服務來命名是個好主意,可是你以后還可能會在上面運行其他東西。最終,我們是用團隊名稱來命名的。

對于函數(shù)來說也是一樣。doEverything()是一個可怕的名字,這會產(chǎn)生很多后果。如果這個函數(shù)可以完成所有操作,那么測試這個函數(shù)的特定部分就會變得特別難。無論這個函數(shù)有多大,你都不會覺得奇怪,因為畢竟這個函數(shù)就是要做所有事情的。所以需要換個函數(shù)名,重構(gòu)。

有意義的命名也有不好的一面。如果名稱太有意義并隱藏一些歧義怎么辦?例如,在SQLAlchemy中調(diào)用session.close()時,closing sessions不會關(guān)閉基礎數(shù)據(jù)庫連接。

在這種情況下,將名稱視為x,y,z而不是count(),close(),insertIntoDB()可以防止賦予它們隱含意義——并迫使我仔細檢查它們正在做什么。

從來沒想到,關(guān)于命名我要說的東西居然不能用一句話就概括完。

舊代碼和下一個開發(fā)者

你有沒有看過一些代碼并覺得很奇怪?那些開發(fā)者為什么這樣做?這完全說不通啊。

我有幸曾經(jīng)使用過遺留代碼庫。其中有類似這樣的注釋,“在與穆罕默德一起解決了這個問題以后,注釋就刪掉了?!蹦阍谧鍪裁?誰是穆罕默德?

我可以在這里做一個角色轉(zhuǎn)換——想想以后來接手我代碼的人們——他們會不會發(fā)現(xiàn)它很奇怪。Peer review 部分解決了這個問題。這讓我意識到了環(huán)境的重要性:要時刻記得我的團隊正在工作的環(huán)境是什么樣的。

如果我忘記了代碼,稍后又看到它,而無法重新回想起當時的環(huán)境時,我會說:“到底為什么他們會這樣做?這講不通......哦等等,這是我自己寫的?!?/p>

這就是文檔和代碼注釋發(fā)揮作用的地方了。

文檔和代碼注釋

它們有助于保留環(huán)境(上下文,語境),以及分享知識。

正如Li在“如何建立良好的軟件”中所說的那樣,“軟件的主要價值不在于生成的代碼,而在于產(chǎn)生它的人所積累的知識?!?/p>

“軟件的主要價值不在于產(chǎn)生的代碼,而在于產(chǎn)生它的人所積累的知識。”——Li

我們有一個面向客戶的API終端,似乎沒有人使用過。我們只是刪除它嗎?畢竟,這是技術(shù)負債。

如果我告訴你,每年在特定國家/地區(qū),10名記者會將他們的報告發(fā)送到該終端,該怎么辦?你要如何測試?如果沒有文檔(現(xiàn)實中確實沒有),我們就沒辦法。所以,我們沒有那么做。我們直接刪除了該端點。幾個月以后那個一年一度的時刻到了。十名記者無法發(fā)送10份重要報告,因為終端不再存在了。

擁有關(guān)于這個產(chǎn)品的知識的人離開了團隊。當然,現(xiàn)在代碼中有一些注釋解釋了端點的用途。

據(jù)我所知,文檔是一個每個團隊都在努力解決的問題。不僅僅是代碼文檔,還有代碼周圍的流程。

我們還沒有找到一個完美的解決方案。

我很喜歡Antirez對不同類型的有價值的代碼注釋的詳細分類。

原子提交

如果你必須回到之前的步驟(是的你會的。詳見測試部分),這個提交作為一個單元是否合適?

在刪除爛代碼的時候有自信

刪除爛代碼或過時的代碼會使我感到非常不舒服。我認為多年之前被寫下的代碼是神圣的。我的想法是“當他們寫下這些東西時,他們肯定是考慮到一些事情的?!边@是傳統(tǒng)和文化與第一原則思維方式之間的較量。刪除一年一次的終端也是如此。我在這方面得到了太多具體的教訓。

我會試著從周圍解決代碼,而高級工程師則會試著從中間解決。刪除所有內(nèi)容。一個永遠不會運行的if語句?一個不應該調(diào)用的函數(shù)?是的,一切都沒了。我?我只會在最上面寫下我自己的函數(shù)而已。我沒有減少技術(shù)債務。如果我做了什么的話,我也只是增加了代碼復雜性和給他人的誤導而已。對下一個人來說把這些代碼功能拼湊到一起會更艱難。

我現(xiàn)在使用的啟發(fā)式是:現(xiàn)在有的代碼你無法理解,而且你知道有些代碼是你永遠也不會用到的。刪除那些你永遠不會用到的代碼,并對那些你不理解的代碼保持謹慎的態(tài)度。

Code Reviews

Code review是非常棒的學習途徑。這是一個外部反饋循環(huán),反映了你現(xiàn)在和將來會怎么寫代碼。差別在哪里?有一種方式比另一種更好嗎?我在每次code review時都會問自己這個問題:“為什么他們那樣做?”。每當我找不到合適的答案時,我都會和他們談談。

在第一個月之后,我開始在我的隊友代碼中發(fā)現(xiàn)一些錯誤(就像他們曾經(jīng)為我做的那樣)。這太瘋狂了。同行評論對我來說變得更加有趣了——變成了我期待的一場游戲——一場改善我的代碼感的游戲。

我的啟發(fā)是:在我了解代碼如何工作之前不要批準代碼。好啦!今天的分享到這里就結(jié)束了,希望大家持續(xù)關(guān)注馬哥教育官網(wǎng),每天都會有大量優(yōu)質(zhì)內(nèi)容與大家分享!

版權(quán)聲明:轉(zhuǎn)載文章來自公開網(wǎng)絡,版權(quán)歸作者本人所有,推送文章除非無法確認,我們都會注明作者和來源。如果出處有誤或侵犯到原作者權(quán)益,請與我們聯(lián)系刪除或授權(quán)事宜。

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡安全、云原生、Go、Python開發(fā)專業(yè)人才培訓機構(gòu)!