《程序员修炼之道》这本书后面一部分则是更深入、更具体、更细致地就程序员应该注意的事项做一些讨论,书中说的很多在过去的经历中都有较深的体会,同时也给了我很多启发。
以下是一些我感悟较深的点:
1、工匠与工具
工匠在使用工具的过程中,二者互相磨合,工具甚至变成了工匠双手的延伸。这就好像我们学习与适应的过程。在学习初始阶段,我们先精心挑选我们的工具。然后在使用这些工具时,不断地熟悉,不断地适应,工具成为你的大脑的一部分,它能放大你的才干。
但是我们不能总局限于单一的工具,虽然有些工具看起来通用,但是当遇到一些特殊需求时,我们要像工匠学习,定期增加工具。就我自身而言,这方面我就做的不够好。我个人就属于习惯于一种后就不太愿意更改的人。这一点不是很好,我们要乐于超越工具(如IDE)施加的各种性质。
2、纯文本
纯文本有很多好处,首先纯文本格式不仅可以被机器理解,也是人可以理解的格式,这也就意味着它能够保存更久。
其次,纯文本格式具有简单性,它也更易于测试。我们可以很轻松的增加、修改测试数据,也可以轻松地分析回归测试输出的结果,或使用一些脚本工具进行彻查。
3、源码控制系统
我们应该总是使用源码控制系统。因为我过去没有进行过团队编程项目,对一些源码控制相关的工具也不是很了解。通过近期的认识,我愈发觉得源码控制系统非常重要。它能帮助你对比不同版本直接的对比,帮助你返回之前的版本等。
团队项目,不论大小,都应该使用源码控制系统。虽然看起来有时候有些麻烦,但是养成习惯后对你整个项目都有非常大的帮助。
4、调试bug
我摘下了书中引用的这句话:
“看着你自己的烦忧,并且知道不是别人、而是你自己一人所致
——索福克勒斯:《埃阿斯》”
(1)接受事实
首先我们要接受这个事实。Bug已经出现了,你要做的失去解决它。而调试就是解决问题,我们要据此发起进攻。
(2)恰当的思维方式
其次,恰当的思维方式非常重要。不要恐慌,恐慌不能解决任何问题。更不要浪费时间在觉得那不可能上,因为事实就是,这个程序已经错了。在学习C语言或者数据结构的时候,无论是平时上机实验,还是大作业,总会有或多或少的bug。而每当遇到bug,总是调试不出来时,我确实非常容易陷入焦虑情绪。因为在我自己看来,程序完全没问题啊。但是错误的运行结果又确确实实摆在眼前,只能硬调。
(3)小心近视
书中还提醒我们要“小心近视”。因为有时bug可能是在你以为的地方几步远的地方。而如果总是陷在一个点中,就会像我有时调试bug一样,调试几个小时,结果发现只是一个小小的变量打错了。
(4)再现bug
要真正解决bug,我们要有能力将bug再现,也就是说我们要知道bug是怎么出现的。只有知道它是怎么出现的,我们才能学会避免它。
(5)橡皮鸭
这个概念,是我在数据结构课在大佬们的讨论中第一次听说的。调试bug一个很有效的办法就是向别人解释你的代码,往往在你解释的过程中,你就能发现bug所在。因为bug出现一定是和你的逻辑有关的。如果我们能够从头按正确的逻辑梳理一遍代码,很大概率能发现代码的漏洞。
(6)不要假定,要证明
不要轻易下结论“这不可能”,不要轻易放弃任何微不足道的地方。不要理所当然地去假定,而应该去证明它。
(7)让下次修复更容易
修复完bug后,我们需要想想,我们可以做些什么,让下次修复更容易。比如书中提到的内建更好的测试挂钩,或是编写日志文件分析器。
(8)早崩溃
让程序崩溃是你的最佳选择。这句话虽然单看有些怪,但就程序而言,一个死程序带来的危害要远远小于一个有病患的程序。