软件开发廉价么?

缘起:这是Uncle Bob大叔昨天写的一篇文章,Software on the Cheap. 因为最近在shanghaionrails社区干了不少招聘的事,也一直想发表一点自己的看法,先贴上我全文翻译(不经常翻东西,不足之处还望多多指教):

========== 华丽的分割线:全文翻译开始 ==========

当涉及到软件,你花的每一分钱,到底买到的是什么?你是否曾经想过,你的一行代码到底值多少钱?其实,想要算出来并不难。

过去的14个月,我为FitNesse项目写了大概2万行代码,当然,这都是在业余时间完成的。我的主要工作是运作Object Mentor公司,咨询,授课,指导,写作以及一大堆其他事情。编程活动大概只占据我15%左右的时间。

另一方面,程序员总是有其他很多事情要做,他们要开会,然后他们继续开更多的会。当他们正在开会时,他们还要参加后面的会议。以及后面还有更多的会议等着他们。当然,不要忘记还有各种个样繁琐的统计工具以及晦涩难用的源码控制工具来谋杀程序员的时间,感觉就好像蝾螈在冰冻的泥土上缓慢往前爬。

所以15%这个比例不太理想。

一个典型程序员的全部收入(工资加上其他各种收入)大概在20万美刀(我知道这样听上去好像很高,但是你可以姑且这么计算)。所以 20万美刀 / (2万行代码 / 14个月 * 12月)= 11.66美刀/每行代码。

让我们看一看下面这行代码: {% codeblock %}StringBugger nameBuffer = new StringBuffer(); {% endcodeblock %} 这行代码看起来值11.66美刀么?你会为这行代码支付11.66美刀么?请先不要急着回答,因为在每行这样的代码之前,你需要先声明这样一行代码(并且是完全免费的): {% codeblock %}import java.lang.StringBuffer; {% endcodeblock %} 一些工厂按照“计件工资”方式支付员工薪水。那么你会接受每行代码11.66美刀来算薪水么?当然前提是每行代码都经过了充分测试。

我敢打赌,只要我真的出钱,那么每个程序员都一定会开始严格遵循TDD的方式开发啦(测试驱动开发)。

言归正传

刚才这个薪资计算方式虽然不靠谱,但是他揭露了一个事实,软件不便宜。即便一个最愚蠢得小程序,也可能超过1000行代码,也就意味着这个软件得成本接近1.2万美刀。

想象一下,如果你不是一个程序员,但是关于建立网站你有一个很好得点子,如果作成了会给你带来巨额收入。你把用户用例故事,以及所有细节都准备得非常充分。现在,你是不是准备要找一个高中生来帮你,就像解压缩zip文件一样轻松把网站给做出来?得了吧,你可以支付最低限度的工资,但只有笨蛋程序员才会乐于为你工作。

其实,这样得杯洗具随处可见。很多人不惜提前预支了他老爹的退休金,就为了实现一个很棒得想法,但实现过程却糟糕至极。更耸人听闻得还有那些知名得大公司,花费着每小时100美刀(甚至更多)的成本,却仅仅为了去找一个廉价的解决方案。

“毕竟,作软件不难”,或者他们会说:“这不是要把火箭送上月球,而且那些要价昂贵的家伙其实一直是在骗我们的钱,软件开发没有那么难”。啊哈!

所以这个可怜得家伙到学校找了一个菜鸟,或者招募了一个去年刚刚读了一本关于HTML的书,作出了一个看起来蛮可爱,用来炫耀自己的宠物小猫的网页,而其人却是一个让人讨厌的家庭主妇来作他的程序员,他们听说过TDD么?他们听说过设计模式么?还有设计原则?他们知道源码控制么?

他们当然没有。他们能作的仅仅是将那些恐怖的代码打包到一起,而且没有测试,更没有版本控制,糟糕至极。也许项目起初看起来还不错,挺激动人心的,但是好景不长,很快项目进度就慢下来了,甚至停顿下来,而你的开销却有增无减。

结局是,网站无法正常运转(这个可怜的家伙的老爸也无法早早退休了)。项目最终成为一场灾难,要么被终止,要么花费两倍甚至三倍的钱,才能让项目回到正轨。

底线

