高效程序員的45個習慣讀書筆記

第1章      敏捷——高效軟件開發之道

  1. 敏捷開發宣言

*個體和交互勝過過程和工具

*可工作的軟件勝過面面俱到的文檔

*客戶協作勝過合同談判

*響應變化勝過遵循計劃

2. 敏捷工具箱

*Wiki

*版本控制

*單元測試

*自動構建

第2章 態度決定一切

態度非常重要,包括團隊中的所有人。專業的態度應該着眼於項目和團隊的積極結果,關注個人和團隊的成長,圍繞最後的成功開展工作。

1. 做事

在敏捷團隊中,大家的重點是做事。他們把精力直接放到解決問題上,而不是抱怨。你可以從自己先做起。如果一個開發者帶着抱怨或者問題來找你,你要了解具體的問題,詢問他你能提供什麼樣的幫助,這樣簡單的一個行爲就清晰地表明你的目的是解決問題,而不是追究責任。

指責不能修復bug(Blame doesn’t fix bugs)。把矛頭對準問題的解決方法,而不是人。這纔是真正有用處的正面效應。

  1. 欲速則不達

在修改代碼之前一定要很好地理解它。

如果團隊成員花些時間閱讀其他同事寫的代碼,他們就能確保代碼是可讀和可理解的。實行CodeReview,不僅有助於代碼更好理解,而且是發現bug最有效的方法之一。

另一種防止代碼難懂的重要技術就是UnitTest。Unit Test幫助你很自然地把代碼分層,分成很多可管理的小塊,這樣就會得到設計更好、更清晰的代碼。在更深入項目的時候,可以直接閱讀單元測試——它們是一種可執行的文檔。

不要墜入快速的bugfix之中。要投入時間和精力保持代碼的整潔。

  1. 對事不對人

在同事John描述了自己的觀點後,對於你的顧慮最適合並且最有效的表達方式應該是:“謝謝,John,但是我想知道,如果兩個用戶同時登陸會發生什麼情況?”——詢問你的隊友,並提出你的顧慮,而不是否定其觀點,更不是否定其個人能力。

在隊友提出想法後,應該多給予鼓勵,而不是否定,有利於問題的解決。

有效的特殊技術:

*設定最終期限。如參加設計方案,設定一個明確的deadline,例如午飯時間或者一天的結束。最有最好的答案,只有更合適的方案。

*逆向思維。先是積極地看到它的正面,然後努力地從反面去認識它。目的是要找出優點最多缺點最少的那個方案。

*設立仲裁人。選擇一個仲裁人作爲本次會議的決策者,確保每個人都有發言的機會。

*支持已經做出的決定。一旦方案被確定了,每個成員都必須通力合作,努力實現這個方案。

設計充滿了妥協(生活本身也是如此),成功屬於意識到這一點的團隊。在開始尋找最好的解決方案之前,大家對“最好”的含義要先達成共識,包括對開發者和用戶。

  1. 排除萬難,奮勇前進

當發現問題時,不要試圖掩蓋這些問題。而要有勇氣站起來,說:“我現在知道了,我過去使用的方案不對。我想到了一些辦法,可以解決這個問題。”

做正確的事。要誠實、要有勇氣去說出實情。有時,這樣做很困難,所以我們要有足夠的勇氣。

如果遇到一段奇怪的代碼,在你沒有馬上理解那段代碼,不要輕易地否定和重寫它們。那不是勇氣,那是魯莽。

第3章      學無止境

敏捷需要持續不斷的學習和充電。

  1. 跟蹤變化

跟上技術變化的步伐的建議:

*迭代和增量式的學習。每天計劃用一段時間來學習新技術。記下那些想學的東西,然後在計劃的時間中深入研究它。

*瞭解最新行情。互聯網上有大量的關於學習新技術的資源。選擇一些公認的優秀技術博客,經常去讀一讀。

*如飢似渴地閱讀。找一些關於軟件開發和非技術主題的好書,也可以是一些專業的期刊和商業雜誌。

跟蹤技術變化。不需要精通所有技術,但需要清楚知道行業的動向,從而規劃你的項目和職業生涯。

  1. 對團隊投資

提供你和團隊學習的更好平臺。堅持有計劃有規律地舉行講座,不要侷限於純技術的圖書和主題,相關的非技術主題(項目估算、溝通技巧等)也會對團隊有幫助。

  1. 懂得丟棄

敏捷的根本之一就是擁抱變化。學習新的東西,丟棄舊的東西。

  1. 打破沙鍋問到底

