最近的1月2號,任正非發佈了題爲《全面提高軟件工程能力與實踐,打造可信的高質量產品》致全體員工信,這也是今年華爲總裁辦簽發的2019年001號文件。在信中,任正非強調了高質量軟件產品的關鍵特性,呼籲各軟件工程師理解架構的核心要素、重視代碼質量、遵循業界共識的標準和規範,並計劃用5年時間投入20億美圓全面提高華爲軟件質量。安全
任正非的公開信性能優化
在個人印象中,關於某某公司宣佈重金投入一個領域、一個產品的新聞有不少,好比某度和某米的all in;但華爲此次卻很不同,20億美圓的投入點竟然單純是衝着軟件質量去的。和前面的新聞比,華爲此次的投入針對的不是增量而是存量。因而咱們不由要問:花一百多億人民幣的代價,甚至不惜影響現有的團隊開發節奏,去作一件並不能帶來短時間直接收益的事情,華爲值得嗎?微信
我想任正非是堅決地認爲值得的,從他的公開信中就可以看出來:在信的開篇,任正非就告訴華爲員工公司正處在一個新的起點,並明確把網絡安全和隱私保護做爲公司的最高綱領。也就是說,面對全面雲化、智能化、軟件定義一切等發展趨勢,他意識到軟件工程的可信度將在接下來的時間內變得尤其重要,作很差是可能連入場券都拿不到的!網絡
隨着5G、深度物聯網建設即將拉開序幕,數據在往後將變得異常豐富。華爲做爲數據採集的主要設備方、管理者,必然要肩負起維護數據安全的責任,若稍有不慎發生必定範圍的系統故障、數據泄露等問題,帶給公衆和公司的衝擊會是巨大的。架構
所以,任正非的這個決定看似針對的是公司現有存量,實際出發點和十年前馬雲決定作雲計算是同樣的:不可不作,由於這就是將來!性能
代碼規範爲什麼重要?測試
寫這篇文章,主要不是要聊任正非的這封信,而是想借此談論一些關於軟件質量的見解。包括我在內的大部分軟件工程師在現階段是無需過多考慮架構的,咱們面臨的最直接要求就是軟件編寫要遵循統一的代碼規範,所以本文就圍繞代碼規範來說。優化
每一位參與過工程代碼編寫的軟件工程師或許都會說:「代碼規範很重要」!若要問爲何重要時,獲得的答案大概會是:「代碼規範就像是團隊的共同語言,你們使用統一的語言交流會更加順暢,避免額外的溝通成本」。若是進一步追問還有沒有其它因素,不少工程師就無從提及了。雲計算
事實上,軟件團隊開發遵循統一的代碼規範的確可以大大提高總體代碼的可讀性,不過還有更爲重要的一點是:代碼規範實際是架構細節實現的一部分,設計工程架構時會有安全性、韌性、擴展性、可維護性等多個方面的考慮,軟件規範的落實狀況將很大程度上決定軟件工程在這些方面上的表現。這也是爲何任總在公開信中會呼籲員工要深入理解架構的核心要素。spa
在軟件開發中這樣的情形是很常見的:
-
程序崩潰了,沒有任何提示信息,只能經過不斷地重複嘗試復現,慢慢定位問題點。
-
有人針對本身維護部分代碼作出修改並局部測試成功後上庫,結果引起其它模塊的功能問題。
-
代碼冗長且邏輯複雜,交接給他人維護形成噩夢般的體驗,甚至連編寫者本人都難以從新理解。
-
工程代碼有移植須要,發現裁剪困難,同一硬件平臺的遷移甚至都要反覆調試。
……
你看,即便咱們擁有了統一的命名風格、代碼格式、嚴謹的註釋,依然無助於以上這些問題的發生。形式上的統一當然是代碼規範中必不可少的部分,但代碼規範還應包括體現良好架構設計思想的一些原則,甚至更爲重要。
然而,現實的問題每每不是有沒有書面的代碼規範,而是有了代碼規範後團隊可否一以貫之。
有太多的理由讓軟件工程師們放鬆對代碼規範的遵照了:
-
項目工期緊、領導催得厲害,這個時候抓代碼規範分散太多時間,應該讓路於基本功能的實現。
-
接手的時候代碼就沒按照規範來,所以我再遵照也沒意義。
-
讓代碼能工做,纔是專業開發者的頭等大事,要分清主次。
……
以上的種種理由看似有必定道理,仔細琢磨其實徹底不是那麼回事,是站不住腳的。
好比最多見的第一點,由於趕進度,因此沒那麼多時間注意規範。實際狀況是:
(1)在項目的開發中,絕大部分的時間是消耗在 bug 調試而不是寫代碼上的;
(2)在寫代碼的同時注意代碼規範的維護,並不會牽扯太多時間;
(3)寫代碼的時候更多時間是在讀代碼,讀代碼和寫代碼的時間比通常在 10:1 左右,而代碼是否規範,將及大地影響閱讀代碼的效率。
若是注意到這些事實,代碼規範還應該讓位於工程進度嗎?
對於第二點,彷彿是在說:在一個原本就很爛的代碼上堅持個人代碼規範是沒有意義的事情。這就比如咱們同他人交往,咱們有必要由於別人沒有禮貌,就容許本身變得跟他同樣沒有禮貌嗎?
對於第三點,今天編寫的功能極有可能在下一版本中被修改,但代碼的可讀性卻會對之後可能發生的修改行爲產生深遠影響。
版本經理、領導可能站在他們的角度而更關心項目進度,這並不意味着軟件工程師能夠放鬆對代碼規範的遵照,只給領導看到他們可以看到的。全部不符合既定規範下寫出來的代碼在日後的維護上帶來問題的可能性是極大的,也許是以 bug 的形式體現;也許就是一團亂麻,讓人望而生畏。這些不規範的問題不會隨着時間的推移而自動消失,它們會轉化成技術債務,是債老是要還的,並且還利滾利!今天不還,明天后天仍是要還;本身不還,別人就要還得更多;當哪一天軟件工程師疲於還債,離職或許就會發生了。
不少團隊每每由於趕工期而加班加點,卻不太捨得多花些時間對你們的代碼規範意識進行指導和培訓。就像時間管理的四象限法則,人們老是花太多時間在「重要又緊急」和「緊急又不重要」的事情上,對於「重要不緊急」的事情每每視而不見。
落實代碼規範就是那個重要不緊急的事情,但願咱們都能注意到它,從維護代碼的惡性循環中走出來,把軟件開發變成一件愉悅的事情。
參考資料
【1】《全面提高軟件工程能力與實踐,打造可信的高質量產品》——任正非公開信
【2】《代碼簡潔之道》——Robert C. Martin.
·END·
你可能還感興趣:
歡迎來個人微信公衆號作客:信號君
專一於信號處理知識、高性能計算、現代處理器&計算機體系
技術成長 | 讀書筆記 | 認知升級
幸會~