看到很多Windows开发人员,尤其是C++程序员思维还是停留在XP操作系统,当然根据工作是否需要新知识 ,这本身没有错。但是实际上Vista之后的Win7, 再之后的Win8 ,Windows已经发生了很大的变化,我们程序员也该了解和适应这些变化。
先看看Windows的发展历史:
从上面的图,我们可以看到大概时间点:
Win 95: 1995
Win 98: 1998
先看看Windows的发展历史:
从上面的图,我们可以看到大概时间点:
Win 95: 1995
Win 98: 1998
Win 2000: 2000
Win XP: 2002
Vista: 2007
Win 7: 2009
Win 8: 2012
Win 8.1 (Windows Blue): 2013 ?
从上面的图我们可以看到,Windows每次大的改动后通常都会有2个版本 ,而后一个版本通常会取得巨大成功,Win98, WinXP, Win7的成功已经证明这一“规律”,如果不出意外,Win8.1应该也会成功。
我们也可以看到XP作为Windows历史上最成功的操作系统,在近10年里一直占有统治地位, 现在仍有挺大的用户量。但是随着Win7的成功,XP的用户量正在逐步下降, 新的电脑现在一般都自带Win7或是Win8系统,我们的应用程序也该适应新的系统。当然, 微软一直在系统的兼容性方面做得很好 ,我们的应用程序一般不用改动就可以直接运行在新的系统上, 但是如果要使我们的程序在新的系统上更有竞争力 ,我们的程序就该充分利用新系统的一些特性。
下面我们简单列举一下Vista(Win7 )相对于XP,对开发人员的一些变化:
Direct2D: 微软下一代替代GDI/GDI+的2D渲染API, 充分利用了GPU硬件加速。
DirectWrite: 独立于分辨率的矢量字, 高质量的文本显示和布局接口。
Windows Animation Manager: 高效强大的动画管理接口。
Windows Imaging Component: 强大的图像编解码器接口, 支持各种图像格式。
Windows Touch Gestures: 支持多点触摸应用程序的开发接口。
User Interface Privilege Isolation: UAC(user access control)打开后,每个应用程序都有权限等级, 一般程序都运行在低权限,低权限程序不能控制或是发消息给高权限程序。
Session 0 Isolation:XP时代服务程序和一般普通应用程序都运行在Session 0 中, Vista之后只有服务程序运行在Session 0, 第一个登陆用户运行在Session 1。
Data Redirection : UAC打开时有些目录不让写入数据,会导致写入失败或是重定向到其他路径。
Installer Detection:UAC打开后某些应用程序可以通过manifest配置信息要求高权限运行, 运行时会有验证窗口。
Ribbon:新一代office的界面风格, 主要是去掉菜单, 为支持触摸做准备。
Windows Gadget Platform:桌面上的那些小玩意。
Desktop Window Manager(DWM): 在 Aero模式下的标题栏半透明效果, 后台用了全新的渲染合成接口。
Magnification: 开发 自己 的放大镜程序接口 。
Virtual Disk Service: 创建自己的虚拟硬盘接口。
Taskbar: 创建Win7 风格的任务栏图标
我们可以看到Win7相对于XP的主要进步在于界面炫和安全性, 这2者对操作系统来说都是很重要的。
上面主要考虑的是操作系统的特性, 如果再加上 .Net 的变化, C#, F#, WPF(WindowsPresentationFoundation), WCF (Windows Communication Foundation), WWF(Windows Workflow Foundation)等, 变化就更多了。
而Win8相对于Win7的变化主要是增加了Metro模式, 该模式下的程序都要经过Windows Strore验证, 这些程序本身都运行在低权限的沙箱里, 原理可以参考我以前写的《理解WinRT》, 关于WinRT的更多知识可以参考Windows API reference for Windows Store apps。
尽管Win8刚出来时很多用户不买Metro模式的帐, 觉得 它是一个怪胎,但是新生事物总有一个被接受的过程, 我们也可以看到微软应该不会放弃它。因为ARM版的Win8, 传统Desktop模式下都没有开放开发接口, 也就是说我们在Arm版的Win8 下只能开发Windows Store App。当然X86下的Desktop因为这么多历史软件的原因,应该会长期存在, 但是如果你要开发同时支持X86和Arm的程序, 你只能用Windows Store App。所以我们可以看到WinRT其实是一个很重要的东西, 它统一了PC,Tablet和Phone,是微软下一代面向对象的开发接口, 甚至WinRT同时支持HTML开发, 它还统一了Native和Web。
另外,如果关注MSDN杂志, 我们会发现, 上面.Net相关的文章出现的越来越少, 而Phone和AZURE字眼的文章出现的越来越多, 这其实也说明了为微软的战略已经从.Net转移到了移动和云服务。实际上从2010年开始,微软就开始推广他们的云服务平台Windows Azure。我们可以试想一下我们以后的程序(实际上很多已经这么做了), 客户端前台基于WinRT, 直接跨各种类型的用户终端, 而后台调用Windows Azure提供的云服务。
很多人说跟着微软跑真累,确实如此。 但是回头来想想, 那是因为你一直落后, 你一直在追赶, 你一直是被赶着走的, 所以你会觉得累。如果你一直是与微软起头并进, 甚至领先与微软(微软新加的东西是你意料到的), 你就不会有累的感觉,有新东西出来, 研究下原理, 写些测试代码,就大概知道怎么回事了。
记得有本书上说过(好像是<<代码大全>>),程序开发人员的知识每隔3年, 就有一半被淘汰。 可能有些夸张, 但是从Xp到Win7 到Win8, 已经过了10多年,隔了2代了, 是时候更新下自己 的知识了。当然, 有些新知识可能只是壳,也有些新知识却是质, 把握本质和原理的东西永远是最重要的。