在遇到/修復一個問題前,多問幾個爲什麼,不停地問爲什麼,不能只滿足於別人告訴你的表面現象。要不停地提問直到你明白問題的根源。但是,問問題,要問到點子上。還有,在問問題之前,想好爲什麼有這個疑問,爲什麼要問這個問題。

  1. 把握開發節奏

解決任務,在事情變得一團糟之前。

在每天結束的時候,測試代碼,提交代碼,沒有殘留的代碼。不要搞得經常加班。以固定、有規律的長度運行開發迭代週期。小而可達的目標會讓每個人全速前進。慶祝每一次難忘的成功:共享美食或團隊聚餐。

第4章      交互用戶想要的軟件

  1. 讓客戶做決定

在設計方面,做決定的時候必須有開發者參與。可是,在一個項目中,他們不應該做所有的決定,特別是業務方面的決定。

要麼現在就讓用戶做決定,要麼現在就開始開發,遲些讓用戶決定,不過要付出較高的成本。

開發者(及項目經理)能做的一個最重要的決定就是:判斷哪些是自己決定不了的,應該讓客戶做決定。

讓你的客戶做決定。開發者、經理或者業務分析師不應該做業務方面的決定。用業務負責人能夠理解的語言,向他們詳細解釋遇到的問題並讓他們做決定。

記錄客戶做出的決定,並註明原因,可以使用工程師的工作日誌或Wiki、郵件記錄等。

  1. 讓設計指導而不是操縱開發
  2. 合理地使用技術

不要開發你能下載到的東西

  1. 保持可以發佈

已提交的代碼應該隨時可以行動。在團隊裏工作,修改一些東西的時候必須很謹慎,要時刻警惕,每次改動都會影響系統的狀態和整個團隊的工作效率。

下面是一個簡單的工作流程,可以防止你提交破壞系統的代碼:

(1).在本地運行測試。先保證完成的代碼可以編譯,並且能通過所有的單元測試,接着確保系統中的其他測試都可以通過。

(2).check-out最新的代碼。從版本控制系統中更新代碼到最新的版本,再編譯和運行測試。這樣往往會發現讓你吃驚的事情:其他人提交的新代碼和你的代碼發生了衝突。

(3).提交代碼。現在是最新的代碼了,並且通過了編譯和測試,可以提交它們了。

保證你的項目時刻可以發佈。保證你的系統隨時可以編譯、運行、測試並立即部署。

如果不得不讓系統長期無法發佈,就做一個branch版本,可以繼續自己的修改,如果不行,還可以撤銷,千萬不能讓系統既不可以發佈,又不可以撤銷。

  1. 提早集成,頻繁集成

集成和獨立不是相互矛盾的,可以一邊進行集成,一邊進行獨立開發。使用mock對象來隔離對象之間的依賴關係,這樣在集成之前就可以先做測試。可以使用mock對象,編寫獨立的單元測試,而不需要立刻就集成和測試其他系統,只有當你自信它能工作時,纔可以集成。

一般需要每天集成幾次,最好不要2~3天才集成一次。絕不要做大爆炸式的集成。如果集成的問題很大,那一定是做得不夠頻繁,會發現整天在解決集成帶來的問題。

  1. 提早實現自動化部署

一開始就實現自動化部署應用。使用部署系統安裝你的應用,在不同的機器上用不同的配置文件測試依賴問題。QA人員要像測試應用一樣測試部署。

在沒有詢問並徵得用戶的同意前,安裝程序絕對不能刪除用戶的數據。這個有親身體驗,一個同事應一客戶需求,給客戶做了個小工具,沒有問清客戶在什麼樣的環境下使用,結果客戶拿到工具,一執行,把客戶的某些文件給刪了,客戶那個氣啊……

  1. 使用演示獲得頻繁反饋

需求就像流動着的油墨。我們經常看到,給客戶演示所完成功能的時間與得到客戶需求的時間間隔越長,那麼你就會離最初需求越來越遠。應該定期地,每隔一段時間,例如一個迭代的結束,就與客戶會晤,並且演示你已經完成的功能特性。

清晰可見的開發。在開發的時候,要保持應用可見。每隔一週或兩週,邀請所有的客戶,給他們演示最新完成的功能,積極獲得他們的反饋。當然,還要尊重客戶的時間,如果客戶只可以接受一個月一次的會議,那麼就定一個月。

  1. 使用短迭代,增量發佈

對付大項目,最理想的方法就是小步前進,這也是敏捷方法的核心。短迭代讓人感覺非常專注且具效率。

增量開發。發佈帶有最小卻可用功能塊的產品。每個增量開發中,使用1~4周左右迭代週期。

  1. 固定的價格就意味着背叛承諾

 

第5章       

第6章       

第7章       

第8章       

 


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