欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

宏观的思考问题 笑话面试BBSRailsOO 

程序员文章站 2024-02-20 12:33:28
...

在从上海到杭州的火车上,小杰提出了一个问题,就是在6 12个小时里面,分针多少次超过时针。

这个问题跟我在1998年底加入微软前的一道面试是一个风格的.这道题出现在我第4轮面试的时候:

1998位乒乓球运动员打比淘汰赛,问组织者需要组织多少场比赛。

当时刚准备用1+2+4+8...这个思路做下去,忽然觉得不对,后来半蒙半算得说了个"我觉得像是1997场"。虽然当时还不是很肯定,但就这样碰到了正确答案,过关了。

其实答案很简单,就是1998个人决出冠军,需要淘汰1997个选手,而一场淘汰赛淘汰一个选手,就需要1997场比赛。

这个问题的玄妙之处就在于,问题不是“如何安排这些场比赛”而是问需要“多少场比赛”,所有安排上的细节,都可以不考虑。

大象放进冰箱的问题

我个人最喜欢的一个笑话就是关于把大象放进冰箱的问题:

问:如何分三步把大象放进冰箱
这是个几乎无解的题,答案也非常无离头:
答:三步。第一步:打开冰箱;第二步:放进大象;第三步,关上冰箱
关键就在第二步:“放进大象”。这说得到简单,但怎么可以放进大象?回答没有给出,所以这道题一直就是当作一个笑话讲的。

不过,如果不把它当作笑话讲,而作为一种解决问题的方法,倒也是值得研究一下的。这个方法,就是宏观的思考问题的方法。

思考大的图景而忽略细节

有人说,“世界上很多人把自己的视野的边界,当作世界的边界;而又很少的人,能够看到其他人看不到的。” 描述这样的人,有一个我非常喜欢的词:“Visionary” - 高瞻远瞩。

阿波罗计划就是一个典型的这样的项目。当时肯尼迪同志对于人类登上月球这道题的解,就是一个类似于把大象放进冰箱的解法。他说:“在下个世纪里面,把一个人送上月球,并且安全的返回”(讲解远景的课程中的经典语录。)

这到简单,比把大象放进冰箱还省了一步。但问题就在于,具体怎么做呢?当时咨询委员会里面有很多人表示反对,比如化学家们就说,这怎么可能?我们连推动这么强大的火箭的燃料都没有!肯尼迪说:“那么你是不是说,只要有了合适的燃料,我们就可以做到?那么去找燃料吧。”之后的几年里,化学形成了一个新的分支,这个分支就是为了研究合适的火箭的燃料,并且在四年以后找到了这样的燃料。就像燃料一样,一个又一个技术问题被克服,最终完成了一个不可能完成的任务(这个故事来源于:《Seven Secrets of Inspired Leaders: How to achieve the extraordinary...by the leaders who have been there and done it》这本书)

我们的思考方式

我们在思考的时候,尤其在思考复杂的事物,或者涉及众多的人的协调的时候,非常容易掉到细节的泥潭里面,找不到出路。有些时候,看的大一点,先假设一些很难的问题总会解决,还容易得到结果一些。

我个人的心得是,在杠杆开始工作的前5年里面,更多的需要解决细节问题,自己的角色就是在解决实际的问题,比如说在做一个产品,负责一个项目,至于这个产品项目本身为什么要做,尤其是现在的做法之外还有没有其他替代的方案,都不作考虑。慢慢的当很多的细节问题都有非常好的团队成员来解决的时候,如果自己还在解决细节问题,就失去了大的方向,变成“把事作对”,而不是“做正确的事”。

所以最近经常提醒自己,适当的多做些“大象放进冰箱”的决定。

后注:计算机里的函数就是这种思维的产物

学过编程的,就不断地用这种方式解决问题。我记得在火车上,晓娣提到,创新必须有一个限制条件。说到这个话题,我就随口问了个问题:如何用7行代码写一个BBS出来(当时正值客齐集社区上线之前)。这个限制够死的,我出题的时候自己都没有想好答案。

后来,想到了大象的故事,答案就有了,其实不用7行代码,两行就够了。

BBS kijiji = new BBS();
kijiji.Run();

至于BBS这个类怎么写?那是以后的事情,而且肯定写得出来,Ruby on Rails有很多时候就是这种想法,OO也是这种想法,而递归算法不就是这种想法的终极体现吗?

宏观的思考问题
            
    
    
        笑话面试BBSRailsOO