“三人住旅館”是程序員面試的道經典問題。具體的問題是:
“有三個人去住旅館,住三間房,每一間房$10元,于是他們一共付給老板$30,第二天,老板覺得三間房只需要$25元就夠了于是叫小弟退回$5給三位客人,誰知小弟貪心,只退回每人$1,自己偷偷拿了$2,這樣一來便等于那三位客人每人各花了九元,于是三個人一共花了$27,再加上小弟獨吞了不$2,總共是$29。可是當初他們三個人一共付出$30那么還有$1呢?”
咋一看是那么回事,但實際上,小弟貪污的是27元里中的2元。而這里卻又拿2元加上27元,把小弟的兩元算了兩邊,結果肯定是錯的。導致錯誤的根源是思維混亂,沒有看到問題的本質。
在編程的時候也是這樣,編程的目的是解決問題。但是如果沒有找到問題的本質,編寫的程序也一定會混亂不堪,bug百出,而這樣的程序只能稱為垃圾。
作為一個程序員應當把問題想清楚了,才開始編程。但是有時候項目特別緊,程序員就只能一邊寫代碼,一邊想解決方案。這樣雖然能提高編程效率,但是這樣做風險很大。如果問題簡單或程序員水平比較高,或許可以在一遍寫代碼時一邊想清楚解決方案。但是人往往過于自信,尤其是程序員,而認為自己想清楚了。就像上面的問題一樣,實際上沒有。
最好的做法是脫離電腦編程,想把問題想清楚,有不清楚的地方找別人討論。直到把問題完全搞清楚了,再坐到電腦前開始編程。編程最爽的時候,就是坐下來啪啪啪寫代碼的時候。
我在編程最爽的時候是連續敲兩個小時的代碼,然后測試通過。當時寫完代碼之后,感覺手指頭都不是我的了,腦袋像是塞滿了東西話都忘記了怎么說。
不光是編程,任何事情都是,只有抓住事情的本質,才能處變不驚。