植物大战僵尸2对工程师的启示

植物大战僵尸2对工程师的启示

注意此文虎头蛇尾,列了好几点,后面的都没有展开。

有的哲学家认为,世上万物都是彼此联系的。所以,鸠摩智才可以被比拟为全栈工程师,所以,我才能东扯西扯一些文字但是自己认为这是在谈技术。有的同学可能说,你为什么说"有的哲学家"呢,因为确实有的哲学家认为世界是由单子组成,而单子之间绝无联系,比如

莱布尼兹就是这样认为的。就是那个莱布尼兹,与牛顿分别独立发明微积分的数学家,他兼职哲学家。

扯远了。世上万物都是彼此联系的,所以,植物大战僵尸2对工程师有如下启示。不是指这一优秀的游戏作品对工程师努力创业方向的启示,这将在第一点否定,而是指我打通关的过程中,对我这个工程师个别人的启示。

1. 想法不重要,执行力更重要

植物大战僵尸2(以下简称植2)里,你有一千个想法也没有用,你的手速得够快,失误得足够少,更重要的是,你手里的阳光、插槽、能量豆得够多。

十余年前就有老板问过我,此后很多老板又问过我同一问题,"你有啥想法可以用来创业"。我没有想法。我只想做个平庸的人,用技术为人民服务。至于什么才是人民需要的,我认为有另一种人更有资格回答,他们专门从事创业。

也有人问过我,你在工作中就没有什么感到不方便的地方吗,要知道,世界是由懒人推动进步的。我的确有感到不方便的时候,然后自己鼓捣个小工具解决,但是通常大家都对我的方法感到更不便,虽然他们同时也希望我帮助解决--使用他们感到不便的方法。换句话说,我用方法产生的效益本身为大家服务,而不是用方法为和我一样的工程师服务。

也有人针对以上说过,能找出共通的问题,帮助更多的跟你一样面临困境的人,是件好事。那么,问题是,我不是能找出共通的问题的那个人,我自知没有这样的能力。又,我通常不面临困境。

屁股决定立场,所以我认为点子不重要。

有些人老有想法了。每打完一局扑克牌,他们就回顾刚才那局。"我要是先出红桃三,然后你就会出红桃四,我就地灭了你..."当然,凡牌艺惊人的,必然要review;但是review的,大抵牌艺也糟烂无异于常人。因为他们一厢情愿地乐观认为,自己就是能这样操控这个世界。

类似的,打星际/魔兽/帝国/dota/cs/cf/cx,每局之后必嗟叹,"哎呀,我就差那么一点点。我刚刚要是再什么什么一下就好了。"大有"天不与我,非战之罪也"的气势,然后喝一声"不服,再来战"。然而,我们看到了一张多么生动的赌徒的形像--下一注,我一定能赢。

我相信,人类在基因里一定有那么个常数,凡超过这个比例/几率的,我们就会认为行了,"快成功了"。有些人,这个阀值可能比较低一些;这些人中的一部分,可能进一步认为这些值是每次相关联的,尽管有波动,但是天下大势会越来越有利于我。游戏、赌博这类活动,其中成功的范例估计就抓住了这个常数,让正常人类的行动结果刚好在常数附近,所以大多数人误认为--快成功了。而理工类学习为什么不那么受待见,也许,有点偏离常数吧。

review扑克的,你以为你出红桃三人家就出红桃四,而且是在下一次局面不同的情况下?review dota的,你以为你的操作能够更快一些,在你手速不变的情况下?

我们高估点子带来的成功几率,往往还同时高估自己的行动力。

经常有老板或想成为老板的人忽悠同学们,这么整这么整,未来铁定是咱们的,然后对你不参与嗤之以鼻。要想让技术人员投入参与跟骗风险投资差不多,要么,说服技术人员,他们是同盟不是牛马;要么,给确定的投资回报。否则,我的答复总是:乐意整你自己整去。如果你有足够的执行力,你就自己整了,还在这儿跟我废话么。

2. 战略很重要

植2里常有这样的关卡,纵使你手速无敌,植物种类满满,插槽够多,你仍然打不过去。比如有些关卡加了限制,只能用这些阳光,只能使用给定的植物。

打帝国时代的时候,高哥也给我深刻的教训。当时,我建几乎所有建筑都能用快捷键,部队全编号,而他只会单手鼠标操作,而且够慢。但是,在他的土耳其火枪手面前,我仍然溃败。究其原因,其实极其简单,咱们课本里都有,"集中优势兵力,各个歼灭敌人"。道理简单,如何做到这一点,包括决心、确保歼灭充分而不过度,尤其是如何在大局失利的情况下创造局部兵力优势,却很难做到。

战略。

战术,尤其是个人战术再漂亮,也不足以弥补战略错误带来的损失。选哪些植物,如何编阵,先期如何发展,后期如何收官。想明白所有这些,都比一时一地的小利,一次点击比别人快0.1秒要重要。方向性错误比偶尔的小失误带来的损失要大得多。

某些人所谓点子很重要,也许,也是想说明战略比战术重要吧。

3. 各有所长,勿求全责备;针对场景

4. 小错误可以纠正,但是不可积累

5. 确定的边界

6. 初期非常重要,可以付出代价保证资源积累

7. 资源有限 & 退一步策略,让敌人多挨一会儿打

--------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

梦见老同学,及李娜夺冠

梦见老同学,及李娜夺冠

李娜夺冠之夜,大学同学的群里一片叫好之声,大有女神常在的气势。大家的性格还是跟大学时差不多,没啥变化,喜欢喊的还是喊,不吱声的还是不吱声。老geda不在群里,不然他估计又该大放厥词了。晚上就梦到了他们夫妻俩。

说是大学同学又聚会了,就在东岭火锅城边的烧烤摊上。大家喝得差不多,我去买什么东西,还是去取钱,回来的时候有几个人已经走了,剩下的正准备散伙小范围再喝。我跟老geda正有话没聊完,就邀请他俩,去我那坐坐,喝杯咖啡,继续话题。

正谈到的话题是老geda出了三张专辑了,重金属的。而我深知他五音不全,跑调得厉害,厉害程度不亚于我。与我不同者,十分敢吼。我说,你这三张专辑是咋出的啊。他说,在大学一边教课,没事就上了个班儿,学完就出了一张,看反响不错,之后几年又出了两张。我说,那你原来的工作呐?他说:那都不影响,就是几天的事儿。我问:你唱歌跑调是怎么解决的啊?这个我着实关心。他说,贝克大学的培训班对这个根本就没提,觉得不是个问题,唱着唱着就好了。

梦里此时说,老geda是在贝克大学就职。

我们三人走在从东岭南街去我工作室的小路上。正修路,石砾沙子和灰堆到处都是,筑得跟堤坝似的。天正冷,所有的坑包都冻得很硬,踩上去非常容易崴了脚。老geda说,你这路挺不好走啊。我对这两个常年在国外的人说:只有修路的时候这样,平时挺好的,不过总是在修路就是了。

他俩还穿着大学时衣服,老geda是一件风衣还是像风衣的羽绒服,刘同学毛绒绒的。天太冷,他们都连脑袋带肩地包着,就露出俩眼睛,围脖是不知道临时从哪里找来的长布条,大红,上面还有白色的字写着的标语,似乎跟护林防火有关。怪不得刚才同学们也不怎么跟他们聊天,可能是觉得他们穷得不行。其实出门在外,也不能把整个家带在身边,缺东西临时拼凑也正常,不见得如同学们想得过得那么差。

想到缺东西,我提议今晚他们就住我工作室,可暂时容身。又谈起他们有没有想回国的念头。

说是联系了某JL大学,老geda抱怨,整个项目得从教研组长系主任到校长层层签字,而且每层都要跟自己的文件核对,稍有不同打回重写,麻烦死了。他还是那个语气,说到"麻"字的时候,把着重音,像是要从喉咙里把这口痰清出来。

