代码改变世界

谈谈微软技术,以及对待技术应有的态度

2010-03-04 23:20 Jeffrey Zhao 阅读(...) 评论(...) 编辑 收藏

昨晚在家上网,看看微软研究院TechFest 2010的消息,逛逛Channel 9,瞅瞅DevLabs里的项目,以及F#与Reactive Framework之类东西。然而,我一边对那些有趣而奇妙的技术感叹不已,同时却又产生出一种忿忿之情。为什么?因为在国内的技术圈子里,经常有一种在我看来莫名奇妙的鄙视微软技术的风气。这样的风气在国内的推特圈里也非常明显,基本上只有我一个人对微软的技术抱有好感,并“勇于”和大量意见向左的人争辩。忿忿之余,我便在推特上不断表达我对这种风气的抱怨及否定,在这个过程中也基本表达了我在这方面的大部分看法,在这里也进行一番总结总结吧。同时,我也想对微软社区的许多弟兄讲一些话。

现在有这么一个群体叫做“Microsoft Hater”,他们的表现出对微软十足的敌视,在他们眼中,微软的一切都是恶劣的,凡是微软的就要抵制,微软的任何产品任何技术都不值一提,因为微软本身就是一家没有技术的小公司,只是靠商业手段而成功的小公司。在他们眼里,但事实真是如此吗?是的,我不否认微软的成功有相当部分是商业上的运作,毕竟像Sun公司那样孕育了无数优秀技术的公司最后还是走上落没之路。但是我在这里还是想告诉那些Microsoft Hater们,在许多方面微软的技术绝对是值得钦佩的。

我有时候很不了解一些人的逻辑,他们经常说微软技术差,没有创新。但是,微软那么多科学家搞出来的LINQ,Reactive Framework,Parallel Library,F#等等,哪个不是创新,哪个不是开发方式上的突破呢?是的,在一定程度上我同意微软在商业方面常常是个后来者,它在产品上的创新似乎并不突出。但是,我相信所有人都能够明白一个道理:产品和技术是两码事,技术优秀并不是产品优秀的充分条件,反之一个创新产品背后的技术也可能已经被运用了无数多次。如果从技术角度来说,微软的创新绝对不少。但问题就是,您关注了吗?

在争辩的过程中,我时常发现对方其实并不重视微软技术——有时他们也会表示根本不在乎这些。诚然,不关注微软技术,对于一个技术人员来说也是十分正常的事情。但是,如果在不关注,不了解的同时,却还自信满满地坚持微软没有优秀技术,这便让我难以接受了。再者,由于多年不关注微软的技术发展,有些弟兄也会拿某某领域在如今的发展与微软在5年甚至更早前的情况进行比较,以此证明微软技术有多么糟糕。但是,可能在另一场争论中,他们又会认为微软技术发展得太快——那么到底什么才是真实的情况呢?

事实上,我们可以发现,在各种技术大会上都能看到微软的身影,微软更是世界知名的科研“大户”,这正说明业界顶级技术领域也是承认微软技术实力的。在业界有许多著名的科学家,他们的贡献非常令人瞩目。但是在某些人眼里,他们一旦到了微软,接下来的工作也就没有价值了。几年前在学校BBS与人吵架时,我还听说过这样的说法:那些人不能算是微软的,他们都是微软从别处挖来的,所以微软还是没有技术。但是他们却没有想过,他们所爱戴的谷歌公司,却也特别喜欢从微软挖人。甚至可以这么说,在谷歌里有几个人不是挖来的呢?好吧,俗话说“爱她就要包容她的一切”,我相信Microsoft Hater们一定都是好男友,好丈夫。

