如果像招聘程序员那样招聘木匠

面试官: 您是木匠了,对吧?
木匠: 是的,我就是干这个的。

面试官: 您做木匠有多长时间了?
木匠: 10 年。

面试官:嗯,很好。那现在我有一些技术问题想问问您,看看您是否适合我们团队。可以吧?
木匠: 没问题,问吧。

面试官: 首先,我们目前正在做很多棕色房子的构件。不知您之前建过很多棕色的房子么?
木匠: 我是个木匠,我当然会建房子。不过人们更愿意刷自己喜欢的颜色。

面试官: 嗯,我理解,不过您是否告知,您有多少建棕色房子的经验呢?
木匠: 囧,我真不知道啊。房子建好了,我又不关心刷什么颜色的漆。或许有六个月的经验吧

面试官:六个月?噢,我们在找有更多棕色房子经验的人了,但是否允许我再问问其他问题呢?
木匠:嗯,没问题。但粉刷是粉刷,你应该懂的。

面试官: 好。能聊聊胡桃木么?
木匠:您想了解什么呢?

面试官: 您做木匠时,经常用胡桃木的木材么?
木匠: 当然了,胡桃木、松树、橡树、桃花心木都用过。

面试官: 那您用胡桃木的时间,又多少年呢?
木匠:天哪,我真的不知道。难道我应该要统计胡桃木的数量么?

面试官:嗯,您估算一下吧。
木匠:好不,那我就说有一年半时间在用胡桃木。

面试官:那您认为您是处于一个什么级别?普通胡桃木木匠,还是胡桃木大师么?
木匠: 胡桃木大师?什么是胡桃木大师啊?当然了,我以前是用过胡桃木的。

面试官:那您不是胡桃木大师了?
木匠: 这个,我就是个木匠,所以我用过很多类型的木材了,你知道的,木材都是有区别的,如果您是一位出色的木匠……

面试官:嗯嗯,我懂。但我们目前在用胡桃木了,这没问题吧?
木匠: 胡桃木很好的!不管您要什么。我是一个木匠。

面试官:咱能聊聊黑色的胡桃木么?
木匠:怎么了?

面试官:虽然我们现在已经有了几位用过胡桃木的木匠,但他们都没有用过黑色的胡桃木。您有黑色胡桃木的经验吧?
木匠:当然了,有一些。如果我有更多的经验,是会更好吧。

面试官: 好的。请稍等,我查一下收件箱……
木匠:嗯,您查吧。

面试官:好了,今天还有件事要问您。我们在用 Rock 5.1 敲钉子。您用过 Rock 5.1 么?
木匠: [囧] 自从 Craftsman 买了一个石场,我知道很多木匠开始用石头敲钉子,但是你知道,说实话,我用射钉枪用的更多。铁锤也用过。我发现我用石头,经常伤到我手指,我手上其他地方也受过伤,因为石头太大了。

面试官:但是其他木匠都在用石头了。您是说石头不起作用么?
木匠:没有啊,我没说石头没用,确切地说,我认为我的射钉枪更好。

面试官:嗯。我们的建筑师全部都在用石头,并且他们都喜欢用石头。
木匠: 额,他们当然喜欢,但我整天都要敲钉子,这个…… 我需要工作,如果您想用我的花,我肯定愿意用石头。我尽量别禁锢我的思维吧。

面试官: 好的,我们还有其他一些应聘者,我还要……到时候会通知您。
木匠:嗯,感谢您。很荣幸与您会面。

第二天:

电话响了……

面试官:您好?
木匠:您好。还记得我么?您之前在找有黑色胡桃木经验的木匠,我是您之前面试过的那个木匠。我打电话是想看看你们是否已确认人选了。

面试官:嗯,实际上我们已有人选了。总体来说,我们喜欢您的经验,不过我们决定,还是雇用有很多棕色房子经验的木匠。
木匠:这样啊?那我就丢掉这份工作了,就因为我没有足够多的棕色(房子)经验?

面试官:嗯,这是部分原因,另外部分原因是,我们找到了薪资要求更低的候选人。
木匠:真的吗,那那位有多少经验呢?

面试官:其实他根本就不是木匠,他是一位汽车销售,不过他卖过很多棕色的汽车,并且他常和胡桃木内饰打交道。
木匠: [卡] (木匠同学挂了)

见李开复初印象

前几天去了趟北京,王尼玛让我跟手机app的开发人员深入交流一下,并要和创新工场的一些其他团队进行一些合作。

不巧的是我去的那天,李开复老师有事外出,当时说是我今天回来也见不着了。

昨天下午王尼玛神秘兮兮地让我和王尼美过去找人,一开始没注意,等到了办公室才知是大名鼎鼎的李开复老师来了,要跟我们暴走漫画的核心团队成员聊聊。

