重新发明和共同创造

推动软件进步的到底是什么?

有人说,软件大牛们都是懒人,因为懒而发明新的事物,以便让大家懒得有利,懒得有成果。还有人说是热情,激情什么的?听起来是不是太正面了!

其实,还有一种可能,也许更加令人信服的可能——关键在于人心的差异——不管是什么东西,只要不是自己做的,就总是能够挑出毛病,看到不喜欢——程序员总是希望创造新的,而不是维护旧的。

windows 革命简史“一文就是这样的一篇文章。无论是DDE,OLE,COM,Atl,ActiveX的任何一项技术,之所以会发生,其原因都在于“这个东西有一个致命的弱点:它(它们)不是我们做的…”,相比那些堂而皇之的理由,“不是我们做的”似乎更加直指人性,让人们​更加容易相信。所谓的文过饰非,我想说的就是这一个意思吧。

这样的说法也可以解释很多现象。比如历史悠久,兼容性非常好的C语言(至今还在语言兵器谱上前一二位徘徊),C的最大优点是历史遗产丰厚,支持者众多,很多语言,数据库,工具都支持C语言 。而它的最大缺点则是:很基本的元素都没有,比如string类型,boolean类型,更不要说丰富内置的数据结构了;模型太过简单,当遇到稍微复杂的问题时,必须通过拼凑的技术来完成。以模块技术为例,include一个文件,为了避免重复包含,需要通过#ifndef xxx #define xx i来处理。在比如编译lib文件,需要用#pragma comment lib 之类的非常晦涩的宏——这些都应该是语言本身支持的啊。

在60年代到90年代,语言数量达到了几千种,大量的牛们为了成为某某语言之父而殚精竭虑,却没有考虑到如果大家的力量集中于C语言或者几种语言上对整个it行业更加有利。比如go语言在2009年赢得了很多人的关注,可是go和c并不兼容!zimbu也是。依我看,很多新语言的发明者尽管有冠冕堂皇的解决某个问题的理由,其实潜在的规则依然还是:它们(其他的语言)不是我做的。大量的语言的存在照成的问题比解决的问题更多——没有那个行业如同软件行业那样,让巴别塔大行其道,大量的相同业务的系统用不同的语言,利用不同的api重复的发明出来。

我还记得爱因斯坦和波尔为了量子理论整整辩论了12年,爱因斯坦的头脑,如果真正沉下心来研究量子理论,不会花费那么长的时间,不得不让人怀疑,他是不是也有同样的潜台词。大贤大哲都是如此,我们又会如何呢。很多领域都是如此,我的一个朋友,也是前同事,曾经给我说到另外一个前同事对我的看法:“以前他非常不喜欢你,觉得你管的太多,而当他自己也在带几个人的时候,他觉得管人真的很麻烦,然后回顾到我们一起的时候,他说你真的很厉害,很有方法”。管理方面也同样在不但的重演着这一切。

​依我看,改变这一切是很难的,而利用这一点就会轻松很多。难道不正是人类的丰富多彩的差异让社会得以进步吗?一向以来,程序员之间的差异是缺乏沟通的,如果程序员看到不爽的代码,往往并不好意思直接提给作者本人,但是在背后却会发表意见:“什么破玩意,如此难用,不如自己做一个”。通过正式的代码评审,可以表现出这样的差别,从而在沟通中得到双赢的局面。从心理学角度来看,评审的好处是:

1. 看到差别,会自然的引起大家的思考,促进沟通

2. 能够参与产品的设计,提出自己的看法和沟通,对不满者也是一个心理的释放

扫描二维码关注公众号,回复: 1177404 查看本文章

3. 坦诚沟通的气氛,是做成真正优秀的产品的关键

我想这就是代码评审的最大意义了。

另外一个需要考虑的是,代码评审并不能在非常大的范围内完成,也很难在互相竞争的公司之间进行。因此代码评审依然是很有局限的。商业化引来的全球的开放,也必然带来竞争公司之间的重复发明。

即使在并无太多商业化的开源社区,做到这一点也并不容易。还好linux给了我们一个很好的成功典范。这说明code review和create common也是可行的。

所以没有什么万灵药,并且推动软件进步的可能依然是“这不是我们做的”。让重复发明来的更猛烈吧,让create common也来的更猛烈吧。

猜你喜欢

转载自1000copy.iteye.com/blog/778048