关于底线,那就是:只要涉及到软件,你得到什么取决于你到底花了多少钱。如果你想要高质量的软件,那么你必须支付高昂的费用,甚至成本很可能超过12美刀/行。但是请相信我,这可能是得到正确软件最实惠得方法了。

如果你一心只想寻找最廉价的解决方案,那么最终结果只会让你付出更多,并且损失大量的时间。软件就是这样一种东西,好的软件很花钱,一半的钱只能得到糟糕软件,如果你想要更便宜,那么你实际付出的,可能是两倍,甚至超过三倍。

========== 华丽的分割线:全文翻译结束 ==========

后记:Shanghaionrails成立发展至今,形成了一个特别有意思的小圈子。一直在社区里面为大家发布各种招聘信息,也有一些心得。

总体来所,Rails的社区人才难找,供不应求是常态。经常跟招聘方负责人闲聊,问及招聘情况,得到得反馈都差不多。这两年下来,能亲手促成朋友找到自己心仪的公司的情况,少之又少,很惭愧。不过从另外一方面说,招聘方都希望找到合适自己公司的人才,而且每家公司的用人策略也不尽相同。个中充满了时机,选择,变数,非我个人所能掌控。

从人才角度来说,社区规模,注册人数接近500人了,相信潜在会员还有更多,活跃的会员,保守估计大概在10%,于是乎,就感觉圈子好小,因为经常冒泡说话的就那么些人,而这他们在什么地方,作什么事情,我大抵一清二楚,招聘广告一般都不是针对他们的。

我用class A级来形容而那些低调且华丽的高手们,牛人们,我知道一些这样的人,这些人通常早早就为自己安排好了一切,有非常好的工作,很高的薪水,稳定且前途光明,一般得招聘广告对他们的吸引力不大。

那些有一定水平的,并有一定经验的人,我称之为class B级人才,这也包括我自己。这群人有潜力,加以时日会成为大牛,或者已经成为大牛却不自知。但是自己目前所处环境,限制自己的能力无法充分发挥,更想要寻求更好的发展,更好的薪资。可喜可贺,招聘信息是为这些人准备的。比如最近我代Factual.com发布招聘信息,很幸运吸引到一些来自世界顶级公司,有着非常雄厚的背景,学历极高的人才,请原谅我在这里隐去他们的具体信息,我只是想说社区里面卧虎藏龙,潜伏着牛人无数,可是平时讨论,以及一些社区活动,你不参加,怎么会让别人认识到你,让招聘方了解到你,让朋友们关注到你,当好得机会来了你才不会错过。所以请积极参与社区活动。

以招聘毫无经验,技能,尤其以学生为主的公司,我认为Uncle Bob的文章用最浅显的例子把道理说的很明白了:好软件不便宜。如果公司是以外包和客户项目为主,那么寻求最廉价的劳动力本质没错,可是综合计算成本,尤其是以智力作为劳动生产资料的软件开发行业,一个没有经验技能的人能产生多少价值,刨去必须支付得哪怕相当低廉的工资,还有多少利润剩余?我不否认学生中有出类拔萃的顶尖人才,也无意冒犯在校读书或者刚刚毕业的年轻人,学生是一个很特殊得群体,他们还没有定性,对发展,对机会得诉求更高,却对未知得将来充满恐惧,请不要利用学生的这种心态,这样得心态无法长期持续为公司创造价值。软件从业门槛是有的,而且软件行业也是商业,也要从商业角度考虑问题。(其实很想说的在透一点,招聘中最好不要涉及对中国的开源环境的点评,像中日软件社区对比以及差距这种敏感话题,也最好避免讨论,只要涉及到我都不会参与其中,对社区发展无益。)

对于没有经验,刚刚进入这个行业得人,尤其是学生朋友,其实我不想说教,也轮不到我。我只想说,一定不要灰心丧气,每个人都是从0经验入行这么过来的,开始的时候都茫然不知所措,找不到方向。关键是你是能看清楚目标,是不是每天都在进步,是否真的想好了要投身这IT行业并打算长期坚持,如果仅仅想要赚钱,建议趁早赶快转行吧,作程序员不能保证你赚大钱。如果你喜欢技术,喜欢钻研,只要你每天作的都是靠谱的事情,成为Class B级别,迈入Class A级别只是一个时间问题。