回到系列文章的目录——[系列文章目录] 回到本章目录——[第1章目录]
1.5.3 体会“自顶向下,逐步求精”思想
接下来,我们的胃口开始大了。提出来一种考虑问题的思路,其实已经蕴涵在例1.7输出7行星号的程序中了。
这种解决问题的思维方式是——“自顶向下,逐步求精”。
要输出的是:
写出的程序(例程ch1-13.cpp),循环7次。每次的循环,输出1行。因此,输出了7行,如下面左侧的代码所示。
这时再多想一些,输出一行方面可以动些脑子。于是在循环里面,又加了一个循环(例程ch1-15.cpp),如上面右侧的代码所示。
相对而言,左侧就是一个项层设计,体现了整体到细节的思维。从宏观上,这个图就是有7行。将图看成是一个整体,再看出了有7行,于是写出这样的代码顺理成章。
右侧是左侧的细化。这时,输出7行的结构已经确定,思维的角度落实在更具体的、规模更小的问题上来了:考虑怎么输出一行的问题。
显然,输出一个星号图的问题,要比输出一行星号复杂。我们借助着“自项向下”,掌握住了思考这个问题的节奏,在“逐步求精”中,清晰地给出了问题的解答。“自顶向下,逐步求精”的思维,不至于让你看到一个星号图就是一堆星号,以至于狗咬刺猬,无从下口。
问题变得更复杂的时候,这种“有节奏的思考”成了解决问题的关键,能够帮助你做好顶层设计,再逐级落实,直到给出最直接的实施方案。所谓程序设计要有逻辑思维,那只是战术层面的事了,这种战略层面的思维并不常被人提到。
有初学者哀叹:“我就没有逻辑思维,我就没有设计能力。”其实,还可以列举出一大堆来。这样的叹息带来强烈的负面情绪,以致于事情无法进展。事实上,多虑了。每一位程序设计的专业人员者是从初学者而来的,大家都是从零基础起步的。学习不是应聘,不是因为你有了什么能力才要你来做这个事。学习的目的在于提高,因为你不具备某些思维方式和能力,所以才来学习。
学习程序设计,学到的并不只是一项“手艺”,里面蕴藏着不少通用的道理,并且,程序设计的实践,能够使人将这样的道理,转变成思维的习惯。
将来,你有可能是一个单位的高级技术人员或管理人员。之所以高级,是要负责一些很大的事情,做低级职务的人不能做的事。你负责的事,无论是技术工作还是别的,需要很多人完成。在程序设计实践中练就的“自顶向下,逐步求精”习惯,将是真正的依靠。你首先想到的不应该是鸡毛蒜皮的小细节,而是条缕分明地厘出大格局,据此分解任务交给下属负责,甚至细节该如何完成不用你做,也不用你想。
所以,有人说,大学,学的是思维方式。抽象的思维方式要通过具体的学习载体传达和表现。如果有人对专业心怀成见,若无更好的变通,也请静心下来。大道可以从每个学科中得来,为何不从正在学习的程序设计中得到更多的启发和训练呢?