“持久地存储知识的最佳格式是纯文本。”
“GUI的好处是WYSIWYG-所见即所得(what you see is what you get)。缺点是WYSIAYG-所见即全部所得(what you see is all you get)。”
“在shell提示下,你可以调用你的全套工具,并使用管道、以这些工具原来的开发者从未想过的方式把它们组合在一起。通过对shell进行编程,你可以构建复杂的宏命令,用来完成你经常进行的各种活动。”
“用好一种编译器。只是依次输入、并使用鼠标进行剪贴是不够的。对于常见的编辑操作,与鼠标或菜单驱动的命令相比,只使用键击效率更高,因为你的手无须离开键盘。”
“确保每样东西都处在源码控制之下-文档、电话号码表、给供应商的备忘录、makefile、构建与发布流程、烧制CD母盘的shell小脚本……”
“把整个项目置于源码控制系统的保护之下具有一项很大的、隐蔽的好处:你可以进行自动和可重复的产品构建。”
“在技术竞技场上,你应该专注于修正问题,而不是发出指责。”
“如果你目睹bug或见到bug报告时的第一反应是”那不可能”,你就完全错了。一个脑细胞都不要浪费在以”但那不可能发生”起头的思路上,因为很明显,那不仅可能,而且已经发生了。要总是设法找出问题的根源,而不只是问题的特定表现。”
“找到问题的原因的一种非常简单、却又非常特别有用的技术是向别人解释它。这听起来很简单,但在向他人解释问题时,你必须明确地陈述那些你在自己检查代码时想当然的事情。因为必须详细描述这些假定中的一部分,你可能会突然获得对问题的新洞见。”
“bug有可能存在于OS、编译器、或是第三方产品中-但这不应该是你的第一想法。不要因为你”知道”它能工作而轻易放过与bug有牵连的例程或代码。”
“学习一种文本操纵语言。Unix开发者常常喜欢利用他们的命令shell的力量,并用像awk和sed这样的工具加以增强。偏爱更为结构化的工具的人喜欢Python的面向对象本质。有人把Tcl当作自己的首先工具。我们碰巧喜欢用Perl编写短小的脚本。”
“编写能编写代码的代码。比如你有一个schema,你需要定义低级的结构,反映特定的数据库表的布局。使用主动代码生成器,读取schema,使用它生成结构的源码,无论何时schema发生变化,用于访问它的代码也会自动变化。”
读后感:关于调试bug部分写得实在是太细腻了,当别人指出自己的程序有bug的时候,要避免那种bug等于否定自己水平的心态,要从大局出 发,了解bug的根源并把bug修复掉,毕竟在个人水平和各种环境因素影响下,有时候出bug也并不见得是一件令人可耻的事情。Windows下的开发人员习惯用GUI的编辑器,自己以前做.NET开发的时候也是觉得VS很强大,但是当工作之后,接触到了shell之后,才真正领悟到shell之于GUI 的区别,使用shell的时候可以令双手更专注于键盘,令自己更专注于代码。学习文本操纵语言,这个当需要对数据进行快速分析的时候,会体现其强大的价值。至于编写能编写代码的代码,书中的例子是对定义的数据库schema进行分析,生成程序使用的低级数据结构,并保持每次schema修改都会令程序中 使用的数据结构能够自动同步,在项目开发中使用这种方式,能够很好地避免频繁更改所导致的不一致风险。