考虑如果需要学一种网络中的应用性的编程环境,选择Java还是.Net?

对于分布式系统而言,一种通用的编程环境需要面对上下两层variety:下层操作系统、乃至机器硬件的多样性和上层应用需求、甚至编程语言的多样性。Java提供了上层编程语言的统一——Java的Applet和Servlet广泛应用于网络编程,而对于下层,sun用虚拟机的方式(JVM) 屏蔽了底层环境差异。也就是说,Java把variety的复杂性通通交给了JVM来解决,并作为自己的不开放的专利。.Net则允许编程语言的差异,但对下层则限制在自己的操作系统上,它把复杂性归结到.Net框架中,即生成托管代码的编译系统中,这也是Microsoft的专利。相比之下,sun的做法难度较大,目标远大,机器的复杂性远远大于高级语言编译器的复杂性,但Microsoft的做法更务实,因为理论上,连Java代码本身也是可以被它托管的。

另一方面,虚拟机技术并不是到sun公司才有的,执行效率一直是个难题,为了扩大Java的影响力,sun跟开源社区越走越近,正在逐步公开部分原专利代码,希望“从集市包围教堂”。但是核心技术的提高恐怕不是社区力所能及的,分心于开源的sun是否有足够精力来使JVM上代码的执行效率有大的提高让人怀疑,用虚拟机来一统程序员“所看到的的底层环境”怕是还有很远。Microsoft的算盘总是以它的垄断桌面操作系统为中心的,实际上是受Windows牵制,不可能有革命性做法。同时,Microsoft现有的庞大人才实力还是会在这种牵制下迸发出很多灵感,而别人常常只能亦步亦趋。猜测最后的一种趋同是:在托管代码编译层以下,嫁接虚拟机技术,实现对下层差异的统一。

离开公司本身说,Java或者.Net 开发环境的学习环境相比,Java更为复杂。Java在企业级开发活力四射,新概念层出不穷。而.Net 有Microsoft的技术专家在前面领路,秩序井然,似乎学习难度要小一些。

这么看来,如果是为了“学会一种最低开销和折旧的语言来把脑海中的想法转化为现实可见的计算机系统的一部分”,那么还是学习.Net 吧!