瑞雪年

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: 订阅 订阅 :: 管理 ::

C# vs. Java:相反的思维方式

作者:Malcolm Davis   发表于:September 12, 2004

我最近受邀对 C#/.NET 和 Java/J2EE 做一个对比。一开始,我比较了它们的功能特性、产品、技术,然后我发现 C# 和 Java 的战场并不在这些表面特征方面,而是思维方式层面的竞争。

坐在办公电脑前,开发者脑袋中按两种相反的思维方式看问题:

1.接受桌面上已有的工具并以此为标准。
2.经常的搜索能够提高工作效率的机会。

接受主义与探寻主义是两个社区的主要思维方式差异。什么是对开发者有益的,接受主义者放弃了对工具的控制,接受经理和卖主的选择。探寻主义者搜索、寻找正好对他们工作有用的工具。两种思维方式都有其正面因素和反面因素。

工具的探寻(包括 IDE,组件,工具等)是正常的、预想的、首选的行为。作为开发者,应该寻找适当的途径,比如新的程序、自动生成重复的代码以及组件重用等途径,提高工作效率。可是,这对于一个 IT 公司来说,可能是一个不好的兆头。很多的 IT 公司限制随意安装新的软件,很多公司限制对外部网站访问,有的还限制对新闻组和 blog 站点的访问。(当然,很难想象有些 IT 公司甚至不允许访问 weblogs.java.net。)这些 IT 公司有很多适当的理由,比如对病毒、木马软件传播的担忧,以及由于缺少许可证而导致的法律问题,很多程序员并不清楚也并不关心引进新软件可能带来的这些后果。

四年前,我向一家 IT 公司引进了 Ant,Tomcat 和 JUnit,这些工具简化并加快了 web 编程、测试以及制造的过程,极大的提高了公司的生产效率。现在几乎每一个 Java 开发者都已经掌握了这些技术。

NAnt 和 NUnit 是仅有的一些开源的、对 Java 工具集的 .NET 移植。然而,Microsoft 并不是采纳这些已有方案、加以改进、并将它们集成到生产线中,而是自己重新创建了类似的产品 Visual Studio Team System。停下来想象一下,会不会有哪家 Java IDE 会声称“我们将不会支持 JUnit 或者 Ant,我们将推出我们自己的产品。”这简直是不可想象的!你现在知道 Java 和 .NET 之间的思维差异了吧:一个采纳社区已有的成熟工具,另一个则重新创造一套集成的方案。因为商业 IT 公司偏爱集成的解决方案,Microsoft Team System 给人感觉不错。可是,Team System 只是一个落后时代大约 5 年的产品。

商业世界的人们已经开始使用 Jakarta 项目上发布的 Ant 和 Tomcat。思维方式凸现了商业运作和 IT 开发的主要差异。如果商业软件能够遵守和 IT 开发相同的规则,它们将压缩竞争对手的空间,同时失去他们最好的开发人员。

由于 IT 公司需要以应用程序提供商(Application Service Provider, ASP)的等形式采用外部资源,Java 以及 Open Source 将成为 IT 的主流。Microsoft 的做法最终会伤害他们。ASP 的商业模式,将带领我们进入一个商业软件开发的新时代。Industrial strength development techniques, cutting edge technology, 以及经常性的探寻提高生产效率的机会,将成为标准,我们将看到“小鱼吃大鱼”的一幕,我们将看到 Java 吃掉 .NET 的午餐。

大家都看到了 Malcolm Davis 刚刚发表的那篇“C# vs. Java:相反的思维方式”了吧?你也注意到:sourceforge 上 Lucene.NET 的主持者关闭了项目,带着他们的玩具回家去了吧?我接着 Malcolm 的话题,说说这两件事之间的关系。

大体而言,.NET 社区的参与者总是在谈论 Microsoft 推出的最新的、最强大的东西:MapPoint Location Server,SQL Server,Longhorn,ASP.NET 2.0,Visual Studio,所有来自雷德蒙(Redmond,微软总部所在地)的产品。相反的,Java 社区的程序员在那里谈论 JBoss,Hibernate,Struts,Eclipse,这些东西没有一个来自硅谷。

Malcom 的文章说,.NET 开发者接受 Microsoft 提供的工具和服务,我想这在很大程度上是对的。.NET 开发者很少花时间,开发持续层方案(persistence layers),web 应用程序框架(web application frameworks)或者缓存解决方案(caching solutions),因为 Microsoft 已经为这些问题提供了 Microsoft 解决方案。但是仅仅是因为 Microsoft 提供了这些工具吗?那为什么 JSF,JDO,NetBeans 不能成为 Java 技术 Blog 站点的主流声音呢?拿 ASP.NET 和 JSF 作一个细致的比较,它们并没有太多的不同,但 ASP.NET 和 Visual Studio 一起被广泛应用,而 JSF 却很少人用并且饱受嘲弄。我认为 Malcom 是对的,的确是思维方式的差异早就了这一切。

回过头来看看 Lucene.NET 的那群人吧:他们为什么关闭了开源的项目,他们为什么不再继续为这个很优秀的想法贡献他们的时间和精力呢?或许 .NET 社区对他们工作的反响,让他们无法继续维持下去了吧!使用 google 在 weblogs.asp.net 上搜索“lucene”只得到了 17 项结果,而在 jroller.com 得到了 2570 项结果。Lucene 已经存在很长时间了,但 Lucene.NET 的那群人们把东西包起来另起门户,其中一个原因可能就是:几乎没有人关注他们的工作:大家都在忙着研究 SQL Server 的全文检索,这才是 Microsoft 提供的解决方案(当然,需要为每个处理器花费成千的美元购买许可)。在 Java 世界,Lucene,Struts,Tomcat 之所以繁荣,也是因为为一个大的开源项目工作,给开发者带来了足够的威望。而当你投身于一个开源项目,却很少人注意时,沮丧的你也许也要寻找另外的动力。在 Lucene.NET 这个事例中,money 是他们的动力,所以他们关闭了项目,转而贩卖他们的个人版本和商业版本。他们或许能得到双倍的美元吧,但我打赌一年以内,不会有多少人谈论 seachblackbox.com 的。

那么我的观点是什么呢?是说 .NET 开发者很贪婪,不关心社区吗?不是这样的。我认为,这两个社区有不同的司机:.NET 开发者盯着 Microsoft,关心 Microsoft 提供的解决方案,如果他们在车窗外看到了好东西并拿来使用,Microsoft 可能会最终进入这个领域,并发布产品或者提出解决方案,这样,以前的工作就完全被否定了。Microsoft 是 .NET 社区的司机。Java 开发者们看了看 Sun 推出的产品和语言规范,扭头去开发他们自己的工具、框架、应用程序。Sun 推出的东西,Java 社区的开发者只有他们确实喜欢才会去使用。Struts 的门庭若市,与 JSF 的门庭冷落,印证了这一点。在 Java 社区,开发者自己是司机。

 

posted on 2004-10-28 08:37  瑞雪年  阅读(517)  评论(0编辑  收藏  举报