軟體開發的22條法則 ——《程式設計師修煉之道》讀書筆記

後端技術漫談發表於2021-07-12

程式設計本質上是一門手藝活,既然是手藝,裡面就會有很多個人技巧和經驗。

“破窗理論”,DRY(Don't repeat yourself),曳光彈,正交性,這些詞的意思是什麼你還記得麼?

《程式設計師修煉之道》這本書在我看來就是一本師傅寫給徒弟的開發哲學指南

裡面既講了一些軟體開發的哲學,比如破窗理論,它解釋了你的程式碼為什麼很快就會變成“屎山”。也講了一些有用的技巧和工具,比如如何利用好shell,提升你的程式設計效率。

這本書沒有複雜的程式碼,沒有晦澀難懂的原理,你完全可以當作一本閒書來看

這本書裡提到的看似人人都懂的道理,恰恰是很多碼農們平常工作中最不重視,卻應該去遵守的理念。

我提煉了一些書中我覺得至今仍然沒有過時的觀點(畢竟本書有一定的年頭了,讀起來很有年代感),和大家分享下,這中間也夾雜著一些我的看法和思考

一、開發的哲學

  1. 作為開發,你需要對自己說的話負責。對於不可能做到,風險太大的事情,你有權不去為之負責。

  2. 不要給做不到找藉口,在你說做不到的時候,要提供你的想法,告訴大家,做不到的原因是需要重構,還是需要時間做原型,還是需要額外的資源支援。

  3. 破窗理論:一扇破窗戶,只要有那麼一段時間不修理,就會漸漸給建築的居民帶來廢棄感。於是窗戶就會一個個破碎,人們開始亂丟垃圾,亂塗亂畫。所以不要容忍你的程式碼有“破窗戶”。

    這一點大家肯定也深有感觸,在你寫程式碼的專案裡一旦看到了一些亂七八糟的結構和設計,你也會不自覺地開始往上面寫湊活的程式碼,慢慢就變成屎山了。

  4. 溫水煮青蛙,程式碼是會慢慢腐爛而不被察覺的。要持續不斷的觀察你專案的變化,而不要只是專注於自己的那一塊程式碼。

  5. 重視你的”知識“,這是你的資產。既然是資產,就要定期投資(不斷學習),多元化地學習。並且要定期的評估你的技術方向,畢竟開發是個動盪的行業,現在吃香的技術過幾年就會過時。要不斷地調整你的方向。

  6. 在做需求時,要像使用者一樣去思考需求的合理性,而不是一味完成產品下發的需求。

  7. 做的軟體,要溫和的超出使用者的期望。給他們的東西要比他們的期望多一點,給系統增加特性時,多做一些額外的努力,可以給你帶來很大的美譽。

  8. 當你在的開發團隊人員龐大時,可以指定每個人負責工作的各個方面。圍繞功能,而不是工作職務進行工作的分配。比如有人要討論日期處理,就去找Mary,有人要討論資料儲存,就去找Fred。

二、開發的準則

  1. 不要重複你自己:DRY(Don't repeat yourself)系統中的每一個元件都要單一,沒有歧義,並且權威的表示出來。

  2. 保持專案的系統正交性:不要讓系統間互相耦合,非正交的系統意味著你修改這邊的系統,會影響到其他的系統。

非正交的一個典型體現是前端的CSS,網上有很多調侃CSS的段子,CSS的一個修改經常會影響到別的地方,這也是CSS很讓人痛苦的一個地方。在後端開發裡,我們要儘量讓系統間不要相互影響,這對系統的傷害是很大的,並且在排查問題時非常痛苦。

  1. 保證程式碼設計的可撤銷性:如果你的想法是這個問題的唯一解,那麼這會是一個很危險的事情。使用者的需求變化的很快,你的決策很可能只在當下是正確的,不存在最終的決策,或者說,時刻要注意和反思,如果現在這個方法行不通,是不是就沒法挽回了。

  2. 做好資源的估算:這裡的資源指的是很多程式碼相關的資源,比如資料庫,儲存,效能等。在開發前,一定要做好估算,在設計良好的程式碼結構,保證再未來能夠應付變化。

  3. 把文件儘量多的做在程式碼裡,而不是遊離於程式碼之外。否則,過了一段時間後,你這些文件就沒有什麼作用了。

  4. 你不可能寫出完美的軟體:作為一個開發,你要有這種自覺,自己也不要相信。所以要對自己可能犯的錯誤,做防禦性的程式設計。

  5. 異常處理:如果我刪掉所有的異常處理程式碼,這些程式碼是不是還能執行?如果你的回答是”不能“,那麼說明你的異常程式碼正在被用在非異常的情形中。這樣不好。

  6. 利用好後設資料:這裡的後設資料可以理解為配置檔案。將抽象放進程式碼,將細節放進後設資料。

我們日常開發中經常使用配置檔案和分散式配置中心,把能夠放入配置檔案的資料儘量放入,這樣不僅方便維護和修改,也能夠實現不重啟應用修改應用行為的功能。程式碼中應該只有我們對業務的抽象。

  1. 考慮好系統併發:要為併發做好周全的考慮。

這個要求是不是看起來很稀鬆平常,大家都會?其實很多大型系統,尤其是老的系統,都沒有考慮併發問題(去問問傳統軟體企業做的軟體,你就知道了)。併發其實可以算作是網際網路公司最常遇到的問題,也是各種技術面試會問的很深的問題,要好好掌握。

  1. 不要靠巧合程式設計,要弄清楚程式為何能夠執行。

我們接觸變成初期,經常會有些程式碼調著調著就跑通了,但是連自己也不知道為什麼。這種程式碼真正用於線上風險很大。畢竟,他也許不是真的能工作,他也許只是看起來能工作!

  1. 什麼時候該重構:當你發現這四個事情出現的時候,就是你該重構的時候。
  • 程式碼違反了DRY法則
  • 有非正交的設計
  • 需求變化後程式碼過時了
  • 效能有很大問題
  1. 重構時的準則:
  • 不要試圖在重構的時候同時增加功能。
  • 在開始重構前,確保你擁有良好的測試,這樣你才敢放開手腳改動。
  • 採取短小,深思熟慮的步驟。
  1. 在測試的時候,要去做狀態覆蓋,而不是追求程式碼覆蓋率。

  2. 好好學習shell:通常我們喜歡用各種帶介面的軟體,他們的特點是所見即所得。但是也帶來了缺點,所見即全部所得(what you see is all you see)。這對於效率的提升是一個瓶頸,有很多GUI上面需要很多操作的事情,在shell上只需要一行程式碼。所以儘管它有點難入門,但是學好了,會大幅度提高效率。

關注我

我是一名奮鬥在網際網路一線的後端開發工程師。

平時主要關注後端開發,資料安全,歡迎交流。

原創文章主要內容:

  • 開發實戰
  • 技術面試
  • 演算法題解/資料結構/設計模式
  • 程式人生

個人公眾號:後端技術漫談

如果文章對你有幫助,請各位同學 點贊 轉發 收藏 三連,你的支援是對我莫大的鼓勵~

相關文章