每一座屎山程式碼背後,都藏著一堆熟讀程式碼規範的研發

發表於2023-09-20

點選連結瞭解詳情

img


導讀

韓寒在《他的國》中寫道:“我們懂很多道理,卻依然過不好這一生”,人們雖然知道很多道理,但並不一定能將這些道理應用到實際生活中。這種現象在生活中很常見,我們聽了很多的成功學的道理,但實際上,成功和幸福不是僅僅靠這些道理就能實現的,需要不斷地努力和實踐,才能實現自己的目標。而在開發的過程中也會遇到類似的問題,明明熟讀《程式碼整潔之道》,卻依舊只能寫低效程式碼,行業內經常調侃“一個優秀的程式設計師可以帶動多人就業”,這些中間欠缺的是什麼?如何快速落實?本文將從幾個方面進行分析,歡迎閱讀。

目錄

1 時間壓力

2 業務需求

3 自我驅動力

4 團隊合作和溝通

5 技術債務

6 自動化工具和流程

7 反饋和改進機制

8 個人實施案例

01 時間壓力

在開發的過程中,專案可能有緊迫的截止日期,需要在有限的時間內完成。這可能導致時間壓力,同時在開發過程中,可能會遇到一些不可預見的延遲和問題,如技術難題、系統故障等,這會導致開發時間的壓縮。使得開發者難以花費足夠的時間來編寫高質量的程式碼。

img

解決辦法:

▶︎合理規劃和管理時間:在專案開始之前,制定詳細的專案計劃和時間表,併合理分配各個任務的時間。確保給自己足夠的時間來編寫高質量的程式碼。

▶︎優先順序管理:根據任務的重要性和緊急程度,合理設定任務的優先順序。將時間和精力集中在最重要的任務上,確保其優先完成。

▶︎尋求幫助和支援:如果時間壓力過大,可以向上級或團隊領導尋求幫助和支援。他們可能會提供額外的資源或調整專案計劃,以減輕開發者的壓力。

▶︎自我管理和調整:開發者需要學會自我管理和調整,合理安排工作和休息時間。避免過度工作和疲勞,保持身心健康,提高工作效率。

▶︎尋找時間最佳化的機會:在開發過程中,尋找可以最佳化時間的機會。例如,使用程式碼模板、重用已有的程式碼、利用開源庫等,可以減少開發時間。

02 業務需求變更

在軟體開發過程中,業務需求可能沒有被充分明確或者變化頻繁。這可能導致開發者需要頻繁修改程式碼,而沒有足夠的時間來重構和最佳化程式碼質量。

img

解決辦法:

▶︎加強需求分析和明確:與客戶或專案經理密切合作,確保需求被充分分析和明確。透過詳細的需求文件、使用者故事、原型等方式,減少需求模糊性,降低需求變更的頻率。

▶︎頻繁溝通和反饋:與客戶或專案經理保持頻繁的溝通和反饋。及時更新專案進展,讓客戶或專案經理瞭解開發進度和可能的影響。這樣可以減少需求變更的頻率,並及時調整開發計劃。

▶︎敏捷開發方法:採用敏捷開發方法,如 Scrum 或 Kanban,可以更好地應對需求變更。透過迭代開發和短週期的釋出,可以及時響應需求變更,並減少時間壓力。

▶︎需求變更管理:建立良好的需求變更管理機制。對需求變更進行評估和優先順序排序,確保只有真正重要和緊急的變更才會被接受,並及時更新開發計劃。

▶︎風險管理和緩衝時間:在專案計劃中,考慮到需求變更的風險,併為此留出一定的緩衝時間。這樣可以應對可能的變更,減少時間壓力。

03 自我驅動力

儘管開發者知道程式碼整潔和程式碼質量的重要性,但他們可能缺乏自我驅動力來主動提高自己的編碼水平。他們可能更關注完成任務而忽略了程式碼質量。

img

解決辦法:

▶︎找到工作的意義和價值:深入思考開發工作的意義和價值,明確自己的職業目標和發展方向。透過理解工作的重要性,能夠激發自我驅動力去追求高質量的程式碼。

