每个程序的运行过程,都可以比喻成弹珠穿越迷宫的游戏.
有一个竖直方向的复杂迷宫,上面有若干入口,底下有若干出口,里面的路径连接很复杂.我们让众多大小不一,形状各异的弹珠从迷宫上面的入口顺着迷宫管道往下落,直到出口。弹珠从入口跑到出口的过程,就相当于程序运行的过程。
实际上,真实模型会更复杂一些。入口并不是弹珠的唯一来源,有的管道自己会产生弹珠往下落,此外,在运行过程中,有的弹珠会消失在管道里,永远不在出来。如果要对应多线程,迷宫模型也要相应的扩展,在前后叠加多个迷宫,由平面变成立体,迷宫相互之间还有桥梁连接,路是通的。
迷宫入口的弹珠,就是程序的原始数据,这些弹珠在下落的过程中会被加工,他们可能会变大变小,还可能分裂或组合,最终走出迷宫的弹珠,则是呈现给用户的最终数据,这里的迷宫管道,就是程序的代码结构。
正如水由氢和氧元素构成,程序世界则由数据和代码构成。
数据和代码的关系:
数据是根本目的,代码是手段,代码永远是为数据服务的。
数据分为输入数据和输出数据,代码是将输入数据转化为输出数据的工具,用户最关心的永远是最终数据是不是他想要的,以及能否在规定的时间内得到,代码是如何实现的,并不是用户的关心点。
什么样的数据,决定了会有什么样的代码,有的系统处理的数据量小,有的系统处理的数据量大,两者代码复杂度肯定不一样。
有的系统虽然数据量大,但数据主要躺在数据库里,像一潭死水难得动弹,有的系统则不停的处理大并发数据,它们的代码复杂度肯定也不一样。
有的系统输入数据量大,输出数据量小,比如人工智能,系统可能要分析近百万张猫的图片,才能使别出一只新的猫,这种系统最大的难点主要是分析这些输入数据是否合理和准确。
有的系统输入数据量小,输出数据量大,比如游戏,玩儿家的输入都是有限的,而系统要向玩儿家战士一个虚幻的世界,这种系统最大的难点是输出数据是否贴合用户的心意。
有的系统,并非所有的输出数据都很重要,所以产生一些BUG,用户是可以忍受的,但有的系统,所有的数据处理必须万无一失,可能业务逻辑并不复杂,但要求无比复杂且精确的代码。
总之,和什么样的数据打交道,会最终决定存在什么样的代码,而代码不断的升级修改,永远是为了匹配数据的要求或者追逐数据的变化。
数据是目的,代码是手段。