第一章5个小节背后的主线就是,如何从实际问题出发,得到最后实际运行的程序。 程序设计的过程同其他类型问题的解决过程类似,整理如下。

  • 仔细的问题定义:对实例研究的深入思考。
  • 寻找解法:从问题定义中提炼出便于操作的数据结构,由算法的灵机一动获得简单而高效的代码。
  • 验证解法:在生成复杂(且快速)的函数时,大量使用了程序验证技术(断言)。
  • 实际应用解法:使用脚手架程序来探测函数,用测试用例来测试函数并度量函数的性能。 数据结构可以理解为:你所操作的已知数据对象的表现形式(决定了对它们可执行的操作)。比如,一串字符,一个指针链表,一个二维数组,一棵二叉树。它们都对应着某种数据结构,或说,表现形式。适合问题本身的数据结构提供了方便的操纵数据的方式,进而影响了解决问题的算法。数据结构的好坏反应了你对问题本身的理解是否清晰。 对数据结构的正确认识也进一步加深了我对“控制与数据分离”的理解。因为控制就是算法,而数据自然就是数据结构。

发明者悖论:更一般性的问题也许更容易解决。因为普遍性意味着能应对更广泛的问题。 完备性 + 普遍性 = 广泛的应用。 例子:有理数的“+ - * /”四则运算,可以处理全体有理数(分母为0除外)。数学哲学对计算机也适用。