▶︎設定明確的目標和計劃:制定明確的目標和計劃,將開發過程分解為小的可管理的任務。透過逐步完成這些任務,逐漸提高程式碼質量,增強自我驅動力。

▶︎增強自信心:透過不斷學習和提升自己的技術能力,增強自信心。參加培訓、讀書、參與開源專案等方式,能夠提高自己的專業知識和技能,從而有信心寫出高質量的程式碼。

04 團隊合作和溝通

在一個團隊中,如果沒有共同的程式碼整潔標準和程式碼質量意識,開發者可能很難在專案中保持一致的程式碼質量。缺乏有效的溝通和合作也會影響程式碼整潔的實施。

img

解決辦法:

▶︎制定統一的程式碼整潔標準:專案組應該制定統一的程式碼整潔標準,明確程式碼的命名規範、程式碼風格、註釋規範等。可以參考行業的最佳實踐和程式碼規範,如 Google 的編碼規範、Clean Code 等。

▶︎建立程式碼審查機制:在專案中引入程式碼審查機制,透過對程式碼的檢查和評審,及時發現和糾正程式碼質量問題。可以透過程式碼審查工具或人工的方式進行程式碼審查。

▶︎建立知識分享和交流機制:建立一個開放的知識分享和交流平臺,讓開發者可以互相學習和交流經驗。可以組織技術分享會、團隊建設活動等,促進開發者之間的合作和學習。

▶︎獎勵和認可優秀的程式碼質量:對於在專案中表現出色的開發者,可以給予獎勵和認可,激勵他們保持高質量的程式碼。這可以是一種激勵機制,促使開發者提高程式碼質量意識。

05 技術債務

在開發過程中,由於一些原因,開發者可能會採取一些權宜之計,暫時犧牲程式碼質量以滿足需求。這些權宜之計可能導致技術債務的積累,隨著時間的推移,程式碼變得越來越難以維護和改進。如下所示:

int x = 10;int y = 0;int result = x / y; // 上面程式碼顯然沒有考慮處理除以 0 的情況,這種類似的情況還有很多。// 改進思路:int x = 10;int y = 0;if (y != 0) {    int result = x / y; // 新增條件判斷,避免除以 0 的錯誤} else {    // 錯誤處理邏輯,如輸出錯誤資訊或者丟擲異常}

img

改進方法和思路:

▶︎分階段交付和迭代開發:將專案分解為多個階段,每個階段都有明確的交付目標。透過迭代開發的方式,及時交付部分功能,減輕時間壓力,避免犧牲程式碼質量。

▶︎技術債務管理:及時識別和記錄技術債務,將其納入專案的規劃和管理中。在後續的開發過程中,逐步還清技術債務,提高程式碼質量。

▶︎技術選型和技術評估:在專案開始之前,進行充分的技術選型和技術評估,選擇適合專案需求的技術棧。避免因技術選型不當導致後期維護困難。

▶︎程式碼審查和重構:定期進行程式碼審查,及時發現和糾正程式碼質量問題。在專案後期,可以考慮進行程式碼重構,改善程式碼的可讀性、可維護性和可擴充套件性。

06 自動化工具和流程

缺乏自動化工具和流程可能使得程式碼整潔和程式碼質量的檢查變得困難。開發者可能需要手動進行程式碼審查和測試,增加了工作量和錯誤的可能性。

img

解決辦法:

▶︎使用自動化工具:選擇適當的自動化工具來輔助程式碼整潔和程式碼質量的檢查。例如,使用靜態程式碼分析工具(如 SonarQube、ESLint、PMD 等)來檢查程式碼規範和潛在的問題。使用單元測試框架(如 JUnit、pytest 等)來自動化測試程式碼。這些工具可以幫助開發者減少手動工作,提高程式碼質量。

▶︎持續整合和持續交付:引入持續整合和持續交付的流程,自動化構建、測試和部署過程。透過自動化的流程,可以及時發現和修復程式碼質量問題,減少手動工作和錯誤的可能性。

