你不是软件工程师。你不是在建摩天大楼。你不是在建公路桥梁。
你是在从事园艺,培育花草。
你是一个软件园丁。
你是否会在种下第一粒种子前就规划你的花园,细节精确到定位每个叶子应该长在哪里?人们是否会期望能精确的估算出这一年会开出多少花朵(或你的公司是否做出这样的承诺?)?你的奖金会跟此挂钩吗?这些事情对于规划一个摩天大楼来说完全合情合理的,可是当你在园艺这样的事情上谈论这些时,就显的有点荒谬了。
你有可能会对未来一周你的花园会变成什么样有个很好的设想。你甚至可能会对一年后你的花园会变成什么样子有个大概的估计。但你不可能知道今后一年里每个枝条,叶子,根茎和花朵会长在哪里,如果你非要说你知道,那你肯定是在乱猜。
如果你在建一座大桥,或一栋大楼,在动工之前,你告诉我,你精确的知道在建成之后会是个什么样子——我会相信你说的。如果你说你能——听起来有些疯狂——精确的知道这个工程要用多少时间“完工”——我还是会相信你说的。这就是工程师要干的事。但如果你在园艺这种事情上也对我这样说,我会认为这是屁话。如果你告诉我要多雇几个园丁来让花草长得更快些,我会鄙视你。
为什么会有这么多的花园培植失败,而却有这么多的摩天大楼建设成功?很多出乎你的意料,新建摩天大楼的技术不论是在欧洲还是在新加坡都很相似。培植花园却不是这样。每个花园都不同,因为花园所处的环境不同。即使一箭之地范围外的花园也会具有十分不同的土壤构成。这就是为什么即使最廉价的承包商也能建出跟最高报价的竞标者同样的大桥,但你的公司却不能培育出跟Google的花园具有同样品质的花园。
是否记得曾经公司里某人在实施敏捷(Agile)园艺方法没有获得成功时,他会到处说,真是狗屎,根本不好用。的确,狗屎能用来培育花草,但这还不足以用来挽救你的花园。你的花园极有可能在你采取这些措施前就已经死亡——成为你的公司气候变化的牺牲品。你是否是试图在荒漠上种植雨林?你不可能培育出跟Facebook, Flickr, Twitter一样的植物,你不可能指望着在不考虑你的公司气候条件和园丁的水平的情况下让这些奇花异草在你的花园里生根。
跟摩天大楼不一样,你的花园会长杂草。你的花园永远没有“完工”之日。并不是因为你不再需要在花园上进行投资,你的工程就完成了。如果你不坚持除杂草,你的花园最终会被杂草淹没,很快你会发现全部砍到重新种植比修剪更容易。花园周边的环境同样也在不停的变化,一个疏于管理的花园将变得越来越难以存活。
在大多数国家,工程师需要有许可证才能去建一座大桥。园丁没有这种政府操作的质量管理。不幸的是,园丁的技术水平是一个比其它因素更能对花园的好坏起影响作用的因素——所以,你最好要有能分辨鱼目和珠子的能力。而只有有经验的园丁才能在看到一个人时辨出他是不是个好园丁。一个没有管理过园艺工程的人根本不会知道需要找什么样的园丁(因为他不懂这些)。所以,如果你不是一个园丁,但却想招募到好的园丁,你应该让一个你信任的有经验的园丁去考察候选者。在教室里你是学不到园艺技术的,所以,要考察这些候选者以前曾经培育过的花园,而不能只依据他们知道多少在学校里学到的园艺理论(这些东西几乎完全不能用于你的花园所出的气候环境中)。
所有人都应该理解这里的这种技术上的比喻,而且它是如此的合适,但现在我只是想用它来帮助那些对软件的实现怀有不现实想法的非技术人员。
我是软件园丁。
你也是。
【编辑推荐】