【转】你不是一个软件工程师
转自 http://article.yeeyan.org/view/14647/192497
-----------------------------------------------------------------------
你不是一个软件工程师。你不造摩天楼,你也不造桥梁。
你在花园种植花木并让它们茂盛生长。
你是一个软件园丁。
当你准备在花园里种植时有没考虑过所有细节。
比如:在你种下一个颗种子前就已经知道每一片树叶的位置?
人们是否期望能够精确的估算出每年会有多少花儿盛开(或是你所在组织会做出这样的承诺)?
你是否会因此而等到奖金?
这些看起来把对建造摩天楼来说完全合理的规划,搬到一个花园的种植上多少有点儿荒唐。
也许你对今后一周里你的花园会是什么样子已经心中有数了。甚至你可能对一年内它的样子有了大致的想法。但是,你完全不知道一年后每个枝条、叶子、树茎和花朵将会长成什么样子。除了随意猜猜之外你又能说出个什么所以然来呢。
如果你在建造桥梁或是摩天楼之前告诉我你百分之百知道它最终会是什么样子,我完全相信你。
如果你告诉我知道绝逼准确的完成建造所需要花费的时间的话,我还是完全相信你。这都是作为工程师牛逼的地方。
如果你把这些话套用在你的花园,我忍不住要说你在放屁!
如果你告诉我你将通过雇佣更多的园丁来使得你的花园生长的更快的话,我会忍不住嘲笑你。
到底是什么原因使得这么多的园艺都以失败告终,而那么多的摩天楼却能够成功呢?除了少数特例外,不管是在欧洲还是新加坡,建造一幢摩天楼的技术大体上是相似的。种植花园却不一样。每一个花园因为其所在的环境不一样各自有所区别。甚至在花园内彼此间的土壤也会有很大的差别。这就是为什么价格最低的竞标者也许能够建造出和最高价竞标者一样好的桥梁,然而你的公司却无法发展成为像Google那样高水准花园。
忘了那次你公司里的人使用敏捷园艺方法以失败告终后就到处说这方式就是一无是处的马粪么?嗯,马粪其实能够使得花园成长,但它并不足以挽救你的花园。你的花园可能在它开始前就因为你的组织”气候“而死了。你是不是在尝试这在沙漠上种植一片热带雨林?你不能丝毫不考虑园丁质量不在乎你的组织”气候“,而只是一味的种植像Facebook, Flick或Twitter这样的植物并期望它们能够在这种恶劣的环境下生根发芽。
与摩天楼不一样的是,你的花园会长杂草。你的花园不会因为你停止为它投入就意味着完结,它永远没有“终止”的状态。如果有一天你不在为你的花园除草,杂草最终会覆盖掉整个花园,很快的你会发现重新种花木会比去修剪杂草丛生的花园更加简单些。与此同时花园周边的环境一直在变化,一个没有受到细心照料的花园将会越来越难生存。
在大部分的国家里,有相关执照的工程师才能去建桥梁。而园丁却没有对应规定来保证质量。不幸的是,你的园丁质量远比其他因素更加影响你花园的成败。因此,你最好擅长从谷壳中摘取小麦。只有在面对面的时候一个有经验的园丁才能真正的了解另一个好园丁。那些只会管理园艺项目的人是不会知道他们要找什么样的人的(虽然连他们自己都不知道这一点)。如果你不是一个园丁但却需要补充好园丁的话,赶紧的去找一个你信得过的有经验的园丁检验你的候选人。你不可能在教室里学到园艺知识,因此你的焦点应该在你的候选人以前的经验上,而不是他们在学校里学到多少的理论知识(它们基本上无论如何都不可能适应你这变化的“气候”)。
这个软件工程的隐喻应该是耳熟能详的,也许在以前来说形容的准确无比,现在我只想用它来帮助那些不切实际的非技术人员了解软件是如何构建实现的。
我是一个软件园丁。
你也是。