见到李开复老师第一眼的印象感觉文质彬彬,但比照片上感觉更瘦更高,上身着粉红色衬衫——刚巧我也是——下身黑色西装裤。

办公室不大,大约有十个平米多,中间是一张很大的L形办公桌,我们和开服老师隔着办公桌面对面坐着。左手边就是飘窗。办公桌上收拾地非常干净一丝不苟,靠窗有台iMac还有台Dell,边上的线都卷地很好。桌上还摞着一些书,有关于产品设计战略的等等,中间还有很多盒名片,名片整齐地排列着。还有个泡茶的壶,感觉是茶室这种地方用的。但老师本人用的是一个巨大的运动型水杯,好像有1L的容量。

右手边有一个简单的书柜,书柜上放了与家人的合影以及女儿的照片。书柜脚边是几扎牌子叫火山岩的纯净水。

左边飘窗后面还有三四盆盆植物,只认识一个虎尾兰。后面还有个一直在轰鸣的大约一米高半米长宽白色外壳的不知道是什么机器。

李开复老师对暴走漫画的情况提出了很多的意见和建议,也根据当前的互联网的形势给出了自己的见解和看法,并且也介绍了很多创新工场内可以交流合作的团队和个人。谈吐温文尔雅,确实非常配得上“老师”的称号。

程序员幽默:他们是如何过河的?

C程序员
每当有大问题,上帝都会跟C程序员进行磋商。
C程序员可以直接在水上行走。

VB 程序员
VB 程序员每天都会跟上帝吃午饭。
他是游泳奥运冠军。

Turbo Pascal 程序员
Turbo Pascal 程序员偶尔跟上帝交谈过几句。
他游泳很不错。

Fortran 程序员
Fortran 程序员曾和上帝碰过几次面。
他可以努力让自己漂浮在浅水中。

QBASIC 程序员
QBASIC 程序员认识哪个是上帝。
不过他连在自己的浴缸里不溺水都有困难。

LOGO 程序员
Logo 程序员唯一了解上帝的地方在于,“上帝”这个单词对他来说足够简短能念出来,但他拼写这个单词还有问题。
他需要其他人把他抬过河。

汇编语言程序员
其实汇编语言程序员就是上帝。
当他想过河的时候,他会分开水面。

Forth 程序员
Forth 程序员从来不会看他遇到的河流一眼因为这违背了他虔诚的信仰,于是他过河都是走桥的。

各种奇怪的中文编程语言(转)

1、易语言

这语言是本文中最不奇怪的语言了……所以不做介绍,只放上一段Hello World。

.版本 2
.程序集 程序集1
.子程序 _启动子程序, 整数型
标准输出 (, “你好,世界!”)
返回 (0)

2、丙正正

丙正正是啥?答曰C++。。。C排第三个,所以是丙,代码实例如下:

空 象棋檔::設定註解(字元 *s,整數 n)
{
若(n >= 最大註解數)
對於(;最大註解數 <= n;最大註解數++)
註解[最大註解數]=NONE;
若(s==NULL 或 字串長度(s)==0)
傳回;
若(註解[n]!=NONE)
刪除 註解[n];
註解[n]=新 字元[字串長度(s)+1];
字串複製(註解[n],s);
}

这不就是翻译么。。。

3、习语言

另一个类C语言……全中文关键字:

包含 “习语言系统.接口”

整数类型 主函数()
{
文件类型 *fp;
整数类型 ch; 【注意这里要定义为整数,以便接受文件结束符号】
如果((fp=文件打开(“练习13-2.文本”,”写+”))==空指针)
{
格式输出(“无法打开文件:练习13-2.文本! “);
暂停();
退出(1);
}
格式输出(“输入一串字符:n”);
ch=输入字符();
若符合条件 (ch != 宏_换行键 ) 重复
{
文件写字符(ch,fp);
ch=输入字符();
}
文件复位(fp);
ch=文件读字符(fp);
若符合条件(ch!= 宏_文件结束 ) 重复
{
输出字符(ch);
ch=文件读字符(fp);
}
格式输出(“n”);
文件关闭(fp);
暂停();
返回 0;
}

不由的想说这些字打起来肯定很费劲……

4、PerlYuYan

这个汉语编程是基于Perl语言的,不过它的语法号称是文言文!看如下一段代码

!/usr/local/bin/perl

use Lingua::Sinica::PerlYuYan;
用警兮用嚴。
印道
1..1
哉兮

印編曰雜申雜申矣
又曰ok矣
又曰1矣

亂曰
國無人莫我知兮 又何懷乎故都
既莫足與為美政兮 吾將從彭咸之所居

它其实是什么呢……如下翻译

