基本工具python
純文本的威力:linux
優勢:可讀性遠大於二進制,且不依賴特定的應用解碼,所以不會過期。爲了增長純文本可讀性,應該使用可以理解的詞語。另外純文本可由任何應用讀取,所以適合做爲應用之間的接口,將應用拼接成功能更強大、更豐富的應用,如linux shell的管道。git
純文本的缺點在於佔用空間更大和解析更難。shell
shell的遊戲:比起大型workbench,cli更加簡潔清晰,能夠用短小有力的命令完成強大的功能,並能夠將功能拼接。數據庫
不過,與gui相比,shell不便之處在於功能很是零散,若是要作一件事情可能須要使用不少工具。這樣的拼接確實使得自由度最大化,但當須要專心工做於一個工程、但願有一個集成的工具能清晰地顯示本身的工做並能夠完成大部分經常使用功能時便有些不方便。可說各有所長,不過此前的我沒怎麼作過大型項目,因此cli的不方便之處不太明顯。編程
不過書中提到windows下的linux shell工具cygwin頗有趣,打算試一試。vim
強力編輯:文本是編程的基本原料,因此編輯器很重要。vim、emacs等編輯器都功能強大,適用於各個平臺,有gui和cli版本。應該使用一個特定的強大編輯器並精通,這樣生產率會大大提升。windows
在shell下這頗有道理,不過在visual studio這樣的大型平臺上彷佛沒有必要?編輯器
源碼控制:由源碼控制工具控制版本和分支可讓工做更加方便有序,減小出錯的可能。沒有源碼控制工具很是痛苦,只能將代碼一份份備份,並且很容易丟或者忘記順序。ide
我所知道的源碼控制工具只有git。
調試:做者彷佛異常強調debug過程當中的心理因素。debug確實容易讓人崩潰。
在debug過程當中要得到儘量具體的信息。隨意地、泛泛地調試每每是徒勞。得到具體的錯誤信息並進行bug的復現才能儘量高效地debug。
有這樣一些策略:
多用ide的可視化功能,如watch窗口。這是最直觀的。
在程序中加入打印語句看起來很是愚蠢的,不過在某些狀況確實管用,甚至比ide的debug功能還要管用。
在某個數據出問題時,能夠檢查附近內存。
能夠採用橡皮鴨策略,即用語言將代碼邏輯解釋一遍。這個過程當中可能會發現隱藏的問題。
在沒法找到問題時,能夠用二分查找。(可是在條件不是一維的時候如何二分查找?)
文本操縱:用文本操縱語言實現,簡單的工具如emacs、vi的內置語言、腳本語言如perl、python(我只會python好涼啊)。
文本操縱能夠用來維護數據庫schema,如自動生成代碼、填充空位;自動生成重複代碼;生成測試數據;生成不一樣語言之間接口;生成特殊格式的文檔。
代碼生成器:分兩種。
被動代碼生成器,爲了減小編碼時手工編碼。僅使用一次,而後將生成的代碼嵌入代碼中。被動代碼生成器不須要徹底精確,只須要簡便,過後由人工校對一遍。
主動代碼生成器,是代碼的有機部分,每次都被調用,如用來根據數據生成不一樣語言的接口。主動代碼生成器符合DRY的原則,能夠減小錯誤。
代碼生成器不必定要很複雜,也不必定要生成代碼,能夠生成任何文本。