代码整洁之道:程序员的职业素养
上QQ阅读APP看书,第一时间看更新

第2章 说“不”

“能就是能,不能就是不能。不要说‘试试看’。”

——尤达

在20世纪70年代初,我和两位19岁的朋友在一家名叫ASC的公司工作,为芝加哥卡车司机工会开发实时会计系统。如果你马上想到Jimmy Hoffa[1]这样的名字,那也是很自然的,1971年那会儿,没人敢跟卡车司机工会的兄弟们捣乱。

我们的系统预期应在某个日子前上线,是的,那一天可事关一大笔钱。为了能按时交付系统,我们的团队加班加点,每周工作60、70甚至是80小时,好几周接连如此。

上线前一周,我们终于将系统完整搭起来了,不过还有很多待解决的bug和问题,我们按清单疯狂地进行排查解决。当时大家几乎连吃睡都顾不上了,更别提有什么单独思考的时间了。

ASC的经理Frank是一位退役的空军上校。他是那种会直冲着你咆哮的经理。这是他的行事风格,或者说是惯用手段吧。他会不给降落伞就直接将你从3 km的高空扔下去,迫使你按着他的指令办事。我们这些19岁的小年轻当时根本不敢看他的眼睛。

Frank命令我们必须按期完工。就那么定了。到期交货。完毕。不容置喙。然后拂袖而去!

我的直属上司Bill人挺不错。他已经和Frank共事了好些年头,知道Frank是什么样的人。他告诉我们,不管如何都必须按期上线。

因此,那天我们就把系统上线了。事实证明,那简直是个悲剧。

我们的机器放在离卡车司机工会芝加哥总部50 km以北的郊区,中间通过十几个300波特的半双工终端连接。这些终端差不多每半小时就会锁住一次。上线之前我们已经碰到过这个问题,但没有模拟过工会的数据录入员们往系统里猛灌数据时产生的大数据流情况。

更糟糕的是,通过110波特的电话线连接到我们的系统的ASR35电传打字机,在单据打印到一半时可能罢工。

要解决打印中止的故障,需要重启系统。因此,客户只得让那些终端还能运行的人赶紧完成手头的工作,然后停下来。等大家都停下来后,他们让我们重启系统。此后,那些打印被中止的人又只好再重头来过。这种状况每小时都会发生,而且不止一次。

就这样折腾了半天,卡车司机工会的办公室经理要我们关掉系统。他告诉我们,除非系统能正常工作,否则就不要再启动了。在这过程中,他们白费了大半天的工夫,最后不得不在旧系统上再重新录入一遍。

Frank大发雷霆,整栋大楼都能听到他的咆哮声,久久不散。于是Bill和我们的系统分析师Jalil过来问我们,什么时候才能让系统稳定下来。我说:“4周。”

他们吓坏了,转而一脸决绝地说:“不行,在周五之前必须让系统跑起来!”

“要知道,我们上周才勉强让系统跑起来。我们需要时间把问题解决干净,让系统稳定下来。4周不够。”我答道。

但是Bill和Jalil也很顽固:“不行,一定要在周五前。你们至少也该试一试吧?”

我们的组长于是说:“好吧,我们试试看吧。”

周五这个点选得不错,周末的系统负载比工作日的会小很多,这样在周一之前我们还可以发现更多问题并解决。尽管如此,情况还是很不乐观,险象环生,打印中止的故障每天仍会发生一两次,此外还有其他问题也暴露出来了。慢慢地又过了几周,对系统问题的抱怨终于逐渐消停下来,似乎一切回复正轨了。

不过随后我们就都辞职不干了,这点我在前面的介绍部分也已经提到过。而他们还未真正摆脱危机,于是不得不另外招了一批程序员来应付客户那边不断涌来的问题。

谁应该为这场灾难负责呢?显然,Frank的处事风格有问题,他对别人的威迫感妨碍了他自己听到事情的真相。当然,Bill和Jalil本该更努力地阻止Frank的决定,我们的组长也不该屈从于周五完工的指令,而我也本该继续说“不”,而不是乖乖站到组长那边去。

专业人士敢于说明真相而不屈从于权势。专业人士有勇气对他们的经理说“不”。

你怎么能对自己的老板说“不”呢?毕竟,他们可是你的老板啊!难道不该照你老板说的去做吗?

不应该照做。只要你是一名专业人士,那就不应该照做。

奴隶没有权利说“不”。劳工或许也对说“不”有所顾虑。但是专业人士应该懂得说“不”。事实上,优秀的经理人对于敢于说“不”的人,总是求贤若渴。因为只有敢于说“不”,才能真正做成一些事情。