译自 Chris Aitchison 的博文 You are not a software engineer
你不是软件工程师。你既不造大楼,也不造大桥。
但你培育花园。
你是软件园丁。
你会在种下第一颗种子前就非常仔细的规划你的花园,细致到你确切的知道每一片叶子会出现在哪个位置么?人们会相信你能预测一年中多少花朵会绽放么?你的奖金和一年有多少花盛开相关么?那些对规划摩天大楼工程来说很自然而然的事情,放在培育花园上就显得有些荒唐可笑了。
你可能对你的花园在一个礼拜以后看上去是个什么样子有很准的预期。你也可能对它再一年过后是个什么样子有个大致的想法。但是你肯定不知道,每一个枝条,叶子,茎和花朵在一年后会出现在哪里,而且就算你说你知道,你也只是在猜而已。
假设你在建造一座大桥或是一座摩天大楼,在你开始这个工程前,你会非常确切的知道竣工时会是什么样子 --- 我相信你一定知道。就算你对我说,你能够确切的并且非常精确的知道需要多久完工 --- 我也相信你。这就是工程师的工作。如果培育花园你也这么说,我绝对会说「鬼扯吧你!」。如果你告诉我,你准备雇佣更多的园丁,以期让花花草草长的更快的,那我就要开始嘲笑你了。
那为什么会有这么多花园最终失败了,而那么多的摩天大楼平地而起?虽然也有例外,但总体上来说,无论你是在欧洲还是新加坡,建造摩天大楼的技术都是相似的。但花园不一样,由于所处的环境的不同,每个花园都是不同的。就算是仅隔一步之遥的两个花园,它们的泥土也可能相去甚远。所以这也是为什么对于同样的一座桥,投标价最低者和投标价最高者都能把它给好好的造出来,但你的公司可完全不可能培育一个像 Google 那样的花园。
也许在你的公司有这么一个人,他尝试使用敏捷园艺法,但是失败了。然后他就在公司里宣扬敏捷园艺法真是跟马屎一样烂。马屎的确可以用于培育花园,只是如果要拯救一个花园,就略显不够了。你的花园可能在开始前就已经死了 --- 可能是你公司气候条件的一个牺牲品。难道你真的会尝试在沙漠里繁育热带雨林么?像 Facebook, Flickr 或者 Twitter 这样的植物,你是不可能不考虑公司的气候条件,或是园丁质量,就把它们移植到你的花园,还希望它们根深蒂固,枝繁叶茂。
和大楼不同的是,你的花园会长出杂草,而且永远无法「根除」。仅仅是不花功夫不花钱在杂草上面,并不意味着你把他们都解决了。如果停止除草的话,很快你的花园中的很大面积就会被杂草覆盖,不久之后你就会发现重新开始弄个新花园也许比清理干净这些杂草要容易的多。花园所处的环境也是一直在变化的,一个长期被忽视的花园将会慢慢变得越来越难以存活。
在大部分国家,工程师需要执照才能建造桥梁,但政府对园丁没有这样强制的质量管理。不幸的是,你的园丁的质量和层次是决定你的花园成功与否最重要的因素,没有之一 ---- 所以请认真像沙里淘金一样挑选你的园丁。只有那些很有经验的园丁,才能发现其他的好园丁。那些基本上没有管理过园艺项目的人是不会知道他们需要什么样的园丁的(虽然他们自己不知道他们不知道)。所以如果你本人不是一个园丁,但是需要招募好园丁,那么请赶紧找个你信任的有经验的园丁,让他来审查你的候选园丁们。园艺技术是不可能在教室里学会的,所以请关注你候选园丁们之前培育过的花园,而不是他们在学校学会了多少园艺理论(那些理论基本上在你花园所处的具体气候条件下是不适用的)。
「工程」这个说法已经出现了很久了,也许过去它是很精确的,但现在,「工程」真的只是带给非技术人群,一种对于软件开发完全不现实的预期。
我是一名软件园丁。
你也是。