用警兮用嚴。 use warnings; use strict;
印道 print ”
1..1 1..1
哉兮 “;
印編曰雜申雜申矣 print sprintf ‘%s %s’
又曰ok矣 ,’ok’
又曰1矣 ,’1′
亂曰 END

本文末,贴一段最恶心的PerlYuYan代码。。征求翻译达人:

!/usr/local/bin/perl

The Sieve of Eratosthenes – 埃拉托斯芬篩法

use Lingua::Sinica::PerlYuYan;

用籌兮用嚴 井涸兮無礙。
印曰最高矣 又道數然哉。
截起吾純風 賦小入大合。
習予吾陣地 並二至純風。
當起段賦取 加陣地合始。
陣地賦篩始 繫繫此雜段。
終陣地兮印 正道次標哉。
輸空接段點 列終註泰來。

/Autrijus/

SuperCache的lock选项性能测试

上次说到了SuperCache的lock选项可以解决DogPileEffect。那么效果究竟如何,我做了个简单的测试:

我使用了Ruby 1.9.3-p392,Rails 3.2.12,只建了my_controller.rb,其中模拟了一个10秒慢速请求,为了测试方便,缓存时间只设置为5s:

服务器端使用了unicorn,启动5个worker,测试端开100个并发,50000次请求。

不使用lock:

使用lock

结果很明显,启用了lock之后,SuperCache的长达10s的请求数明显更少,使得平均响应速度有明显的提升。

在实际的生产环境中,一般长达10s的请求很少,只缓存5s的请求也很少,但是通常长时间的请求伴随着都是较高的数据库负载,一旦大量出现,容易拖垮整个服务。通过这种机制,就可以明显地让缓存失效时负载曲线平滑。

暴走漫画的服务器使用了这个机制之后,使得平均响应速度从300ms左右降低至了200ms左右。

nginx+NFS vs nginx+memcached

前面我写了SuperCache的介绍之后,两位朋友都表示他们在生产环境中使用了NFS,我直觉是NFS性能并不如memcached好,因为NFS牵扯了一个文件系统,但是NFS可以很好利用nginx的gzip_static。于是我做了这个评测。

我准备了三台服务器,一台服务器A用于提供memcached和NFS服务,B服务器上有nginx,挂载了A服务器上的NFS,最后通过C服务器对B服务器进行压力测试。三台服务器都是某云服务上的三台VPS,4核8G内存。

为了模拟真实环境,我首先给NFS和memcached准备了200,000条4000字节的html文件,路径格式为/articles/.html,内容是一些随机字符。

首先单纯就写入的速度来看:

写入速度明显是memcached占优,这是很容易理解的。因为NFS走了文件系统,而memcached减少了文件系统所需的诸如磁盘操作以及索引等等额外的东西。

然后我使用了siege对其进行测试

NFS

NFS服务器端/etc/exports配置

使用NFS的nginx配置:

NFS后端的结果如下:

我还额外对所有文件进行了gzip压缩(过程非常缓慢),然后启用了gzip_static:

结果效率并没有提升,原因不明。

memcached

使用memcached的nginx配置:

memcached后结果如下:

访问速度上基本没有太大差异,memcached略胜一筹

结论

NFS基于文件系统,Memcached完全存与内存。

所以,在需要频繁更新缓存的场景中,NFS受限于IO和网络条件,更新的效率较低。
由于NFS不具备memcached这种自动过期的功能,必须额外写脚本进行Sweep,可能不够方便
同时局限于文件系统的结构,清理过程中需要遍历文件也是十分消耗时间和磁盘IO的。

但如果不需频繁更新,NFS基于文件系统的特性更能节省内存。

另外我对NFS配置不够了解,对于NFS如何做高可用性不太清楚,但如果是memcached的话,则相对比较方便,可以在upstream中添加多个节点,并配置memcached_next_upstream等选项。

还有本文没有测试的:

  • 如果AB机器是同一台服务器,那么结果如何
  • NFS有一些配置选项,比如async选项,我在这里配置的是sync选项,是否对性能有所影响

SuperCache:一个Rails缓存小组件

前言

SuperCache最早由我在负责糗事百科开发工作时,所使用的缓存手段发展而来。当时糗事百科使用了页面整个静态缓存,而页面上诸如登录信息、每个文章的分数评论等,由Ajax载入,这样可以最大化缓存的效率。
但在扩展到两台应用服务器之后,caches_pagecaches_action就显得比较局限了。于是我将页面缓存放入了Memcached,由Nginx直接根据页面地址为key在memcached中查找,如果没有对应缓存才访问Rails层。经过一系列优化,最后变成了现在的SuperCache。现在“暴走漫画”也用的是这套方式。

为什么不用caches_action

caches_action可以指定路径,通过:store_options参数也可以指定rawtrue(默认情况下会序列化,nginx无法读取)以及失效时间,然而caches_action使用了fragment的存储方式,会始终在key前面加上views/,这就使得nginx在处理上变得麻烦。导致caches_action必须走Rails层,导致效率变低。

为什么不用caches_page

caches_page是将页面内容存到磁盘上作为静态文件,这样可以直接通过nginx或者Apache等服务器进行存取,不通过Rails进程,可以极大提高速度。但是caches_page并不支持将页面存入诸如memcache,这样就把caches_pages的应用局限于一台服务器上,要求nginx和rails都在一台服务器上。而且缓存很难共享或者是进行清理。当然也许可以通过nfs或者fuse挂载memcache等方式实现,但这些的增加了部署的复杂度,同时也不知性能如何。

为什么不用rack-cache

rack-cache是符合HTTP标准的透明反向代理,其失效和过期都要使用HTTP头来操作,无法使用Sweeper来清理缓存。和rack-cache作用类似的有Squid和Varnish,但是本人并不了解他们的配置,所以

所以SuperCache的目的就是解决这些问题:可以在多服务器的环境下运作,可以直接由前端的反向代理直接读取缓存而不用经过rails进程。并且可以像Rails原有操作缓存一样进行清理。

使用方法

安装

Gemfile中加入以下

然后命令行下更新:

使用

caches_actioncaches_page一样在Controller中指定所需缓存的页面:

super_caches_page可以有以下参数:

  • cache_path 指定缓存的key,默认是请求的路径
  • expires_in 控制了失效的时间

nginx配置

如果要发挥SuperCache的能力,那必须还得通过nginx的配置:

这样,如果nginx后端有多台Rails服务器,也可以使用静态页面缓存了。

其他好东西

除了上述的简单功能之外,我还正在筹划以下功能:

Dog-Pile Effect

所谓Dog-Pile Effect是指当某个缓存失效的时候,同时有大量请求发现没有缓存,进而请求后端的应用服务要求建立缓存,从而导致服务器卡顿甚至系统宕机的现象。

事实上很多场景下,当缓存失效的时候,只需要其中一个请求去建立新缓存,而其他请求可以使用过期的缓存继续服务。在SuperCache中,我使用Memcache来建立一个锁机制:当缓存失效的时候,只有获得锁的请求可以向后端发送请求并建立新缓存,其他未能获得锁的请求,直接缓存过期的版本。
这样就可以使缓存失效时,系统负载不会突然提升而能平稳过渡。

当然还有一些别的方式来处理这种现象,比如可以在请求之后直接更新缓存(类似Write through机制),而不是等缓存失效之后再处理,但我认为这种方式比较复杂。

目前暴走漫画使用了SuperCache的这种机制之后大大提高了响应并发的能力。

Cache Meta Info

手工处理缓存的清理非常复杂,在SuperCache将来的版本中,我会加入对缓存依赖对象的跟踪,也就是记录和ActiveRecord相关的cache key,当记录发生变更的时候,只需遍历删除对象所影响的Cache key,就可以一次搞定所有问题。

暴走漫画网站已经应用了这套逻辑,相关代码已经提交在了cache_meta_info分支中。


将来我会不断完善SuperCache这个小组件,希望朋友么多多支持,不吝赐教。

哈佛「公平」的公开课听课随感(1)

最近有空,又接着看了《哈佛大学公开课:公正-该如何做是好?》。我认为这个公开课非常好,它的介绍上是这样说的“旨在引导观众一起评判性思考关于公正、平等、民主与公民权利的一些基本问题。每周,超过1000位学生来听哈佛教授兼作家迈克尔桑德尔的课,以拓展他们对于政治与道德哲学的认知理解,探究固有观念是与非。”
与过去我在中学、大学所接收的填鸭式的教学完全不同,教授是跟学生一起进行探讨,他并非直接告诉学生,X是对的,Y是错误的,而且跟同学一起探讨,互相辩论,更重要是思辨的过程。
如果我们国家的教育,能以这样的形式,就能够开启民智,开启国家复兴的道路。

我在看完了第一第二课之后,对其中讨论的“功利主义”和“自由主义”有一些额外的想法,我想记录下来:

我认为功利主义的困境在于,大家的幸福感是不同的,是难以简单相加的;同时我认为人是会变的,某人今天吃包子很幸福,但让他吃十天包子他就不觉得幸福了。现在对于某个问题的决策,能否在将来也让人继续感觉幸福,是难以精确计算出来的。其次人往往会放大自己的感受,而对于他人的感受,则常常会忽略。这就使得在实际的社会实践操作中,仅仅遵循功利主义处理问题会非常困难。由于不可能事事都所有人来一起计算,所以一旦让某小部分有权力来进行影响大多数人的决策时,那么这部分人就往往容易倾向于根据有利于他们的判断标准来进行决策,这显然就有失公平了。我们不能假定这部分进行决策制定规则的人一定是无私的,也不能假定他们是全知的。毫无疑问的是这两点通常都不可能。
同时,部分人——比如说A——也可以为了利己的目的,欺骗另一些人——比如叫B,鼓吹A的价值更大,让认为B为A贡献、让渡资源可以得到更大的幸福等等。这在各种专制国家非常常见,在这些国家的民众的眼中,比如如果出现灾难的灾难,用100个贫民的性命来保住1个领导的性命是值得的。
所以功利主义是难以保证公平的。

而后课堂上说讲授的关于自由主义的原则,我认为它过于理想化。通过教授的讲课,我了解到自由主义的大前提之一是「每个人都是他自己的主人」。然而我认为,从自然角度来看,人并非完全是自己的主人。人的生命是父母授予的,人出生时是没有行事能力的,又由父母养育,而其又依赖于社会存活,所以我认为人并不可能完全是其自身的主人。同时,人不能脱离社会存活,同时人也不断寻求能获得他人的认可,为此,人不得不在很多事情上妥协,也丧失了自由性。
当然我个人是非常期望随着社会进步是越来越自由的,因为只有自由才能创新,才能推动社会进步。

[转]关于“抛球悖论”的一点思考

原文地址 http://techneresearcher.wordpress.com/2011/03/19/%E5%85%B3%E4%BA%8E%E2%80%9C%E6%8A%9B%E7%90%83%E6%82%96%E8%AE%BA%E2%80%9D%E7%9A%84%E4%B8%80%E7%82%B9%E6%80%9D%E8%80%83/

[注]此文是当年在吴国盛老师手下读书时写的,N年前的事情了。记得当初我写完后还直接发给吴老师看,不过倒没见他对此有什么反应。吴老师还是我的硕士论文指导老师,不知不觉很多年过去了……贴出这篇旧文,回忆下当初充满书香门第情调的那种初生牛犊般的求学感觉。

关于“抛球悖论”的一点思考

王 键

一、什么是抛球问题

在《自然本体化之误》(湖南科学技术出版社,1993年)一书关于芝诺悖论的一章中,该书的作者吴国盛教授谈到了一个与芝诺悖论相关的问题:即关于“无 限机器”(infinite machine)所产生的悖论,也被称为“超级任务”(super task)。 实际上也就是所谓的抛球悖论(问题)。

原书中的相关论述如下:“最有名的无限机器是抛球机器,它是这样设计的:一个小球从a处开始向b处抛动,令小球从a处抛到b处时花 1/2分钟,从b抛回a处花1/4分钟,依此类推,来回抛球的时间依次是:

1/2,1/4,1/8……,1/2n……

到第n次时所花全部时间是:

T=1/2+1/4……+1/2n=1-1/2n

现在要求机器在时间到达一分钟时停下来。可是问题出现了,人们发现无法确定小球最终落在何处。从上式看,当n取奇数时,落在b处,取偶数时落在a处, 可是小球越抛越快,只有在经过无限次之后才回到达一分钟,但一个无限数是没有奇偶之分的,因此,搞不清楚一分钟的时候小球处在什麽位置,也就是说,小球没 有终点,超级任务无法完成。”(参见该书第94页)

应该说,从逻辑上看这段分析是没有任何问题的。而对于这一类的问题,吴教授也表明了自己的态度:“许多人已经证明了,超级任务是不可能完成的,无限机器不存在。”(同上,第94页)

二、它的另一种表述形式

但上面这个“抛球机器”的例子有点别扭,因为它不够直观。我们很难想象一个有质量的小球可以无限加速,无穷摆动。那么很简单地,我们完全可以换个方式重新表达刚才的问题,把它转化一下:不妨暂且称其为“开关灯问题”:

假设有两盏灯,分别是a和b,现在让灯a先亮,过1/2分钟后让灯b亮,同时灯a熄灭,再过1/4分钟让灯a亮,同时灯b熄灭,依此类推,每次交换亮灯所间隔的时间依次是:

1/2,1/4,1/8……,1/2n,……

到第n次时所花全部时间的总和是:

T=1/2+1/4……+1/2n=1-1/2n

现在要考察的是:在时间刚好到达一分钟时,究竟是哪个灯在亮?是灯a还是灯b?实际上这个问题完全等价于刚才的抛球机器问题,重要的一点是:换一种不同 的表达方式可以从另一个角度使问题的实质显露的更加清楚一些。对于这个亮灯的问题,答案产生的矛盾显然是和抛球问题完全类似——在时间到达一分钟时,两个 灯不能都在亮,那么也无法最终确定到底是哪个灯在亮。

