【為什麼我們要挑選這篇文章】工程師會寫程式是基本,但能寫出精簡的程式碼,懂得整理並刪除冗餘程式碼的工程師才是真的強。在專案中,工程師常會有期限壓力,因此交出表面上可以運作的程式,但程式碼卻很雜亂,隱含後續的 debug 成本。優秀的工程師,就會花時間去整理程式碼,而這種工程師更應該得到獎勵。(責任編輯:郭家宏)
「《科技報橘》徵才中!跟我們一起定位台灣產業創新力 >> 詳細職缺訊息
快將你的履歷自傳寄至 jobs@fusionmedium.com」
對於開源專案來講,寫新程式碼的貢獻者不一定是好工程師,但不會刪程式碼的工程師一定不是合格的工程師——因為「刪程式碼」才是讓開源軟體程式碼簡潔高效的關鍵所在。
MongoDB 的工程師 Dj Walker-Morgan 就在推特中這樣說道:「依我看,刪程式碼才是償還技術債的絶殺技能。」
對於軟體工程師來講,只有其本人對整個專案瞭然於心,才能知道哪行程式碼是冗餘的,刪除這些程式碼才能確保程式在保證功能完整性的情況下高效運作,真正達到去蕪存菁的目的。
另一位資深工程師 CharityMajors 曾發推文表示:「在曾與我共事過的資深工程師中,最優秀的那批人一直在想盡辦法,避免在專案中添寫新程式碼。」
那麼,對於這些刪除程式碼,或以最小的程式碼量完成更多功能的軟體工程師,我們是否有合適的獎勵方法呢?
降低技術債成本,工程師需要花時間刪除冗餘程式碼
前文提到,刪除程式碼是償還「技術債」的必殺技,那麼到底什麼是「技術債」呢?
在軟體開發過程中,如果工程師為趕在最後期限之前交差而採用了一種較為簡單但未達到最佳標準的解決方案,那麼專案就會背上技術債,潛在的風險會像利息一樣,使債越積越大。
Dormain Drewitz 曾發表過一個非常有趣的觀點:「所有寫下的程式碼都是技術債。」此話怎講呢?
由於「馬後砲效應」的存在,人們的後見之明使得分辨一段程式碼是正確的決策還是垃圾的產出變得十分容易,但在實際的開發過程中,工程師可能沒辦法找到一個更好的解決方案,甚至可以說,目前的程式碼在當時來看可能就是最佳選擇。
但我們要知道,這些當下的「最佳選擇」並不意味著要長久保留。不管你喜歡與否,「技術債」都會越積越重。
來自 ThoughtWorks 的 MatrinFowler 便對處理技術債提出了以下建議:
「通常解決金融債務的最佳途徑就是一點點地償還本金,『技術債』亦是如此。在搭建第一個功能時,我就會開始花額外的時間刪掉一些冗餘程式碼。這就好比減少了技術債未來可能產生的利息,雖然會花費一些額外的時間,但這讓最終的技術債變得可承擔。像這樣逐步改進程式碼,那些經常被我們經常修改的程式碼塊便會隨著時間的推移變得越來越精煉,而這些程式碼塊也恰好是程式碼庫中最需要定期清理的部分。」
工程師 SarahMei 將技術債稱為「混亂體」,一個雜亂的房間。正因如此,嘗試用微服務架構(MSA)來解決技術債的想法是不切實際的。
她認為,這樣做會使得專案最終只剩一個飽和微小的空間和一堆雜亂無序的儲存單元。同樣的,你無法在這樣一個狹小、擁擠又混亂的房間中找到你想要的東西。
因此,降低技術債的理想方案是從那些擁有最多所謂貢獻量的程式碼入手。於是,眼下要解決的問題變為——如何透過合適的方法標定那些被刪除的程式碼?
負責整理、刪除程式碼的工程師應該得到獎勵
如果你去看 Kubernetes 或其他專案的貢獻排行榜,你很容易找到那些提交開源程式碼的工程師,但排名指標的下拉選單中並沒有出現與「刪除程式碼行數」相關的數字。依照前文 Majors 對優秀的資深軟體工程師的定義,儘管記錄那些提交新程式碼的人是有意義的,但這些新程式碼能為開源專案帶來多大價值就不太好說了。
相較於統計程式碼量,對程式碼效率的計量是一件並不那麼客觀的事情,儘管這一指標十分重要,但實際上很難對其下一個準確統一的操作性定義。而正因為如此,我們反倒可以重新體會到「刪程式碼」的藝術魅力。
曾任職 MongoDB 的 HenrikIngo 告訴作者:「在 MongoDB 工作的 3 年裡,我刪掉的程式碼比我寫的要多。」他還自嘲道:「但遺憾的是,這注定是以場失敗的戰役——這只會激發更多的同事編寫更多新的程式碼進去。」
在這樣的評判標準下,優秀的工程師可能不會在排行榜中名列前茅,因為他們的貢獻在於巧妙地刪除冗餘程式碼,就像 Henrik,他們刪除的程式碼可能比寫的新程式碼還要多。
幾年前,Yelp 的團隊開發了 Undebt——一個旨在自動化實現大量程式碼重構的專案,但至今沒有見它有過後續的維護和更新,也沒見它被成功使用。
那麼,你所在的團隊是如何發現和鼓勵會刪程式碼的工程師呢?為開源專案刪程式碼的工程師是否也可以透過同樣的方式得到鼓勵和回報呢?
至少目前來看,人們所關心的排行榜或許是基於不完美甚至是沒有價值的指標——那些致力於在茫茫程式碼的海洋中消除一個個技術債的「清道夫」工程師應該受到更大的重視和嘉獎。
原文報導 傳送門
(本文經合作夥伴 大數據文摘 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈开源社区的技术债:写代码的“码农”VS 删代码的“清道夫”,谁更该被嘉奖?〉。首圖來源: 大數據文摘)
更多關於工程師的消息
網友大哉問:我今年 28 歲,應該從普通工程師轉行 AI 工程師嗎?
工程師海外薪資情報:跑去美國當數據分析師,年薪可以拿多少?
【工程師界的創世神】近 50 年來最有影響力的 10 種程式語言,到底是誰發明的?