[ 前不久与一个朋友通过信件讨论技术发展的趋势,其中提到我对于.NET发展的一些看法,节选部分发表。由于是私人信件,语言偏激错误之处在所难免,且仅代表我个人观点。]
我一直认为,.NET是目前设计的最漂亮的基础软件平台,这个平台从设计之初,就对与一些长期困扰软件开发者的老问题从根本上进行了重新考虑,并且给出了非常好的解决方案。比如像Assembly的概念,像AppDomain的概念,对于安全问题的解决方案,确实是考虑得非常周到。.NET刚出来的时候,像Jeffrey Richter,Jeff Prosise等老牌微软技术专家,都在兴奋地高呼看到了软件开发的未来,这种呼声恐怕也不能完全看成是替微软在摇旗鼓吹。事实上,.NET本身的优越性不仅仅征服了微软阵营,也征服了一部分开源技术专家。GNU组织就启动了一个项目来模仿.NET,这应该是对于.NET技术优越性的最佳注脚。
然而几年下来,.NET的发展符合微软的预期吗?符合曾经对微软迷信得如痴如醉的fans们的预期吗?恐怕不是这样的吧。
.NET技术是出色的,但是执行上大大小小失误的地方有很多。从大的方面来讲,像.NET这样面向Internet的技术体系,本质上必须跨平台。只有跨平台,才能覆盖网络上的各个节点,使本来是异质的网络同质化,使.NET成为Internet的API,如果能达成这个目标,则.NET就千秋万代了。但微软并没有这样做。在将.NET扩展到Linux、FreeBSD等其他Internet主流平台上的过程中,微软的表现始终是犹犹豫豫,模模糊糊,非常暧昧。为什么这样明显具有重大战略意义的步子却总迈不开?最简单的猜测是,微软担心这样做会客观上鼓励人们使用Linux/FreeBSD等操作系统,从而间接削弱Windows,直接打击微软的主要利润来源。另外,.NET本身还处于快速变迁中,战线拉得太长也会带来技术体系维护上的难题。今天的微软已经是一个大公司,各部门各产品线之间的利益关系交错复杂,即使是明显正确的决策也要在官僚主义的台球桌上撞个七荤八素才能落袋,何况像.NET跨平台这样重大的战略性决策。总之,直到现在,我们仍然只能在Windows上使用.NET(不要跟我较真提什么Mono)。这样就把一个本来能够成为覆盖Internet的未来软件环境变成了Windows本身的一个API升级版,战略意义折损大半。回想一下2000-2002年间.NET的那些初期宣传,什么XML,Web Services,什么.NET My Services,多么激进的面向Internet的计划!有人说当时微软对技术发展趋势判断失误,这是胡说。哪里有失误?XML难道不是已经成为网络数据描述的标准了吗?Web Services难道不是为SOA奠定了基础吗?.NET My Services难道不正是今天Google梦寐以求想做的事情吗?哪里有错?只不过自己不坚定,见势不妙就打退堂鼓而已!
即使从Windows API升级版的角度看.NET的执行与推广,失误仍然很大。微软在向.NET转移的过程中,对于如何处理好上一代技术(基于C/C++/COM)与.NET过渡的问题上表现得很不成熟。几个月内过火的宣传排山倒海,把对手们吓得心惊肉跳,把fans们搞得心驰神迷,把自己也灌得晕晕乎乎,可以说是乱了敌人也乱了自己。什么可以马上转?什么要有中长期的转型计划?什么坚决保持稳定?上上下下发生了严重的思想混乱。结果在技术平台过渡这样重大的战略步骤中出现强行军、大跃进的左倾机会主义行为。可以肯定地说,Windows Vista的严重跳票,与激进的技术转型有直接的关系。回顾历史,想想微软从DOS过渡到Windows时代的战战兢兢,周全稳妥,令人不仅唏嘘,同是一家公司,前后差别咋就这么大呢?
让我们再退一步,看看整天跟我们打交道的这几个.NET编程语言好了。微软在微观层面上最大的失误就是对VB.NET语言