不过也有人会这么说:微软研究院和微软的技术水平并没有关系。微软研究院只能看作是微软对IT业所建立的“慈善机构”,或是微软开办的大学,与微软“自身”的技术水平关系并不大。但事实上,微软的技术大都是由研究院发起或指导的,譬如我之前提到的每个技术都是这样,无一例外。微软不是傻子,它为什么要出钱出力不求回报,它最强的地方不就是商业手段吗?如果您关注一些微软相关的资料,例如Channel 9或PDC大会,就会发现讲解我们那些常用技术的,许多都是研究院的科学家。例如,F#的设计者之一Don Syme也是Haskell语言的主要设计者(经人指出是我搞错了,Haskel语言的设计者是微软研究院另一名科学家Simon Peyton-Jones),而站在.NET平台GC背后的Patrick Dussud在加入微软之前,也一直在LISP运行时等领域耕耘。微软研究院的技术实力并不是空中楼阁,其中许多都是实实在在体现在微软的技术中。

我承认,微软的很多东西都有问题,因此我也从来不为Vista辩护。我也喜欢开源,支持开源,从来不会在任何场合支持微软的封闭策略。总而言之,我从来没有昧着良心去为微软做广告,写软文。我甚至也对国内微软MVP有太多名不符实的情况提出过质疑。既然微软有那么多不好的地方,但我为什么喜欢微软技术?因为我是个纯粹的技术人员,我了解微软有着多么优秀的技术,如果放弃这些我一定会心有不甘。同理,我也会去接触微软平台之外的技术以及各种优秀的东西。例如,在推上听到很多人说Mac是多么多么好,即便某些地方略显偏激,但的确也表达了他们的真实想法和相当部分的真实情况。于是,我为了更深一步理解他们的说法,也找个机会加入了水果党。然后,即便用得不爽也努力地unlearn在Windows下的各种习惯,不以此认为是Mac的缺点。学习新东西,我可以理解这种情况。

我现在感到不爽的原因,实在是觉得微软那么多好技术,却没个讨论的地方,这算是什么状况!在我看来,仇视微软不是个正确的技术氛围,推上那么多nb的技术高手,舆论氛围为什么却是一边倒?我“发飙”也不是因为微软被鄙视了,而是我认为太多技术人员鄙视微软的手段实在不够技术化。Linus也曾经说过:仇视微软是一种病(I think the Microsoft hatred is a disease)。在我看来,很多时候我们的技术氛围的确有些病态。

我还是想说那个经典到有些老掉牙的案例。在很多年前,业界普遍存在的观念,便是“.NET平台不适合实现动态语言”,这是因为之前ActiveState公司实现Python后发现性能太差。但是,Jython的创建者Jim Hugunin认为,既然JVM上实现Python语言的效果不差,为什么同样在原理类似的CLR平台上却有不一样的结论呢?于是他便开始关注.NET平台,关注CLR,并且尝试实现一个Python原型,希望找出.NET平台不适合动态语言的原因。但是最后的结果令人惊讶,因为在标准的pystone评测中,Python在CLR上的性能表现甚至比C语言的Python实现有很大领先(这个故事的更多情况,请参考Rednaxelafx的文章)。

后来,Jim加入了微软的CLR小组,为了得到更好的IronPython实现,也努力让CLR成为一个更好的运行时。因为IronPython的突破,后来又有了IronRuby,最后又总结出动态语言实现的通用基础类库DLR。而在我看来Jim最了不起的地方在于,他努力使IronPython,IronRuby和DLR都保持完整的开源(使用通过OSI认证的MS-PL开源协议)。我们现在也可以发现,微软后来的各种框架/类库,包括ASP.NET MVC,F#等等都是MS-PL开源的,说不定其中也有受到Jim的影响在里面。

好,那么我们来做个假设。如果Jim当年和许多Microsoft Hater一样对微软抱有敌视态度——而且理由很充分:“已经有人“证实”了.NET是个垃圾平台”——那么,世界上就不会有IronPython,IronRuby或是DLR。再假如,如果Jim在加入了微软之后,没有坚持自己的态度,让IronPython等项目就此闭源,那么我们也无法如此轻易地学习到这些美妙的技术。Jim对于技术所保持的这种纯粹,才是真正推动技术进步的手段。与此相比,靠耍嘴皮子来敌视微软算个毛本事?

其实我也能够部分理解某些人的看法。例如昨天有朋友这样说到:

