时常与一些同行朋友说起“软件难做”的话题,一方面软件确实挺难做,变数着实太多(推荐《梦断代码》),另一方面,让人理解软件难做,更是不容易的事情。如果说第一个问题靠苦练内功还能看到希望,第二个问题就近似无解而让人绝望了。下面两个场景,相信大家都不陌生:

头儿说:你们开发怎么这么慢?拿这么高的薪水,做事还这么慢?我急得不得了,只可惜我不懂开发。我如果懂,我去学校招50个码农,连续熬夜一两个礼拜,绝对可以做出我想要的系统。

头儿说:我真是对系统失望透顶了。想我以前刚创业的时候,七八个人,五六台电脑,什么事都是靠喊,那时候工作效率多高,人均产值多高?现在人才到几百个,就成了这个鬼样,说要上系统,上了系统有变好吗……

我有时候会想,这些说法在普通人看来似乎也没有错,但行业中人都知道错得厉害。那么,问题究竟出现在哪里呢?我想来想去,觉得原因大概在于,持这样说法的人往往只依靠来自生活经验的“逻辑”和“直觉”,还没有真正理解“软件”或者说“系统”到底是怎么一回事。

从题图说起吧。有一些军事常识的人都知道,这是美国的F16战斗机,是一种强调机动性的轻型战斗机,以优异的性能畅销世界,自服役以来取得了骄人的战绩(上次击落俄罗斯Su34的就是土耳其装备的F16战斗机)。

An image to describe post 从静不稳定性说起

不过我想强调的是,F16是第一种采用“静不稳定”设计的战斗机。

什么是“静不稳定”?对传统的飞机设计来说,其气动中心一定要在飞机的重心之后。这样是符合直觉与逻辑的:飞机拉起的时候,机身前部向上,升力作用于气动中心带动机身后部也向上,让飞机保持平稳。这个道理很好理解,就和日常生活中的跷跷板一样。

但是F16战斗机革命性地引入了“静不稳定”设计,也就是说其气动中心在飞机重心之前。那么问题来了:这样在拉起的时候,机身前部向上,气动中心带动机身前部也向上,飞机难道不会失去控制,像耍杂技一样翻滚起来吗?

An image to describe post 从静不稳定性说起

答案是:不会。因为F16的飞控系统非常先进。依靠丰富的传感器的和先进的性能,F16的计算机无时不刻不在调整飞机的各个操纵面,像“保姆”一样保证飞机的稳定性。结果,一架“本来”会失控的战斗机,不但没有失控,反而成了高机动性战斗机中的佼佼者。继F16之后,静不稳定设计大肆流行开来,各种飞机纷纷采用。

有意思的是,尽管气动设计发生了革命性的变化,F16的外形并没有翻天覆地的变化,操作方式也没有翻天覆地的变化。不了解其中原理的人,当然不会有觉得这飞机什么稀奇。但是如果你把静不稳定设计的图发给他们看,大家多半判断这样的飞机飞不起来,因为这违背了日常生活经验的“逻辑”,根本不存在这样的跷跷板嘛。

从F16的例子可以看到,软件和系统在很多场合下的能力和规则已经突破了日常生活的经验逻辑,要求大家用一种全然不同的角度来看待和理解。

按照日常经验,不同的人能力之间有差别很正常,但顶多相差几倍几十倍,不会相差千倍万倍。但是借助计算机的放大,懂得驾驭计算机的优秀程序员,和不懂得驾驭计算机的糟糕程序员,两者的差别就可以相差千倍万倍。

几个人的沟通,靠喊当然没有问题。但是人多到几百上千,网络的复杂性可不像从管几块钱到管几百块钱那么简单,而是呈指数上升的。单靠手工已经没法玩转了,系统是不可或缺的,否则就像F16战斗机那样,飞行员的技术再好,没有电脑,飞机根本飞不起来。

我知道,这样的话题沟通起来可能很难。但从根本上说,这不是一个沟通的问题,而是认识深度和眼光的问题。如果你身在IT行业,又没法就这样的问题和老板取得共识,择木而栖或许是更好的选择。