最近看了自己关心的主题的微软PDC视频,也结合自己的Web 2.0项目做了一些思考。这次PDC最大的一个主题就是Azure OS,所谓的云操作系统。不过微软的服务器要布到中国也不知道要到什么时候,所以也没有深究。我主要关心的是Asp.net和C#的技术走向。
我总结了一下,总的走向就是更加的Web化,比如Webform的Tag的ID可以控制了,MVC将成为主流,C# 4.0更加向动态语言靠,甚至引入了一个dynamic的关键字。这些基本和我的预期相符合。其实都指向一个理念:Web的本质是文档。
Web的本质是文档
以前有网友对我的所谓“文档化”理念提出疑问。因为我一直认为理念和战略思想可能在一开始就决定了成败。感觉有必要探讨一下,或许可以给大家提供一个新的视角。
我尽可能罗列结论,略去推导过程,节省大家的时间。
首先,Web本质是文档,或者说更倾向于文档化。我对文档和应用的区分标准是,文档更倾向于让人理解,应用更倾向于让机器理解。
WEB的三个要素已经产生了,就是3位一体的HTML+CSS+Javascript
这个三角形结构已经愈发成熟愈发稳定愈发强大了。也许第四类要素也显出雏形了,就是语义要素,需要的只是时间吧。
任何试图忽略,取代这三个要素中的任何一个都是一个危险的企图。
(一个最典型的这样的尝试就是asp.net webfrom,居然可以同时屏蔽和封装这三个要素,而asp.net mvc则是一种回归,我对asp.net webform的最新理解是,一个使用Web技术的Windows应用。而Asp.net mvc才是更接近web的本质)。
◆HTML是一种文档。
◆CSS是一种变换,它的最大特点是在它变换HTML的时候不会改变HTML的拓扑结构,或者说是DOM结构。
◆Javascript也是一种变换,它可以改变HTML的拓扑结构,或者是DOM结构
HTML文档的最大特点是自我解释性,这是互联网的特性决定的,因为互联网就是最大程度的交流。如果你开发了一个应用,试图“封装”,或者“替代”HTML,那么可能会在做一件蠢事。因为你的应用没有自我解释性,也许你要配一个详细的文档,教程,或者其它什么东西来解释你的应用,而且还须要用户能正确理解这种说明和解释。这就违背了Web了精神,分享的精神。
那CSS为什么也不能被绕过呢?因为它和HTMl配合的最好,和HTML之间属于松散型耦合,通过长期演化,已经接近完美了。现在甚至发展出了,MicroFomats这样的赋予语义的css标准,或许这是迈向语义网的一个途径呢?who knonws?
Javascript呢?很多.Net程序员不熟悉JS,不是也过得好好的吗?我在想,也许好日子到头了。Javascript的地位将不会被削弱,而可能是大大加强。
CSS的成熟,导致了Div+CSS的开发方式的流行,而由于Firefox和AJax的流行,将近一步加强这3大要素的地位。相信多用用firebug可能对此有更深感受。Jquery的出现更是大大降低了JS开发难度。设想一下这样一个Firebug版本,在你发出一个Ajax请求的时候,你看到了一个Response到达你的浏览器,可以看到一个Json数据结构是如何改变你的DOM,不但可以设置断点,更为神奇的是DOM改变过程居然可逆。在C#程序中,设置一个断点,然后到了这个断点以后倒退着执行,能办到吗?也许要到C# 7.0了。但是,DOM可以,因为它是文档。只要建立快照就可以了。会不会有Transactional DOM出现呢?
HTML是拓扑结构,是第一性,Javasript是一种变换,属于第二性。这和windows时代的所谓应用第一性其实已经是有了本质上的区别。事实上世界上最赚钱的软件是什么,就是Office.它其实就做了一件事情,就是处理文档。
Office软件有好几种,它们之间的关系是什么呢?
◆Word是一维的文档,你可以对一个文档重新分页
◆PPT是二维的文档,每一页都是完整独立的一页,你没有办法重新分页
◆EXCEL是三维的文档,表格是两维,Tab页是第三维
微软又搞了一个OneNote居然是四维的,似乎不是很火。所以要写的让更多的普通人能看懂就用Word,要更有效率传达更多信息,就用EXCEL。
事实上,微软的高手当然都明白这些,只不过,如何将它们的商业模式,平滑的转向Web那是一个非常艰巨的任务。所以微软就有了各种试图将Web应用化(Windows化)的企图。甚至在所有产品前加上Windows 商标(比如Windows Live,难道是恶搞?)。
PDC上展示了基于Silverlight技术的Web Office技术,微软终于对Google Docs做出了反应。
谁会胜出?
谁会最终胜出呢?3年内,我看好微软,3年后就很难说了。也许写一篇存在自己硬盘上的Word文档,会和写一封永远不寄出去的信类似。真的到了Web 平台,那么血统更纯正的google Docs会胜出吧。拭目以待。
所以在对待诸如Siliverlight这样的新技术的时候,站在客户的角度去思考是非常必要的。如果你在期待着微软发布更多siliverlight控件的时候,也许应该想一想,你会不会在和Web背道而驰呢?
当你面对Google Doc这样神奇的应用的时候,是不是能看到其中的内涵和潜力呢?重要的不是那些神奇的JS,重要的是它是一个HTML文档,一个资源,一个URL。它不是更容易向语义网扩展吗?
有的时候感觉,技术的演进和生物的演进非常相似,生物树上最终消失的分支,往往是比较容易的演进,而演进的主线,往往是最困难,最缓慢的,然而最后却成为了演进的主线,并最终胜出。
PDC的两个新亮点
另外提一下PDC看到的两个新东西,特别是第二个,可能是非常重要的。也许是The next big Thing(下一个大事物)。
在Anders的演讲中提到了,C# 4.0以后的一个特性,就是用C#重写C# Compiler,原来是C++写的。然后你就可以在你的程序中调用Complier的API的动态产生执行代码。非常有趣。不过他没有怎么提应用场景。感觉可以用在代码自动生成,和人工智能方面。
另外一个是DHTML之父Scott Isaacs搞得一个 Web SandBox,简单而言,就是用JS写的一个虚拟机,可以运行在各种浏览器上,将各种浏览器的JScript标准化,建立一个砂箱模型,隔离JS,HTML,CSS。也就是说一个JS恶意代码插件,将不会对页面产生任何破坏作用。应用场景呢?Facebook的FBJS应用插件就是类似的功能。但这个是一个更加完美的解决方案,因为你不必改变你的JS的写法。
不过文档里面没有提到插件之间如何通讯。那和IFrame有什么区别,据说是比IFrame 更加安全。如果这个技术成熟的话,会有很多有趣的应用出现。至少在技术上不输给 Facebook了,我会密切关注这个项目。开发Web 2.0有点像造火箭,成功了就是特大成功,失败则更是家常便饭。所以给正在搞Web 2.0的朋友们加个油。