神奇的程序员—王小波

goldtime

从昨晚到现在大概收到了1500多条反馈意见,也没法统计了,大体上看了下,差不多是3:3:3的比例,喜欢看随笔的,喜欢看技术和一样都不能少的。那就维持现有风格,可能每篇文章在随笔和技术内容上各有侧重吧。另外tips类型的Mac技巧已经讲了很多了,后续的技术内容略有进阶,不喜欢的自动忽略吧,想看tips的,记住回复 m。

(昨天最奇葩的一个回复是俩字:退订,然后人家就退订了,言出必行,赞!)

喜欢读书的人,我想对王小波都不陌生,他是中国最富创造性的作家之一,他是中国近半世纪的苦难和荒谬所结晶出来的天才,他英年早逝。他的作品对我们生活中所有的荒谬和苦难作出最彻底的反讽刺。他还做了从来没有人想做和做也没才力做到的事:他唾弃中国现代文学那种“软”以及伤感和谄媚的传统,而秉承罗素、伊塔洛·卡尔维诺他们的批判、思考的精神,同时把这个传统和中国古代小说的游戏精神作了一个创造性的衔接。(以上部分摘自百度百科)

我读过王小波三部曲黄金时代,白银时代和青铜时代,读过沉默的大多数,读过红拂夜奔,读过似水六年,但是最近才知道,原来王小波是一个伪装成作家的程序员(这位同学不用站起来了,不知道这是调侃么)。

  • 王小波很早就接触了计算机,1988年毕业于美国匹兹堡大学东亚研究中心,获硕士学位,那时就知道Macintosh,玩过IBMPS/2。
  • 90年学习FORTRAN,开始进行数据统计,并开始在北大教统计学。
  • 91年搞了个用调整字模发生器方法输出汉字的系统,并发出嗟叹:嗟夫,不过现在我对微机已无兴趣,因为发现写小说也可赚到钱。一代天才作家终于开始写小说了,但他依然没有停止编程的脚步。
  • 92年开始写C,“用C编的软件已经用熟,并做出了各种写小说的工具,别人的软件已不用了。现在主要是写书赚钱。从今年初开始写长篇,首先做了写长篇的专用软件,现在基本调通,开始写了”。
  • 93年开始搞汇编,“下决心买了一台286,这些日子在改造软件,作了不少汇编工作。其核心是它在虚拟保护方式(virtual address protected)下工作,以便利扩展内存(expandedmemory)”。
  • ……

如果王小波不那么早辞世,估计会有更多伟大的文学作品和软件产品留下。谁说文科生不懂技术?谁说程序员不能写书?这才是技术与人文的完美结合啊,你们感受一下……

点击底部的{原文},查看王小波的软件历程。

今日Mac技巧:

1、更简单的禁用通知的方式

经过多位童靴提醒,我们可以通过按住option键,点击右上角的通知按钮,即可禁用或恢复通知系统。

2、Objective-C的消息机制

上次讲了一些Objective-C的历史,很多童靴觉得不过瘾,今天为大家介绍下这门语言的消息机制。

Ojbective-C的语法设计主要基于Smalltalk,除了提供传统的面向对象编程特性之外,还增加了很多类似动态语言Ruby、Python才具有的特性,例如动态类型、动态加载、动态绑定等等,同时强化了消息传递机制和表意(Intention Revealing Interface)接口的概念。

消息传递模型(Message Passing)是Objective-C语言的核心机制。在Objective-C中,没有方法调用这种说法,只有消息传递。在C++或Java中调用某个类的方法,在Objective-C中是给该类发送一个消息。在C++或Java里,类与类的行为方法之间的关系非常紧密,一个方法必定属于一个类,且于编译时就已经绑定在一起,所以你不可能调用一个类里没有的方法。而在Objective-C中就比较简单了,类和消息之间是松耦合的,方法调用只是向某个类发送一个消息,该类可以在运行时再确定怎么处理接受到的消息。也就是说,一个类不保证一定会响应接收到的消息,如果收到了一个无法处理的消息,那么程序就是简单报一个错。甚至你可以向一个值为nil的空对象发送消息,系统都不会出错或宕掉。这种设计本身也比较符合软件的隐喻。   在表意接口(Intention Revealing Interface)方面,Objective-C也是设计的比较出色的语言。面向对象语言的特性之一就是通过API把实现封装起来,为上层建筑提供服务。但是需要注意的一点就是,你封装的API最好能够让调用者看到接口描述就知道怎么使用。如果为了使用一个API必须要去研究它的实现,那么就失去了封装的意义。Objective-C通过显式的API描述,让开发者不自觉的写出满足表意接口的API,比如下图中的API描述。 objcapi 上图中描述了一个传统意义的实例方法,但和Java或C++不同的是,其方法关键字由多个字符串组成,在这个例子是insertObject和atIndex,(id)anObject和(NSUInterger)index分别表示参数类型和参数名称。整个方法看上去就像一个英语句子,我们可以很容易的知道,这个方法就是在索引为index处插入一个对象。如果你是从其他语言转到Objective-C,那么开始的时候会感觉这种写法有些繁复,但是一旦理解并习惯了你会感受到其巨大的好处,这种写法会强制你写出优美易读的代码和API,而且有了XCode强大的提示功能,再长的方法也是一蹴而就。

后续讲讲Objective-C的多态和继承。与Java一样,Objective-C一样不支持多重继承,但是通过类别(Category)和协议(Protocol)可以很好的实现代码复用和扩展。