微软的烂设计与苹果的优秀设计

忍不住了,发发牢骚。注意这里讲的是设计。

 

路径以字母开始

不知那个蛋疼的人想出的办法,以ABC为开头区分路径。这样的后果:在windows上没有统一的路径。比如我在一个系统中把东西放在C:\temp下,在另一个系统中可能是D:\temp。而Unix的设计都是以/做为根,可以统一路径。在有根的文件系统里,两个绝对路径都可以转成相对路径。

 

\作为路径分割

这货难道不用C,不知道 \C中有特殊意思?看看windows程序,一个路径要用\\的写。想想Unix/,省去多少事。后来又自作聪明,在C#中发明了@语法。一开始蛋疼,造就了后面蛋继续疼

 

注册表

接上面,Windows里没有统一路径,但有一个地方有。于是,所有东西又存在这个只有Windows才有的东西里。一开始蛋疼,造就了后面蛋继续疼

 

Unicode

Unicode是软件趋势。但微软确采用统一用两个字节的UCS-2。后果,由于这货有’0’,所以C库要重写。表示英语的时候,存储大一倍。一个Windows API要写两个,一个是A结尾,一个以W结尾。一开始蛋疼,造就了后面蛋继续疼。除了WindowsUTF8是公认的标准。

 

2D矢量绘图

Windows一直用 GDI,这货不支持硬件加速,而且又极易出错,很容易造成资源泄漏。后来,微软终于有了自己的2D矢量引擎,但这货是用.Net实现,只能在WPF里使用。后来又有了另一个2D矢量绘图,但这货是捆绑在Direct10里的,叫Direct2D。同时捆绑在里的还有文字引擎DirectWrite IE9有个这货,终于可以提高性高了,但Direct10不支持WinXP 于是IE9也不支持WinXPWin用户真杯具。

 

另立门户发展DirectX

OpenGL本来就能完成的事,微软非要再发明一个轮子。DirectX本身游戏性不错。但在今天到处是游戏的时代,DirectX的思路显然过时。于是当微软要做手机的时候,会去想,还继续用DirectXOpenGL/ES是事实上的移动标准。

 

OpenCL

显卡性能越来越强,于是出来标准来使用显卡的过余性能。OpenCL是事实上的标准。各大显卡公司都来玩,但微软不玩。非要搞个叫DirectCompute的东西。这次不是微软去支持OpenCL,而是显卡厂商去支持DirectCompute。用户再一次杯具。

 

另立门户的Win32

除了图形编程,Posix是操作系统的标准,一个用户学习完Advanced Unix Programming,理应会除了图形以后的程序开发。但在Win不行,这货另立门户,发展了一个自己的轮子。但轮子又不是全是自己发展的,比如socket,就把berkeley socket直接抄过来了。既然你觉得自己很牛,能重新发明轮子,可轮子还没做好,又去用旧轮子,那你发明的轮子意义何在?难道还是一开始蛋疼,造就了后面蛋继续疼

 

系统函数钩子

当年一个很炫耀的Windows技术是钩住系统API。详细的例子都可以在Jeffrey Richter<<Advanced Windows>>Chapter 22 DLL Injection and API Hooking。这种技术很强大,比如可以做屏幕取词等功能。但早期只有病毒程序才使用这功能,后来,反病毒程序也使用这功能。微软不知不觉中又创造了一个产业。相对于苹果,会提供专门API做屏幕取词等功能,而不是各种各样看似高手的手段。

 

权限设计

Unix的人都知道root是干啥的。文件权限的意思。但用了多年win的人,恐怕都不明白win的权限设计。有时一个目录没有删除权限,不知道自己已经是管理员,为啥还不行。登录系统用管理员,漏洞太多,不用管理员,限制太多。这些都是Unix一个su解决的事情。

 

Bash

Unix都有角本,都可以随便写。Win有个破角本,基本上只能写那么点事情。后来意识到Win还有服务器市场,发明Power Shell。做那么点破事,你给搞了个核武器。典型用导弹打蚊子。

 

64位设计

不知道用户看Documents and settings目录有啥感想。不知道用户看到Program FilesProgram Files(x86)有啥感想。虽然universal binary是苹果的专利,但可以想象,微软在设计的时候都更本没考虑过64位的时代会到来。

 

2012年6月20号补充

字体渲染

微软对字体渲染一直有问题,所以在业界的排版印刷行业也一直不用win就是这个原因。在显示器上看到的和最终打印出来的,字有很大的差别。详情见http://blog.jobbole.com/21671 

这一点尤其阻碍生产力,在当前web字体的时代,又一次因为技术阻碍内容创新

 

WinMain函数

所有的学习C的人,包括写苹果的Objective-C的人,都知道main. 但写win程序,却是从WinMain开始的,原因在于Windows 3.0的时代,需要一个应用程序句柄,所以需要一个参数传入。而在以后采用

抢占式多任务的Win95开始,这些参数一点用也没有。但因为大量程序已经这样写了,于是微软将错就错,继续用WinMain. 再后来,在WinForm时代还可以找到Main.再后来,到WPF时代,连Main也没有了。

当然,会用WPF的人,对于Win8 Metro开发应该无压力,但就是不知道,微软的这些创新,意义何在? 

 

苹果的优秀设计

 

基于Unix

这一条解决很多问题,不解释。

 

处处MVC

微软的图形入门程序,不管是MFC,还是WinForm,还是WPF/Silverlight/Win8 Metro都不是MVC的。除了WPF里的MVVM模式,微软根本没有MVC。而MVVM也不是微软发明的。相反,苹果图形设计一开始就会给你讲什么是MVC,而苹果自己也是用MVC这条路写过来的。

 

组件平台

说实话,微软的组件平台(COM)并不差。只是复杂。COM只有2个版。1.0就相当稳定,后来到1.1做小升级。而微软如果一直在语言上做文章或另外别的办法,COM会有非常好的前途。想想有多少人怀念VB6就知道了。面向对象发明人Alan Kay同时也是Smalltalk发明人,就说过,自己看不懂C++。而离开了苹果的乔慧眼识珠,找到了和Smalltalk一种设计思想的Objective-C,引入到了苹果系统中。才使苹果的系统今天与众不同。

 

结论,巨人可能不是被别人打到的。本文中的设计对比也可推广到其它概念。

posted @ 2012-06-07 09:39  Marvin  阅读(1075)  评论(0编辑  收藏  举报