编程巨艺—读书笔记
08-10-5
我们日复一日地使用着工具,使用编译器就像使用开罐器一样自然,没有经过太多的思考。如果它运转正常,就没有任何问题,但是当它发生了故障(或者你需要开启一个奇形怪状的罐头)时,不管开罐器有多高档,你都会被卡住。一个简单便宜但是能用的开罐器要好过一个外表华丽构造复杂但是不能用的装置。
虽然习惯于你平常使用的工具,学习并熟练使用它们很重要,但是千万不要迷信它们。大多数Windows用户都很看不起Unix风格的程序开发,同时Unix的高手们也因为Windows的程序员不会使用命令行而很小看他们。克服这种心态。
我鼓励你在一个大型项目中尝试在不同的编程环境下工作。这有助于让你充分理解是什么造就了好的工具链,并且帮助你从全局的角度了解软件工具。
让我们弄明白我们到底为什么而使用工具:工具不是替我们做我们该做的工作,而是使我们有能力做我们的工作。
成为一名成熟的程序员的条件之一,就是明白不同的情况需要不同的解决方案,并将正确的工具应用到正确的工作上。
关键概念 了解你的工具的最新发展情况,但是不要随便进行升级。
给我们适当的工具,我们就会完成任何工作。
——温斯顿·邱吉尔爵士(Sir Winston Churchill)
C.A.R. Hoare曾经写到:“构建软件设计的方式有两种:一种方式是使软件尽量简单,以至于明显没有缺陷;另一种方式是使软件尽量复杂,以至于没有明显的缺陷。第一种方式要难得多。”
编程的过程将检验初始的设计决策,并完成剩余的设计工作。它会揭示不完善的地方、不一致的情况和错误,并让你可以找到解决这些问题的途径。
“有些程序员不认为他们在编程的同时也是在设计,但实际上,每当你编写代码的时候,你总是会有意无意地做着设计。”(见参考书目Page Jones 96)
08-10-5 13.1章节
简洁的代码是否可能做到小到不能再小。这非常不容易,正如数学家Blaise Pascal所说的:“很抱歉写这么长的信,可是我实在没时间写一封短一些的信了。”认真地算出最少需要多少代码,然后就编写那么多。记住,你在日后可以随时为额外的功能添加更多的代码,但是你很少能够有机会删除那些已经紧密地交织在一起的代码。
在代码中进行设计
这是一种很有用的非正式的代码设计方法。在设计的最初阶段,你在代码中放置了所有的API和低级接口,但是并没有真正实现它们——你只是编写了一些返回某种可能的值的代码片断,并在其中放置了一些描述还应该做哪些工作的注释。当你的设计足够成熟时,系统中就会有许多已经编写好的代码了。
这样做可能利弊参半,因为可能会导致设计的灵活性降低。设计的改动越多,需要更改的代码片段也就越多。
跳出极度复杂,就是极度简单。
——温斯顿·邱吉尔(Winston Churchill)
优秀的程序员……
— 希望他们接触过的任何东西都保持良好的状态
— 认为编程是一种创造性的过程,并在他们的工作中加入艺术元素
— 在开始编写代码之前,首先考虑代码的结构
— 面对零乱的代码,会觉得在开始对它们做任何额外工作之前,需要先进行一些清理和调整
— 坚持不断地学习其他软件的设计,积累成功和失败的经验
糟糕的程序员……
— 将越来越多的代码填入一个混乱的框架中,直到他们觉得已经做够了,然后就开始抱怨结果
— 在处理晦涩难懂的代码时,注意不到糟糕的设计,也感觉不出有什么不对
— 喜欢草草行事,然后就跑开,让别人来收拾烂摊子
— 不欣赏也不尊重他正在处理的代码的内部设计,并以冷淡的态度来践踏这些设计