07 反饋和改進機制

如果開發者沒有及時獲得程式碼質量的反饋和改進機會,他們可能無法意識到自己的問題,並且無法改進自己的編碼水平。

img

▶︎程式碼質量評估和反饋:建立起程式碼質量評估和反饋機制,定期對開發者的程式碼進行評估,並及時提供反饋。可以使用靜態程式碼分析工具、程式碼審查等方法來評估程式碼質量,並向開發者提供改進建議和指導。

▶︎學習和培訓機會:提供學習和培訓機會,幫助開發者提升自己的編碼水平。可以組織內部培訓、技術分享會等活動,讓開發者學習和分享最佳實踐和經驗。

▶︎導師制度:建立導師制度,為開發者提供指導和支援。經驗豐富的開發者可以擔任導師角色,與新手開發者進行合作和交流,幫助他們提升編碼水平。

▶︎程式碼評審和團隊合作:建立起程式碼評審和團隊合作的機制,透過程式碼評審和團隊討論,開發者可以相互學習和改進。可以定期進行程式碼評審會議,讓開發者分享自己的程式碼,並接受其他開發者的評審和建議。

▶︎提供挑戰和機會:給開發者提供挑戰和機會,讓他們參與複雜和有挑戰性的專案。透過參與這樣的專案,開發者可以學習和成長,提升自己的編碼水平。

08 個人實施案例

那是畢業後來到的第二家公司,接手了離職同事的“屎山程式碼”,整個專案只有一句註釋,“佛祖保佑,永無 bug”。程式碼沒有一點規範,變數命名清一色的 aabb,領導讓我抓緊給個排期,專案要上線,我心想“我趕緊跑路的好!”,我直截了當說道:“這個專案整體沒用規範,他可能都看不懂,我更看不懂”,後面還是勉強上線了,但問題較多,我的績效一塌糊塗。我就在思考如何高效地開發程式碼和定位問題?並在我所在的這個專案中快速實施。

img

▶︎ “屎山一樣的程式碼”我不可能一點點修復規範問題,有沒有合適的工具可以提醒你呢,哪裡問題較多,在我用了多個工具之後,我發現 CheckStyle 是我用過最好的程式碼規範檢查工具,裡面用了 sun 的規範。(後面在其他同事的協助下,共同搞定了一版公司自身的規範)。

▶︎ 後面慢慢的我定位問題和開發程式碼的質量越來越高,績效也好了很多,在一些分享會中,我提了自己的建議,領導針對這些成果也是比較認可,最後成立了“程式碼規範小組”,定了一些規範制度:

開發人員互相 review 程式碼,不少於兩個人看過之後才可以合併主線。提出問題的人可以得到獎勵。“開發問題程式碼”的會受到懲罰(在兩個月後開始執行)。你也可以對其他專案提出問題(背景:公司較小,專案又比較多和雜。這個的獎勵是比較多的,對自己的個人時間佔用較多,取捨全靠自己,沒有硬性要求)。導師制度:帶的新入職的員工如果近期發起的程式碼質量優秀或者取的了好績效,導師會得到獎勵。分享會:開發人員會找輪流進行分享,找一些開原始碼或者經典案例進行解讀。

經歷了大概一年的時間的迭代,低質量程式碼逐漸消失了。後續我覆盤這個過程,我發現有些運氣的成分,遇見了一個很好的領導,一群優秀的同事,當然也和自身的努力分不開,如果自己沒有想著去提升自己的程式碼規範從而快速地解決問題,就不會被領導看見程式碼規範的重要性,更不會去推動團隊程式碼規範建設。

最後,我想告訴大家,當我們看到這些“屎山程式碼”的時候,我們應該偷偷地笑,先恭喜自己取得高績效,根據實際情況並結合上述分析去推動團隊制定程式碼規範和有效措施。投入實踐,具體落實。希望每個人都能被看見。

-End-

原創作者|孔垂航

img

相關文章