这篇文章的标题来源于一本经济学的书籍,感觉很适合接下来要聊的话题便借用过来了。
政府或企业的每一个决策、每一次行动,甚至不经意间的个人行为都可能会对现实生活中造成影响,其中有些影响是立马可以感受到的,是看得见的,而有些影响是第一时间很难感受到的,是看不见的。经济学里有一个很经典的例子是来说明看得见和看不见的影响,商店主人的儿子把商店的橱窗打破了,然后商店的主人花钱请玻璃工师傅把橱窗修复了,然后玻璃工师傅拿到了修复的费用,在某种程度上,这笔修复的费用使整个资金链运转起来,商店的橱窗修复了,玻璃工师傅有了收入,这是看的见的影响。同样的,还有看不见的影响,商店主人原本可以用这笔钱去创造更大的价值,比如购进新的货物、让商店更好看,然而因为橱窗的打破这笔钱没有了。
在计算机科学里同样也存在着看得见和看不见的影响,用专业术语来说就是 trade-off ,我们可以翻译成权衡、中庸、取舍等等词汇。这点在大数据领域里尤为明显,每一个大数据里的工具和软件都在无论从诞生的之处的学术论文上还是官方文档上,大多都会谈论自己的“看得见”的影响,但是其“看不见”的影响往往会避而不谈,或者是开发者将其投入到实际生产环境中才会发现“看不见”的影响。正如软件领域里“没有银弹”能解决所有问题。
时间和空间的取舍,又被称为时间和内存的取舍,是计算机领域无法绕开的话题,它指的是当某种算法或程序减少了空间的使用率,同样的其花费的时间也相应的增加了。这里的空间,可以理解为计算机执行某种任务需要的数据存储空间;时间,可以理解为计算机执行某种任务需要花费的时间。
这么说可能有点不好理解,比如压缩数据和未压缩数据。如果一个数据是未压缩的,数据需要占据更多的存储空间,但是查询数据会花费更少的时间;同样的将数据压缩后,数据占据的空间更少了,但是查询数据会花费更多的时间。在某种程度上,如果你们只关注了压缩数据带来的空间减少的“看得见”的影响,而忽略了随之带来的时间耗费的“看不见的”影响,有时候就会被这“看不见”的影响而改变了整个软件。
再举一个例子,当你打开一个网页时,你肯定希望这个网页展现内容越快越好,所以有的网页程序会将一些重复使用的数据缓存在本地,这样的话,当你打开网页时,程序会直接从本地加载数据,要是开发者只看见了网页缓存给用户带来的加载速度这种“看得见”的影响,而忽视了网页缓存带来的数据存储空间的放大这种“看不见”的影响,就有可能造成问题。
“看得见”和“看不见”的影响其实在计算机领域里无处不在,而很多开源软件或者是学术论文往往只会提“看得见”的影响,比如 Apache Kylin 号称毫秒级的查询速度,但随之而来的有可能是“维度爆炸”这种“看不见”的影响。因此在做架构选型、亦或是选择某种算法、或者是写程序时都要认真思量下架构、算法或者是程序是否会存在“看不见”的影响。