三、解释这一问题的尝试

但是,对 于那个“抛球机器”问题,悖论究竟是如何产生的呢?刚才已经说了,这段论述对问题的分析中的分析并没有逻辑上的错误。然而,它的出发点却可能是错误的—— 要产生悖论,所隐含的一个前提条件是:当时间到达一分钟时,小球只能具有一个固定的位置,要麽a,要麽b。这也就是说,如果“小球同时在a和b两个位 置”,则被认为是一种“不可能”出现的状态。而这就是所谓抛球机器悖论产生的一个基本前提。把小球换成灯泡的例子,道理也是一样的:它假定了在到1分钟 时,两个灯泡不能同时亮。由此引出悖论。问题在于,这个假定同问题的预设存在矛盾:按照题目的设计,既然到了一分钟,也就意味着次数n变成了超穷树,即 “无穷大”。那么在这个时刻,两次亮灯之间的时间差已经变成了趋零的“无穷小”。在这种情况下,两个等不能同时亮的假定已经开始失去意义。既然如此,悖论 不是自然被消解了么?

总之,这一“抛球悖论”初看起来的确有些自相矛盾,但其实却不是这个问题本身,而是这个悖论的产生:问题中出现 的小球速度无限大、违反惯性定律、加速过程如何可能等等本该颇受质疑的超经验现象都被不加怀疑地予以接受,然而当结果产生了一个超经验的现象时,它却被当 作是一个“悖论”而出现了。同样,换作灯泡的例子,两个灯泡同时亮的不可能性,却已经成为了题目预设的必然结果。而如果问题的前提本身就存在某些反常,那 麽由这些前提而产生的反常绝对不应该被当成一个“悖论”或者“反常”。

四、同芝诺悖论的区别

关于这两个悖论,我们认真思考一下就会发现它和芝诺悖论存在着一个很大的区别。当然,如果追根溯源,这几个悖论实际上在一定程度上都可以归结为数学问题。

这就仿佛同这样一个函数相类似:

f(x)=sin(1/x)

现在问此函数在0点取值是什麽?

从数学分析的观点来看,在0点, 函数值f(x)发散,且有界但并不收敛。因此从数学的观点看:问函数f(x)在0点取什么值 就是一个没有意义的问题(当然哲学家们也许并不这麽看)。

对于芝诺的悖论,关键在于一点:如果把芝诺问题化为数学函数,那麽当这个函数f(x)的变元x 趋向于某一定值时,函数值f(x)也是趋向于某一定值的(换句话说,它的数学模型是一个连续函数)。而对于无限抛球问题,将其化为数学函数后,我们会发现 此函数与芝诺悖论对应的函数完全不同:对于这个函数f(x),当变元x 趋于某一定值时,函数值f(x)将是有界的但不是收敛的(与我举的第一个函数的例子相类似)。

五、是否能得出一个结论?

我以为,出现以上悖论的实质在于赋予某些“看似矛盾”的数学结构以经验的内容。这些数学结构,也一度曾让数学家们感到困惑。但是随着数学分析基础理论的建立和奠定,它们逐渐不再被看成悖论。然而,在被赋予了某些具体经验内容之后,它们仍然是难以被理解和接受的。

如此说来,我更倾向于认为:至少可以说,从局限在数学内部的观点来看,无限抛球问题并不存在悖论。但是跳出数学的圈子、从其他的观点来看,是否也可以这麽说倒还可以存疑。

不过,我感觉提出的这个问题似乎还不够清晰——对这个问题的回答,我暂时只能保持沉默。

芝诺悖论

(来自网络)

芝诺的运动论辨全部得自亚里士多德在《物理学》中的转述,有四个:

1、二分法。物体在到达目的地之前必须先到达全程的一半,这个要求可以无限的进行下去,所以,如果它起动了,它永远到不了终点,或者,它根本起动不了。

2、阿喀琉斯(一译阿基里斯)。若慢跑者在快跑者前一段,则快跑者永远赶不上慢跑者,因为追赶者必须首先跑到被追者的出发点,而当他到达被追者的出发点,慢跑者又向前了一段,又有新的出发点在等着它,有无限个这样的出发点。(这个悖论有一个著名的故事,就是阿喀琉斯与乌龟赛跑,等乌龟先跑出一段后阿喀琉斯再起跑追赶,结果则是飞毛腿阿喀琉斯怎么也追不上乌龟。)

3、飞矢不动。任何东西占据一个与自身相等的处所时是静止的,飞着的箭在任何一个瞬间总是占据与自身相等的处所,所以也是静止的。

4、运动场。两列物体B、C相对于一列静止物体A相向运动,B越过A的数目是越过C的一半,所以一半时间等于一倍时间。

