回到过去看未来(2)

昨天看完李建忠的TechEd2011《WINRT》讲演,随手写了点口水文章记录下来。


回到过去看未来(2)


WINNT还没有获得商业的认可,WIN95横空出世。PC世界迎来了大爆发,更多的人知道了电脑买了电脑知道了WIN95。但这么多新手新用户新开发者,黑客对这块市场也是垂涎已久。于是新手不会用新开发者不会写,因而导致WIN95常常蓝屏或死机。当然当年微软在安全性稳定性开发方面也没有在战略层面太重视,所以种种WINDOWS不稳定不安全就被爆了出来。盖茨被迫做了战略级要求,全体微软开发者都要学习如何安全性编码和稳定性编码。当然WIN95从DOS、WIN32这条路上一路而来,自然底层架构也有问题所以迟迟不好解决此问题。


虽然WIN2000代替了WIN95,WIN2000采用的是WINNT内核,最后更易用的WINXP也出现了。稳定性和安全性貌似被提升了不少。于是,过去搞垮搞蓝屏别人电脑的黑客病毒这会也不容易使上力气了(想想把别人电脑搞蓝屏搞死机这样也确实没什么好处)。新一代的黑客是拜金主义,要的是钱。钱从哪里来,从信用卡号银行卡号来,在中国还有游戏账号和QQ账号这些有价值的东西。于是黑客转战阵地,正好也遇上了互联网的大发展,大家都上网但大家都是上网新手,对网上有什么木马钓鱼欺骗还陌生的很。于是,病毒少了,而来自网络的木马钓鱼多了。于是杀毒软件也随之转移阵地。


但微软的战略却刹不住闸,还在为稳定性和安全性一路冲刺。不让黑客直接操作OS内核直接操作CPU、内存,不让不会搞内存管理和指针管理的程序员写出来的程序也能有一定的稳定性。于是.NET而生。有了.NET虚拟机,对于防范滥开发新手和高黑客都有效。但,其实时代已经发展太快了,用户需要的是防范浏览器的安全和稳定,而微软还在为操作系统操劳。


虽然盖茨最终意识到了浏览器的重要性,纠集了全公司的开发、营销打赢这场浏览器世纪之战。战争是结束了(微软差点被拆掉),但盖茨和微软仍然是PC想法而非互联网想法,于是IE6躺在大份额市场下不思改进了。当微软再次意识到用户对OS的稳定安全已经不在意了而更在意浏览器的稳定、安全、甚至各网站的兼容性时,微软才又急急赶着做IE7。当然,随着VISTA的失败,IE7也很短命。


.NET虚拟机光有稳定和安全这两个特性根本吸引不了开发者和用户。那怎么办呢?微软看的是在应用级技术吸引。如更好的ASP.NET WEB编程技术,更好的WebService和XML技术,更多的各种开发语言的支持,更多的方便类库和控件。现在更是累加了WPF、Silverlight、WCF、WF、LINQ、ASP.NET MVC、Entity Framework,更是不断增强VS.NET IDE,不断增加应用层技术黏住开发者。


微软有了更紧密的WINDOWS内核,在内核之上附加.NET虚拟机,在虚拟机之上搞各种应用技术。而这种模式通吃PC级服务器、PC(含笔记本电脑)、平板电脑、PDA(不知道还有这类设备的生存场景不)、手机、游戏机、家电(嵌入式设备)。一个OS通吃所有设备,一个虚拟机、IL语言、VS.NET IDE通吃所有开发语言。


现在WIN8快出现了。我老怀疑WIN8是WP演变过来的(WINDOWS微内核+.NET虚拟机),就如同ipad OS是由iphone OS演变过来的。WIN8既支持平板触摸(Metro大按钮风格满足手指按)和PC现状(感觉就是换了一个主题皮肤)。


号称WIN8在WEB开发还是HTML+CSS+JS,在本地开发却是Metro XAML开发。有人说silverlight死了。从技术本质上来说,我没这么觉得,因为不管是WPF,还是silverlight,还是Metro XAML,在技术本质就是XMAL描述UI(就如同HTML描述UI一样),用前端JS控制UI。这种本地应用技术模型和WEB开发模型在技术本质上一样。


在WIN8的本地编程模式上,是C++、.NET语言、WINJS都能开发的。JS开发本地应用?对。微软是在WINAPI上包装了一层,让JS可以有调用接口。但稍等,这和当年JS调用微软本地ActiveX有啥区别?这不一样么?


再说说元数据MetaData。过去是COM代码和申明的Typelibrary分离,就如同微软现在也让UI定义和UI控制分离一样。过去.NET的代码是定义和实现在一起的,现在也要把MetaData分离了。过去.NET UI编程也是UI定义和UI实现在一起的,现在也分离了。


记得过去编写本地应用的时候,用的是DELPHI+COM写业务逻辑,用DELPHI控件写表现层。编写WEB应用的时候,用DELPHI+COM写业务逻辑,用HTML+CSS+JS+ASP写前端展示。


如今编写本地应用呢,用C#+.net组件写业务逻辑,用.NET控件(WPF、WINFORM、silverlight)写表现层。编写WEB应用的时候,用
C#+.net组件写业务逻辑,用用HTML+CSS+JS+ASP.NET写前端展示。


过去的ADO也升级到ADO.NET。过去ADO都是直接连接数据库进行增删改,在DELPHI有本地的ClientDataSet组件,而微软也学了这招在ADO.NET中也增加了类似的DataSet。


在未来的WIN8编写本地应用时候,用用C#+.net组件写业务逻辑,用.NET控件(WPF、WINFORM、silverlight)写表现层,只不过用了Metro的控件,做出来的是Metro的风格,可以受WIN8控制多点触摸。编写WEB应用的时候,用C#+.net组件写业务逻辑,用用HTML+CSS+JS+ASP.NET写前端展示,仍然照旧。


UI都几乎成了HTML\CSS\JS\XML的天下,不管是本地应用编程模式还是WEB应用编程模式。UI是展示层的接口和定义。
定义与实现分离、动态绑定。定义的本质就是元数据
严重关注实现设计,实现设计严重关注接口设计以及接口中的输入输出数据参数设计,而SOA的SCA\SDO也主要是强调这两点。


全世界的路都是熟路而同归的,所以技术已经不再有差异和比较,更多的是落实的细节是否和你想的一样好一样细致。往往是现实中有规定、有方法、有执行细节,但人来人往往往会造成有人根本不知道有这些细则,有人看不懂,有人理解有偏差误区,有人能执行,有人偶尔能执行,有人非得强制才能执行,有人还半信半疑不执行,有人觉得这些细则根本不解决问题很傻所以不屑于执行。因而一个好的架构好的设计往往在执行层面变形差之千里。当然,如果架构设计和实现设计这些上游环节都有很大的问题,就更别说编码落地的执行。

你可能感兴趣的:(未来)