1. 程式人生 > >clean code

clean code

本來也是一個書的名字,也是很喜歡的一本書。
這裡就寫下自己多年coding的理解,閱讀clean code的筆記,以及若干coding principle。

bjarne對於clean code的看法

  • straight forward
  • less dependency
  • clean code does one thing well

關於clean code自己的看法
在我看來,clean code在於兩個方面:

  • 對於本質的探索,得其本質,就可以以最簡單的方式描述
  • 人腦的侷限和特點,程式碼和設計都要儘可能的資訊量少,易於閱讀和理解
    越能能夠做好這兩點的,就越是clean的code。

具體
具體我們可以做的一些事情,

  • 儘可能的探求事情的本質,進而簡潔表達
  • 表達的過程以一個易於理解的方式,保持專注,表達方式幹練,沒有廢話
  • 持續保持收斂,避免問題的發散
  • 就典型問題積累出具體的解法
    前兩點非常的直接,後面兩點展開下

保持收斂
這裡就談兩個:
1, yagni(you arn’t gonna need it)原則,不要為可能發生的事情做很多準備。
實際上我和組裡程式力相當的同事,談到可擴充套件的程式碼的時候,我們都同意,雖然我們常常也會寫出在未來程式需求改變時候,依舊執行很好地程式碼,但是我們在設計的時候,並沒有刻意的去考慮。
考慮這些情況,往往會導致多餘程式碼實現,因為未來可能的情況實在太多了,考慮一兩種,則因為不能窮盡而本身意義有限,考慮所有則讓程式碼數量級上升而無從去寫。
實際情況就是我們只考慮了這個問題的本質,不停留於表面,而深入本質,那麼這個問題在“萬變不離其宗”的範疇,程式碼依舊執行良好,在本質發生變化的時候,則不是當前程式碼的原則了。
如果停留於表面,則“萬變不離其宗”的時候,就被萬變情況打破了,如果在設計圍繞“本質”階段,對於本質的定義過於寬泛,那麼就完全不能收斂,最終造成程式碼缺少專注,寫出一個
2,隨著遊戲開發的遊戲引擎
這裡也是,往往我們想做出能夠非常general,可以做任何遊戲的引擎,但這也應了《孫子兵法》裡的一句話“備前則後寡,備後則前寡,無所不備,則無所不寡”
我們的開發資源總是有限的,有的時候是人力和時間,這個尚且可以通過錢來不足,但是程式複雜度和有限的方向選擇,則是不可擴充套件的。
不收斂的結果就是“無所不寡”,你不會寫出同時在室內處理和室外處理都最優的場景管理,不收斂則平庸。

典型問題的典型解法
這裡直接收錄大量的資訊,完全可以背誦以用於日常開發:
10 programming principle(https://www.makeuseof.com/tag/basic-programming-principles/)
其中兩個是廢話,省略成8個

  • kiss
  • dry–don’t repeat yourself
  • open/close–open to extention close to modification
  • composition over inheritance
  • single responsibility - “each class should have only one reason to change”
  • separate of concerns–mvc就是典型案例,要各司其職
  • YAGNI–you aren’t ganna need it, 不要為未來你可能遇到的問題來寫程式碼
  • clean code > clever code

clean code書中比較好的資訊:

  • 命名要準確有意義,可讀可搜尋(by me)
  • 函式儘可能短,只做一件事情
  • 類要保持內聚:只做一個層級的一件事情
  • concurrency code非常危險,很難寫對,儘可能寫的簡單,並且和其他模組分離
    書末有非常多的可實踐的建議,也都非常好,包括不限於
  • 應該刪除的:多餘的註釋,錯誤的註釋,注掉的程式碼
  • 函式不應該:太多的引數,做兩件不同的事情,
  • 。。。一共36條,

ref: