很多天没有更新 Blog 了,其间也有曾经想写些话题,不过大部分时间还是用来动手做被一件很久之前就想做的事情 —— 自己写个小工具。第一个完成的工具是我每天都离不开的 dict.cn 的客户端 Dict Mac。目前刚刚放到网上的只是 0.01 版。功能还不是很多。不过我自己已经完全切换到 Dict Mac 而不再打开 dict.cn 了。
从开发的角度说,这次也是我学习 Cocoa 的第一个实践项目。Cocoa 的 Interface Builder,以及控件对 URL 和 RTF 格式的处理都很好用。
说实话Objective-C/Cocoa是上个年代的编程平台,并不比同时代的MSVC/ATLMFC的组合好多少(C++的问题是template,ATLMFC的问题是抽象不良,ObjC/Cocoa的问题是语言/框架/IDE之间的耦合太紧,或者说是ObjC被Cocoa和Interface Builder绑架)。虽然Apple做了很多正确的设计决定,但是选择Objc/Cocoa作为主力的编程平台绝对不是。
Java/C#这一代编程平台设计得比ObjC/Cocoa好太多了,具体原因我也不赘述了。不过如果有人原意讨论的话,我很乐意一条条详细列举。
我的感觉恰恰相反。我知道无数人希望能摆脱C++。其中有类似Linus这样可以自己创造一个世界的。也有绝望的祭出D语言的。幸运的是在Mac上能更容易的做到这些。Java的语言和framework一样紧紧耦合。Java和IDE的关系与其说松绑,不如说是Sun在IDE方面偷懒。
先说几个ObjC/Cocoa的一个丑陋设计:
1. @interface和@protocol根本就互为冗余的概念。既然都是运行时决议,其实只要保留一个就行了。
2. 放着Class Object不用,使用IBAction, IBOutlet这些头文件里面的macro来标注元信息,把语法搅得莫名其妙,还在doc里再发明一个什么’type qualifier’。
另外我不知道admin是不是Singularity,不过我起码知道博主对nib是深恶痛绝的,相对的,Java、C#的IDE都是把设计时的界面同步成对应语言的procedure code,光是这一点就可以看出Cocoa的设计(必须结合代码、nib和plist才能看懂程序)是上个时代的思路。
呵呵,这个blog就是我一个人的,所以admin就是我。我赞同Cocoa远非完美,比如NIB(不过我也说过这是UI design DSL的通病,并非拒绝DSL就是有益无害的解决方案)。不过个人感觉,总体讲还是比其它framework能提供更好的用户体验和比较合理的开发效率。
Cocoa的强项在我看来就是Core Animation。Windows吃亏就吃在UI太单调了。
要知道, 在Windows 3.1、Windows 95时代微软的界面设计其实是比苹果的优秀的。说到底是Steve Ballmer水平太烂,完全不会领导工程师搞21世纪的创新,再这样下去iPhone OS统一桌面只是时间问题了。