河南夢之網網絡科技有限公司
夢之網科技出品
掃描關注夢之網科技微信公眾賬號

掃小程序碼聯系客服

我從高級軟件工程師身上學到的那些經驗與教訓-鄭州網站建設

夢之網科技?2019-10-12?文章動態?

譯者丨核子可樂

一年之前,我開始在彭博擔任全職工作。從那時起,我就在構思這篇文章。我想象自己能夠在時機成熟時,把自己的想法都傾訴于紙端。但剛剛過去一個月,我就意識到這并非易事:隨著工作的推進,我忘掉了很多自己剛剛學到的東西。這些東西快速內化,使我的大腦開始欺騙自己,令我誤以為自己早就掌握了這些清晰記得的知識,或者是認定自己從未聽說過那些實際上是被忘記了的內容。正因為如此,我才開始保留自己的日志。每當遇到有趣的情況,我都會把它記錄下來。感謝坐在我身邊的高級軟件工程師們,我可以認真觀察他們在做什么、與我的做法又有何區別。我們會經常結對編程,這能夠大大降低工作的難度。另外,在我們的團隊文化當中,“窺探”其他人的編碼過程并不是什么不光彩的事情。每當我感覺有趣的事情要發生時,總坐很快轉過身去查看。這種敏銳,讓我總能快速弄清事情的來龍去脈。下面來看看坐在一位高級軟件工程師身旁一年,我都學到了哪些重要經驗。

編寫代碼

如何命名

我在工作中接觸的第一項任務是開發一款 React UI。當時我們擁有一個主組件,用于容納其它所有組件。我喜歡在代碼當中加點幽默元素,所以我把它命名為 GodComponent。但在代碼審查時,我才意識到為什么命名工作如此重要、也如此困難。

計算機科學領域有兩大難題:緩存失效、命名以及緩沖溢出錯誤。—— Leon Bambrick

我命名的每一段代碼都包含隱藏的含義。GodComponent?這個組件的含義,就是我會把所有不知道該放在哪的組件都放在這里。它囊括一切。如果我把它命名為 LayoutComponent,后續我才會意識到它的作用就是布局分配,其中不包含任何狀態。

我發現的另一項心得在于:如果其體積過于龐大,就像是這里提到的包含大量業務邏輯的 LayoutComponent,那么我就會意識到是時候進行重構了,因為通過名稱就能看出業務邏輯并不屬于這里。但使用 GodComponent 這個名稱,我們無法判斷業務邏輯出現在這里是否正常。

如何命名集群?最好是在運行了服務之后再對集群進行命名,而后根據運行內容的變化重新調整名稱。最終,我們用自己的團隊名稱完成了集群命名。

函數命名的情況也是一樣。doEverything() 這個名字就不怎么樣,其會帶來嚴重的后果。如果這項函數能夠完成所有操作,那么我們將很難測試函數當中的某些特定部分。而且無論這個函數有多大,我們都會覺得很正常,畢竟它的名字可是叫“everything”。所以,最好的辦法當然是更換名稱,進行重構。

但是,我們在命名中也要考慮到另一類問題。如果名稱的含義太過具體并忽略了某些細微差別,該怎么辦?例如,在 SQLAlchemy 當中調用 session.close() 時,關閉會話不會關閉基礎數據庫連接。(我本應該跳出手冊限制,對這項 bug 進行處理,具體情況將在調試部分進一步說明。)

在這種情況下,我們可以考慮 x, y, z 這樣的名稱,而非 count(), close(), insertIntoDB(),從而避免為其分配隱含的意義。太過具體,會迫使我們不得不在后續維護時費力檢查這些函數到底是用來干嘛的。

最后,當時的我從來沒想到命名會成為值得單獨一提的重要工作。

遺留代碼與下一位開發者

大家有沒有面對一段代碼時,感覺摸不著頭腦?他們為什么要這么寫?這完全說不通啊。

我就“有幸”接手過遺留代碼庫。其中就存在類似于“跟穆罕默德確認過情況之后,取消注釋”這類說明。這話是誰說的?穆罕默德又是哪位?

在這方面,我們不妨做個角色轉換——考慮下一位接手我所編寫代碼的開發者。他們同樣會發現我的代碼非常奇怪。同行評審能夠很好地解決這個問題。這不禁讓我想到上下文原則,即:了解團隊開展工作時的實際處境。

如果我跑去忙別的事,稍后又回來,我可能也無法重新建立這種上下文。我坐說,“當時我是怎么想的?這根本沒道理……哦等等,我原來是這么干的。”

正是為了實現這種提示作用,文檔與代碼注釋才會如此重要。

文檔與代碼注釋

文檔與代碼注釋的意義,在于保持上下文并分享知識。

正如 Li 在如何構建良好軟件中所言,“軟件的主要價值并不在于生成的代碼,而在于生成代碼的過程中開發者所積累下來的知識。”

“軟件的主要價值并不在于生成的代碼,而在于生成代碼的過程中開發者所積累下來的知識。” - Li

我們當時有一套面向 API 端點的隨機客戶端,好像從來就沒人用過。那么要不要把它刪除掉?畢竟這也屬于技術債務。

文章關鍵詞
軟件工程師
代碼
急速赛车国语 暴雪现在靠什么赚钱 卖纯棉短袖赚钱吗 米尔军事如何赚钱 视频网答题赚钱 怎么注册头条号 赚钱 工程部信息化赚钱吗 手游魔力宝贝赚钱攻略 梦幻高辅助赚钱号 百度里赚钱的游戏大全 大城市送外卖赚钱么 在什么直播软件最赚钱 大话西游2口袋怎么赚钱攻略 有什么赚钱知识的书 开一家足浴赚钱吗 在北京开猫舍赚钱吗 跑长途黑车的赚钱技巧