# 高效程序員的45個習慣:敏捷開發修練之道 - 閱讀筆記 ###### tags: `程式理論` [圖書鏈結](https://www.tenlong.com.tw/products/9787115370365) 出版日期:2014年 ## 第2章 態度決定一切 #### 2.3 對事不對人 發現別人錯誤我們可能會有以下幾種反應方式: * 否定個人能力 最糟的一種應對方式,指責並不會使對方進步,反而會讓其以後也不想提出自己的想法 * 指出明顯的缺點,並否定其觀點 雖然觀點明確,但會讓聽的人想要反擊,最後可能造成兩方都不愉快 * 肯定其想法,並提出你的顧慮 由此可以開始一次交談,而不是爭辯。但如何在提出顧慮時,不要用指責的方式,需要多加練習 如何讓討論有效進行,下面提供一些技巧 * 設定最終期限:我們應該要有預期,沒有最好的答案,只有當下最適合的方案。設定期限能幫助我們在為難時,做出決策,讓工作繼續進行 * 逆向思維:先看方法的優點,再努力尋找其缺點。進而幫助我們決定何者是最適合的 * 設定仲裁人:仲裁人應專注於調停,而不是發表自己的觀點,讓每個人都有發言的機會,使會議順利進行 * 支持已經做出的決定 ## 第3章 學無止境 是一種增量的學習,持續跟進就不會困難,若中間落差太大就需花更多的時間補齊。除了學習新東西,也要學會淘汰不需要的知識。 #### 3.5 跟蹤變化 每天花一點時間,持續的學習(有點難QQ)。可透過雜誌研討會了解最新趨勢。不用精通所有,但必須了解產業趨勢。 #### 3.6 對團隊投資 每周持續地舉辦知識分享,有助於團隊的成長,是否限定主題可以自己決定。 若已經是團隊中最厲害的人,就需考慮換團隊了,因很難可以再驅動你進步。 #### 3.7 懂得丟棄 學習新語言技術時,需了解其語言特性,並比較與自己熟悉的有甚麼不同,避免將不合時宜的觀念套用於其上。 #### 3.8 打破砂鍋問到底 面對一個新系統或新需求,別人可能直接告訴你要做什麼,但應該要去了解其背後的原因,如此可以學到一些新的東西,也可能發現別人疏漏的部分。 #### 3.9 把握開發節奏 每天下班前,把工作收尾開心下班,明天開始面對新的問題。 ## 第4章 交付用戶想要的軟體 主要講開發時要注意的東西 #### 4.10 讓客戶做決定 會影響到使用者體驗的東西,應該要站在使用者角度,跟客戶解釋各方案的優缺點,讓其選擇。 #### 4.11 讓設計指導而不是操縱開發 設計應該正確,而不是精確???但不想開發時還要想各種情況啊! #### 4.12 合理地使用技術 使用新技術時,應該要評估他是否適用,但必須保持一個開放的心,這不是不學新技術的理由。 #### 4.13 保持可以發布 coding -> build & run test -> get latest -> build & run test -> publish #### 4.14 提早集成,頻繁集成 早點 commite code,並 merge 進需要的地方。 #### 4.15 提早實現自動化部署 在專案一開始就建置好 CI 環境,因安裝環境時可能還需要一些其他的東西,在還有記憶時最容易找到問題。 #### 4.16 使用演示獲得頻繁反饋 早點把做好的小部分功能展示給客戶看,可以確保符合需求,避免一個項目做了兩年,發先核心功能其實存在問題。 #### 4.17 使用短疊代,增量發佈 現在軟體生命週期短,若不頻繁發佈給使用者,可能等要發佈時,市場已經不需要了。 #### 4.18 固定的價格就意味著背叛承諾 在說明接案時該如何報價 ## 第5章 敏捷反饋 主講測試方法,加一點時間估算,及使用者體驗 #### 5.19 守護天使 寫單元測試,執行並維護他,讓他自動運行在CI上,及時提供反饋。 #### 5.20 先用它再實現它 講TDD(Test Driven Development)。先寫測試,就會站在使用者的角度思考。 #### 5.21 不同環境,就有不同問題 最好在每個支援平台和環境中運行單元測試,可用 VMware 或 Virtual PC。 #### 5.22 自動驗收測試 讓客戶可以自己輸入想要的數據驗收結果。PS:我對此該怎麼實現沒經驗。 #### 5.23 度量真實的進度 估算應計算還需要花都少時間,而不是做了多少,若還需很多時間也應誠實面對。 #### 5.24 傾聽用戶的聲音 若有用戶抱怨,不管是不是 bug 都應該正視,想辦法找到原因解決他。 ## 第6章 敏捷編碼 #### 6.25 代碼要清楚地表達意圖 怎樣算清楚地表達意圖?讓一年後的你也可以一眼就看懂 #### 6.26 用代碼溝通 需要加註釋的情況 * 目的:為什麼需要這個方法? (命名好應該可省略) * 需求(前置條件):方法需要什麼樣的輸入(變數名稱應該可做到),對象須處於何種狀態,才能讓各個方法工作? * 承諾(後置條件):方法執行成功後,對象處於何種狀態,有哪些回傳值? (應該也可以省略) * 異常:可能會發生什麼樣的問題?會拋出什麼異常?