最近看到一个汽车对冰淇淋过敏的小故事,转述如下:
某汽车公司收到投诉信,用户抱怨说他每晚都从家里开车去商店买冰淇淋。如果买的是香草冰淇淋,则回家时汽车就无法发动;如果买其它口味的冰淇淋,则汽车可以正常发动。天天如此。该用户怀疑这汽车是否对香草冰淇淋过敏。
汽车公司的头头觉得这太过诡异,不过还是派了一个工程师去该用户家调查原因。第一天,工程师和用户一起去买冰淇淋。在店里,工程师要求买香草口味,结果 出来后,汽车果然不能发动。此后几天,工程师每次都和用户一起去买,每次都由工程师临时决定买什么口味。果不其然,凡是买了香草口味,汽车就无法发动;反 之则可以。(由于是工程师临时决定购买的类型,可以排除用户搞恶作剧的可能)
这个工程师是一个理性的人,也不信神,当然不会相信汽车过敏这一说。但是他觉得有更深层的原因在起作用。此后,他每天晚上和该用户一起去买冰淇淋,每 次他都详细记录往返的时间、途中踩油门和刹车次数、使用的汽油型号等各种信息。许多天后,他终于发现规律:凡是买香草口味的,在商店里面花的时间少(因为 这个口味受欢迎,摆放的货架靠门口)。
于是问题就转化为:停车的时间短导致汽车不能正常发动。然后,工程师就轻易找到了原因(当停车时间太短,发动机依然很热而无法驱散气阻)。
这个故事给我们几个启发:
1、不要拒绝接受貌似很诡异、很离奇、很不可能的现象。我手下的很多程序员都曾经抱怨测试提交的某个bug太怪异,对这些bug不予承认。你想一想自己是否也有类似情况?
2、要善于从一些细节发现规律,从而查出问题的根源。如果你是这个工程师,你能否通过细致的观察而发现其中的规律?
----------------
编程随想的blog
http://program-think.blogspot.com
某汽车公司收到投诉信,用户抱怨说他每晚都从家里开车去商店买冰淇淋。如果买的是香草冰淇淋,则回家时汽车就无法发动;如果买其它口味的冰淇淋,则汽车可以正常发动。天天如此。该用户怀疑这汽车是否对香草冰淇淋过敏。
汽车公司的头头觉得这太过诡异,不过还是派了一个工程师去该用户家调查原因。第一天,工程师和用户一起去买冰淇淋。在店里,工程师要求买香草口味,结果 出来后,汽车果然不能发动。此后几天,工程师每次都和用户一起去买,每次都由工程师临时决定买什么口味。果不其然,凡是买了香草口味,汽车就无法发动;反 之则可以。(由于是工程师临时决定购买的类型,可以排除用户搞恶作剧的可能)
这个工程师是一个理性的人,也不信神,当然不会相信汽车过敏这一说。但是他觉得有更深层的原因在起作用。此后,他每天晚上和该用户一起去买冰淇淋,每 次他都详细记录往返的时间、途中踩油门和刹车次数、使用的汽油型号等各种信息。许多天后,他终于发现规律:凡是买香草口味的,在商店里面花的时间少(因为 这个口味受欢迎,摆放的货架靠门口)。
于是问题就转化为:停车的时间短导致汽车不能正常发动。然后,工程师就轻易找到了原因(当停车时间太短,发动机依然很热而无法驱散气阻)。
On 2月2日, 下午6时01分, Kenny Yuan <yuankain...@gmail.com> wrote:
> 越来越讨厌伊索寓言式的故事了
On 2月3日, 上午10时20分, sagasw <sag...@gmail.com> wrote:
> 我一直坚持的一个观点,就是程序员必须具有福尔摩斯一样敏锐的想像力、观察力,另外要像福尔摩斯一样大量收集资料、学习相关领域。
>
> 这也算是一个bug,任何一个bug都不会是灵异事件,一定是有什么问题发生,缩小范围,减小重现的条件,简化到一个不能再简化的模型,自然就容易找到问题了。
>
> 2009/2/2 编程随想 <program.th...@gmail.com>
>
> > 最近看到一个*汽车对冰淇淋过敏*的小故事,转述如下:
>
> > 某汽车公司收到投诉信,用户抱怨说他每晚都从家里开车去商店买冰淇淋。如果买的是香草冰淇淋,则回家时汽车就无法发动;如果买其它口味的冰淇淋,则汽车可以正常 发动。天天如此。该用户怀疑这汽车是否对香草冰淇淋过敏。
> > 汽车公司的头头觉得这太过诡异,不过还是派了一个工程师去该用户家调查原因。第一天,工程师和用户一起去买冰淇淋。在店里,工程师要求买香草口味,结果
> > 出来后,汽车果然不能发动。此后几天,工程师每次都和用户一起去买,每次都由工程师临时决定买什么口味。果不其然,凡是买了香草口味,汽车就无法发动;反
> > 之则可以。(由于是工程师临时决定购买的类型,可以排除用户搞恶作剧的可能)
> > 这个工程师是一个理性的人,也不信神,当然不会相信汽车过敏这一说。但是他觉得有更深层的原因在起作用。此后,他每天晚上和该用户一起去买冰淇淋,每
> > 次他都详细记录往返的时间、途中踩油门和刹车次数、使用的汽油型号等各种信息。许多天后,他终于发现规律:凡是买香草口味的,在商店里面花的时间少(因为
> > 这个口味受欢迎,摆放的货架靠门口)。
> > 于是问题就转化为:停车的时间短导致汽车不能正常发动。然后,工程师就轻易找到了原因(当停车时间太短,发动机依然很热而无法驱散气阻)。
>
> > 这个故事给我们几个启发:
> > 1、*不要拒绝接受貌似很诡异、很离奇、很不可能的现象*
> > 。我手下的很多程序员都曾经抱怨测试提交的某个bug太怪异,对这些bug不予承认。你想一想自己是否也有类似情况?
> > 2、*要善于从一些细节发现规律,从而查出问题的根源*。如果你是这个工程师,你能否通过细致的观察而发现其中的规律?
>
> > ----------------
> > 编程随想的blog
> >http://program-think.blogspot.com
一个贫穷的农夫向上帝祈祷赐予他财富。上帝果然听到了,对他说:我可以赐予你财富,但是无论我给你多少,都会给予你的邻居们双倍。
结果,农夫说,我想要我的庄稼毁掉一半。
On 2月3日, 下午12时55分, Kenny Yuan <yuankain...@gmail.com> wrote:
> 同意一下下
> 海森堡型的BUG最讨厌(without reproducing steps)
> 而可重复出现的BUG,多数很快就能够找到原因
>
> 2009/2/3 pi1ot <pilot...@gmail.com>
海森堡型的BUG,这个比喻很恰当,曾有过一个bug,当调试,甚或增加一个printf来打印可以数据时,bug就奇妙地消失了。折腾了好多次,发现
原来是不管是调试,还是printf,都增加了两个函数调用的间隔时间,而bug只有在间隔时间短的时候才出现
public int GetRandom()
{
Random random = new Random(DateTime.Now.Millisecond);
return random.Next();
}
int[] array = new int[10];
for (int i = 0; i < array.Length; i++) {
array[i] = GetRandom();
}
问我,为什么单步调试时是好的,直接执行数组里就都变成一样的了呢?
Jeffrey Zhao
--------------------------------------------------
From: "rockeet" <roc...@gmail.com>
Sent: Tuesday, February 03, 2009 2:02 PM
To: "TopLanguage" <pon...@googlegroups.com>
Subject: [TopLanguage] Re: 学会透过现象看本质,即使现象有时候挺诡异
我想到了这个,有人问我:
public int GetRandom()
{
Random random = new Random(DateTime.Now.Millisecond);
return random.Next();
}
int[] array = new int[10];
for (int i = 0; i < array.Length; i++) {
array[i] = GetRandom();
}
问我,为什么单步调试时是好的,直接执行数组里就都变成一样的了呢?
On 2月3日, 下午1时51分, pongba <pon...@gmail.com> wrote:
> 2009/2/3 Kenny Yuan <yuankain...@gmail.com>
>
> > 伊索寓言
>
> 我也相信寓言故事本身价值是很小的,我们中国的学生从小看了N多的寓言,但结果全都忘掉,啥也没学到。比如小时候估计每个人都听过的"白头翁"的故事:因为什么-都想学,什么都学不精,所以白了头也没学到啥东西。另外还有很多禅宗的寓言更是晦涩。
>
> 我想最重要的原因是寓言本身设定了故事发生的情境,这个情境阻碍了我们将其中的道理推广到其他陌生但本质一致的情境中去。比如白头翁的故事的情境就是一只小鸟,-可我们并不是一只小鸟。另一个原因就是生活中的情境几乎总是很复杂的,几乎总是有更高优先级的规则来驱使我们的行为,譬如我们固然知道要专一学习一样东西,但是-平时看到某个牛人提到某样知识我们却不知道,很少有人会忍住模仿的冲动吧?
>
> 话虽如此,寓言本身并没有任何问题,问题在于我们是不是充分地进行了思考,寓言里面的道理是真正切切的,即便寓言本身是虚构的,问题就在于我们是否能够提取出这-个道理的本质,是否能够将它记住并在需要的场景下从脑海中提取出来,后者才是真正困难的事情,也是(我认为)很多人之所以看了故事却不长记性的原因。
>
> 我相信寓言本身并没有错,因为所有道理都是要从具体事件当中观察提取抽象出来的,并且在说理的时候我们时时必须借助于故事(实际的或杜撰的)来令人印象深刻,人-的认知系统的本质决定了如此。
2009/2/3 Jeffrey Zhao <je...@live.com>:
On 2月3日, 下午2时07分, pongba <pon...@gmail.com> wrote:
> 2009/2/3 rockeet <rock...@gmail.com>
>
> > 海森堡型的BUG,这个比喻很恰当,曾有过一个bug,当调试,甚或增加一个printf来打印可以数据时,bug就奇妙地消失了。折腾了好多次,发现
> > 原来是不管是调试,还是printf,都增加了两个函数调用的间隔时间,而bug只有在间隔时间短的时候才出现
>
> 这么说的话,难道不应该是海森堡bug更容易捕捉吗?普通bug是要大海捞针,而海森堡bug意味着我们加入的调试手段改变了程序的行为,那么只要从调试手段引 入了哪些变化上找就行啦(至少我们知道where
表面上看起来这种干扰很麻烦,其实反而告诉我们更多的细节。例如前面的例子,单步没有问题,执行有问题。那么最直观你知道单步和直接执行的差别是什么?时间,呵呵。
On 2月3日, 上午12时04分, Kenny Yuan <yuankain...@gmail.com> wrote:
> 其实你说的是好寓言,好故事。在这个前提下,我也赞同你的说法。
> 但我说的伊索寓言是真正的伊索寓言,不是人们印象中的那个伊索寓言。其实伊索寓言里面只有少量精华,多数故事都很牵强附会,我读过在网上搜来的伊索寓言全集(可能不是真正最全的,似乎几百K??),其中能让人信服的寓言故事少之又少,多数都和那种典型的宗教故事一样缺乏合理性。例子我就不举了(暂时也背不出来),我相信想求证的人会去搜索的。
> 与此同类的东西还有一本《本草纲目》,鸡屎白,大便,尿,黑驴肉,死人枕席,猪肉,雄鸡……都是药材,比如治疗口腔溃疡是用"鸡屎白一升绞汁服"。我相信这样的事实和许多人的道听途说来的印象很不一致、相当地不一致。(感兴趣的同学也可以去搜一下本草纲目的全文)
>
> 2009/2/3 pongba <pon...@gmail.com>
>
>
>
>
>
> > 2009/2/3 Kenny Yuan <yuankain...@gmail.com>
2009/2/3 pi1ot <pilo...@gmail.com>:
--
Xunhao Li
Department of Computing Science
University of Alberta
Edmonton, Alberta, Canada
这里我想插一句,电子计算机没有海森堡这样的BUG,有的话也是人为产生的错误,因为计算机是建立在确定性图灵机上的。
海森堡BUG可能会出现了量子计算机上。
恩,这是我的理解,大家请指正。
也就是除非你直接联想到,否则我还是更认同重现场景的分析,更有助于联想。这里是发动机的问题,如果说正好买冰激凌的地方有一口高温下水道由此导致的温
度偏差引起BUG,恐怕就不是开开车去别的地方跑就可以重现的。
On 2月4日, 下午1时56分, "Jeffrey Zhao" <je...@live.com> wrote:
> 但是既然相信它和冰激淋无关,为什么非要按照冰激淋的步骤来呢?香草冰激淋只是个充分条件,我可以轻易证明它不是必要条件,这个对于改bug很有帮助阿。然后最后再来检验(或是证明)用户的问题被解决掉了,不就可以了吗?
>
> 这就好比我的项目的例子,我的系统会有测试人员汇报bug,也会有不懂技术的编辑发现问题然后汇报----有的时候也会有类似冰激淋和汽车的这种非常"可笑"的现象,我不觉得技术人员应该直接使用这种可笑的步骤来重现问题。
>
> 故事里的工程师对可笑的步骤进行采样和分析问题,只能说明他严谨,不能说明这是个好办法----试想他统计了那么多数据,不也说明要求顾客买了n多次冰激淋吗?
>
> Jeffrey Zhao
>
> From: sagasw
> Sent: Wednesday, February 04, 2009 1:46 PM
> To: pon...@googlegroups.com
> Subject: [TopLanguage] Re: 学会透过现象看本质,即使现象有时候挺诡异
>
> 估计是没有改过bug的吧,
> 既然是重现问题,就要按照原来的步骤走,要不然,怎么能证明你解决的问题是用户发现的问题呢?
>
> 2009/2/4 Jeffrey Zhao <je...@live.com>
>
> 其实我觉得这个故事,为什么非要把香草冰激淋和汽车故障联系起来。如果我是工程师,就不会非要用户去买香草冰激淋阿。我可能随便开几圈,停下,然后在短时间内启动发现失灵了,或者就在失灵时直接去发现汽车无法启动的机械原因。
> 现在好,还是发现机械原因,附加一个:购买香草冰激淋所花时间短----但是这又有什么用。
>
> Jeffrey Zhao
>
> From: wing fire
> Sent: Wednesday, February 04, 2009 1:18 PM
> To: pon...@googlegroups.com
> Subject: [TopLanguage] Re: 学会透过现象看本质,即使现象有时候挺诡异
>
> >这个工程师是一个理性的人,也不信神,
> >当然不会相信汽车过敏这一说。但是他觉得有更深层的原因在起作用
>
> 问题不是如此简单。
>
> 是什么导致工程师有这样的出发点呢?换作上古的萨满巫师,会有这个出发点吗?
>
> 另外,在一个真正的问题面前,我们不总是能像这个工程师这样坚定自己的眼光。另外,解决问题的过程也可能是无比困难的,如果尽您一生不能解决,又将如何?
>
> 我们轻易地确定汽车过敏,鸡屎白一升是荒谬的。那么夸克呢?粒子汤呢?还有古老的以太呢?会冠以荒谬一词吗?让我假设另一个结局:香草冰激凌散发的香精在高温下和润滑油发生催化反应导致过于粘稠而不能启动。
>
> 看透本质的能力不是学到的,是经历了之后领悟的。我们所看到的本质,也未必是问题的根本。仁者见仁,智者见智。看到的都是本质,这个本质却各不相同。
>
> 我想说的是,把这几个小故事里的智慧用来对付现实问题,不现实。
>
> ---------------------------------------
> 绝圣弃知,大盗乃止;擿玉毁珠,小盗不起;
> 焚符破玺,而民朴鄙;掊斗折衡,而民不争;
> 殚残天下之圣法,而民始可与论议。
>
> 2009/2/4 Li Xunhao <dante.hay...@gmail.com>
>
> 这里我想插一句,电子计算机没有海森堡这样的BUG,有的话也是人为产生的错误,因为计算机是建立在确定性图灵机上的。
> 海森堡BUG可能会出现了量子计算机上。
> 恩,这是我的理解,大家请指正。
>
> 2009/2/3 pi1ot <pilot...@gmail.com>:
Jeffrey Zhao
--------------------------------------------------
From: "MIK" <china...@gmail.com>
Sent: Wednesday, February 04, 2009 2:48 PM
To: "TopLanguage" <pon...@googlegroups.com>
还是要根据实际的情形来判定,您说对么?
On 2月3日, 下午11时06分, "Jeffrey Zhao" <je...@live.com> wrote:
> 我并不是说因为"认准了冰激淋和汽车无关"所以"肯定不应该按照这种可笑的方法来发现问题",当尝试的各种其他方式都无法重现问题时自然就回到最直接的重现方式上面去了,否则也是种"认死理"。但是我一定不接受故事里的方法,认准了冰激淋而解决问题。而恰好这个故事是一个反面教材,因为如果从一开始就不从冰激淋入手,那么可能早就解决问题了。
>
> Jeffrey Zhao
>
> --------------------------------------------------
> From: "MIK" <chinamix...@gmail.com>
Jeffrey Zhao
--------------------------------------------------
From: "MIK" <china...@gmail.com>
Sent: Wednesday, February 04, 2009 3:23 PM
On 2月3日, 下午11时32分, "Jeffrey Zhao" <je...@live.com> wrote:
> "根据实际情况来判定",这简直是一定的,呵呵。
>
> Jeffrey Zhao
>
> --------------------------------------------------
希望” 莫华枫”老兄将邮件客户端的设置调整一下
每次回帖子都直接跟在引文后,引文和回文混在一起了,阅读很困难。
From: pon...@googlegroups.com
[mailto:pon...@googlegroups.com] On Behalf Of 莫华枫
Sent: Wednesday, February 04, 2009 4:56 PM
To: pon...@googlegroups.com
Subject: [TopLanguage] Re: 学会透过现象看本质,即使现象有时候挺诡异
2009/2/4 Kenny Yuan <yuank...@gmail.com>
因为从后往前读违反阅读习惯。
为什么很难读?
因为这样很难读。
为什么回帖子要放在引文后?
最近看到一个汽车对冰淇淋过敏的小故事,转述如下:
某汽车公司收到投诉信,用户抱怨说他每晚都从家里开车去商店买冰淇淋。如果买的是香草冰淇淋,则回家时汽车就无法发动;如果买其它口味的冰淇淋,则汽车可以正常发动。天天如此。该用户怀疑这汽车是否对香草冰淇淋过敏。
汽车公司的头头觉得这太过诡异,不过还是派了一个工程师去该用户家调查原因。第一天,工程师和用户一起去买冰淇淋。在店里,工程师要求买香草口味,结果出来后,汽车果然不能发动。此后几天,工程师每次都和用户一起去买,每次都由工程师临时决定买什么口味。果不其然,凡是买了香草口味,汽车就无法发动;反之则可以。(由于是工程师临时决定购买的类型,可以排除用户搞恶作剧的可能)
这个工程师是一个理性的人,也不信神,当然不会相信汽车过敏这一说。但是他觉得有更深层的原因在起作用。此后,他每天晚上和该用户一起去买冰淇淋,每次他都详细记录往返的时间、途中踩油门和刹车次数、使用的汽油型号等各种信息。许多天后,他终于发现规律:凡是买香草口味的,在商店里面花的时间少(因为这个口味受欢迎,摆放的货架靠门口)。
于是问题就转化为:停车的时间短导致汽车不能正常发动。然后,工程师就轻易找到了原因(当停车时间太短,发动机依然很热而无法驱散气阻)。
这个故事给我们几个启发:
1、不要拒绝接受貌似很诡异、很离奇、很不可能的现象。我手下的很多程序员都曾经抱怨测试提交的某个bug太怪异,对这些bug不予承认。你想一想自己是否也有类似情况?
2、要善于从一些细节发现规律,从而查出问题的根源。如果你是这个工程师,你能否通过细致的观察而发现其中的规律?
----------------
编程随想的blog
http://program-think.blogspot.com
2009/2/4 Kenny Yuan <yuank...@gmail.com>
- Show quoted text -
这种故事不是用来吵的,是用来悟的。如果一个人能够从中得到什么启示,那么就是有用的。否则,就不用去理它。
2009/2/4 string <x.tos...@gmail.com>:
> LS,你应该要把你要写的东西放在前面才对。
> 下面才是引用的内容
>
> 2009/2/4 莫华枫 <longsh...@gmail.com>
>>
>>
>> 2009/2/4 Hook <hoo...@gmail.com>
你的这种引文格式也很让人郁闷,标准的应该是加'>'的。这样邮件客户端就可以把引文和正文识别为不同的颜色,方便阅读。
2009/2/4 zhusupe <zhudo...@gmail.com>:
Gmail 和 google group 默认的是 top post。但是我支持 bottom post。
大段的讨论 bottom post 看起来很舒服。回复放到上面很难让人知道哪句
话是对应哪个问题,以及这个问题的来龙去脉是什么、在这个问题上发生过
什么样的争论。因为不能把所有的相关邮件都一下子显示出来,所以参与讨
论的人在回复的时候保留必要的详细的引文。而且邮件很可能顺序错乱,对
比较热的话题,没有引文看起来就全乱了。对应的回复内容应该在引文的下
方 —— 至少符合我的阅读习惯 :)
简端的讨论 top post 看起来可能更舒服一点儿 —— 问题一目了然、邮件顺
序不混乱的话,引文反倒影响阅读。灌水式聊天大多数时候也适合top post,
不需要关心回复对应什么问题,只要回复的内容本身有意思就行了。要是有
针对性的进行讨论,我还是喜欢 bottom post + 必要引文。
似乎完全跑题了... 呵呵
我感觉可再现的bug,不难找,难搞的是那种来去无踪,时有时无的bug。最近项目里,有个很简单的ftp获取文件的模块,在两台机子上同时实施,一台
完全正常,一台有时好,有时就会磕磕巴巴,看log文件,取一个文件老是取2次才能取到文件。但有时候就会很好。网络环境互换,获取时间段调整,都没
用。在测试机上也一切OK。单纯只执行Ftp模块,也不行。不知道各位有什么建议么?Log文件奇怪的一点是,开始1分钟左右,是OK的,后面就要每个
文件去2次,第一次失败,取第二次成功。
大段的讨论 bottom post 看起来很舒服。回复放到上面很难让人知道哪句
话是对应哪个问题,以及这个问题的来龙去脉是什么、在这个问题上发生过
什么样的争论。因为不能把所有的相关邮件都一下子显示出来,所以参与讨
论的人在回复的时候保留必要的详细的引文。而且邮件很可能顺序错乱,对
比较热的话题,没有引文看起来就全乱了。对应的回复内容应该在引文的下
方 —— 至少符合我的阅读习惯 :)
简端的讨论 top post 看起来可能更舒服一点儿 —— 问题一目了然、邮件顺
序不混乱的话,引文反倒影响阅读。灌水式聊天大多数时候也适合top post,
不需要关心回复对应什么问题,只要回复的内容本身有意思就行了。要是有
针对性的进行讨论,我还是喜欢 bottom post + 必要引文。
似乎完全跑题了... 呵呵
今天比较有闲,所以我来解析一下这个故事中技术问题
先说说什么是气阻(气锁)
对于发动机来说,气阴这个词是说进气道内的空气阻力。气阻过大时会影响混合气进入燃烧室,这时就形成了气锁。