我说,D大校长说了,只要你回来跟他打天下,天下都是你的。刘同学说,哎呀,D学术根本不行。

还提到联系了XG大学,都签了合同,也是办事程序冗长,他们打算放弃了,继续在国外呆着。

我说国内都是这样啊,审批嘛,你在国外不这样?老geda说,在贝克大学,有什么事都是打电话给校长,然后就办了,俺们根本不明白这些程序。

梦里此时插入后话,某JL大学的财务处长被撤了,XG大学的校长被撤了,也同意老geda夫妇违反合同拒绝就职。

这个故事乱糟糟地说明了什么?在李娜夺冠以前,媒体

(和公众)对她也就是观望,时不时还冷嘲热讽两句。如何李娜夺冠了,她以前"骂观众""骂记者"等等都一抹了之,成为成功的典范,青少年的榜样。权威机构一旦定性,大家就一拥而上,表示我也赞同,措辞都抄过来,或者与有荣焉,或者齐举棒痛打落水狗,好不要脸。

我并不是说你原来就喜欢并佩服李娜,现在不能表达一下,不过你有没有在大家都冷着脸的时候去献过一朵鲜花呢,还是就默默地安全地看着她挺过来,从未表态。至关重要的态度不是"我看好你",而是"无论你成败,你的选择都是正义的,我支持这一点"。

我特意用词"正义",是因为要回避"你的选择是正确的"。国人之所谓正确,大抵意谓"成功""得利"。有正确结果的,才是正确,那就是功利。以功利衡量行为也许对付,用于度量人和人与人之间的关系,就像一群群食腐动物跟着狮子或者什么的屁股后面,你胜了我就跟上,你败了我也就跑,鲜见狮子被咬了,土狼冲过去救助。一般我们不乐意使用,但是确实有个词形容这种态度,我们把它叫做"势利"。

李娜单飞,首先是个道义和权利的问题,然后才是成败。无论成败,对于单飞是否道义和权利判断,都没有任何影响。现在的形势,颇有些成王败寇的意思。就像老geda夫妇,看着他们穿戴着条幅、不通世事,好像穷酸的底层青年教师,但是一旦显露出能左右财长校长的仕途,就变身为牛人了,或者变成资源了。其实,他们还是他们。就像上次真的没做梦的同学聚会的时候,佟同学的观点,大家聚会,谈谈感情,谈谈思念得了,比较什么社会地位。同学变成资源的时候,同学就不再是同学了,而是资源。A变成B,A就不是A而是B,多简单的道理,而有些人总想兼得,希望A同时也是BCDEFG至字母表的最后。

--------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

毕业赠言吧:不要怕,向前走;及最简单的方法,遍历

毕业赠言吧:不要怕,向前走;及最简单的方法,遍历

今天铁子同学放假回家,我们约了晚上吃饭。白天我行程匆匆,等见面的时候,他的时间只够聊天,不够吃饭了。而且外面巨冷,就像小时候,冻得嘴疼那种。所以,我们在办公室守着暖气,足足聊了两个小时。

他提到各种不如意,前途莫测及恐惧,讲他的理想和未来。我窝在沙发里,主要是听,时不时给他讲两三个故事。走的时候,他的心情好多了。

有一个故事没有讲到,我在读者上看到的。当年我翻开读者,一般先翻到我记得是28页或者30页,那里是两页幽默笑话,然后看各种心灵鸡汤,感慨一顿。现在还记得一些。其中一个故事讲到,年轻人要远行前,问部落里长老,人生的注意事项是什么。长老说,一共六个字,前三个字是"不要怕",后三个字等以后再告诉你。年轻人听完以后上路,开始大半生拼博,按神勇无畏的原则。后来年轻人岁数大了,回乡探望,去找长老问后三个字。长老已经死啦,留给他个纸条,上面写着后三个字,"不要悔"。

年岁渐长,我的同学已经开始跟我差20岁了。想做到"不要悔",我开始觉得基本是扯淡。努力不去后悔倒是有可能,完全不后悔很难。在一些环节上想着如果选择另一条道路人生又会如何,总是常有。我现在还记得高二的时候选择文理科,当时的犹豫紧张。

"不要悔"做不到,"不要怕"在此前的人生里,倒是有一些,不过一直早就都忘到了脑后,今天就拿出来充做吹牛的资本,给铁子同学讲了一些。有些当时吹的不全,补充在这里。

1. 不要怕实验,只要能恢复到实验前的设置

这是十四条原则的第一条。面对未知,身为人类不免充满担心,以为如果不去做不去触碰,那就没有危险。但是人生如逆水行舟,往往不去做本身也是一种选择,而且常是糟糕的选择。这和我们做实验时的心理是一样的。"按这个会怎么样,不会电死我吧,操作这个,机器不会爆炸吧?"

在你年轻的时候,其实很难犯重大的错误。重大的错误,得是有资格的人才能犯的。这个大家都有体会。我们小时侯听到故事里讲,小明

(小红?)因为马虎(那么铁定是小明了,小红才不会这么粗心)把小数点点错了位置,因此引起山崩海啸世界末日。估计多数同学看完都嗤之以鼻来着,最主要的原因就在于,一个小学生的错误是难以引起这样大的后果的。

可能有的同学会举反例,不是也有未成年人因为啥铸成大错的吗?他们的错误大部不是受自然律的惩罚,而是受道德律约束的。所以容易避免,只要别把别人不当人看就行了。不过,说起来这个似乎也很难。我们估且放过这个话题。

所以,在年轻的时候,尽管去试。所有的机会都是争取来的,没有天上掉下来的,也鲜有别人因为赏识你而带来的机会--很简单,因为你如此年轻,还没机会表现自己,别人没机会"赏"你,自然没道理"识"你。所以,你得先把自己的愿望明确表达出来,并展示自己的能力。

我小学二年级的时候很喜欢画画,参加过学校里举办的美术展。当然,你可以想像偏远山区的小学生的美术展水平,而且水彩质量啥的也差得很,只有HB铅笔还没见过2B什么的。因此我的作品质量可见一斑。在这么多作品里,我的画也一点也不突出。后来传闻学校要送两个同学去少年之家学美术,暑假的时候,人选已经内定,当然没我的份。

我此时做了人生中的一件大事,现在想来仍然觉得作为一个二年级的小学生,当时有这样的勇气,后来跟领导吵架辞职什么的,实在不是什么令人意外的事。我拿着自己的作品找到我们美术老师,请她指点,并向她表达了自己强烈地想要去少年之家学习的愿望。很多细节我都忘记了,但是后来学校增加了一个去学习的名额,所以我在那个暑假顶着大雨路过我后来去的那个以"贵族"们孩子为主的小学,少家之家就在那附近。

少年之家离"贵族"小学如此之近,我相信并非偶然。同去的两位同学,现在回想一位似乎家境殷实,另一位似乎是老师家的孩子。所以后来有北京人民跟我讨论,提到北京大学清华大学等对北京人民也没有什么特权,高考考试题也挺难的,老师的孩子一般也没有什么特权,我就先入为主的没有相信。

我讲这些惨淡的背景,讲我二年级的时候就图谋学习的机会去找美术老师,是想说,机会都是自己争取来的。如果一味埋怨现在的条件不好,现状如何糟糕,跟抱怨自己不是富二代也没什么区别。

有的同学可能会说,你那是图谋成功了,搁现在,根本就不可能。当然,我又怎么能知道现在能够成功,不过,我当时又如何知道自己能成功呢。我怀着这样的心理,即使不成,我也受到了老师的指点。现在想来,反正不去努力终归是不会成功的,至少这一点铁定。

有同学可能会说,你不是提到"不要怕"的前提是"要确保恢复实验前的设置"吗?只要你不去伤害别人 (尤其是有意的)

