Mengqi's blog

愿望思维


这篇我们放下数学公式,来聊聊编程。「编程」这个概念如今在中国已经不再陌生,几乎各个高校都有自己的计算机学院,各种各样的培训班也是层出不穷。然而大家也都知道入门容易,精通很难。如果一个学习编程的人没能培养出这个领域所需要的良好思维习惯,而只是蜻蜓点水一般记住了一些基础的语法,概念,那么就很难对编程有更深入的理解。所以有必要介绍一些基本的,却容易被忽略的编程习惯。

复杂度

程序员的天敌是复杂度。从小的方面看,我们需要面对算法的复杂度,即如何用尽量少的开销实现一个计算过程;从大的方面看,我们需要面对系统的复杂度,即如何将一个现实中的复杂问题用各种计算模块相互搭配,组成一个系统来解决。如何控制软件开发中的复杂度,是计算机专业一直以来的热点话题。

总的来说,解决系统复杂度,我们有几个武器:抽象、模块化、解耦合等等,我们今天介绍同样好用的武器:愿望思维。

愿望思维

要把大象装冰箱,总共分几步?

某年春晚小品里,宋丹丹提出了这个问题,最一开始听得时候我像小品里的赵本山一样也是摸不着头脑,这就好像我们拿到一个任务需求,对方提出了一个非常宏大的愿景,然而作为具体实现者的我们,却发现不知道从哪里开始。生活中的这种情况十分常见,尤其是当你还处在学习阶段,还不能达到熟练应用技能的地步,面对一个看起来十分复杂的问题,往往无从下手。这个时候我们不妨放轻松,先不去考虑具体实现细节,而是站在一定高度,把任务分解。

我们首先定义一个把大象装冰箱的函数,名字就叫做 packaging,接受两个参数:大象elephant冰箱

    def packaging(elephant, refridgerator):
        pass

然后完全不考虑细节地把任务分解为三大步:

  1. 把冰箱门打开
  2. 把大象装进去
  3. 把冰箱门带上

于是,我们的函数变成了:

def packaging(elephant, refridgerator):
    refridgerator.open()
    refridgerator.load(elephant)
    refridgerator.close()

注意,里面的三个函数这时不需要定义,我们这里假设(「希望」)它们已经被定义并实现。至于这三个函数到底怎么实现、由谁实现,我们目前不需要关心。比如,fridgerator.open() 可能是未来的我或者是隔壁的小王来实现,我只要希望他能实现我想要的功能就行了。这样,解决整体问题的时候,我们只需要关心骨架,不必费心考虑怎么实现。而在考虑具体实现时(比如我开始实现 fridgerator.open()这个函数),我们的问题域已经缩小,我在实现 fridgerator.open() 的过程中不必考虑大象的存在,因此也就更能够专注,并有机会写出更为普适的代码(比如实现一个装载任意陆地动物的函数,而非只是装载大象)。

这就是「愿望思维」的核心。借助「愿望思维」,不仅能让我们从实现细节中解脱出来,从大局角度思考,还可以帮助我们写出良好结构的代码。在编码的过程中,因为有了问题域的划分,我们能比较专注,保持清晰的思路;而且在最后完成的代码中,骨架一目了然,具体实现划分清晰,可以说是高内聚,低耦合。

编程中的愿望思维和结构化思维比较类似。带着愿望写骨架代码,再接着考虑具体实现,这样很容易得到良好结构的代码。我这次所介绍的「愿望思维」,和「结构化」,「模块化」,还有麦肯锡的「金字塔原理」,殊途同归,讲的意思都差不多,我觉得不必细究它们名字上的差异。

把握结构

不止在编程中,我们在工作生活中也可以利用愿望思维解决问题。比如,写论文没思路,「七天憋出来六个字」,不妨先把大纲列出,先列一级标题,把握整个论文的结构,将一大块的文章分解为一章、一节。对于每一章、节,还可以进一步分解,为每一段定义一个中心话题。经过这样一番分解,我们得到了一个框架,接下来一个个地补全框架中的内容就是了。还有比如做一个 PPT,也是先写好一个「脚本」,定义好各个模块,然后再考虑各个模块的具体实现。这样下来,不仅能保证总体的思路清晰,而且原来的复杂任务得到分解,也方便分布到不同时间、空间完成(方便任务管理),同时还能在一定程度上保持上下文的一贯。

反过来,我们在观察一个已经实现的复杂系统时,也可以提纲挈领,从抽象的结构层来分析理解。比如看一本厚厚的经典书,一上手可能觉得恐惧,觉得自己看不完这么多东西。然而,如果我们先把它的结构提取出来,在大的宏观角度看它是怎么实现出来的,我们就可以先对这本书有一个大的骨架形式的印象(这时不必考虑细节,就好像我们已经把每一章都读过了一样)。然后,就可以根据我们自己的需求,摘取需要的章节阅读(在阅读这些章节的时候同样可以递归地进行提纲挈领,提高阅读效率和质量)。再比如,很多电影可以比较明显地看出导演实现整个电影时的结构设计,观看这种电影的乐趣不仅在于具体某一个桥段、场景、台词,也在于整个结构的巧妙安排(这方面一个著名的例子就是怪才昆汀塔仑蒂诺的电影《低俗小说》)。

更多阅读:

版权声明:

本文中所有文字、图片版权均属本人所有,如需转载请注明来源。