“算法”和“数据结构”是程序中的两个要素。将这两个概念并列地提出是为了方便我们在认知与逻辑上对其加以把握。但在具体的算法设计与编码实现上,这两个要素是交融、共生的,彼此之间有着多次迭代的推敲与琢磨过程。

结构化程序设计方法的着眼点是围绕数据结构的“面向过程”。其核心是确定算法的整体流程步骤,并逐步厘清实施细节。须知,程序设计与编码活动既是我们解决问题的方法与过程,也是我们认识事物、理解问题的有效手段。这就像是写作不只是我们总结与表达自己观点的方法与形式,更是帮助我们形成这些观点的思考与心智活动。因此,在一个计算机程序尤其是解决复杂问题的大规模程序尚未完成编写之前,我们对其算法流程的认识与理解往往也是不完善的,甚至是不合理的。在这种情况下,传统的自顶向下、逐步求精的设计方法就无法细化到算法实施细节的较深层次,从而并不能有效地指导编程实践。

更为合理的设计方法是将自顶向下的算法设计与自下向上的具体编码活动相结合。在最初有限的认知下,我们先有一个大致的数据结构规划与算法流程设计,基于此草案就足以开始编码工作了。此阶段的编码活动不是为了一劳永逸地直接开发出软件的最终版,而是旨在获得对要解决问题更为具体与深入的理解,利用实践得来的反馈以校验与修正之前(有可能是纸上谈兵)的设计方案。如此在设计与编码之间反复迭代,方能逐步逼近高质量的软件成果。这一模式与艺术领域中的创作过程,如雕塑、绘画,极为类似:它们均是从草图、雏形、预感出发,在构思与实践的反复交互中臻于完美,而绝非一上来就触及细节、一步到位的。

Backlinks: 《积累的力量》