回顾下微软的商战史,对Linux的打压,企图收购WPS时的高傲姿态之后,就一点不会觉得微软冤枉。微软技术牛谁都清楚,但恐怕对这里的人对微软进行口碑反营销够不成什么影响。这个过程理性是次要的,掀起一阵弃用微软的潮流才是目的。

微软的东西在有些层面上确实高效方便,甚至对很多企业和个人扮演救世主的角色。但当你要产业链中向上跻身的时候,早晚有一天微软会变成一个恶魔,四处围剿你的产品。因此作为任何一个有远见的从业者,都是无法坦然的接受这种IT财阀的存在的。

而我的看法依然没变:我没有对微软进行口碑营销,我只是在谈技术,我只是不想技术被其他东西淹没了。我也没有打算让任何人喜欢微软的商业文化,我只想谈论技术——作为技术人员,为什么要让商业来盖过技术?借鉴技术,交流技术才能发展技术。我现在只是希望不喜欢微软商业的人,也能够正确对待微软的技术。即便是自由教主RMS,他也仅仅是在商业或是软件版权问题方面向微软发难,而从没有像许多Hater那样认为“微软的技术都不值一提”。

此外,技术也是相通的,我相信微软今天倒了,下个星期我就能去开发Java,开发Rails,开发Django。我有自信可以比无数不了解HTTP协议,不知道Web开发规律的人要厉害。同样,我相信让某些牛人来搞.NET,不出一个月肯定能比8成博客园的弟兄要强大许多。为什么谷歌当年要从微软大量挖人?是因为谷歌在使用微软的技术,还是微软在使用谷歌的技术?那些熟悉微软技术的牛人们,难道不也是立即转向某些人眼中“截然不同”的领域吗?我认为其中的道理已经再清楚不过了。

我写了这么多,其实也并非只在对Microsoft Hater们表态。事实上,我在推特上遇到的技术达人们并非我之前描述的那么夸张。他们虽然不喜欢微软,但是大都还是理性的,和他们的辩论过程中我也了解到很多其他技术的优秀之处,对我帮助很大。接下来,我就想谈一下我对微软技术社区的一些不满之处了。

博客园是国内微软技术的标杆,这点毋庸置疑,但从中我们可以观察到另外一些倾向。一是盲目自卑,二是盲目自信。两者其实是统一的:前者不了解微软技术(或只了解一小个侧面),认为微软技术不过尔尔,没有竞争力,而后者却认为微软实力天下无敌,或是每样技术都是完美无缺。这些也都是闭塞的表现。微软不是一个整体,它是由许多个人和团队组成的,这些团队的实力和成果各有高低,几乎任何一概而论的判断都是不妥当的。

我认为,作为一个优秀的技术人员,一定要放开视野,吸收各种技术的优秀之处,取长补短,这样才能有所发展。喜欢一门技术不要紧,对一门技术有倾向性也不要紧,这才构成了多元化的世界。甚至,我认为这也是技术发展的要素之一,因为只有喜欢一门技术才想要真正去发展这门技术。从某个角度来说,盲目敌视外部世界往往也不是真粉丝们的表现,因为这样的人是很难对技术发展做出贡献的。

闭塞还导致了另一种现象:某些朋友先是对微软技术抱有盲目乐观的态度,但是忽然有一天,在发现微软技术也有其局限性(这难道不是必然的吗?)之后大失所望,于是转向另一个平台再开始鄙视微软技术。这就好比一个极端的理想主义者,在思想收到冲击之后变成一个极端的虚无主义者。无论走哪种极端都是不对的,而且,如果从一开始就保持良好的视野和心态,便可以各取所长,同时享受多个平台的技术优势。

至少在目前看来,至少在国内,我认为微软平台的技术人员还是太闭塞了,比微软外的技术人员要封闭许多。举个实例,我的真实体会,为什么作为一个微软平台的技术人员,在推特上我总是很少见到博客园的各位呢?

弟兄们赶快打开视野吧,就从上推特开始吧,我在那里等着你们