作者:Jon Bentley
本书的作者通过一个一个实际生活中的例子来给引导我们对编程进行思考,虽然在实际工作中我们多半是只使用思考的结果,但本书更重要的是让我们了解到发现问题本源,并真正解决问题的一个思考过程。本书主要提出了一些抽象概念,目的不是像《算法导论》那样先提出抽象问题,然后进行实际的讲解与编码,而是一步一步带领我们如何更好地解决问题。
其实本书后半部分包括续集,其质量都不高(我是这么认为的),都是讲一些没多大用的东西。其实我从中学到最多的就是位图的使用以及实际开发过程中需要注意的一些问题。
没想到,小小的位图对于海量数据的处理还有这么大的功效。当然了,书中所说的所有问题以及思考我都没有去真正编码过,但我觉得自己能写好80%的代码(感觉和事实肯定不一样的。)
语录
1.对小问题的仔细分析有时可以得到明显的实际益处。
2.明确了问题,那这场战役就成功了90%
3.设计者确定其设计已经达到了完美的标准不是不能再增加任何东西,而是不能再减少任何东西。——Antoine de Saint-Exupery
4.程序员在节省空间方面无计可施时,将自己从代码中解脱出来,退回起点并集中心力研究数据,常常能有奇效,(数据的)表示形式是程序设计的根本。——Fred Brooks
5.计算机系统中最廉价、最快速且最可靠的元件是根本不存在的。——Gordon Bell
6.当程序性能问题无法回避时,考虑设计层面会有助于程序员集中精力解决问题。如果仅需要较小的加速,就对效果最佳的层面做改进,因为“性价比”最高的那一个投入最小的精力就可以获得最大加速系数的那个设计层面。如果需要较大的加速,就对多个层面做改进。
7.任何事都应尽量简单,但不宜过于简单。——爱因斯坦
8.代码调优的最重要的原理就是尽量少用它
9.解决现有的问题是程序员任务的一部分,另一个也许更重要的部分是做好解决未来问题的准备。本章示例了编程过程中的几个重要步骤:正确理解所遇到的问题;提炼出抽象问题;考虑尽可能多的解。
10.如果还没想清楚,就用蛮力算法吧。——Ken Thompson
11.代码写得越急,程序跑得越慢。——Roy Carlson
12.如果你发现特殊情况太多,那你肯定是用错方法了。——Craig Zerouni
13.在我所有的程序错误中,80%是语法错误。剩下的20%里,80%是简单的逻辑错误。在剩下的4%里,80%是指针错误。只有余下的0.8%才是困难的问题。——Marc Donner
14.在系统测试阶段找出并修正错误,要比开发者自己完成这一工作多付出2倍的努力。而当系统已经交付使用之后找出并修正一个错误,要比系统测试阶段多付出9倍的努力。因此,请坚持让开发者进行单元测试吧。——Larry Bernstein
15.新系统的每一个新用户都可能发现一类新的错误。——Brian Kernighhan
16.对于那些快速算法,我们总是可以拿到一些速度差不多但是更容易理解的算法来替代它们。——Dougls W. Jones
17.在一个非I/O密集型的程序中,超过一半的运行时间是花在不足4%的代码上的。——Don Knuth
18.在优化一个程序之前,请先用性能监视工具找到程序的“热点”。——Mike Moron
19.【代码规模守恒定律】当你为了加速,把一页代码变成几条简单的指令时,请不要忘了增加注释,以使源码的行数保持为一个常量。——Mike Morton
20.纸上的工作没结束,整个工作也就还没结束。
21.【90-90法则】前90%的代码占用了90%的预定开发时间,余下的10%代码又花费了90%的预定开发时间。——Tom Cargill
22.正确的判断来源于经验,然而经验来源于错误的判断。——Fred Brooks
23.如果有人基本上做出了你想要做的东西,你就没必要自己写一个新程序。就算你非写不可,也请尽可能多地利用现有的代码。——Richard Hill
24.先让程序跑起来,再考虑怎么让程序跑得快。——Bruce Whiteside