《编程珠玑》这本书无需多说,他的价值不在于这里摘录的只言片语,而在于阅读过程中思维上的学习,在解答习题时思维上的锻炼过程。
第一部分 基础
第一章 开篇
准确的问题描述:输入、输出、约束。在尝试解决问题之前,先将已知条件组织成一种更客观、更易用的形式。
确定用户的真实需求是程序设计的根本。
对小问题的仔细分析有时可以得到明显的实际益处。
简单的设计。法国作家兼飞机设计师 Antoine de Saint-Exupery:设计者确定其设计已经达到了完美的标准不是不能再增加任何东西,而是不能再减少任何东西。
第二章 啊哈!算法
Martin Gardner:看起来很困难的问题也可以有一个简单的、意想不到的答案。
优秀程序员都有点懒:他们坐下来等待灵机一动的出现而不急于使用最开始的想法编程。当然,这必须通过在适当时候开始写代码来加以平衡。真正的技能就在于对这个适当时候的把握,这只能来源于解决问题和反思答案说获得的经验。
第三章 数据决定程序结构
恰当的数据视图实际上决定了程序的结构。
将数据从控制结构中分离会获得许多好处。
能用小程序实现的,就不要编写大程序。
发明家悖论:更一般性的问题也许更容易解决。
程序员在节省空间方面无计可施时,将自己从代码中解脱出来,退回起点并集中心力研究数据,常常能有奇效。(数据的)表示形式上程序设计的根本。
退回起点进行思考时的几条原则:
- 使用数组重新编写重复代码。冗长的相似代码常常可以使用最简单的数据结构–数组来更好地表述。
- 封装复杂结构。
- 尽可能使用高级工具。
- 从数据得出程序的结构。通过使用恰当的数据结构来替代复杂的代码,从数据可以得出程序的结构。万变不离其宗:在动手编写代码之前,优秀的程序员会彻底理解输入、输出和中间数据结构,并围绕这些结构创建程序。