昨天发了篇帖子,没想到反响那么大。关键是我原来预计会有很多鸡蛋扔上来,结果却不仅如此。其实从那片贴子的回复,可以看到实际上的状况确实如我所说,即,大部分公司都没有能力实施极为优秀的开发模式和设计模式。这种现实无论喜不喜欢,它就是存在,存在即合理。
“双鱼座”看了说感到悲哀,悲哀的是Idior也认同我说的。我想在这里对您解释一下,希望看完之后没有那么悲哀。很明显,我个人绝对不是属于那种随便胡乱整的人,更不可能去推荐甚至推广这样的做法。最近看到一些非常恶心的代码,所以才不吐不快,即是一个佐证。相信Idior也是这样的,而且来这里的人大多数也是希望能够实施各种先进的技术的。从这点讲,大可不必悲哀。然而从现实角度讲,确实就是如我所说的。您有兴趣可以统计一下,中国有多少“计算机系”毕业生,包括一流三流大学大专,挨点边的都算。这些人出来以后大多数都会做写程序的工作,你说说这里面有多少具备实施和理解设设计模式的能力?一流大学的出来不是出国就是被大公司吸纳,剩下的小公司能招到什么样的人呢?你我心里清楚。注意,我说的小公司绝非小到三五人租一个小住宅的那种,除开从IBM到华为到趋势的,都可以认为算是小公司。而且就我所知的,甚至华为中兴里面都有一些写得出“意大利面条式代码”的程序员。现实如此,你我无法期望太高,这才是我想要说的。
现实是一个很沉重的话题,仅凭一个人的力量,仅凭博客源的都是无法撼动的。在我们有力量去改变之前,我们只能够想办法去适应它,否则只会被这巨大的怪石碾死。现实就是无法实施这些高级玩意儿的时候,如果要硬来,结果绝对是自己首先灭亡,而绝不是现实。讲个大家都知道的故事吧,微软。微软说他是一个大抄,没有人不同意吧?微软说他开头几年的东西,其技术多烂多烂,相信也没有人及个人会反对吧?(说不定比尔大叔自己都承认。)回想DOS时代泛滥的病毒,Win3.1整天程序没有响应,Win95无尽的蓝屏……还有那个MFC,什么玩意儿啊!你们说说他的MFC,从设计模式讲,那里看出他的优秀了?但他活了,不但活了还活的很好。为啥?
回头我们看看他的竞争对手,OS/2,Netware,Lotus,Delphi,Netscape在当时哪一个技术上落后了?现在,都死了,没死也快了。我不想争论这里面的原因,但有一点不得不承认:产品的成功失败几乎与技术无关,与质量无关。当我说到这里的时候,自己大脑里也会冒出很多诸如Google的各种东西,技术上不错,而且活的很好。但是仔细想想,会发现它们的成功主要不是因为技术上如何,而是别的原因。比如说:及时完成了客户的需求,从而客户签了合同付了钱;或者以最快的速度迎合了大众的需要。Linux也好,FireFox也好,如果没有解决商业上的问题,最终还是无法战胜微软的Windows和IE。说这个我心里面有点打鼓,因为这些问题太具争议性了,希望大家看得时候不要和我打嘴仗。Linux底下有一个商业生态链,Windows也有。它们之间的竞争,可以认为这是开源阵营和非开源阵营的总体商业实力的比拼。至少从目前看来,开源模式能够产生的商业价值还是无法与非开源的相比,或者说,开源模式的公司更难成活。这就是为什么开源出来这么多年了,仍然无法在商业上打败非开源模式。当然,开源在学术界的贡献是无与伦比的,他贡献了很多的技术,这是为什么他在很多个人、校园、公益团体上能够成活的原因。可以认为,在开源阵营内部,比拼的是技术,但是即使是这样,也没有任何逻辑能够说清楚,为什么这样就能够支撑一家公司或者产品,彻底打败Windows或者IE。
公司生存的根本是需要金钱,就如同生物生存的根本就是要吸收能量一样。任何脱离商业现实的想法都是不可能成功的,这一点毋需置疑。如果明天客户要看产品,你就得要明天之前做出来。明天做不出来你就很可能会被淘汰,这个时候容不得你去用一些需要花费资源(时间、人力、金钱)的技术。这就是为什么会有这么多人抱怨的原因之一,老板想的和技术人员想的不一样。老板之所以为老板,就是因为它能够让公司活。如果完全按照技术人员的想法做,那一定是很危险的一件事情,因为他想的不是如何让公司存活。再打一个比方吧,打仗。为什么过去小米加步枪能够打胜仗呢,为什么能够存活呢?原因很多,但至少有一点,指挥的人想的是怎么打赢,怎么活下来。大清帝国没有活下来,他买了很多在当时绝对一流的枪啊、炮啊、船啊什么的,人家小日本受了大清帝国的刺激,狂买了那么多的高级装备,还是无法与大清帝国的相提并论。最后大清帝国还是翘翘了,被小日本蹂躏了,为啥?原因太多了,但至少有一点可以证明,应用了这些高级东西不代表就能活,它只是手段之一,而不是目的。对于很多公司而言,资源有限,这个时候最优先应用的东西绝对应该指向“存活”这个目标。如果你是大清帝国,一定不会浪费那么多的资源去购买那一堆的装备,有哪些东西又能怎么样?要做的应该是类似小日本那样的改革和教育,这是它们成功的最重要原因。话说回来了,慈禧想的不是如何活,而是她个人的各种欲望而已。就她的目的而言是达到了,但就整个中国的目的是背道而驰的。不少技术人员的想法就是如此,沉浸在自我欲望之中。
剩下的时间,回答以下其他人的问题:
@idior :
关于大公司如何,这个真不好说,肯定要好得多。但是也有一些滥竽充数的,也有一些拥有这些知识,但是因为图方便或者职业道德缺乏,仍然写出烂东西的。其实我看CodeReview也是要防范这样的一种情况。
@kw2007:
没错,如果同时实施3、5个项目……恐怕有这样能力的都是大家伙吧?不在讨论范围之内。嗯,从另外一个角度讲,是否有能力同时实施3、5个项目,就是该公司是否大公司的标准之一。好比超级大国能够同时打赢两场战争。顺便解释一下,我上次说道,“如果同时不定期的进行多个项目,用Branch来避免拆除问题就比较不切实际了”,这里的多个项目是指同一个产品下面,为了一些合作项目而做的二次开发,这跟真正的项目还是两回事。
@Cure:
当然,随着公司的发展,随着你手头资源的增长,这些都是应该慢慢改变的。重构就是解决的方法之一,XP就是为了解决“商业”问题而产生的。
@shenfx:
当病人血糖低得要休克了,首先输葡萄糖还是吃中药?比尔大叔曾说,微软会在18个月内倒闭。比照这个标准,华为会在多少个月内倒闭?比照这个标准,你所在的公司会在多少个月内倒闭?您觉得我拿“几乎要休克”来打比方是否合适?
@亚历山大同志:
NH确实够重了,目前没有时间研究或者实施这些东西。
最后说点无关的吧,最近我收获最大的就是类似这样的东西,比如大老板说:
一句话说不清楚的生意,绝对不是什么大生意。
这些心得我日后要有时间和心情,在另外开篇吧。
@dudu
还是那句话,与技术无关,要觉得质量不高就挪别处。