20年程序員經驗分享:怎麼提高工作效率?看這20 條編碼原則!

英文原文:My guiding principles after 20 years of programming

我從 1999 年就開始了編程生涯,到今年已經有 20 多年了。我先是從 Basic 開始,很快轉到了 Pascal 和 C 語言,然後又學習了面向對象編程語言 Delphi 和 C++。2006 年,我開始使用 Java,2011 年開始使用 JavaScript。

我參與過各個行業的軟件開發,從機器人、金融科技、醫療到媒體和通信。我還擔任過研究員、CTO、TPM(技術產品經理)、老師、系統架構師和技術負責人,但不管怎樣,我一直都在編程。

在我參與過的項目當中,有些爲數百萬人提供服務,有些在發佈之前就宣告失敗。我做過諮詢顧問,還創辦過自己的公司。我在開源項目、閉源項目和內部開源項目上花了很多時間,從微控制器到移動應用、桌面應用,再到雲服務和無服務器架構。


我把過去 20 年積累的一些最爲重要的編程原則總結如下。

  1. 不要糾結於開發工具——不管是庫、編程語言還是平臺。儘可能使用原生的構件。不要歪曲技術,也不要歪曲了問題本身。爲要解決的問題選擇合適的工具,否則你要爲你所選擇的工具重新安排你的工作。
  2. 你寫的代碼不是給機器看的,而是給你的同事和未來的你看的(除非你寫的是一次性代碼或彙編代碼)。寫代碼的時候要考慮一下初級開發者,他們會把你的代碼作爲參考。
  3. 優秀的軟件是協作開發的結果。高效溝通,進行開放式的協作。信任他人,並讓他人也信任你。尊重他人勝過尊重代碼。以身作則,把你的追隨者變成領導者。
  4. 分而治之。爲分離的關注點開發單獨的低耦合模塊。進行單獨的模塊測試和集成測試。儘可能按照實際情況測試,同時也要測試到各種邊界情況。
  5. 不要把自己與代碼捆綁在一起,要想辦法讓其他人也能修改你的代碼或者添加新的功能,這樣你才能更容易脫身去參與其他項目,或者去其他公司。不要捆綁自己,否則你很難成長。
  6. 安全性是分層的,每一層需要進行單獨的評估,同時又與整體相關。風險是一個業務決策,與脆弱性和概率有直接的關係。每一個產品或組織都有不同的風險偏好(爲了獲得更大的收益,他們願意承擔風險)。通常這三個關注點之間存在相互衝突:用戶體驗、安全性和性能。
  7. 要意識到每一行代碼都有其生命週期,它們最終都會死掉。有時候,一些代碼會在發佈之前就死掉,所以要學會放手。代碼可以分爲三種:一種是核心代碼,就像汽車的引擎,沒有了它,產品就毫無意義;一種是必要的代碼,就像是汽車的備胎,平時用得少,但一旦需要,它決定了系統的成敗;一種是增值的代碼,就像汽車的杯託,如果有那是再好不過,但如果沒有也不會影響產品。
  8. 不要把你的個人標識融入到代碼裏,人和代碼應該是分離的。不要把其他人對代碼的評價與你自身聯繫到一起,在評價他人的代碼時也要十分謹慎。
  9. 技術債務就像快餐一樣,偶爾欠下一點技術債務是可接受的,但如果你習慣了這樣,它會毀掉你的產品(而且是以讓你措手不及的方式)。
  10. 在尋找解決方案時,請按照這樣的優先級進行決策:安全性 > 可用性(可訪問性和用戶體驗)> 可維護性 > 簡單性(開發者體驗)> 簡潔性(代碼量)> 性能。但不能盲目照搬,而是要根據產品的特點進行取捨。你積累的經驗越多,就越是能夠在這些因素之間做出權衡。例如,在設計遊戲引擎時,性能享有最高的優先級,但在開發銀行應用程序時,安全性則最爲重要。
  11. 拷貝粘貼是滋生 bug 的溫牀。對你所拷貝或導入的東西加以審查,bug 一般會藏身在複雜性中。依賴項複雜沒有關係,但不能讓它存在於代碼中。
  12. 不要只顧着寫正常的代碼,處理異常的代碼也要好好寫。讓人們明白爲什麼會發生異常、如何檢測到的以及怎樣解決。對所有的系統輸入(包括用戶輸入)進行驗證:儘早失敗,並儘可能從錯誤中恢復。我們要假設用戶手裏握着一把槍:你努力讓用戶輸入一些其他的東西,而不是讓他們的子彈射在你的腦門上。
  13. 不要使用依賴項,除非使用它們的成本比你自己寫代碼的成本低很多。因爲使用依賴項要導入、維護、處理 bug,在必要的時候還要進行重構,這些都是成本。
  14. 遠離“炒作驅動開發”,但你要去了解它們,做一些嘗試。
  15. 走出舒適區,每天都要學習。把學到的東西分享出來。如果你以大師自居,就不是在學習。接觸更多的編程語言、技術、文化,保持一顆好奇心。
  16. 好代碼不需要註釋,而優秀的代碼提供了良好的註釋,可以讓任何一個原先沒有參與代碼演進、試錯和需求過程的人更容易閱讀、修改它。
  17. 儘量避免使用重載、繼承和隱式的智能特性。使用純函數,它們更容易測試和診斷,否則的話就使用類。實現不同功能的函數要使用不同的名字。
  18. 在徹底瞭解問題之前不要急着寫代碼。花在傾聽和了解問題上的時間通常比花在寫代碼上的時間要多。在寫代碼之前要先了解問題域。問題就像迷宮一樣,你要循序漸進,反覆進行“編碼 - 測試 - 改進”,直到把問題解決爲止。
  19. 不要嘗試去解決不存在的問題。不要進行投機性編程。只有在確定代碼確實需要具備擴展性之後才讓代碼具備可擴展性。通常情況下,當代碼被擴展之後,你會發現問題會變得與原先認爲的不一樣了。
  20. 大家一起開發軟件會更加有趣。建立可持續發展的社區。傾聽,激發靈感,學習,分享。

我並不是軟件開發方面的權威,但這些都是我一路走來總結出來的原則。我相信,20 年後,這些原則會發生變化,會變得更加成熟。

讀者福利

分享針對字節跳動的面試題整理的解析PDF,進行了分類,循序漸進,由基礎到深入,由易到簡。

我們將內容整理成了五個章節、計算機基礎面試題、數據結構和算法面試題、Java面試題、Android面試題、其他擴展面試題、非技術面試題總共五個章節354頁。

每個問題都附上1個標準參考答案,都是反覆摸索消化(真心花了很多時間),覺得寫的比較好的文章作爲答案。

來節省大家自己去搜索的時間,把時間用在正確的東西上。。

還整理了全套簡歷製作、春招困惑、HR面試等問題解析參考建議。

字節跳動面試真題解析&簡歷製作PDF模板可以**私信我【字節跳動】**免費獲取!

分享不易!喜歡的朋友別忘了關注+點贊支持下!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章