從任正非公開信說起,談代碼規范的重要性!


 

最近的1月2號,任正非發布了題為《全面提升軟件工程能力與實踐,打造可信的高質量產品》致全體員工信,這也是今年華為總裁辦簽發的2019年001號文件。在信中,任正非強調了高質量軟件產品的關鍵特性,呼吁各軟件工程師理解架構的核心要素、重視代碼質量、遵循業界共識的標准和規范,並計划用5年時間投入20億美元全面提升華為軟件質量。

 

任正非的公開信

在我的印象中,關於某某公司宣布重金投入一個領域、一個產品的新聞有很多,比如某度和某米的all in;但華為這次卻很不一樣,20億美元的投入點居然單純是沖着軟件質量去的。和前面的新聞比,華為這次的投入針對的不是增量而是存量。於是我們不禁要問:花一百多億人民幣的代價,甚至不惜影響現有的團隊開發節奏,去做一件並不能帶來短期直接收益的事情,華為值得嗎?

 

我想任正非是堅定地認為值得的,從他的公開信中就能夠看出來:在信的開篇,任正非就告訴華為員工公司正處在一個新的起點,並明確把網絡安全和隱私保護作為公司的最高綱領。也就是說,面對全面雲化、智能化、軟件定義一切等發展趨勢,他意識到軟件工程的可信度將在接下來的時間內變得尤為重要,做不好是可能連入場券都拿不到的!

 

隨着5G、深度物聯網建設即將拉開序幕,數據在日后將變得異常豐富。華為作為數據采集的主要設備方、管理者,必然要肩負起維護數據安全的責任,若稍有不慎發生一定范圍的系統故障、數據泄露等問題,帶給公眾和公司的沖擊會是巨大的。

 

因此,任正非的這個決定看似針對的是公司現有存量,實際出發點和十年前馬雲決定做雲計算是一樣的:不可不做,因為這就是未來!

 


代碼規范為何重要?

寫這篇文章,主要不是要聊任正非的這封信,而是想借此談論一些關於軟件質量的看法。包括我在內的大部分軟件工程師在現階段是無需過多考慮架構的,我們面臨的最直接要求就是軟件編寫要遵循統一的代碼規范,因此本文就圍繞代碼規范來講。

 

每一位參與過工程代碼編寫的軟件工程師或許都會說:“代碼規范很重要”!若要問為什么重要時,得到的答案大概會是:“代碼規范就像是團隊的共同語言,大家使用統一的語言交流會更加順暢,避免額外的溝通成本”。如果進一步追問還有沒有其它因素,很多工程師就無從說起了。

 

事實上,軟件團隊開發遵循統一的代碼規范的確能夠大大提升整體代碼的可讀性,不過還有更為重要的一點是:代碼規范實際是架構細節實現的一部分,設計工程架構時會有安全性、韌性、擴展性、可維護性等多個方面的考慮,軟件規范的落實情況將很大程度上決定軟件工程在這些方面上的表現。這也是為什么任總在公開信中會呼吁員工要深刻理解架構的核心要素。

 

在軟件開發中這樣的情形是很常見的:

  • 程序崩潰了,沒有任何提示信息,只能通過不斷地重復嘗試復現,慢慢定位問題點。

  • 有人針對自己維護部分代碼做出修改並局部測試成功后上庫,結果引發其它模塊的功能問題。

  • 代碼冗長且邏輯復雜,交接給他人維護造成噩夢般的體驗,甚至連編寫者本人都難以重新理解。

  • 工程代碼有移植需要,發現裁剪困難,同一硬件平台的遷移甚至都要反復調試。

……

 

你看,即使我們擁有了統一的命名風格、代碼格式、嚴謹的注釋,依然無助於以上這些問題的發生。形式上的統一固然是代碼規范中必不可少的部分,但代碼規范還應包括體現良好架構設計思想的一些原則,甚至更為重要。

 

然而,現實的問題往往不是有沒有書面的代碼規范,而是有了代碼規范后團隊能否一以貫之。

 

有太多的理由讓軟件工程師們放松對代碼規范的遵守了:

  • 項目工期緊、領導催得厲害,這個時候抓代碼規范分散太多時間,應該讓路於基本功能的實現。

  • 接手的時候代碼就沒按照規范來,因此我再遵守也沒意義。

  • 讓代碼能工作,才是專業開發者的頭等大事,要分清主次。

……

 

以上的種種理由看似有一定道理,仔細琢磨其實完全不是那么回事,是站不住腳的。

 

比如最常見的第一點,因為趕進度,所以沒那么多時間注意規范。實際情況是:

(1)在項目的開發中,絕大部分的時間是消耗在 bug 調試而不是寫代碼上的;

(2)在寫代碼的同時注意代碼規范的維護,並不會牽扯太多時間;

(3)寫代碼的時候更多時間是在讀代碼,讀代碼和寫代碼的時間比一般在 10:1 左右,而代碼是否規范,將及大地影響閱讀代碼的效率。

如果注意到這些事實,代碼規范還應該讓位於工程進度嗎?

 

對於第二點,仿佛是在說:在一個本來就很爛的代碼上堅持我的代碼規范是沒有意義的事情。這就好比我們同他人交往,我們有必要因為別人沒有禮貌,就允許自己變得跟他一樣沒有禮貌嗎?

 

對於第三點,今天編寫的功能極有可能在下一版本中被修改,但代碼的可讀性卻會對以后可能發生的修改行為產生深遠影響。

 

版本經理、領導可能站在他們的角度而更關心項目進度,這並不意味着軟件工程師可以放松對代碼規范的遵守,只給領導看到他們能夠看到的。所有不符合既定規范下寫出來的代碼在往后的維護上帶來問題的可能性是極大的,也許是以 bug 的形式體現;也許就是一團亂麻,讓人望而生畏。這些不規范的問題不會隨着時間的推移而自動消失,它們會轉化成技術債務,是債總是要還的,而且還利滾利!今天不還,明天后天還是要還;自己不還,別人就要還得更多;當哪一天軟件工程師疲於還債,離職或許就會發生了。

 

很多團隊往往因為趕工期而加班加點,卻不太舍得多花些時間對大家的代碼規范意識進行指導和培訓。就像時間管理的四象限法則,人們總是花太多時間在「重要又緊急」和「緊急又不重要」的事情上,對於「重要不緊急」的事情往往視而不見。

 

落實代碼規范就是那個重要不緊急的事情,希望我們都能注意到它,從維護代碼的惡性循環中走出來,把軟件開發變成一件愉悅的事情。

 


參考資料

【1】《全面提升軟件工程能力與實踐,打造可信的高質量產品》——任正非公開信

【2】《代碼簡潔之道》——Robert C. Martin.

 

 

·END·

 


 

你可能還感興趣:

SIMD數據並行(一)——向量體系結構

SIMD數據並行(二)——多媒體SIMD擴展指令集

SIMD數據並行(三)——圖形處理單元(GPU)

SIMD數據並行(四)——三種結構的比較

現代處理器與代碼性能優化

關於代碼執行效率優化的一次內部分享

 

歡迎來我的微信公眾號做客:信號君

專注於信號處理知識、高性能計算、現代處理器&計算機體系 

 

技術成長 | 讀書筆記 | 認知升級

幸會~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM