前言
《编程之美》在开篇部分提到一个问题:房间里有三盏灯,屋外有三个开关,分别控制这三盏灯,只有进入房间,才能看到哪一个灯是亮的。
请问如何只进入房间一次,就能指明哪一个开关控制哪一个灯?
这本书我一年前浏览过一遍,当时就看到这个问题了,而且我记得我还发表过QQ空间说说,并且当时也查了查答案。
答案就是,因为灯泡通电会发热,所以先开一盏灯一会时间,然后关闭后再开另一盏灯,进屋,亮着的就是正在控制的开关,用手摸一下其它两盏,哪个是热的哪个就是第一个开关控制的,然后就剩下一个开关一个灯泡对应了。
可是当一年之后的我再次查看这个问题,竟然丝毫想不起答案。而且是那种直接举手投降的想不起。为此,我自己问了自己四个问题。
问题一:为什么时隔一年,再见问题我却丝毫想不起答案?
问题二:这是否意味着我曾经在这道题上花的时间完全无用?
问题三:这种“隔一段时间就完全忘掉”的情况能否有所改变?
问题四:接下来该怎么做?
问题一:为什么时隔一年,再见问题我却丝毫想不起答案?
回答一:一方面和记忆力有关,但是这道题的答案不是死的,不像背诵唐诗宋词那样一个字也不能错,答案只与一个名词“温度”和一个动词“摸”有关(当然不排除还有其他合理的答案)。所以不能完全责怪自己的记忆力不行。另一方面的原因就是:“思维”。比如你一年没用过螺丝刀拧螺丝,但是当时隔一年之后再把螺丝刀和螺丝给你,也照样会拧。因为脑子中有“拧”的思维。那么这道题的思维是什么呢?测试,没错,就是“软件测试”中的测试思维。还是拿这道题说,题中涉及到三个东西:屋子,灯,开关。
下面分别对这三件东西进行测试:
房子 | 灯 | 开关 |
能否看见屋内?(否) | 是否是正常的灯泡?(是) | 开关的位置和灯泡的位置有关系吗?(无) |
能否凿墙?(否) | 发光强度多少?(100W) | 开关带线吗?带线的话能拉断吗?(不带线) |
是否会发热?(是) | ||
长时间开着是否会爆炸?(否) |
当然,这个测试并不完善,但已经能够解决这个问题了。如果我今天之前具备测试的思维,能够问出这些问题,那么想回答出这个问题,应该不成问题。
问题二:这是否意味着我曾经在这道题上花的时间完全无用?
回答二:不能说完全无用,如果没有上次“浪费”时间,也不会有今天这篇文章了。那样,真的是:最大的无知就是不知道自己无知了。
问题三:这种“隔一段时间就完全忘掉”的情况能否有所改变?
回答三:可以有所改变,方法还是那句老话:“透过问题看本质”,不同的问题的具体解法都不相同,但它们有一些可以归类,抽象出通解的思维。
问题四:接下来该怎么做?
回答四:继续看书,看完后继续遗忘,若干时间后再回头看时再发现自己原来还缺少另一种思维。因为有时候第一眼并不能看到本质(也许这也是现在离婚率很高的原因吧:)。虽然第一眼不一定能看到本质,但 Better later than never ,不怕慢,就怕站!
结尾
我这次讨论的是没有标准答案的问题,至于那种给出下句让默写上句的“八股”问题,求解只能靠记忆力。“无他,孰能生巧尔!”这一句,放之四海而皆准。