标签:图片 抽象 观测 轻松 别人 小朋友 事件 inf 大脑
什么是模型化编程?模型化编程是我在前几天的一篇文章《非著名架构师告诉你,代码该如何写,才能自己写的容易别人看的也不痛苦》中提出的,意思是在写代码前,先为代码找到一个与之非常相近的模型,然后在大脑里把这个模型想清楚并构建好。
这样写代码时就按照这个模型来写,保证写出来的代码是正确的,而且整体看起来也非常清晰,绝对不会有“东一枪,西一炮”这样凌乱的感觉。
当我们向别人介绍时,就把这个模型描绘出来,只要对方熟悉了这个模型,其实就等于熟悉了我们的代码。这样的交流不仅效率高,而且绝对不会产生歧义。
当采用这种方法时,可以迫使开发人员主动加强对问题或需求的思考,进而加深对相关事物或领域的了解,这样做不仅可以减少出错的可能性,而且还会使解决方法更加的正确。
当然,我也没有说必须采用这样的方法。只是采用的话会相对更加合理化、简单化和科学化一些。
“疏密度”相关问题
我曾在工作中遇到求解事物“稀疏”和“密集”程度的问题。其实这类问题颇为常见,在生活中都有好多。
比如上下班高峰期,路上行驶的车辆非常密集。等到了晚上十点以后,路上的车辆就非常的稀疏了。
那我们如何来描述车流的疏密度呢?最常用的方法可能就是在单位时间内通过某个路段的车辆数目。
假设我们把“一辆车在某个时刻通过某一路段”这个事情看作是发生了一个“事件”,那么许多车辆在不同的时刻通过这一路段就是许多的事件发生。
如果我们把每个事件作为一个点,并把它们在时间轴上画出来。整体看起来就是在时间轴上分布的许多密集程度不同的点。
抽象的说法就是,随着时间的推移,事件在一个个逐渐发生。实际的含义就是在不同的时间经过的一个个车辆。
点稀疏的部分就表示这段时间内车流量较小,点密集的部分则表示车流量较大。
这样我们就把车流疏密度的问题转换为时间轴上点的疏密度问题,这样事情不仅得到了简化,而且也更加的具体化了。
假设已经观测了24小时,并且记录下了全部数据。此时,我们提出一个问题:
在1小时内,经过的车辆数目最多时是多少,最少时是多少,分别是在哪个时刻发生的?
这个问题本身不难,即使不采用模型化编程,写起代码来也不太麻烦。但是,如果采用模型化编程,会变得非常之简单。
使用“推窗口”方法求解
我们抽象出一个时间窗口,窗口的宽度就是1个小时的时间,然后把窗口放在时间轴的左侧起始处,使窗口的左边缘与时间轴上的第一个点对齐。
然后按照下面的方法反复进行即可:
1、计算出窗口里的点的数目,记录下这个数目,并记录下窗口左侧对应的点在时间轴上的时刻。
2、向右推一下窗口,使窗口前进一个点,此时窗口的左边缘与时间轴上的第二个点对齐。
3、和第1步一样,计算和记录数目,并记录时刻,并且与第1步里的数据进行比较和相应的更新。
4、和第2步一样,向右推一下窗口,使前进一个点。
就这样一直推下去,直到推到最后,即窗口的右边缘与时间轴上的最后一个点对齐,就结束了。
在整个过程中,我们已经记录下了最大数目和最小数目,以及它们分别对应的时刻。
回味一下,有了这个“窗口”模型以后,是不是一下子变得特别特别简单啊。几乎一年级的小朋友都能懂。
自己大脑里想着这个模型时,写代码变得非常轻松。别人大脑里想着这个模型时,看我们的代码也变得非常轻松。
也许这个简单的问题并不足以展示模型化编程的强大威力,但是等到复杂问题时,一定会见分晓的。
(END)
标签:图片 抽象 观测 轻松 别人 小朋友 事件 inf 大脑
原文地址:https://blog.51cto.com/15049788/2561457