这是芝诺为了捍卫他老师巴门尼德关于“存在”不动、是一的学说,提出了著名的运动悖论和多悖论,以表明运动和多是不可能的。他的结论在常人看来当然很荒谬,但他居然给出了乍看起来颇令人信服的论证,故人们常常称这些论证构成了悖论或佯谬。不过,若细细推敲,其结论未必荒谬,其论证未必令人信服,故中性的称这些论证为芝诺论辨最为合适。

历史上对于芝诺悖论的评价和驳斥:

19、20世纪之交的绝对唯心主义者象布拉德雷全盘接受芝诺的论证和结论。他视运动、时间空间为幻象,芝诺论辩正好符合他的主张,当然全盘接受。在《现象与实在》中他写道:“时间与空间一样,已被最明显不过的证明为不是实在,而是一个矛盾的假象。”除布拉德雷之外,哲学史上大部分哲学家认为芝诺的结论是荒谬的,其论证有问题。不过,在不断检查其论证毛病的过程中,人们反倒发现了芝诺论辨的深刻之处。常常是人们自以为解决了芝诺悖论,不多久就又发现其实并没有解决。

已知最早的批评来自亚里士多德。关于二分法,他说,虽然不可能在有限的时间越过无限的点,但若把时间在结构上看成与空间完全一样,也可以无限分割,那么在无限的时间点中越过无限的空间点是可能的;关于阿喀琉斯,他说,如慢者永远领先当然无法追上,但若允许越过一个距离,那就可以追上了;关于飞矢不动,他说,这个论证的前提是时间的不连续性,若不承认这个前提,其结论也就不再成立了;关于运动场,他说,相对于运动物体与相对于静止物体的速度当然是不一样的,越过同样距离所花的时间当然也不一样。亚氏批评的意义主要在于使芝诺论辨显得更为明了,前面对诸论辨的转述就显然参照了亚里士多德的这些批评。

黑格尔对芝诺悖论的解决是:“运动的意思是说:在这个地点又不在这个地点;这就是空间和时间的连续性,——并且这才是使得运动可能的条件。”这个解决方法要点在于强调时间空间的连续性,而且对连续性赋与新的、特有的解释。不过,它似乎并没有直接针对芝诺论辨本身来提出批评,而且关于连续性的独特解释与数学和逻辑所要求的精确性不相容。受黑格尔的影响,我国哲学界一般认为芝诺不懂得连续性和间断性的辩证关系,把这两者机械的对立起来,所以造成运动悖论。这大意是说,芝诺的论证没使用辩证逻辑,因而是无效的。这种批评同样是笼而统之,不关痛痒。

进入19世纪以后,人们开始运用数学分析的方法来考证芝诺悖论。就那“阿喀琉斯与乌龟”这个悖论来说吧,现在的小学生遇到类似的追赶问题都会很容易的建立起一个方程组来算出所需要的时间,那么既然我们都算出了追赶所花的时间,我们还有什么理由说阿喀琉斯永远也追不上乌龟呢?然而问题出在这里:我们在这里有一个假定,那就是假定阿喀琉斯最终是追上了乌龟,才求出的那个时间。但是芝诺的悖论的实质在于要求我们证明为何能追上。

高等数学运用极限理论与微积分也可以得出相同的结果,而且其解答思路与悖论的表述相似,就是把一段一段跑的距离加起来,这些数列虽然有无限多项,但其总和并不是一个无穷大的数目。但是问题是,即便综合是一个有限的数,但是它却是由无限多的数(无限多的步)组成的,作为一个活生生的人,阿喀琉斯如何来实践着无限多个的步骤呢?

事实上,隐藏在这几个悖论的背后,是我们对于运动本质的思考,即何谓运动(与参照系的关系)?怎样运动(如何迈出第一步)?

希腊时代犬儒学派的创始人第奥根尼对芝诺论辨有一个回答。据说当他的学生向他请教如何反驳芝诺时,他一言不发,在房间里走来走去,学生还是不理解,他说,芝诺说运动不存在,我这不是正在证明他是错的吗?这个故事很长时间被作为一个笑话,人们大多相信,第奥根尼根本没有弄懂芝诺的意思。芝诺并不是说在现象界没有运动这么一回事,他当然承认有,但他要说的是,虽然满目是物体在飞舞,但运动是不合理的,我们可以通过逻辑证明运动是不可能的。因此,我们所看到的运动是假象,并不真实,因为真实的东西一定是合乎逻辑的。

然而我想,近年来科学家们正在研究的时空可能的量子结构也许会为芝诺悖论带来一个新的思考方向。

具体来说,在人们的传统观念中,时间和空间(也可以结合起来说成是时空)都是连续的。正如100多年前,绝大多数人和科学家认为物质是连续的。尽管自古以来一些哲学家和科学家曾经推测如果把物质分解到足够小的块,就会发现它们是由微小的原子组成,然而当时几乎没有人认为能够证实原子的存在。今天我们已经得到了单个原子的图像,也研究了组成原子的粒子。物质的粒子性已经是过时的新闻了。 在最近几十年中,物理学家和数学家想知道空间是否也由离散块组成的。它是连续的,就像我们在学校里学到的那样,还是更像一块布,由根根纤维编织而成?如果能探测到足够小的尺度,我们是否能看到空间的“原子”,它们的体积不能被分割成更小的形态?对时间来说,情况又怎样呢?自然界是连续变化的,还是世界以一系列微小的步伐来进化。

如果世界真是如此构建的话,那么时空也就变成了“一份一份”的单元,我们就能得到一个最最极限的长度,一个最最极限的面积,一个最最极限的体积(圈量子理论认为,这个长度是普朗克长度10^-33厘米,面积是普朗克长度的平方,体积则是普朗克长度的立方)。而这在原则上就否定了芝诺第一、二悖论关于时空是连续的假设。

于是再回过头看芝诺关于阿喀琉斯追赶乌龟的悖论。随着阿喀琉斯越来越接近乌龟,他们之间的距离差越来越小,但这个距离现在并不是趋于无穷小,而是有一个极限――空间量子的最短距离。因为阿喀琉斯的速度大于乌龟,于是在这一确定距离的路程上他经过的时间要比乌龟短――胜负已分,在这里阿喀琉斯终于超过了乌龟!

类似的道理,对于第一个悖论,全程的中点并不是可以无限分割的,它同样遇到了空间量子距离的限制――因此从根本上否定了这个悖论。

但是,对于第三和第四个悖论却比较难回答。前面说了,第一第二个悖论事实上就是建立在假设时空是连续的基础上来说明无论是绝对运动或是相对运动都是不可能的;而第三和第四个悖论却体现了假如时空不是连续的,运动同样是不可能的。还有,芝诺悖论它不仅涉及到运动场所(背景)本质的特性问题,如第一、三悖论;也有关于运动本身(包括运动的发生和过程)的考量,如第二、四悖论——这是芝诺悖论的另一大难题。但是随着物理学的发展,我们对于运动本性的问题可能也可以回答一部分。

先来看一个实验,乃是关于中子是如何在重力场中下落的。东西往下落,这可谓是最稀松平常的一个运动现象了,它是最最基本的运动方式之一,我们每天都能见到,实践这种运动,并且说白了,芝诺的飞矢实际上做的就是这种运动。那么,在中子下落的过程中,科学家们观察到什么有趣的事情了吗?答案很出乎人们的预料:实验过程中的中子在下落中都只出现在不连续的高度上!这说明,重力场本身是已量子化的,运动其间的物体的运动过程同样是量子化的,它就如电子跃迁只能出现在不连续的能级上的行为一样(这已被量子力学所深入考察印证)。于是,整个世界就如一部异常精细的电影,我们如胶片般一帧一帧地随着时间运动、演化。只不过一帧帧间的时间间隔不是0.04秒,而是一单位普朗克时间。帧与帧间的动作差别也是极其微小的,最小单位乃是一单位普朗克长度、面积或是体积。芝诺对于飞矢不动的现象的论断是正确的,因为一帧画面它就是静止的,但他由此导出的运动不可能的结论却是值得商量的。

也许你要问,为何到现在我还不能说芝诺是错的,仍要用“值得商量”这个词?那是因为无论前面说的时空结构是量子化的,还是运动过程是量子化的也好,这些都只解决了一个“运动过程是可能的”的问题,它只是将经典的芝诺悖论转化为“量子芝诺悖论”而已。芝诺悖论的更深的意义在于它还质疑了“运动的发生”也就是为何会动或称“第一步”的问题。就算把“飞矢”的问题量子化后,如果加进考虑“坍缩”,还会出现一个奇怪现象:假如我们一直观察系统,也就是飞矢的“每一帧”,那么因为我们的观察它的波函数必然总是在坍缩,薛定谔波函数从来就没有机会去发展和演化。这样,它必定一直停留在初始状态,看上去的效果相当于飞矢停滞了。在这个问题上我还没有什么好的思路,有一点想法就是它也许与我们的精神对于量子效应的决定作用有关:意识使得波函数坍缩——使得物质波不再随着薛定谔方程演化,而成为一个客观实在(仅限于量子的哥本哈根解释)。物质由这样诞生,反过来说要是使运动也有可能,人意识的作用大概也必不可少吧。想到这里,我不由得再次敬佩起芝诺来,他所提出的悖论是多么的深刻啊,真是值得我们好好探究再探究。