有一种境界叫感觉
吴旻
泰岩网络工作室
同事找我讨论事情,是关于对生产线上的数据流进行压缩,以期节省专线带宽,从而降低公司运营费用。我很快出具了否定性意见,同事说:你连试都没试,怎么知道不行?
我的答复其实就两个字:感觉。
这里我暂不解释原因,先说一说什么是感觉。
我生长在农村,小时候偶尔会被母亲“动员”到田里干活。比如说,早上六点到田里,大约要干到十点半才回家。在这个过程中,我们没有钟表,对时间掌握,全来自于我的那句问话:妈,现在几点了?
母亲或者报个时间给我,或者说回家吧。一般到家的时间,都在10:25~10:45之间。我很奇怪为什么母亲就知道是几点呢?母亲的回答是:我必须知道是几点!
母亲在生产队时代是妇女队长,是每天带着大妈、大婶、姐姐、妹妹、侄女们下田干活的人,那时候大家都穷,买不起手表,于是队长必须在没有计时工具的情况下知道时间,不管晴天白日,还是阴天下雨。
这种下田干活的经历多了,很快我也能估计出大致时间了。比如我会问母亲,到十点半了吗?母亲基本都回答:回家吧。这种感觉多年未变,导致我现在从一个地方出发时如果没带计时工具,那我也会基本清楚大致时刻,从而不会迟到或者晚点。
母亲有一种感觉是我所学不来的。母亲过了中年以后,会对天气有感觉。他会对我说,儿子,收东西,要变天了。其实当时天空特晴朗,但我还是得听她的。母亲的手受过伤,一要变天,就会发木,比天气预报还准。
我小时候会和兄弟姐妹们玩一种类似赌博的游戏,就是随机抽取两张扑克牌,猜中点数大者赢。我当时能通过手掌在两张牌上晃过而知道哪张牌大,不是100%准,但至少会有80%是准的,这导致我玩这种游戏从来没输过,到后来,他们干脆规定不许我用手来测试。我到现在也不能解释其中的原因,但那确实是一种感觉。
搞艺术的人其实更是强调感觉。作家要对语言有感觉,能体会出相同的词不同的组合所表达出的细微差别;画家要对颜色和光线有感觉,能体会出其中的感情所在;音乐家要对声音有感觉,能体会出欢乐与悲伤。
软件开发要求程序员对代码和架构有感觉,感觉到其中的美与丑,自由与拘束,放松与紧张,安全与危险。对同样的代码或者架构,处于不同的环境,也能感觉到其中的不同,就像红色既能表达喜庆,也能表达紧张与危险一样。
回过头来,我解释一下我为什么会否定同事的意见。
XP开发中常会用到一个词,叫“坏味道”。
同事的意见给我的第一感觉就是“坏味道”。它会使整个架构复杂度大大提升,而效果却未必有预期中的好。比如:
1、我们的程序对实时性要求非常高,压缩后传输,接收后解压,会导致一定的延时。
2、我们的程序大量是小包的流数据,以一个包为单位压缩只会增大流量,若干个包组合后压缩,要么引入高复杂度的算法,要么产生延时,或者二者同时兼备。
3、就算是能将数据压缩到原来的50%,那节省的这一半带宽,到底能省出多少钱?我们大量的客户群依赖的就是这条专线的畅通,如果有一天我们的通信量增一倍,又该如何处理?
4、我们有很多的用户体验很差的功能,这个才是我们眼下需要着急解决的;相对于客户流失的危险,眼下每个月多在带宽上花上一两万都是很值的。
其实降低流量还有一个可以做的事情,就是优化或者过滤掉某些冗余数据包,而不一定是压缩。或者说,压缩数据流在通常情况下是好主意,但对于实时性要求高的系统,就不一定了。
软件开发人员对代码和架构的感觉,就应该像厨师对嗅觉和味觉的感觉一样,不仅要有,而且要准!