舅舅是一个优秀的科学家,一位染料涂料工程师,曾为中国的电泳涂漆工艺作出过重大贡献。但最令人惊异的是他还是个色盲,
――题记――
本章《苦恼人的笑》说我在三个月内下班后的业余时间完成了数理化的“铁人三项”,其实还略去了一个很重要的细节。事情先要从我舅舅说起。
舅舅是一个优秀的科学家,是个色盲,却是一位染料涂料工程师,曾为中国的电泳涂漆工艺作出过重大贡献。他知识渊博,精通英法德日等好几门外语,只是平时很难找到听众,所以每次我去,他就会很高兴。他经常会给我讲些很有趣的知识性的故事,有时也会考考我。舅舅是色盲,我也是,再加上两个人经常谈得十分投机,外婆就常说“外甥象舅舅”。
有一次去舅舅家,是考试,不是故事会。舅舅问我,笼子里有鸡兔若干,40个头,100条腿,问鸡兔各有多少。现在用二元一次方程解,自然是小菜一碟。但我一个小学生,哪会懂二元一次。舅舅提示,如果全部是兔子,有几条腿。我乘法还没忘,“160条”,显然腿太多了。舅舅暗示道,那拿出一个兔子,换个鸡进去,还有几条腿?“158条”,还是太多。他继续问,要拿多少兔子出来,把鸡换进去,才能使笼子里正好100条腿。到了这一步,向来是好学生的我自然明白了。 (160 - 100)÷(4 - 2)= 30。就是说,要拿出30个兔子。答案是10个兔子,30个鸡。
舅舅接着拿出一本书,《四则运算应用题百题详解》,叫我回家后去做。他反复关照,不能用解方程的方法去做。其实我那时根本不懂方程,老人家实在是多虑了。他说用方程解这些题目太容易了,根本没有意思。但如果能用四则运算解出,以后学方程就会容易得多。鸡兔同笼只是其中一道中等难度的题。书后面有“详解”,就是像舅舅那样循循善诱的提示。我这方面的毅力应该说不错,除非走投无路从不去看解答。如果没办法看了解答,那一定要彻底搞明白,变为自己的东西。做出这100题后,自己的逻辑思考能力确实大为提高。10年后我在短短几星期内学会解各种代数方程,现在想来,必定得益于舅舅当年的“无心插柳”。
曾经有一次,我问舅舅,假定西瓜皮厚度相同,大西瓜和小西瓜哪个比较合算,就是说肉比较多。舅舅没有试图向我灌输那些与微积分有关的圆球表面积和体积公式,他只是问我,如果西瓜是方的,皮也一样厚,你觉得哪个合算。这我是会算的,一会儿就得出了结论,“买瓜要买大西瓜”。舅舅因势利导,假如方的“大西瓜”边长是“小西瓜”的两倍,八个“小西瓜”叠起来,就和“大西瓜”一样了。外面那层皮大家都有,但“小西瓜”们内部还有好多皮,所以你根本就不需要计算。一向自认为还算聪明的我简直是无地自容。多年以后,我看到这样一则故事。爱迪生(Edison)的实验室招收了一个很优秀的大学生,有一次Edison叫大学生去计算一个电灯泡的容积(Edison是电灯的发明人)。好几小时过去了,他过去看看怎么还没好。他看到大学生满头大汗,边上放着软尺、数学手册、以及一大堆测量工具,显然还没完成。他就叫大学生去拿个量杯,自己拿着电灯泡把水灌满,然后把水倒在量杯里。大学生当时的窘迫应该不亚于我在西瓜皮上摔的这一跤。舅舅和Edison还是无法相比,但两个人教育方法却有着异曲同工之妙。
更多的时候,舅舅的启蒙教育是“寓教于乐”的。又有一次我去舅舅家,两个人都闲着没事,他就招呼我过去玩个游戏。 他拿出15根火柴,分成三堆,分别为三根,五根,七根。 规则很简单,两人轮流拿,数量不限,谁拿到最后一根就算输了。 唯一的限制是每次只能从同一堆里拿。我先拿是输, 后拿也是输,十几个回合下来, 他见我实在不可救药, 就把规则告诉了我。几年后我看到一本书,里面详细介绍了这个游戏以及决定输赢的数学原理。 原来这游戏并不限于三五七,堆数可以任意,每堆的火柴数也可任意,当然不用火柴也可以。 不管你如何变化,输赢由一条相当简单的规则决定,必须用二进位制表述。舅舅告诉我的关于357的规则只是其中的特例。
在完成Courant 数学研究所的博士后研究以后,正好美国在老布什(Bush)同志领导下昂首阔步进入经济衰退,我只好靠汉语拼音的功底在纽约市教育局双语教育部门混饭吃。当然这并非长久之计,于是听从朋友建议开始学C, 为在工业界找工作作准备。 这玩艺我以前也学过,但因为没有动力,往往读了第一章后就把书给丢一边了,然后周而复始。 所以前几章总读了六七遍不止,但还是C盲一个。 因为无经验可总结,只好总结教训,发觉空对空是问题所在。 当初我学Fortran,就是为了完成一个课题,暑假修了三星期课。 三星期过后,学分拿到了,课题也完成了。
既然空对空不好,那就空对”地”吧。 这块地可是不好找,我于是想起了舅舅传授的火柴杆游戏。 因为这游戏需要用到二进制,想来这块地不错。我于是就开始写起来了,碰到问题就向书本请教。 如果还是三五七,一方面太简单,而且没准会被人琢磨出来。 我就把最多允许堆数和每堆最多允许火柴数加以扩大。 电脑里没有火柴,我就用$符号代替。 三五七自然还是第一选择,但挑战者如觉得不过瘾,可以选上十堆八堆的。 你可以和朋友玩,也可以和机器玩。这程序尽管很小,但用到的概念极多,等到写完,书已经看了好几遍了。 看来这块”地”是选对了。三个星期后,包括8个子程序的500多行程序堆在荧屏上,“大功告成”。
前面说过,这游戏的数学原理要用二进制表述,所以每一回合以后,先要做成百上千的除二,运算完成后再要做成千上百的乘二。 于是我重返故地,看看能否用二进制直接运算,真还给我找到了,就是所谓的二进制算符(bitwise operator)。 程序很小,CPU 的差别无法看出,但我想和原来的“笨”程序相比,快二三十倍是起码的,如果是一百倍我也不会惊讶。
我的电脑没有C的软件,于是我就去纽约大学(NYU)。 一切准备工作做好,一个回车,我把眼睛瞪得象电灯泡,希望看到编译(Compile)成功。 没这样的好事! 一大堆从来没见过的错误呈现在眼前。 我就找了个熟识的小朋友帮忙。 他称赞我的程序写得不错,只是C的一些概念和Fortran太不一样,所以出错了。 两小时不到,大功告成,这次可是没有引号的,而且是0 + 1 型的。 一大帮小天才围了上来, 要和我的代理人决一高低,结果都是(人)“肉包子”打狗,有去无回,即使是最简单的357也毫无例外。
我还写了个”韩信点兵”的程序。这个游戏的诀窍可在《十万个为什么》上找到,“三人成行七十稀,五树梅花二十一枝,七子团圆是月半,除百零五便得知。” 你把一堆豆子用357数后的余数分别输入,一按回车,屏幕上就会告诉你这堆豆子有多少颗。我把这两个程序的执行文件(EXE)放在一张碟片上,每次面试的时候都随身带着。如果有人想考考我对C是真懂还是假懂,我就用这357的游戏摆个擂台,将那些面试我的经理主任杀个落花流水。
最后借了我博士后指导教授的光,我总算在华尔街的一家软件公司找到了第一份全职工作,主攻房屋贷款的模型,这张碟片还是没用到。 我的第一个模型出来后,久久没见到程序员完工的通知。原来他认为这反正是个初步的模型, 以后还会改, 就不浪费时间了, 他要等模型最后定稿后再来写程序。 这人有MBA和计算机硕士两个学位,可说是公司的首席程序员,但从这句外行话看来,他对模型实在是一窍不通。 我自告奋勇说,计算部分的程序我可以写,但我不知道如何将结果与公司的软体系统衔接。 公司的二老板说,衔接问题由他来做,我就负责计算,最后只输出一个阿拉伯数字,他再把这数字输入到软体的其他部分,如绘图列表等等。 我的老板将信将疑,“你还会C?”我说不是写在简历上吗? 他说他也看到的,不过这年头大家都这样写的,看来他早已做好了上当受骗的准备。 我把这张碟片的故事告诉他,他兴致极高,叫我拿出来,在上班时间玩了好一阵子,最后毫无例外地成了“肉包子”。
这个游戏在357情况下的规则,其实还是相当简单的,就是要把一些必输的图形留给对手。如果对手瞎猫碰到死老鼠,把你逼上了死路,不要慌张,你要故作镇静,走一步缓兵之计。在大部分情况,对手又会回到错误的道路上,把机会还给你。
舅舅当时就是诱导我走不同的“死路”,从而把规则逐一介绍给我。你只要把火柴拿成下面的图形之一,对手就输定了。
|