神奇的程序员—王小波

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)可以很好的实现代码复用和扩展。

一生有几个好朋友

friends

昨天冒着臭鸡蛋和西红柿的危险尝试发了一篇纯技术探讨的文章,结果遭到部分小白了激烈的阻击,比如:

太专业了,不懂,严重申诉
今天的文章太难了,要想读懂,我得查好多资料
挖。。。什么也看不懂噎!耶耶耶~
拜托,说点能听懂的

当然也有鼓励的:

最近正在学习这门语言,表示确实觉得重头到尾都体现消息传递,开始不太理解。看到这篇文章,有点感触,谢谢。
以后技术性更强些会更喜欢
我每天都在阅读你的文章,每次都能获得一些新知识,非常感谢你!希望今后能多分享一些oc或xcode知识。再次感谢!每天等着阅读你的文章,等待是一种期盼,一种思念,更是一种享受,有你,我的夜生活更加精彩!(我不得不说,这一段有点肉麻,你们该看出来我自己是编不出这样么优美的文字滴)

Mac技巧写到现在,已经完全不是我的初衷了,读者估计有一部分是冲着扯淡来得,一部分是学习技巧的,还有一部分是干嘛的来,不知道。做个调查,如果您是来看扯淡的,回复“扯淡”,你是来看技术的,回复“技术”,两者都看的,回复“扯淡加技术”,如果以上都不是,你得告诉我你是来干嘛的?有时间的读者,回复一下,以便我做内容的调整。

每天要写一半人文一半技术,是很残酷的事情。当你扯得正嗨的时候,突然看见冷酷的“今日Mac技巧”,你就知道还有一部分冷冰冰的技术内容要写,每到此时我就想起了王朔的一本小说,一半是火焰 一半是海水。

进入正题:

随着年龄的增强,人会越来越怀旧,于是有很多人开始积极的组织同学聚会,大学的、高中的、初中的,小学估计少有人记得了,没听说搞小学会的。对于类似聚会,我偶尔参与,但一向敬而远之,由此也挨过不少骂,比如清高啊,不合群啊等等,虽然我完全不是这个意思,但是不会有人听你解释。

我个人的想法是,在现在这个社会上,能够把身边的亲人和朋友照顾好,就非常不容易了。人的一生如白驹过隙,会经历很多人很多事,大家一起共事的时候相濡以沫,不同路了就相望于江湖。没必要十年不见不联系,在同学会上称兄道弟,然后再等候下一个十年。

人这一辈子,亲人不说了,真正的好朋友,不会超过一只手。什么是真正的好朋友?就是无论多久不联系,遇到困难的时候你会想到他;你会为这样的朋友甘心付出时间和资源;你能够随时向这样的朋友借钱,而且确定他会借给你;你的一部分生命,由这样的朋友组成。

生命和时间有限,所以这样的朋友,谁都是只有几个而已。

今日Mac技巧:

1、如何合并Safari的窗口?
打开了多个Safari窗口,如何合并呢?ctrl+command+w,可以把所有窗口以标签页的方式合并为一个窗口,点中标签页拖拽,可以在窗口之间移动标签。

2、如何禁用通知?
很多时候写作或写代码,不希望被打扰,这时候就需要把OX S的通知关掉,双指从触控板右侧滑入,呼出通知中心,在最顶部有一个显示提示和横幅的开关,关掉就会禁止通知,不过第二天会自动回复这个通知设置。

3、Finder的工具栏
我们可以把文件和程序拖到Finder的工具栏上,以便随时打开。但是想移除时会发现点击鼠标拖动是没法把这些图标移除的,这时候只要在点击拖动时加上command,你就会发现这些图标被destory了。