2014年11月19日

[知乎专栏–思考IT]12306的问题,究竟是什么样的问题?

作者 zhuangbiaowei

每逢遇到热点问题,总会有无数的人冲上去发表一些这样、那样的观点。例子就不举了,就说这次12306的问题吧。

这已经不知道算是第二季还是第三季了。反正又开始了新的一轮「热议」。

但是,这就12306的问题,究竟是什么样的问题呢?

这是一个民族习俗问题,12306年全年运行,平时几乎从来没人骂,一到春运期间,就会开始有人骂,作为人类历史上最大规模的迁徙运动,在将近40天里,有30多亿人次的人口流动,占世界人口的二分之一。在这种习俗的压力之下,12306被骂,几乎是必然的。

这是一个政府垄断的问题,12306不是一个商业网站,而是铁道部的官方唯一指定网络售票网站。12306体验不好,铁道部就必须挨骂。谁让你是政府,是垄断,是不公开,不透明,暗箱操作。天知道你是怎么开发的,怎么招标的,怎么花钱的?

这 是一个复杂的技术问题,从技术角度来分析讨论12306的文章,已经有无数篇了。大牛、中牛、小牛,以及很多自以为有点心的菜鸟,都跑过来议论纷纷。对 了,还有一个开源项目呢,12306NG,建了一个 BBS和 N 个 QQ 群,一群人在那里群聊,代码倒是没有写多少。

———————以上这些,其实都不必看———————

其实,12306的问题,是一个工程问题。说得高大上一些,是一个复杂的系统工程问题。

在说得直白一些,这种复杂的系统工程问题,根本不可能通过开源项目来解决。

有人说,Linux 复杂吧,人家也是开源项目呀。

但是,Linux 的发展,是被用户百般呵护,万般宽容着的呀!因为是开源,所有各种 bug 都被容忍着,大家以爱的眼光看着 Linux 的茁壮成长,哪怕出再多的问题,都不能允许别人诋毁我们的小企鹅。

12306,能有这种待遇吗?12306ng,就算他真的开发出来了,开始上线运行。只怕第一天,就会被人骂到死!

这是一个错误几乎无法被容忍,甚至会被放大1000倍的项目,这种工程,该怎么做?

一个不允许犯错的项目,该如何尽一切可能保证其质量?中国99.99%的技术人员,都没有任何经验。只有那些当年开发两弹一星,近年来做的众多航空航天项目的工程人员,才算是有经验。

那些上来就「侃侃而谈某种分布式方案」的朋友,我只能呵呵一下了。

一个复杂的系统工程,首先需要考虑的是:质量,其次,需要考虑的是分工。假设给你1000个人,你会如何给他们分配工作?人月神话说:「不要假设一个项目中,工作量的人与月是可以互换的」,那么,出一个问题考考你:「12306的项目,要一年内完成,你需要多少人?」

1000?2000?还是5000?

不要说5000人,一个1000人的项目,如何管理?有哪些可能的问题?他们的协作,应该用什么工具?应该分多少层级?分别找哪些人,把他们安排在什么位置?

那些宣称「只要几十个人,就能够搞定12306」的朋友,我只能再次呵呵一下了。

质量、分工,之后是计划。一个如此复杂的项目,应该划分为几个阶段?每个阶段做哪些事情?如何制定层层分解的项目计划?在这样的一个计划中,哪些是关键节点?哪些是风险节点?如果出现风险,后备计划是什么?应急预案如何做?

那些宣称「可以敏捷迭代,然后就没有具体方案」的朋友,我只能再次呵呵一下了。

———————以下是总结陈词———————

很多人说:「没吃过猪肉,还没见过猪跑吗?」

但是我要说:「只见过猪跑的人,你不要相信他对于猪肉味道的猜想!」