,想着别人还会再次出现在你的生命中,那么一般的,"实验前的设置"也就是这样。不能伤害别人的利益,即使自己受到伤害和危胁,也不能作为伤害别人利益的理由。因为在你漫长的人生中,还会再次遇到他,如果此时违背了原则,以后怎么会有面目相见。

2. 遍历

有同学可能会说,我试了啊,然后失败了。我的答复非常简单,那你再试另一家另一个学校另一个想法。同学可能会说,试了啊,又失败了啊。我的答复还是非常简单,甚至更简单,再试。

你怎么知道下一家与这一家一样拒绝你呢。以偏盖全,不完全归纳,正是我们放弃的一个重要原因。你没有试过,怎么知道会失败;你没有试过下一个,怎么知道下一个会失败。程序一次次执行的结果都一样,铁球每次都能落地,是有理论保证的,有假说解释的,你推论下次也一样不行,也有理论依据吗?

ZHUMAO同学是个相当不错的技术人员,此处省略他的战绩若干。他是怎么做到的?有人提到聪明,感兴趣,时势啥的。我知道一个绝对更有力的原因,他在本科的时候读完了东北师范大学图书馆当时所有的计算机书。

有同学可能说,吹吧,他能把那些书都看啦。我估计差不多。第一,那个时候计算机书并不多,而且你知道每个科目的书看完一本以后,其他的就只剩下了补充,变得很薄。第二,我跟他聊过几本,他确实都看了。第三,有同学可能说,那么多书全精读一遍?我没说他精读,学会看几页就放弃,以后再看,或者不再费时间,这种能力是需要大量阅读训练的。第四,我有过类似的尝试,把能看懂的都看了。所以,我可以旁证这确实具有可行性。

ZHUMAO的路线非常单纯,但是绝对有效:遍历。把所有的全整一遍。即使你没有全懂,你也已经远超过别人。每一本有难度的书都是打击你,并且使你变强的原因。

所以,不要怕向前走的基本原则就是:遍历。

我在本科某个暑假独自调研了通化市所有的电脑公司,一共也不到十家,五家左右吧。我走进门随便找个职员,撒谎说学校要求我们假期做社会调查,出示学生证什么的。学生证是真的,但是学校根本没有过社会调查的要求。所以我乱七八糟问了很多我感兴趣的问题:从你每月挣多少钱呐,你们要什么样的技术人员呐,到软件还是硬件工程师更值钱呐。

绝对的第一手资料,我自己一家家问出来的。至少有一家我还记得被经理轰了出来,理由我已经记不清了。但是我肯定又坦然地走向了下一家,因为我清楚记得被轰的不是最后一家,我出来以后在马路牙子上坐了一会。你知道,黯然。

如果走这么几家社会调研没有说服力的话,还有别的故事。

我本科高年级的时候在外面打工做些小活,跟一位老师聊天的时候提起。他问我这些活都是谁介绍的。我说:欧亚 (电脑城)

找的,还有以前的雇主介绍的。老师提到,他在欧亚也有一家公司,说不定我还去过。

我一定去过。原因非常简单而直接,那个时候,我走遍过欧亚每一家公司去找活干。每一家,不是像有些人吹牛的很多大多数绝大多数。我是一家一家走进去过的,一家也没有落下。

最初,我信心满满,走了几家,家家拒绝。鼓起勇气再走,又家家拒绝。拒绝时的冷脸和不屑,这些当然都会有,你可以想像。当时欧亚电脑公司一共有三层,我趴在五楼的天井往下看,亮堂堂的,我想从那里跳下去。人生太令人绝望了,你此刻的感觉,我也有过。

我在那里站了也不知道有多久,然后去买了一纸杯百事可乐。第一杯百事可乐是老geda王彦臣买给我的,喝了一股中药味,还有纸杯的蜡味,别提多难喝了。我不能明白为什么还会有人喜欢。他当时说,以后你就爱喝了。这第一杯就是在欧亚买的。我喝了百事,下定决心:我要一家不落的把欧亚的电脑公司全走遍。在这之后,每当我再次绝望的时候,就想想这个决心;每当我想放弃一两家的时候,就想想要一家不落。

最后我联系到了似乎三家?确定数字我不记得了。然后开始给远方科技的高老师装游戏机房,每个50元。我跟他学会了用紫外线烧片子,因为那样做出来的网卡便宜一块还是五块钱。我跟他到哪个军校里面去取设备,站岗的军人给我们俩人敬礼,我别提感觉多牛了。我大四一年没有跟家里要学费和吃饭钱,又给家里买了一台彩电。

前几天我还跟ZHUMAO吹牛来着。我当年面试的时候,面试老师问我的问题我全会。他们后来明显已经问到了自己还没解决的问题,考我解决方案,我也会。我第二次去单位的时候正赶上几位老师领导在试着装桌子。我说,你们整得好像不对,然后要过螺丝刀。我把桌子面朝下,腿朝上,一会儿工夫就装完了。我记得领导说,这个你哪学的。我说,我装过。他问,自己家用啊。我说,我装过几个机房,所有桌子几乎都是我一个人装的。对话大致如此,可能并不完整,我不记得自己说过没有,我当时已经组装过1000多台计算机,手指肚上很多小口子,是捏住板子的时候被背面的管脚划伤的。

大概就是这样,我的人生跟计算机的联系越来越紧密。之所以再讲一次,一个重要的原因是,铁子同学听了以后说,真励志啊。其实,我们的人生都是这样过来的。

3. 再说遍历中的失败

有的同学可能会有疑问,你遍历的时候失败了那么多家,不绝望吗,人怎么会那么没脸呐。我当然绝望,不然怎么会想从天井跳下去。但是我想到更早的经历。

以前讲过这个故事,从略。细节请往早翻博客。

我小学高年级至初一二吧,跟我哥去送过福字,就像送财神那样。没防盗门的时代,很多同学都有在过年前后见到讨厌的送财神的经历吧。我就是其中一个。我戴着眼镜,和我哥推着自行车在金厂和银厂镇送。从室外走到室内的时候,眼镜结上一层冰,什么也看不见,那些冰出门也不化。进门先拜年,然后说吉利话。

插话,这也是我能放弃很多东西而坚持另一些我不能放弃的原则的原因,因为再放弃,也不过就是那样。本来我一无所有,失去一些又如何。

拜完年谤无吉利说,仪式完成,就送上福字等着赏钱。当然,你猜对了,多有把我轰出去的。我出来以后也很憋气。但是送福字任务在身,又能如何,只好再进下一家。

后来我想:其实每一家都是单独的,这一家根本不知道我在上一家受到冷遇。所以,一切都是新的。这也是人生中不要怕的一个重要原因,因为实验的初始设置不必恢复,反正这是新的一家。

所以,在以后的枯噪的实验和工程中,我遇过很多陪着我的同学睡着了,他们醒过来的时候我还在做实验。有人问过我,你确定这个实验思路对吗。我不知道,我只是把所有有可能的思路,全都遍历一遍。只要还有一条路没有走到,我们就没有绝望。那条路无论看起来多么狭窄崎岖,无论多么无望,只要你没有亲自走过,那都仍然是有可能成功的。

铁子,不要怕,向前走。遍历所有的可能,如有必要。

--------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

诺基亚确实可以当榔头用,验证了

诺基亚确实可以当榔头用,验证了

以前读小说的时候看到过,有人拿手机砸别人脑袋。看的时候我心想,那么贵的东西,得多心疼啊。我一手拿书,一起把手机当板砖做势拍下去,然后摇摇头,感觉很不靠谱。试一试,比划一下,这是一个工程师应有的习惯。我前两天还试了用圆珠笔和筷子,分别正握和反握,测试扎亚马逊快递的箱子,可以轻松凌空扎进去。我跟偶像提起,他说,"显然啊。"你看,这就是科学家和工程师的区别。

但是当我在电影里看到有人用手机砸脑袋的镜头的时候,才明白,如果方法错误,重现实验失败的话,不能表明方法无效。那个家伙不是像用板砖那样拍下去,而是立着握住手机的窄边,用位于小指一侧突出的手机下部像匕首那样用扎。两下受害者脑门子上就全是血。

从结构上看,手机下部比手机屏幕和键盘结实多了--尤其是诺基亚。传闻或笑话说诺基亚可以当榔头砸核桃。我测试了一下,差不多。

要从某同学回国探望我们说起。鉴于他或某些人可能认为并非所有的事实都适合公开讨论,估隐其名,以下称H同学。H同学从某国回来度假兼看望我们,给我带了一张...类似挂毯的东西,某种纺织物,40*50那么大,看起来像是挂墙上的装饰品。就是这个东西[http://boomerangshack.com/art_print14.htm]。

我当时就说,这个得挂办公室墙上。谁来看了,我就吹一下,你看,这是我的学生某某送我的,他在某某处出息着呐。当然,即使在某某处没出息着呐,我也很为你们自豪。归根结底,出息不出息正是我们下面要讨论的话题。

后来有同学说,老师,你真是土死了。这不是他的原话。他的原话类似于,这东西得整个镜框,那才显得高大上。我一想,果然果然。如果按我想的,直接整点胶把背面粘墙上,看起来就像10块钱的。

于是,我买镜框。这是个标准尺寸,所以很容易就买到了。店家说只买一个不发货,只好一起买了俩。另一个正好可以送给向龙同学。他拉着个爬犁送他姑娘上幼儿园,新文化报报道了,还有大幅照片,在这里[http://news.xwh.cn/news/system/2013/12/14/010423842.shtml]。他准备把报纸和照片都镶进去挂起来。

以上都是支线情节,现在回到正题。

我琢磨,怎么跟被吹嘘的人解释为啥学生送我的偏偏是这么个东西,而不是别的呢。这得有寓意。好吧,寓意来自挂饰的内容,他不是随便买的东西!

画面是很卡通或者土著风格的绘画,像是用彩色的卵石铺成的。一只艺术化的鸭嘴兽在水中悠闲地伸展四肢,旁边还有两条鱼。

鸭嘴兽。我们这个时代上过学的都知道这家伙,恩格斯向它道过歉来着,书上还是考试材料里写着的。恩格斯听说鸭嘴兽是卵生的,就判定它是鸟类,断然不能接受这家伙居然还有奶水

(还是刚好反过来?) 。后来他公开发贴子承认自己错了,表示向鸭嘴兽道歉。

我跟每个人提到这是鸭嘴兽的时候,大家都张大嘴说"哦",跟我第一次从H哥手里接过这幅画的时候表情一样。心里大概想的也是,恩格斯都道过歉的名动物哩。

但是这还不够高大上。我想的是,H哥为什么选中它,一定不是因为恩格斯,那太流俗。他想的应该是"请像鸭嘴兽一样,1.坚持做个与众不同的人,2.直到灭绝"吧。他把画交给我的时候,特意补充了一句,"灭绝了"。我说,"啊?"他又重复了一遍说,灭绝了。我上一次听说鸭嘴兽君的消息的时候,它还活得好好的呢。我心下黯然。

有些人正是如此,他们拒绝进化成另一个样子。我想,H哥希望我做这样的人吧,就像他自己一样。有些人表面上如此不同,可是造成这种不同的原因恰恰是相同的:他们倾听自己内心深入的声音,而不是观察周遭的反应。气候变化,世界变迁,大陆迁移,山无陵,江水为竭,而鸭嘴兽永远停留在它人生的某个阶段,拒绝再发生任何一点变化。拒绝纳入评价体系,并愿意为此付出代价。

诺基亚曾经也是这样的,然后就是现在这个样子了。你很难说这种倔强是好与不好,因为当我们谈到好与不好的时候,大多数时候是无意识地在讨论功利,应该表达为是不是有利,而不是善或不善,或者对与不对,或者...你说,好与不好是什么意思呢,什么是好?

总之,诺基亚,这种能当榔头的手机就快要灭绝了,就像鸭嘴兽一样。选择是残酷的,顺从选择,尤其是为了功利而顺从选择,已经不仅是残酷,而是悲哀。我曾经为一些事情定性说,"这就是出卖"。我听到过不止一次抗辩,像这样说,"这不是出卖...好吧,这就是出卖,不过即使这是出卖又怎么样呢?"又能怎么样呢,我也想问这句话。

我今天终于有时间把镶在镜框里的鸭嘴兽钉墙上的时候,单位已经只剩我自己了。我没有能拿到榔头的钥匙,转了半天,试了一些工具,包括手,都不太适合。我试着直接用手把隐形钉按墙里去来着。你一定以为根本按不动吧,才不是。我把钉子拿反了,用力按下去,对着我拇指的一面是三个锋利的尖。此处请想像。

我翻转钉子,在钉子帽上垫个不绣钢勺子的把儿,然后像贴子开头那样握住诺基亚手机。使劲凿了两下,哈哈,钉进去了。一共钉了两个钉子,把鸭嘴兽挂起来了。手机仍然是好的,刚刚还打了几个电话,只是下端面有一点擦痕。不过这点擦痕跟师兄韩老师用来起啤酒的手机相比,小巫见大巫了,他的那个都不能看了,满目疮痍。

鸭嘴兽,曾经的诺基亚,还有一些类似的人或物,他们都有一个共同的特点,拒绝接受评判。我是个无神论者,但是很佩服基督徒信仰中的一种精神:他们认为每个人都是上帝的子民,人与人之间没有丝毫的隶属和等级,而唯一地从属于上帝;因此,他们只按受神的律条,而不是受来自人的规则和评判。自由就是,只要我没有认可,在我接受之前就绝不接受。这像是循环定义的废话,不过为此付出的代价都是真实的血泪。富贵、贫贱、威武都不能使之屈服,持续地坚持倾听内心的声音,拒绝包括"我就暂时假装"这样的利诱,无比艰难。也许,从束缚到自由,我们最初应该做的,就是放弃,放弃那些妨碍我们自由的利益。

做鸭嘴兽,做自己,直到灭亡。

--------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

当我们放弃时,我们想些什么

当我们放弃时,我们想些什么

放弃这种事,在有些人的眼里,似乎与我不太沾边,大概因为留下了很多执拗这样的表面印象。我所放弃之多,放弃时所经历的痛苦,与你一般无异。

最终,我也没能学会打三角洲部队这个游戏。当年大哥连忽悠带嘲笑想让我迷上这个游戏,但是我是切切实实地吐了几顿。听到机箱风扇的声音都受不了,连多几秒钟关机的时间都不能等,直接拔了电源线了事。

最终,我基本上放弃了啤酒。当年,我憧憬着将来能有一间自己的屋子。这不是重点。我打算在屋子天花板上支个酒桶,引个管子下来,接个水龙头。想喝的时候拧开就灌。那个时候,白酒是香的,啤酒是甜的,那个时候还没喝过红酒。还没等我有自己的屋子,我的胃就基本拒酒不沾了。

最终,我不能再做一百个俯卧撑了。从第二次腰间盘突出以后,我再也没做超过五十个。我并不能确定,确实没有这个能力,而是不敢。

你可能会说,"这些也算放弃吗,这不明明是身体不行,为啥还要逞能呢。"可是,当我们放弃时,哪一次不是理由充足?历史上投诚到我们这一方和叛变到敌方的,哪一个不是迫不得已?

有时,我们觉得再坚持下去也没有意义了,因为事情已经违背了我们的初衷。我在打帝国时代的时候,早期经常开局没有多久就发现战势不利,立马退出重来。你是不是也感慨过,如果人生能够重新来过一定爽得不行。你是不是也有练字的时候写了半篇或者一行,一把抓过来撕掉。我们以此表明,自己多么纯洁无暇,那个会犯愚蠢错误的家伙才不会是我。

可是,这种场景并非每次都能够放弃。我年轻的时候见过有朋友打麻将或扑克,刚抓完牌,就撒娇卖萌把牌一推,"不玩了不玩了,这可怎么玩啊"。大抵是抓得牌太差,或者太好--小说里也有过这样的人物,抓了好牌以后却认输,作为致老大的一份礼--很多年来,我一直不能想通这件事,觉得这是把陪玩的各位当作了NPC。所以,我倒是很理解打麻将输了的非要再来四圈,别人的人生也是人,为什么你不想玩就可以撒手呢。回到正题,那位刚抓了牌就放弃的,估计认为"事情已经违背了我们的初衷"。初衷可能就是赢而且艰辛,而不是过程本身。很多时候我们放弃,正是因为这一点。

在芬兰的时候做过一个梦,常难忘记。我和一群人被抓起来押赴刑场,大家被带到绞索前面,一个个吓得魂不附体。我也对前途一片绝望,觉得大势已去,心下黯然,想说很多,又一句也说不出。看看大家一个个抖得够呛,我心想反正也是如此,就慢慢地踩上凳子,把脖子往绳圈里一送,抬眼看天空分外明亮。脚下一登,我醒了过来。当时的心境,就是"放弃"。此生已矣,再往后无论如何努力,初衷都不可能实现了,跟打游戏太难退出是一个道理。

觉得初衷无法实现,因此放弃,这是一种情况。运动会上长跑,看对手们纷纷撞线,而自己还差一圈呢,这种心情,我是切身体会过的。当是时也,除了放弃,再没有别的想法。至于我当时为什么坚持到终点,现在看来,只有天知道。

还有一次放弃,也令我印象深刻,想起来后悔得很,觉得如果当时再努力一下也许就成了,但是当时就真的再无一丝勇气。

那是我初中的时候,跟同学齐雷路过我的小学。有那种体育器械,我不知道叫什么名字。是个铁架子,一人多高,形成一个棚子的形状。每一面"墙"都是胁木,可以在上面压腿,或者倒挂着做仰卧起坐,顶棚是一条条平行的铁棍,间距刚好一伸手可以够到下一个。那天,打赌我抓着顶棚那些平行的铁棍,从一侧走到另一侧,走完某某次数。赌注,大概就是"你根本不行""我肯定能"之类的,甚至可能连"你走过去我就瞧得起你"都没有。我不记得最初的轻松和中间的过程,只记得在最后一步,我感觉完全握不住铁棍,全身似乎都在颤抖,但是完全使不上力气。齐雷爬到天棚上,在终点那里大声喊我的名字,我现在还记得他当时急切的声音。最后一步就在眼前,但是就挂在那里不能移动分毫,我怕下一步会抓不往掉下来,而下面只有不到半米高,我怕控制不住身体脸撞在对面的胁木上,完全忽略就当时的脸看来已无长成美男子的希望。我挂在那里,似乎问过,"差这一步算不算"。想想这个,我现在都想大笑三声。

一松手,落下半米,安全无恙。搓着通红的手,刚刚那一刻所有的担心都像远在天边,不关我事,似乎再努力一下也没有那么艰难吧。但是,我真真切切松手放弃,在此转折从此再无回头路可以走。齐雷是拍拍我肩安慰说"你已经挺厉害了"还是惋惜地说"再坚持一步就好了,你明明能行",我现在完全没有印象了,或者说两种印象混在一起,我也不知道哪个是发生过的,哪个完全出于我的想像。

我能明确记得的是,在我松手放弃那一刻,我想的并非初衷无法达到。我当时满脑袋想的都是:这一切,又有什么意义。

此刻,在键盘上打字的我,想为那一刻大哭。我否定了我的理想的价值,背叛了彼时的自己。并非认定无法达到,而是推翻了理想,认为不必达到,这一切努力都不值得。不是判定没有结果,而是认为结果不再重要。成年的一刻,腐烂的开始。

所以,当我讲到理想电压源的时候,我喜欢跟同学们开这样一个玩笑。先是非常郑重地介绍理想电压源的特性--它的电压是绝不随外界的变化而变化的,只受它内心的支配。然后我们开始一系列地推倒,得到各种电流电阻的值,一顿各种定律的应用。最终,全班一起得起结论,那个最初的理想电压源的电压,与我们所设定的值是不同的。

然后我重申,"理想电压源,它的电压是绝不随外界的变化而变化的,只受它内心的支配。"凡是违背了这一条的,一定是我们的推倒有了问题,或者我们的整个理论体系有了问题而不能自洽。这一条,是不会改变的。我们永远也不能忘记我们最初的理想,它是不会改变的。然后我会问,你,还记得你最初的理想吗?

外界的种种变化,最终让我们认定我们的理想无法实现,又或者,如我一样可悲,认为我们的理想不值得付出代价实现。所以,我对自己,对你,总想有此一问,"你,还记得你最初的理想吗"。这些年来,我总会这样问我的学生一次,讲到理想电压源的时候。我自问道德品质非常一般,如果不描述为很差的话,根本不足以培养一年年如此青年才俊和将来的道德楷模,顶多提下问题而已。不过有一年,真的有位后排的女同学回答我,"记得",很大的声音。我当时激动得停了一会儿,真想问,"你的理想是什么。"

我没有忘记我的那些理想,我憎恨的仍然憎恨,我热爱的仍然热爱。与年轻时所不同者,我学会了慢慢地行走,或者说终于不得不接受。路途很长,终有一天能够实现,或者达到终点。《白马啸西风》里老马越走越老,越走越慢,金庸先生似乎相信,它终有一日能走到江南。其实,它还可能倒毙途中。那些在我有生之年也未能实现的,来生不可待,非不为,是不能。不过即便如此,只要还没有放弃,那就还没有放弃。

所以,那些C语言句读,那些十四条原则,世易时移,那些我的理想,没有放弃。

--------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

冬天的温泉

冬天的温泉
本来以为今年不会再有机会了,结果接近年底的时候突然鼓起勇气跟各位领导老师请了假,去东汤疗养。
东汤是什么地方呢,如果我不说,可能你根本不会知道。很小的一个镇子,在辽宁省凤城市下辖。估计凤城之前你也没有听说过,是丹东下辖的一个市。丹东,在中朝边界;是老gada的媳妇的老家;我上初中还是高中的时候有一块丹东产的机械表,不记得是不是我做实验摔坏的那块了;当地人操辽东口音,跟通化人差不多。
坐一夜列车,从凤城下车,倒出租车。大清早,微有晨雾,大家都很兴奋。司机也很兴奋,一路告诉我们东汤是这样一个地方,"没有岗没有猴儿,一把瓜子嗑到头儿"。岗是指交通岗,猴是指站岗的人,一把瓜子嗑到头,极言小镇之小。张健此时问,是指只有一个十字路口吗?我说,不是,而是只有一条街,从头到尾。
司机还告诉我们,回家以后跟别人怎么说在东汤的生活,"每天一倒两泡三饱"。即每天都睡一觉,醒了早饭以后就泡温泉,然后吃中午饭,然后再泡,再吃晚饭,然后睡觉。我们加了点活动,在饭前还要买海鲜。原以为冬天就什么也没有了,只有粗茶淡饭,特意带了火腿肠。结果除了虾根本没有,别的还算全乎,蟹虽小,肉还算实成,蚬子和扇贝也饱满。海鲜店新开了一家,但是一直关着门,所以一直没能光顾。我们常去的那家海鲜店老板很喜欢我们,我们几乎每次包圆一个品种,到离开的时候,他所有的存货所剩无几。每天,在开饭的时间,周围一群老头老太太吃着素淡的东西,而我们一直海鲜海鲜,感觉自己很土豪的样子。
除了泡澡,安排了三次远足。一次是某家疗养院的后山,那家疗养院的名字忘了,就在镇中心,市场的旁边。那家能游泳,邦哥和鞠同学他们去看价格了,说是非常非常贵。那次爬山把大家冻够呛,第二次爬山的邦哥决定谁也不能带单反去了。事实上,第一次爬山鞠同学的单反也只起到iphone的作用。大家认定,如果主要以拍自己或互拍为主,她的根本不需要单反,只需要美图秀秀就行了。
今年东汤令我惊讶的第一个地方,就是没有雪。这在第一次爬山的时候表现出来,回来的时候满身都是灰。而同一时间的长春,在街道上积累了几场雪,都没来得及溶化。第二次爬山之前刚好下了微雪,把灰尘都盖住了,还能通过脚印判断,我们的路线人迹罕至。
第二次单程约2.5小时。我们重走了去年我和二猫妈差点迷路的路线的前半段,也就是有路的部分。后来,经过一个满是砍下来的柴火的山谷,一段稍微困难的坡路,我们爬到一个山脊上。在从山脊上露头以前,风平浪静的,一探头出来,对面的山风非常猛烈,站立困难。山脊上有几块一人多高的大石头,刚好挡风,能看到山下不远有小汪小湖。但是大家已经决定,决对没有体力下山到那里去了。从当时的照片上也能看出来,个个被风吹得或口眼歪斜,或表情凝重。
第三次只有我和二猫妈两个人,带着单反,单程也是约2.5小时。第二次爬山忘记开GPS记录了,也才发现已经一年多没有徒步了,已经忘掉开GPS这回事。从腰突以后,想起徒步就心生惧意,竟然到了这种程度。第三次的时候中徒开了GPS,记录了去和返程的路线,包括哪里过了马路,还有跨过大河轨迹。去年我独自行走这条路线的时候,二猫妈已经体力透支返回了,当时正夜雾升起,脚下也看不清楚,旁边和对面的山都在一片灰的模糊里黑越越的,到达大河的时候浑身冰冷,快透支的感觉。这一次是白天,有了上次的经验,心里也更有底,走到大河的时侯还没有觉得累。上一次,在一片黑暗里看到大河的白光闪着,听到哗哗的声音,看到了慢慢摇走的渡船。这一次,大河冰封,我们直接从河面上走到对岸,还看到两三辆车从河上开过。一辆黑色轿车从我们旁边的冰面上经过的时候,我感到略微像地震时的头晕,听到冰层细碎的声音。似乎有一道冰缝就是那个时候形成的。
庄稼都收了,桔杆还立在田边。太阳沉向西边,把大山的影子投到河的对岸。举起相机,能看到暖色的夕阳晒着黄得发红的桔杆堆,暗蓝色的河水夹着白色的冰面和砂石滩或缓或急地流过。东面的远山发亮,近处的影物在西山的影子里开始越来越暗。
除了远足、吃、泡澡,还有看电影。我带了去年买的视频线,忘了带又新买了一根音频线,把笔记本接在电视上。把旅店的三个椅子搭成个半躺椅,腰后面垫个枕头,旁边放着各种吃的喝的,看着无聊的片子我睡着了好几次。如果是平时,会因为片子耽误了时间而愤怒,恶狠狠地把它删除吧。时间,至少在这一段时光里,不再是个问题。周围都是些上了年纪的人,他们全都慢慢地行动。他们每天在吃饭的时候出现在餐厅,慢慢地领了餐盘和半素的菜,然后在座位里慢慢地吃,偶而也看看我们相形之下风风火火地吃风风火火地喝。他们吃得很慢,但是会在我们吃饭期间来去几波食客,因为我们吃海鲜很多时间很长。然后,这些老人就静悄悄地消失了,估计在每个房间热气腾腾的温泉里都躺着一位,在我们大嚼的时候,他们正细细地梳理自己的一生。
冬天的温泉,原来同学们以为是在露天,水里热气腾腾的,而外面一片冰天雪地。结果全不是这样。没有冰天雪地,只是干冷,温泉也是在每个房间里而不是在室外。不过,这于我全无分别。我所享受的,只是空闲,少些焦虑,能够靠在躲椅上看部无聊的片子,中途不知不觉睡过去。
--------------------
博客会手工同步到以下地址:

内战记

内战记
内战记,白色封皮的小册子,放在我的桌上将近一学期了,仍然没有读完。一方面,各种工作和生存压力接踵而至,难得有空从深水里浮上来透口气,另一方面,这本书引人伤心,难以卒读。
在内战记以前,凯撒写下的是高卢战记。在那本书里,他带着与自己彼此信任的军队,在山岭大河间行军,征服和说服后来法国地区的各个部落,让鹰帜插遍高卢。他的军队把原产亚平宁半岛的葡萄带到高卢,发现在这里长势更好,就像后来的征服者们播种到别的大陆的咖啡和甘蔗。
我不记得凯撒在高卢战记中如何炫耀自己的军功。这完全不必怀疑,因为从后来内战中高卢人的归附来看,凯撒应该是斩服了人心。杀敌众多,也许只是不必提及,而非回避。因为,那些被杀的都只是"别人",是你们谁也不认识的、异族的、讲着别的语言的、眼睛和头发颜色都不一样的什么。死在刀下的,是高大勇敢但是无知无识的北欧人,是日尔曼人从遥远的北方贩卖来的斯拉夫人,是北非还是哪个贫瘠沙漠里跑来的骑着马跨着枪的黑皮肤人种。他们与我们如此不同,所以,死在刀下也只是战功,没有人会皱一下眉头。
方阵压境,红袍列张。如果臣服,就是罗马之友,如果抵抗,就屠城或者卖为奴隶。多么简单。可以用强力,可以用智谋,可以欺骗,可以杀伐。狩猎之中,又有什么手段是不可以的。
终于,在高卢战记的最后,凯撒提及了他的国家。按凯撒的说法,那个收到了他无数战利品和新土地的国度和人民,背叛了他。所以,内战记的开头,我盼着凯撒杀回罗马,去与那些对他不起的元老们当面对质。
但是凯撒回罗马的路非常区折,而且罗马也并非终点。他违背法律带军回需杀到罗马的时候,元老们已经逃跑,跟着他们认定的领袖庞培,凯撒曾经多年合作的另一位巨头。
如果是年少的时候读内战记,我可能会唾骂元老们全都蠢得瞎了眼睛,不辨是非,背信弃义,庞培是坏人的总头目,理当千刀万剐。但是,现在我站在凯撒的背后,越过他的头盔看着面前的这些同样军服同样刀兵的罗马人,不禁怀疑,难道这么多罗马人都同时瞎了眼?
但是,如果这些罗马人是正义的,凯撒的一味退让,先礼后兵,委屈求全,都是做作么?
所有这些,凯撒都没有说。或者,我跳过了他的评论没有相信。我只看到罗马人杀死罗马人。罗马人在西班牙,在马赛,在迦太基,在亚历山大,在所有他们先前和后来征服过的地方集结起来,竖起战船和敌楼,努力把同样肤色眼睛和语言的另一些罗马人杀光。罗马人召唤高卢人日尔曼尔人努比底亚人来助阵,攻击罗马人。这些,全是为了荣誉正义和罗马的团结统一,你死我活的列阵双方的目的是完全相同的。
十多年前,大哥曾经劝过我事业应该如何发展。我当时说,我一点也不想做个元帅,也许你适合,但我不行。不仅没有这样的理想,而且深感厌恶。我只想做一个狙击手。或者像在CS里一样,一开战就把31或者41收起来,操着刀就冲上去,看满天手榴弹从头顶上飞过,在身后炸响。然后看到一群敌人,把主枪端起来,射击,然后死去。这是能让我快乐的部分。
研究盟军,防范与攻击友军,评估战友的动机,像对异族一样猜想他们,让我失去对整场战争的兴趣。同时,正如我总结的我的悲哀之处,是我期待别人也是这样。并且,我为大家不是这样而感到愤怒和悲伤。我总误以为如何待人,人们也会这样对待我。虽然如罗素所说,别人永远不会如你自己一样爱你,但是,我一直不能理解...我不能理解这个世界中的绝大部分人间的规则。
似乎全然没有规则。
读内战记的时候,我一直盼望突然哪里冲出个小兵,一刀把凯撒剁了。然后战争结束,全书完。这一直没有发生,直到他打败了战场上所有的敌人。在和平以后,凯撒有一次正批阅文件,旁边有人聊天谈到人应该如何死去。凯撒插进来说,应该突然死去。他后来如愿以偿,被一群罗马人谋杀了。杀人者中,有与他一起出入战场如同父子的战友。传说,凯撒勇武过人,被这群人攻击的时候一直有效反抗,却突然抛下剑大喊,"原来你也参与其中",引颈受戮。
后来的历史,超出了内战记,虽然仍是内战。凯撒的继子兼甥孙替他报仇,把这些谋杀者都打垮处决了,连同凯撒的朋友也一起打倒了。这位继子就是屋大维,奥古斯都。
屋大维这一段应该已经不在内战记中了。而且,如果我是内战记中的一个小兵,估计也活不到内战记结束。我会在某个清晨,穿戴好我的战甲,擦亮盾牌,然后随着方阵冲击,每个踏步都整齐有力,充满金属声。死命拼杀,然后在我感到疲劳的时候,在我遇到第一个看起来与我一样的罗马人的时候,我准备抛开盾牌和刀剑,看着他的眼睛,看着晨曦从对面猬集的矛尖上反射的光芒,展开胸膛去拥抱他。这个罗马人,我的兄弟。
从那一刻以后,我永远也不会知道他推开我,跨过我。当然,他也绝无机会欺骗我,背叛我,声称我是盟友然后展开攻击。甚至,在他所写的回忆录里,也不会光荣地把我列入他的故事,阻止或帮助过他的成长。因为我并非过往,而是过客。
--------------------
博客会手工同步到以下地址:

bug的定位比修改重要1000倍

bug的定位比修改重要1000倍
砍倒一棵树,当然也有技巧,一斧子一斧子劈得要在正确的位置上,还要喊好顺山倒,别砸到别人和自己。不过,在一片林子里找到你想要的那一棵,才是更重要的事,也更困难。修改一个bug,可能只是一个字符,而在几千几万行代码里找到应该修改的地方,就困难得多。就像,修改一个变量,不过赋值语句一行而已,但是查找之难使得衍生出了像二分查找这样的许多算法。
前两天跟关同学郑同学一起修改了一个bug,也体现了这一点。
1. 现象
先是关同学在电话里说:包老师一眼就能看出来有毛病,出数据的时候一顿一顿的。
这个问题描述的是一个上位机/下位机结构的设备,所谓一顿一顿的,指的是上位机从下位机读了数据以后,显示的时候不流畅,卡。
我们先回顾了一下,先否定了这不是存在已久的同一个问题。以前提到过一次是怀疑优化显示效果的滤波器效果不好,后来证实是选择了错误的滤波器导致的,滤波算法本身无误。后来这个问题从我的视野里消失了一段时间。
这几天对上位机代码重新组织,有大的设计变动,所以关同学怀疑是变动中引入了bug。这是一个典型的正确思考方法:哪里有变动或不同,哪里就需要怀疑。但是实验表明,变动以前的版本也存在同样的现象。 (有效的版本控制多么重要)
以上,我还没有亲眼见到,都是电话里得到的消息。然后我亲眼见到,确实一顿一顿的。这也是解决bug的重要原则,即不能相信任何人的描述,一定要亲眼所见,一定要重现故障。如果病人对医生说"我发烧了",医生一定掏出个体温计测一下,而断然不会直接开退烧药的。
亲眼所见的,也还不够。我祭出神器bushound跟踪了usb的数据。绝大部分数据包都是30ms左右一次,每次实验里总有那么两次是600ms左右。将近半秒的时间,怪不得人类已经能够感觉到了。我们保留bushound的日志,作为证据--好了,bug确实存在。
这是第一步。
2. 猜想-设计实验-再猜想
一旦认定bug存在,接下来是定位bug,最后才轮到修改。
2.1 由整体到部分
定位bug,首先要对整个系统有个认识--模型或者说是猜想。我们以为整个系统是这样运行的,分成几个部分,它们之间如何藕合,数据沿什么样的路径在其间流动,有哪些控制信号。
当我们把整体肢解为部分以后,接下来,我们既可以假设bug可能在某个部分中,也可以一个一个遍历所有的部分,依次查找bug是否在其中。前者,据说是中国/东方的经典手段,后者是西方/德国的特色。传说,同样是一根针掉到地上,中国老太太会根据针掉落的方向、自己的坐姿、声音传来的方向,根据这些启发信息去查到特定位置,而德国老太太会把地板划分为M*N个小格,然后把每个小格找一遍。这两种方法也无所谓优劣,在实践中,有时一下瞎猜对了,确实效率很高,有时则找遍所有的模块,最后才命中。不论如何,事先计划查找的路径,查找中记录走过的模块,是很重要的。
2.2 孤立
在查找某个部分时,我们要把这个部分从整体中孤立出来。调试方法中的"最小系统法""对比法"都有此意。在最小系统法中,我们把其余的部分都去除,单单观察认为可能有问题的部分,确认它正常或不正常,从而避免其他部分的干扰。在对比法中,我们令两个系统其余的部分都是相同的,只有要观察的部分不同,这样,现象的不同就只能来源于要观察的部分的差异--而差异就是导致不同的原因。
对比,既可以是两个系统同时运行,也可以是同一个系统,修改配置以后两次运行。最重要的,保留运行的记录作为对比的证据。
我们首先猜想,是不是下位机有毛病啊,它可能向上传数据时,某些时候比别一些时候慢半拍。下位机是包师弟写的,他说:证据哩。
我见过很多工程师在这种时候开始争论,A说是你的毛病,B说不会,A说一定是,B说一定不是。我在这时对别人说过,这么争论毫无意义,咱们各自拿出证据来吧。他又说一定如何,我就只好走开。
证据,需要隔离其他的部分,把你假设有毛病的部分孤立出来。
我们应该开始剥皮,期待把下位机单独地暴露出来。但事实上,我们当实对下位机的怀疑到此为止,因为包师弟有个神器,他用labview做了第三方的工具,能模仿上位机的行为。所以,他只须出示labview的程序运行的结果无误,就证明了我们的上位机有毛病。这就是对比的力量。
我们转去孤立别的部分。我们只保留上位机读数据的那部分,把解析数据、显示数据全注释了。上位机代码空转,用bushound跟踪读数据的速度。结果表明,即使上位机除了读什么别的也不做,也有间隔600ms的时候。这表明,bug (或者说延迟/lag)不是由解析数据和显示数据引入的。
这时,问题仍可能是由下位机引入的。但是,找bug也可以有条不紊一步一步来,而不是东一榔头西一扫帚想起来哪就查一查。我们继续切掉可能影响性能的上位机代码,直到,就剩了相当于ReadFile的一句。
题外话。我们以前被ReadFile手册骗过,或者说我们没有成熟到那种程度,认识到ReadFile这个API的后面是由驱动支持的。换句话说,驱动如果有毛病,ReadFile的表现就跟手册里写的不一样。我们以前遇到的问题是,实验表明根本没有读到数据,但ReadFile的返回值和参数里的out部分按MSDN里的解释,数据应该读回来了。后来才想到,ReadFile依赖的是我们自己写的驱动,而这个家伙不像我们想的那么靠谱。大多数情况下,它的表现都不错,但是沧海横流的时候,它就被吐跑了,而这正是我们需要它的时候。所以,这个故事告诉我们,实践是检验真理的唯一标准。你以为自己多么正确也是白扯,不能解释客观事实的猜想都只是猜想而已。题外话结束。
这次的ReadFile是阻塞读 (同步读) ,它后面的支持就是郑同学写的winusb驱动的DLL部分了。我们准备在这一句以前和以后各加一个console输出,把ReadFile花费的时候输出来。关同学质疑了一下,console输出影响性能,解除疑虑也容易--试一下呗,万一对性能的影响可以接受呢?瓶颈也许不在这里。
console输出表明,ReadFile性能不稳定,大部分时侯耗时30ms左右,个别时候600ms。个别时候就是我们关注的地方。同时,console输出启用了debug模式,暴露出郑同学在winusb驱动中输出的一些console调试信息在发布的时候没有关闭。这显然会影响性能。
2.3 修改bug和测试
郑同学去除winusb驱动中的console输出,发布了新的驱动。关同学把更新驱动以后,跑了一遍,console和bushound都表明,没有600ms这样的延迟了。
这一步耗时很短。就是按你的猜想改bug,改完了以后测一下,与此前的记录对比。如果毛病没了,那么你十有八九猜对地方了。
2.4 恢复现场和测试
切掉或修复有毛病的地方以后,还要把为孤立这个部分做的工作恢复成原样。我们把解析数据和显示数据都恢复了,去除console显示,再测,bushound表明性能符合要求,bug的现象消失了。
3. 总结
bug的最终解决,上位机代码没有作任何修改,虽然整个bug定位都是围绕上位机代码展开的;只有winusb驱动的代码作了修改,虽然整个定位bug的过程中都没有深入过其中。
这个故事告诉我们,事情发生的背后,往往深藏着很久以前或更加深刻的原因,这些原因在世界运行的法则驱动下,在很久以后或层层推演,才以表象的形式出现在我们的面前。科学和工程的责任,正是猜想然后发现地下暗河存在的证据,通过修改在直觉认识上似乎毫不相关的变量,从而改变这个世界运行的结果。除了人本身不可以被操控,可假此以动太阳而移群星。
--------------------
博客会手工同步到以下地址:

挺简单的?那你就自己整

挺简单的?那你就自己整
人生在世,会遇到各种奇葩。奇葩们观我,估计也应如是。
二猫妈和大哥分别告试过我,别在工作中掺杂感情因素。但是我只喜欢做乐于付出感情的工作,没感情的,连碰也不想碰,不然有的科目怎么会不及格好几次。所以,只好按马老师教导的"要注意态度",然后自己生闷气。
有些人,仿佛他们生出来就注定了没法跟我合作。衷心希望他们这一生能离我远点,这样他们自己也能过得幸福快乐一些。
一类人是"挺简单的"人。他们在交给你一个任务的时候,乐意像幼儿园老师一样补一句诸如,"这活儿挺简单的,容易干",又或者"你们这么厉害,一下子就能搞定"。我没上过幼儿园,对于幼儿园老师的刻板印像完全是瞎猜的。也许,幼儿园老师也不会把讲话的对方看得如此弱智。
这活复不复杂,简不简单,费不费劲,我自有我的评判,你真是犯不着在这多余罗唆,附加贬低我的工作,我又不会因为你这非专业的评论就降低对报酬的要求。
我第一次回应这句话是对小丁老师,也是因为关系实在不错。此前,我都是忍了,然后在做费用的时候报复性提高价格。小丁老师当时说,"据他 (还是她)说,这个挺简单的。"我说,"一定不简单。要是真简单,他就自己整了。"
后来,我做了些类似的回答模板,视心情回复给对方。比如,要是简单,你就自己整吧;要是简单,你就找别人吧,我忙着呢。
这帮家伙有点像我十多年前遇到的老板们。那些老板习惯性用语是,"你顺便把什么什么做了吧","这个活还挺锻炼你能力的","在这个活里,你还能学到啥啥技能"。用人,还要表示我所用不多。杀人,还要表示我的刀够利,因此你死得不那么痛苦。给你干活,或者等价交换,我还要感谢你怎么的?
也可能有的同学会说,人家的意思是夸你呐。这活儿他本人干着可能不行,但是你干就特顺手。这样想的老板们,适合到马路边找个力工大哥,说,"看你一身腱子肉,闲着也是闲着,帮我把半吨扛楼上去吧。"然后别走,看腱子肉揍他不。
而且,这么说的老板,据我所知,通常真的认为你干的活非常不值钱,任谁都能轻松完成。活,可以干,但是我们绝不能自轻自贱,也绝不允许别人轻贱我们。而且要收钱。
说到收钱,还有另一类人,如果他们不出现在我面前,他们和我也都会感到更幸福。这一类人和"挺简单的"那一类人比,有更深厚的文化传统。他们一般先不谈价格,而是说"必有重谢",或者"忘不了你"。十几年前有些老板对我说过类似的话,"小杨,我一定忘不了你"的老板们,现在估计他们都不记得我了。但是我记得他们,我还记得等到付钱的时候,他们会说"哎呀,实在是紧张/投资失败了/这把项目做亏了"。后来遇到这样的人多了,我就有了答复模板,"你失不失败跟我有个P关系,成功了你又不多给我钱",或者"如果你现在真没钱,那咱们谈谈股份吧"。
这帮家伙遵循着丛林法则生存,或者说,他们自以为有咬人一口占了便宜跑得了的本事,甚至有些还认为自己不仅这次能跑,以后有机会还能跑回来再咬一口,而且还有能力再跑。董同学指着在马路上违规加塞的前车,把这种行为称为投机,并认为投机得利会破坏规则。董同学所定性被破坏的规则,显然不是丛林法则。
他们打算步步为营,能多赚你一分就多赚一分,在讨价还价中不断试探你的底线。他们在寻物启示和招聘中写着,"必有重谢""报酬面议"。郑同学说得好,"什么是重谢"。我下了决心,如果捡到巨宝,看到寻物启示里写"重谢"而不标明数额和支付期限的话,我就把巨宝扔伊通河里去--自己留着是不当得利,但是我没有替他保管的义务,就当不知道那是什么玩意。
我曾经在饭店里旁听两位食客的对话,1999年,跟二猫妈在地质宫旁边吃羊汤肉夹馍的时候。一位是老板,一位是潜在雇员,他们是朋友。潜在雇员一直在问报酬几何,老板一直在说"我还能亏了你么""那还能少了你的么""咱还能赔么""咱俩之间,还得有个准数么"。是的,需要。要么,有准数,你挣得更多我也不多要,你全赔光也跟我没关系;要么,按比例,我们利益同进退;要么,我就是赔你玩,啥也不要,但是,那得我乐意。这些都要事前明确约定,可以变更,但要我同意才行。很多年以后,我逐渐下定决心,欠我工资的,我一定把他挂在塔吊上,而不是把我自己挂上去;我说你是我兄弟的,你才是,钱一分也不必谈,谈了伤感情,我说不是的,你就一分钱也不能少。
又,发上述感慨,当然是因为不爽到了一定程度。起因是七转八转的关系,一个家伙找到我,然后变成了我求某同学做个私活。此处略去经过。整件事情整得我非常愤慨。天下多奇葩,以后再有这样的事,麻烦各位同学一定要提醒我,就说"你想想以前那次,还有那次。"尤其是关同学和郑同学,请一定提醒我。我先提前多谢提醒,届时会为你的提醒支付巧乐滋。
又及。以前有同学提到过,看你写的说的,好像快意恩仇的样子,到头来还不是要向世俗低头么。是这样,你的理解和我的表达有所不同。我快意的是我的恩仇,不是你的恩仇。所以,一切都是由着我的性子来的,不是演给你看的。并且,不是因为我有本事这样,而是,我能够承担这种快意的结果,也愿意付出快意的代价。而且,我也的确付出了。打人的时候就得想到自己手疼,及事后要支付的医院费,及自己可能被反击。都非常惨痛,如非经过同样的专业训练,请勿模仿。
--------------------
博客会手工同步到以下地址: