卓有成效的程式設計師 讀書筆記
一.機制
1、加速法則 :使用各種工具或技巧,使自己工作效率最優化
關注本質,而非形式
鍵盤輸入總比導航快
簡化啟動皮膚,將最常用功能最優先化
花點時間來學習你手邊所有隱藏的快捷鍵
環境切換會消耗時間,儘量減少環境切換
記住操作的歷史,忘記歷史就意味著你得重新再輸入一遍
嵌入圖形化工具的命令提示符讓你魚與熊掌兼得
在資源管理器中嵌入命令提示符使環境切換更容易
開發時優先使用鍵盤而非滑鼠
在上下文中學習IDE快捷鍵,而不要出背長長的列表
當你第二次輸入一個複雜結構時,將它做成模板
在工具中使用查詢手段來導航
如果要對多行文字做同樣的事情,就應該找出其中的模式,並把它記錄為一個巨集
在一個文字上執行某個特定操作的次數越多,就越有可能會再次重複他
不要總是重複輸入相同的命令,使用鍵盤巨集功能
每天花一點時間來使每天都更高效
2、專注法則:想辦法改變環境以減少打擾,減少來自電腦的干擾以及藉助工具保持專注
排除干擾
精力越集中,思維越縝密
策略:隔離策略、關掉不需要的提示、創造安靜時間
搜尋優於導航
草堆越大,從中找到一根針就越難
不要檔案樹,要搜尋
在訴諸高階搜尋之前,先嚐試簡單的搜尋
使用有根檢視,有根檢視把資源管理器變成了專案管理工具
充分利用內建的機制(例如顏色)來幫助你集中注意力
使用基於專案的快捷方式,用連結來建立虛擬的專案管理目錄
虛擬桌面可以讓原本雜亂無章的一大推視窗變整潔
3、自動化法則:自動化每天重複的工作或任務,留住寶貴的時間做更有價值的事情
不要重新發明輪子,給合適的任務尋找合適的工具
即便不是工具最初的設計意圖,只要是合適的場合,同樣可以使用這些工具
不要浪費時間動手去做可以被自動化的事情
做簡單重複的事情實在浪費注意力
以創造性的方式解決問題,有助於在將來解決類似的問題
是否應該自動化的關鍵在於投資回報率和緩解風險
研究型的工作應該放在時間盒裡做
別讓自動化的努力變成剪犛牛毛(注意你的解決的核心問題)
建立本地快取
自動訪問網站(cUrl工具)
與RSS源互動|Yahoo!pipes、automator
在構建之外使用ant,
用Rake執行常見任務
用Selenimu瀏覽網頁
用Bash統計異常數
4、規範性法則:消除重複,保持規範化
DRY-Don’t repeat yourself!
對於任何你不自己去構建的東西,只在版本控制中儲存一份副本
使用間接機制建立友善的工作空間
使用間接機制來保持穩健同步
通過複製貼上來複用是邪惡的,不論你複製貼上到是什麼
利用虛擬平臺使專案以來標準化
始終保持程式碼和資料庫結構的同步
使用遷移為資料庫結構的改動建立可重複的快照
過時的文件比沒有文件更糟,因為它會自動誤導你
對管理者來說,文件意味著緩解風險
始終保持“活”的文件,最好是能自動生成svn2wiki
任何需要費勁創造的東西,都讓它的創造者欲罷不能
白板+資料相機強過任何的CASE工具
儘量生成所有的技術文件
重複是軟體開發中最大的阻力
二.實踐
1、測試驅動設計
測試代表著軟體開發行為中工程式的嚴謹部分
把註釋重構成方法
程式碼需要進行度量
程式碼需要統計程式碼測試覆蓋率
2、靜態分析:通過軟體工具對程式程式碼進行驗證
靜態分析工具提供了便宜實惠的驗證手段
動態語言分析
3、當個好公民
4、YAGNI – You Ain’t Gonna Need It!你不會需要它
如無必要,勿增複雜度
軟體開發首先是一場溝通博弈
5、古代哲人 – 哲學思想對構建高質量軟體有直接的影響
亞里士多德 “事物本質性質和附屬性質” -> 致力本質複雜度,去除附屬複雜性
奧姆剃刀原理 -> 如果對一個現象有好幾種解釋,那麼最簡單的解釋往往是最正確的
Dietzler定律:即使是通用目的變成語言也逃不出“80-10-10準則”(80%的需求可以很快完成,下一個10%需要花很大的努力才能完成,而最後的10%卻幾乎是不可能完成的)的魔咒。
迪米特法則 -> 任何物件都不需要知道與之互動的那些物件的任何內部細節
關注那些“古老的”軟體技術學說。理解已存在的軟體學說,能給你提供很好的資源
6、質疑權威 -> 推行標準是一件好事,但不能盲從標準
7、超程式設計 -> 編寫“會寫程式”的程式
超程式設計改變了你的語法詞典,給你提供了更多表達自己的方式
超程式設計的語言允許開發者使用額外的能力,由開發者決定什麼時候使用這些額外的能力
java與反射
groovy
編寫連貫介面
8、組合方法和SLAP(Single Level of Abstraction Principle,單一抽象層次原則)
重構成組合方法能暴露出隱藏的可複用程式碼
TDD實踐推動組合方法模式
9、多語言程式設計
10、尋找完美工具
尋找屬於你的完美編輯器,並從裡到外去了解它
你可以使用巨集來記錄所有重複的文字操作
可以從命令列呼叫的
掌握好正規表示式將為我們節省大量的精力
如果能夠批量處理,就不要來回做重複的工作
用“真正的”指令碼語言去完成自動化任務
將行為保留在可測試的程式碼中。xml不應該帶有行為特性,行為特性由動態語言來完成
關注每個小工具的演化
丟棄錯誤的工具,儘量少交複雜稅
一些比較實用的工具或軟體:
windows工具:Windows PowerToys、Tweak UI、Virtual Desktop manager
快速啟動軟體:launchy、Colibri、Enso。QuickSilver(MacOSX),個人推薦TypeAndRun或AltRun
Command Prompt Explorer Bar 兼有圖形和命令列(ctrl+m)。path Finder(Mac OSX)
cygwin
強制快捷鍵工具:Key Prompter(eclipse、IntelliJ).http://www.mousefeed.com
鍵盤巨集工具:AutoHotKey
集中注意力工具:jediconcentrate
搜尋工具:google desktop serch,外掛Any Text FileIndexer(可搜尋文字內容),UNIX下的find命令,個人推薦Everything
檔案管理工具:subversion、git
持續整合:CruiseControl、Bamboo、Hudson、TeamCity、LuntBuild
問題跟蹤和WIKI:Trac
敏捷專案管理:Mingle
Ant、Gant、Groovy
UML圖生成工具:yDoc
資料庫結構生成工具:SchemaSpy
程式碼度量工具:McCabe的圈複雜度(邊數-節點數 +2 | 邊代表執行路徑,節點代表程式碼的行數)、javaNCSS、Saikuro
靜態分析工具:Findbugs、PMD、CheckStyle、CPD
統計資料生成工具:Panopticode(包括emma、jdepend、javaNcss、simian、Panopticode Aggregator)
Jaskell
個人經驗和實踐:
自動化一切可以自動化的任務和日常工作,不能自動化的也要想盡辦法自動化,儘量不要做重複性的工作
保持簡單和優美,簡單即是美
學會一種動態語言,比如ruby,python,在工作中會有很大的幫助
善用工具,創造工具
相關文章
- 《程式設計師的吶喊》讀書筆記程式設計師筆記
- 一個程式設計師的讀書筆記:程式設計的反思程式設計師筆記
- 《程式設計師的自我修養》-讀書筆記程式設計師筆記
- 讀書筆記 - 《程式設計師的自我修養》筆記程式設計師
- 《程式設計師自我修養》讀書筆記程式設計師筆記
- 《程式設計師修煉之道》讀書筆記程式設計師筆記
- 一個程式設計師的讀書筆記——關於程式設計的反思程式設計師筆記
- 高效程式設計師的45個習慣 讀書筆記程式設計師筆記
- 卓有成效的程式設計師程式設計師
- 《程式設計匠藝》讀書筆記程式設計筆記
- 《設計師要懂心理學》讀書筆記筆記
- 書評:卓有成效的程式設計師的45個習慣程式設計師
- 《JavaScript程式設計精解》--讀書筆記JavaScript程式設計筆記
- 《Java程式設計思想》讀書筆記一Java程式設計筆記
- 讀書筆記-Java程式設計思想-03筆記Java程式設計
- Java遊戲程式設計讀書筆記(轉)Java遊戲程式設計筆記
- 反應式程式設計讀書筆記程式設計筆記
- 《做自己的生命設計師》讀書筆記(未完待續)筆記
- 《程式碼整潔之道——程式設計師的職業素養》讀書筆記(一)程式設計師筆記
- CSAPP 併發程式設計讀書筆記APP程式設計筆記
- C#高階程式設計 讀書筆記C#程式設計筆記
- 程式設計師生存指南讀書筆記-第三篇(學習)程式設計師筆記
- 《程式設計師修煉之道:從小工到專家》讀書筆記程式設計師筆記
- 程式設計師修煉之道——第一章讀書筆記程式設計師筆記
- 程式設計師的讀書歷程程式設計師
- 《重構:改善既有程式碼的設計》讀書筆記筆記
- 《重構-改善既有程式碼的設計》讀書筆記筆記
- 【讀書筆記】Java併發程式設計的藝術筆記Java程式設計
- 《重構,改善既有程式碼的設計》讀書筆記筆記
- 《Go 語言程式設計》讀書筆記(十一)底層程式設計Go程式設計筆記
- 程式設計師生存指南讀書筆記-第四篇(生產力)程式設計師筆記
- 程式設計師修煉之道——從小工到專家讀書筆記3程式設計師筆記
- 《程式設計師修煉之道:從小工到專家》讀書筆記 02程式設計師筆記
- 程式設計師修煉之道——從小工到專家讀書筆記2程式設計師筆記
- 《寫給大家看的設計書》讀書筆記筆記
- 《Go 語言程式設計》讀書筆記(四)介面Go程式設計筆記
- 《Go 語言程式設計》 讀書筆記 (八) 包Go程式設計筆記
- 《Go 語言程式設計》讀書筆記(十)反射Go程式設計筆記反射