基本工具
纯文本的威力:
优点:可读性远大于二进制,且不依赖特定的应用解码,因此不会过时。为了增加纯文本可读性,应该使用能够理解的词语。另外纯文本可由任何应用读取,因此适合作为应用之间的接口,将应用拼接成功能更强大、更丰富的应用,如linux shell的管道。
纯文本的缺点在于占用空间更大和解析更难。
shell的游戏:比起大型workbench,cli更加简洁清晰,可以用短小有力的命令完成强大的功能,并可以将功能拼接。
不过,与gui相比,shell不便之处在于功能非常零散,如果要做一件事情可能需要使用很多工具。这样的拼接确实使得自由度最大化,但当需要专心工作于一个工程、希望有一个集成的工具能清晰地显示自己的工作并可以完成大部分常用功能时便有些不方便。可说各有所长,不过此前的我没怎么做过大型项目,所以cli的不方便之处不太明显。
不过书中提到windows下的linux shell工具cygwin很有趣,打算试一试。
强力编辑:文本是编程的基本原料,所以编辑器很重要。vim、emacs等编辑器都功能强大,适用于各个平台,有gui和cli版本。应该使用一个特定的强大编辑器并精通,这样生产率会大大提高。
在shell下这很有道理,不过在visual studio这样的大型平台上似乎没有必要?
源码控制:由源码控制工具控制版本和分支可以让工作更加方便有序,减少出错的可能。没有源码控制工具非常痛苦,只能将代码一份份备份,而且很容易丢或者忘记顺序。
我所知道的源码控制工具只有git。
调试:作者似乎异常强调debug过程中的心理因素。debug确实容易让人崩溃。
在debug过程中要获得尽可能具体的信息。随意地、泛泛地调试往往是徒劳。获得具体的错误信息并进行bug的复现才能尽可能高效地debug。
有这样一些策略:
多用ide的可视化功能,如watch窗口。这是最直观的。
在程序中加入打印语句看起来非常愚蠢的,不过在某些情况确实管用,甚至比ide的debug功能还要管用。
在某个数据出问题时,可以检查附近内存。
可以采用橡皮鸭策略,即用语言将代码逻辑解释一遍。这个过程中可能会发现隐藏的问题。
在无法找到问题时,可以用二分查找。(但是在条件不是一维的时候如何二分查找?)
文本操纵:用文本操纵语言实现,简单的工具如emacs、vi的内置语言、脚本语言如perl、python(我只会python好凉啊)。
文本操纵可以用来维护数据库schema,如自动生成代码、填充空位;自动生成重复代码;生成测试数据;生成不同语言之间接口;生成特殊格式的文档。
代码生成器:分两种。
被动代码生成器,为了减少编码时手工编码。仅使用一次,然后将生成的代码嵌入代码中。被动代码生成器不需要完全精确,只需要简便,事后由人工校对一遍。
主动代码生成器,是代码的有机部分,每次都被调用,如用来根据数据生成不同语言的接口。主动代码生成器符合DRY的原则,可以减少错误。
代码生成器不一定要很复杂,也不一定要生成代码,可以生成任何文本。