對《如何解題》思路的補充

1.前言

《如何解題》(《How to Solve it》)是波利亞的經典著作,列舉了很多數學問題,總結了解決問題的主要思路和步驟,即定義問題,設計方案、實現、驗證。雖然全書主要是以數學問題爲例,但其思路適用於生活和學習的其他方面。比如在軟件開發領域,我們通常也是按照這四步。首先收集客戶需求、找到客戶的痛點和要解決的問題,然後進行產品設計、架構設計和每個模塊的詳細設計,接下來就是編碼實現和最終測試驗證了。

這四步法的確非常有效,然而很多時候,現實世界的問題與純粹的數學問題還是有很大差別的。最近讀了一些其他這方面的書,也自己思考了很多,發現其實有三點是可以補充的。


2.三點補充

2.1 從現象到本質

以前我也曾有過類似得想法,就是感覺科學家與我們的工作有很大不同。比如我們在寫代碼時本質上是在“創建世界”,我們指定這個世界的一切結構、運行規律。但科學家本質上卻是在做“逆向工程”,就像在用反彙編解構世界一樣。在《Conceptual Blockbusting》一書中,作者提到了類似的觀念。

所以其實,有時我們解決問題時並不是像解決數學問題一樣直接,一開始就知道自己面對的問題。我們經常是從現象(Result)出發,要先分析出到底哪裏有問題(Cause)。而且經常我們一開始發現的並不是根本原因(Root Cause),要順着因果關係的鏈條一直找下去。

2.2 問題 vs. 目標

現實世界往往不像數學問題那樣純粹,做一道數學題可能只是爲了好玩、鍛鍊大腦、打發時間,但也可能是爲了應付老師和考試。現實世界也是一樣的,我們要解決的問題背後,都是有一個最終目的的。這個目的可能很明顯,也可能是隱含的。但最重要的一點就是,不要以爲要解決的問題就是最終目標。

定義好問題後,往往解決問題的路有很多條,現實世界裏問題的答案常常不止一個。這時想想你的目標是什麼,就會對你的思路選擇起到很大作用。而且目標是分長期和短期的,解決方案要綜合考慮兩者,不能犧牲其中一個太多。比如你要解決的問題是如何設計一款能吸引客戶的XX產品,你的短期目標是儘快研發和推出一款產品來搶佔市場,那麼一個耗時耗力的方案可能不是一個選項。但如果你現在就很看重長期目標的話,可能一個快速但質量很一般的方案也不在考慮之內。

2.3 這是個問題嗎?

在《Principles》一書中作者提到,解決問題時一般要問自己:這是一個問題嗎?是否必須要解決嗎?有沒有辦法繞過它?如果確實是問題,無法繞開的話,接下來要做的纔是遵循《如何解題》裏的思路去解決。很多時候,這種反問會幫我們避免浪費時間去解決一個錯的問題。即便我們還是要解決這個問題,你也並沒有浪費時間。這些反問能幫你更深地理解,爲什麼要解決這個問題,不解決的後果是什麼。所以,下次當你面對一個問題時,試試這“靈魂三問”,能幫你親身體會到它的威力。

《Conceptual Blockbusting》一書裏也有類似的例子,作者設計過一種裝置,結果發現是完全不需要的,他耗費時間精力卻在解決一個根本不存在的問題!


3.總結:完整的解題思路

所以,把整個思路補全的話,應該是有時從現象入手找問題,有時直接拿到要解決的問題。在問題背後,明確自己的目標。在定義問題的過程中,思考是否真的是個要解決的問題。在此之後,按照《如何解題》一書的四步法,完成剩下的設計、實現、驗證三步。

而且整個過程很可能不是一蹴而就,而是多次循環迭代的。比如根據設計甚至實現時的反饋,回頭修正問題的定義,於測試驅動開發的反饋循環很像。從這一點上來看,解決數學問題、軟件開發流程、以及現實世界中其他問題的解決,真的都是相通的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章