這本書的適用範圍可以從初學者到有經驗的程式設計師再到專案經理,作為一本偏向理論與思想的書,書中不可避免有些假大空的地方,再加上作者寫完本書的時間還在2023年,書中的很多方法與標準放在今天也已不再實用。但這些都不能掩蓋它的優秀之處,作者曾在本書完成十年後說過,如果這本書是放在現在編寫,2023年的那些通用開發原則,在2023年同樣有效,假設我們今天才寫這本書,會與什麼不同嗎?表面上可能會有些不同,我們可能會採用不同的程式語言和技術給出不同的案例,但這本書的本質不會變,因為軟體是人寫的,優秀的程式設計師都會採用務實和實踐的方法,知道的變化越多,掌握事物的基本原則就越重要。所以我也很有幸能通過這本書來糾正自己的一些不良習慣和掌握更好的方法,之後注意在工作的任何方面都需要注重一些基本的原則。看到自己犯過的錯誤,才讓人更相信這是一本經得起時間沉澱的好書。
個人而言,首先給我啟發的是通過溫水煮青蛙(昨天才在知乎上看到說溫水煮青蛙的時候青蛙也是會跳出去的,好想實驗一下啊!)的例子讓我們要持續不斷地觀察周圍發生的事情,而不僅僅是自己在做的事,尤其是專案的管理者必須要實時的掌控專案的方向,因為大多數專案失去控制都不是一下子就發生的,而是慢慢地,不可改變的完全失去控制的。可能是系統乙個特性乙個特性的偏離了規範,專案進度一點一點的拖延。這種情況下如果是作為個人還是管理者都不應該容忍規範的違背,每天、每週都需要審視自己,審視團隊,及時糾正問題,糾正團隊的方向。
貫徹全書的乙個原則是dry(don『t repeat yourself)原則,這也是每個優秀的開發人員必須要遵循的規範,編碼過程中任何地方都不要重複,因為重複暫時節省的時間將會給以後的維護使用帶來巨大的麻煩,如果發現**有重複或者違反正交性等原則的地方要立刻找機會重構。這樣才能夠擁有更快、更好、更強健、更優雅的**。
然後是關於文件和測試,看過乙個段子這樣說的,乙個程式設計師最討厭的事情有兩件,乙個是別人寫**不寫文件,另乙個是別人讓自己寫文件。從這可以看出文件和測試一直是程式設計師的最大的敵人之一,我個人在這方面習慣也不是很好,雖然會去寫文件,但總是覺得編寫文件和單元測試整合測試等會影響自己的產出,但在時間允許的情況下這才是對專案最大的負責,也希望每個團隊的管理員都能更有先見之明,不要太過於壓縮開發階段的時間,這樣才有助於編寫更好的文件和單元測試,才會在後面的階段更省時省力。
耦合這個詞基本在我的職業生涯中每天都能聽到,乙個好的程式一定是低耦合的,這本書提出了函式的德墨忒爾法則幫我們更好的界定耦合的邊界,怎樣編寫低耦合的**,更難能可貴的是這本書不僅僅描述了一般的**耦合,還花了很大筆墨解釋了時間耦合,很多時候乙個業務的實現沒有必要一定是線性的,它可以是並行的,這在適用的情形下往往能在提高使用者體驗的同時還能降低系統的併發壓力。
另乙個很重要的原則是不要隨意你不熟悉的框架和工具,現如今各種框架的功能越來越強,但與此同時各種底層的實現也隱藏的越來越深。如果使用了不熟悉的產品,卻不去理解它的底層實現,專案很可能是不受控制的,很多時候我們沒有能力去維護它,在碰到問題需要除錯解決的時候會碰到很大的困難。
在工作中我們總會遇到難以解決的難題,本書給我們提供的乙個思路是重要的不是你在盒子裡思考,還是在盒子外面思考,而在於找到盒子-確定真正的約束,詳細一點的解釋就是面對棘手的問題時,列出所有在你面前的可能途徑,不要排除任何東西,不管它聽起來有多無用或愚蠢。然後逐一檢查每一項,並解釋為何不能採用某個特定的途徑。有時候你會發現,自己在處理的問題似乎比你以為的難得多,這種時候很可能你已經走錯了路,你需要回退一步,問問自己有沒有更容易的解決辦法。
程式設計師修煉之道 從小工到專家
在專案開始之前 需求需要挖掘,而不僅僅是收集。找出使用者為何要做特定事情的原因,而不是他們目前做這件事情的方式。建立需求文件 把形式化的模板做備忘錄 好的需求文件會保持抽象 專案範圍的增大需要被記錄和可追溯,以及可評價 通過統計資訊 需求的收集和設計實現不是單向的線性關係,而是雙向關係。它們是 交付...
程式設計師修煉之道 從小工到專家
基本工具 構建自己的工具庫。使用原始碼控制。除錯bug 找到問題根源 可以快速 復現 bug。跟蹤。向別人解釋程式以找到問題所在。找bug範圍 先自己 確定無誤再找類庫或系統問題。不要固執的認為自己的 沒問題。不要假設,要驗證。注重實效的偏執 放棄寫出完美軟體的偏執。進行防禦性程式設計。合約。規定 ...
程式設計師修煉之道 從小工到專家(三)
1 斷言式程式設計 a.在自責中有一種滿足感。當我們責備自己時,會覺得再沒人有權責備我們。奧斯卡 王爾德 多里安 格雷的畫像 2 靠巧合程式設計 a.不要靠巧合程式設計 don t program by coincidence b.不要使用你不理解的嚮導 don t use wizard code ...