“三人住旅馆”是程序员面试的道经典问题。具体的问题是:
“有三个人去住旅馆,住三间房,每一间房$10元,于是他们一共付给老板$30,第二天,老板觉得三间房只需要$25元就够了于是叫小弟退回$5给三位客人,谁知小弟贪心,只退回每人$1,自己偷偷拿了$2,这样一来便等于那三位客人每人各花了九元,于是三个人一共花了$27,再加上小弟独吞了不$2,总共是$29。可是当初他们三个人一共付出$30那么还有$1呢?”
咋一看是那么回事,但实际上,小弟贪污的是27元里中的2元。而这里却又拿2元加上27元,把小弟的两元算了两边,结果肯定是错的。导致错误的根源是思维混乱,没有看到问题的本质。
在编程的时候也是这样,编程的目的是解决问题。但是如果没有找到问题的本质,编写的程序也一定会混乱不堪,bug百出,而这样的程序只能称为垃圾。
作为一个程序员应当把问题想清楚了,才开始编程。但是有时候项目特别紧,程序员就只能一边写代码,一边想解决方案。这样虽然能提高编程效率,但是这样做风险很大。如果问题简单或程序员水平比较高,或许可以在一遍写代码时一边想清楚解决方案。但是人往往过于自信,尤其是程序员,而认为自己想清楚了。就像上面的问题一样,实际上没有。
最好的做法是脱离电脑编程,想把问题想清楚,有不清楚的地方找别人讨论。直到把问题完全搞清楚了,再坐到电脑前开始编程。编程最爽的时候,就是坐下来啪啪啪写代码的时候。
我在编程最爽的时候是连续敲两个小时的代码,然后测试通过。当时写完代码之后,感觉手指头都不是我的了,脑袋像是塞满了东西话都忘记了怎么说。
不光是编程,任何事情都是,只有抓住事情的本质,才能处变不惊。