微软已经失去了向下兼容的信仰
在微软内部,改革派的杂志帮已经赢得了战争。
他们的第一个战利品便是让VB.Net不向下与VB 6.0兼容。这是我记忆中的第一个不向下兼容的升级产品,我升级到了VB.Net之后,我原有的VB 6.0的代码无法完美的导入到新产品当中。这是微软第一次蔑视旧产品的用户群。
微软之外,天似乎还是没有塌下来。VB6的开发者对此虽然竭力反对,但是他们慢慢的便消失了。因为,他们大多数是企业内部的开发者,并且他们已经转移到Web开发上了。长远的伤害被暂时隐藏了。
经过VB的胜利之后,杂志帮已经掌握了主导权。突然之间,技术变革成了可以可以接受的事情了。IIS 6.0新的线程模型对旧应用程序说了拜拜。当我发现Windows Server 2003的用户使用FogBugz时会出现问题的时候时很震惊的。还有,.Net 1.1也并不完全兼容1.0。现在,一切都真相大白了。微软操作系统的开发团队受杂志帮影响,他们不再往旧的Windows API做修补增强,他们选择了用新的玩意将其完全替代。Win32的平台已经是历史了,开发者现在需要考虑的是WinFX平台了-这是一个全新的 Windows API。所有的事情都变了,现在都是基于可托管代码的.Net、XAML、Avalon。是的,这些东西比Win32的强大了很多,我承认这点。但是,这并不是一个升级,而是一场抛弃过去的革命。
第三方的开发者,他们早就厌倦了微软 Windows平台上复杂的开发过程,并且逐渐转移到Web上面来。在早期.com经济泡沫时创办雅虎电子商店的Paul Graham曾精辟的说:“现在,公司都应该考虑开发基于Web的软件,因为开发桌面应用软件已经变得很没趣了。因为你的桌面应用程序必须是基于微软提供的API,并且与他们充满臭虫的操作系统打交道。而且,如果你写出了些什么有用的东西的话,你会发现你只不过是在给微软做市场调查罢了。”
微软已经变得太大了,有太多的开发人员,并且他们已经习惯于技术升级带来的好处了。他们突然之间会认为把一切推倒重来也并不是一件什么大不了的事情。开发是能够重来的。如果旧的微软,我是说拥有陈雷帮的微软,也在提供类似Avalon之类的东西的话,这个“Avalon”会是一系列可以在旧 Windows 平台上运行的DLL文件,并且应用程序可以将它们捆绑在一起。从技术上来说,微软是可以实现这些的。但是,微软必须提供一个迫使你们升级到长角(Longhorn)的理由。并且,微软正尝试的是一场影响深远的技术革命,跟Windows取代DOS类似的技术革命。问题是,长角相对于 Windows XP来说,并没有太大的优势;相比Windows于DOS的优势小。长角似乎没有办法引诱人们去买新的电脑并安装它,就好像Windows说服人们购买新电脑一样。好吧,也许长角能够说服人们,微软是铁定需要做到这点的。但是,到目前为止,这一切看起来都不是那么有说服力。微软已经赌错了太多东西了。比方说,WinFS。从微软的宣传上看,WinFS是通过把文件系统变得跟关系数据库一样来实现文件搜索的,他们忽略是要通过实现搜索来实现搜索这个道理。不要让我给我硬盘上的所有文件输入关键词,然后让我通过查询语言搜索他们。拜托了,我需要的只是在我输入字符串的时候,可以快速的搜索我那天杀的硬盘,这个需要的只是1973年便发明的全文索引以及其他一些技术罢了。
一统天下的运行时
.Net降临了。这是一个浩大的工程;一个企图彻底根除所有混乱局面的工程。它自然有内存管理。它不仅有Visual Basic,还有一门新的语言。这语言继承了Visual Basic的精神,但却有着C风格的语法-大括号跟引号。最妙的是这门糅合了VB跟C的新语言叫C#,也就是说你再也不用跟别人说你是一个“Basic” 基本程序员了。那些恐怖的拖泥带水的Window函数、钩子、向后兼容的Bug还有无从解释的字符串返回语法都被扫除了;取而代之的是一个崭新只有一种字符串并面向对象的接口。一统天下的运行时。这很美,在技术得赞下微软。.Net是一个超赞的程序开发环境,它可以帮你管理内存,拥有丰富、完整并统一的操作系统接口;而且还有丰富、超级完整还很优雅供基本操作的对象库。
但是,程序员不用.Net做太多开发。
当然,也有用.Net的人。
但,使用一个全新彻底革新的程序开发环境来统一VB跟Windows API开发并存造成的混乱是愚蠢的。现在,我们不是有一种或者是两种开发语言,而是有三种开发语言(还是四种?)!就跟对两个在吵架的小孩大喊:“你们都别吵了!”一样愚蠢。在电视里面,这样子大喊也许会有效;但在现实生活中这样搞法的必然结果就是你跟两个小孩三个人一起吵得更加大声。
(顺便说一下,那些有关注神秘但被政治所改变的网志聚合格式世界的朋友,你们可以发现同样的事情也发生了。RSS被分裂成为了几个版本-不准确的规则跟一堆政治性质的斗争。而企图解决这一切的做法竟然是定义一个新的叫ATOM的聚合格式。结果便是不同版本的RSS现在多了一个ATOM来搅局-不准确的规则跟一堆政治性质的斗争。当你企图引入第三方来解决对立的两方时,结果便是三足鼎立。你什么也没有统一而且你也没有解决任何事情。)
所以,.Net现在并没有统一并简化世界,我们现在反倒陷入了更大的混乱。所有的人都在犹豫他们的开发策略,究竟有没有足够能力把现有程序转到.Net上呢?
无论微软的市场信息是多么的统一(“用.Net吧!相信我们!”),它的大部分用户还是在使用C,C++,VB 6.0跟传统的ASP做开发。更不用说其它公司提供的开发工具了。然后,仅剩的使用.Net做开发的公司做的是ASP.Net!ASP.Net需要跑在 Windows服务器上,但,它需要一个Windows做客户端。这就是我谈到Web时要强调的重点。
哦,等一下,还有其它的东西!
现在微软有了太多的开发人员搞得它重新发明一次整套Windows API还觉得不够爽,它竟然重新发明了两次!在去年(应该是03年,Wuvist注。)的PDC上,微软宣布了它们的下一代操作系统,代号长角。长角不仅有上述的东西,还有一套全新的用户界面API,代号Avalon。Avalon再次把一起推倒从来以利用现在电脑高速的显卡跟实时三维渲染的优势。所以,如果你现在正在开发Windows界面程序,并且使用了微软现在“官方”宣称的最先进的开发环境:WinForms;那么两年后你得重新开始以支持长角跟 Avalon。这解释了为什么WinForms在诞生之时便死翘翘了。但愿你还没有在WinForms上投入太多。Jon Udell从微软那找到了一个题为:“我如何在Windows Forms与Avalon间做选择?”的幻灯片,并且问了这么个问题。这是个好问题,并且没有人可以很好的回答它。 所以,我们有了Windows API,有VB,现在还有了带若干种不同语言供选择的.Net;但,我们不能在这些环境下浸淫太久。因为,微软正在开发Avalon呢!注意到没? Avalon可只能在微软最新的操作系统上跑,但是,它得等很久很久以后才能开跑。
对我个人来说,我没有时间很深入的学习.Net,并且,我们也没有把Fog Creek的两个应用程序从传统的ASP跟VB 6.0转到.Net上。因为投入做这么件事情对我们没有回馈。一点都没有。在我关心的范围里,它纯粹是一件“开火并动作”的事情:微软会爱死我们停止给 Bug跟踪软件跟CMS开发新的功能,并浪费几个月的时间转移到新的开发环境里。这无法使我的任何一个客户获利,也没法让我多卖一套软件。但这对微软来说很妙,因为微软也有它自己的CMS跟Bug跟踪软件。对微软来说,再也没有比使我为追时髦而浪费时间重新绕着.Net转,并且一两年后在为Avalon浪费一次时间的事情让它感到更的爽了。在我忙着转的时候,它却在给它的软件加新功能,懂了没?
没有一个有日常工作的程序员可以有时间可以去追赶所有从雷德蒙出来的新开发工具。因为,微软有太多该死的员工在研发新的开发工具!
