《程序员修炼之道10月第二篇》
如果某个想法是你唯一的想法,再没有什么比这更危险了,如果你的编程想法太过单一,总会被一种想法所束缚,只有开拓想法视界才能提高自己,错误在于假定决策是浇铸在石头上的——同时还在于没有为可能出现的意外事件故准备。成为一个优秀的程序员,必须要为自己留有余地,选择好正确的准备与决策方向。没有什么是真正的最终决策,任何时候都可能会有所改变。
在维持代码的灵活性的同时,我们也要考虑维持架构,部署以及供应商集成等领域的灵活性。
基本工具
每个工匠在开始其职业生涯时,都会准备一套品质良好的基本T具。木匠可能需要尺、计量器、几把锯子、几把好创子、精良的凿子、钻孔器和夹子、锤子还有钳子,这些.T具将经过认真挑选、打造得坚固耐用、并用于完成很少与其他工具重合的特定工.作、而且,也许最重要的是,刚刚出道的木匠把它们拿在手里会觉得很顺手。作为注重实效的程序员.我们的基本材料不是木头、不是铁.而是知识我们搜集需求.将其变为知识,随后又在我们的设计、实现、测试、以及文档中表达这些知识.而且我们相信,持久地存储知识的最佳格式是纯文本﹒通过纯文本,我们给予了自己既能以手工方式、也能以程序方式操纵知识的能力—一实际上可以随意使用每一样工具:﹒
1、纯本文由可打印字符组成,人可以直接阅读和理解其形式。
这里强调可打印含义是字符时经过编码的可阅读字符,而不是二进制。这在现在看来几乎是不用争辩的,谁还会用二进制存储信息,但当时计算机算力和存储都有限,纯文本会占据更多空间,解码会耗费算力。但源于技术的发展,这些都是可以忽略不计了。
2、纯文本的优点之一:保证不过时。这一点需要我们扩展纯文本能够自描述。自描述的含义是它自己能告诉我们它的含义。
123-45-6789
<SSNO>123-45-6789</SSNO>
上面的例子中下面一条就是自描述的,我们能通过 SSNO 推断出这里存的就是社会保障号,另外根据 <SSNO>
这一标记我们可以很轻松的将对应内容提取出来。
3、另外两个优点是杠杆作用和更易于测试。这里说的是我们可以利用各种工具 diff、fc、git,或一些语言例如 Python 等对纯文本进行各种调整和查看工作。
shell游戏
1、对于操纵文本的文件的程序员,命令 Shell 就是工作台。我们可以利用 Shell 启动各种应用、搜索文件、查询系统状态,甚至还可以构建复杂的宏命令,完成各种常见活动。
2、对于习惯 GUI 的开发者来说一直使用 Shell 有些极端。GUI 的好处是所见即所得,但他的缺点却是,所见即全部所得。GUI 环境通常受限于它们的设计者想要提供的能力。
3、比如我们想要做一件事:在一个代码仓库里,查找上周没有修改过的,使用了 awt 库的 java 文件。
如果使用Shell,可以执行:
find . -name ‘*.java’ -mtime +7 -print | xargs grep 'java.awt'
如果使用 GUI,你可以设想一下,这个过程会很麻烦,也很容易出错。
4、Shell 可能比较晦涩,但是掌握之后它能很大程度提高你的效率。Shell 可以做各种组合搭配,然后构建一个命令序列,让常做的事情自动化。
强力编辑器
1、我们认为你最好是精通一种编辑器,并将其用于所有编辑任务:代码、文档、备忘录、系统管理等等。
进行编辑活动时,你不必停下来思考怎样完成文本操作,编辑器将成为你双手的延伸,键会在滑过文本和思想时歌唱起来。
这就是我们的目标。
2、好的编辑器应该具有这些特性:可配置、可扩展、可编程、语法突显、自动缩进、类IDE特性。
3、编辑器对生产效率是有影响的。试想当我们需要一个字符一个字符或者一行一行移动时,按一次键,就以词,行,块的单位移动,显然效率更高。
4、然后做什么。选一种强大的编辑器,好好学习它。不断学习,减少你敲击的次数。设法扩展它,让它能胜任更多任务。
推荐两款编辑器:vim、Emacs