轉自 G.波利亞在數學領域發展的一套解決問題的方法,它同樣可以用于解決軟體設計中的問題
1. 解決問題,你必須要了解的問題。
未知量是什麼?
現有資料是什麼?
條件是什麼?
能夠滿足這些條件嗎?
這些條件足以決定未知量嗎?
還是并不夠?
或者其中有備援?
甚至是沖突?
畫一幅圖,引進一些合适的記号,把條件的不同部分分離開。你能把他們一一寫下嗎?
2. 設計一個計劃。找出現有資料與未知量之間的聯系。如果你找不出居中的聯系,那麼可能還得考慮些輔助性的問題。最終你應該能得出一份解決方案的計劃表。
在此之前你遇見過這一問題嗎?或者曾經遇見過與此差别不大的問題?你知道某個相關的問題嗎?你知道一個可能會有用的定力麼?
盯住哪個未知量!試着想出一個有着相同或者類似的未知量的問題來。一定有一個和你的問題相關的而且此前已經被解決過的問題,你能用它嗎?你能用它的結果嗎?或者用它的方法?你能再次用與以前都不同的方式重述這個問題嗎?回過頭去考慮一下定義把。
如果你還是解決不了提出的這個問題,那麼試着先去解決一些相關的問題吧。你能設想出一個更容易解決的與此有關的問題嗎?一個更一般的問題?一個更特殊的問題?一個類似的問題?你能解決這個問題的一部分嗎?隻留下一部分條件而去掉其他條件,未知量能夠确定多少,它又能怎樣變化?你能從和諧資料中得出有用資訊嗎?你能找出其他适合用于确定未知量的資料嗎?你能修改未知量或者已知資料,或者必要時修改兩者,以使新的未知量和新的資料更加接近嗎?
你使用了全部的資料嗎?你使用了所有的條件嗎?你考慮了該問題所涉及的所有核心概念了嗎?
3. 執行這一計劃。請執行你的計劃。
執行你的求解計劃,檢查每一步,你能清楚地看到每一步都是正确的嗎?你能證明它是正确的嗎?
4. 回顧。檢視整個的解。
你能核對結果嗎?你能核對論據嗎?你能用不同的方法來得出這個結果嗎?你能一眼就看出來嗎?
你能在其他問題是使用這一結果或方法嗎?
最有效的原則之一就是不要卡在單一的方法上。如果用UML畫設計圖不可行,那麼久直接用英語來寫。寫簡短的測試程式。嘗試一種截然不同的方法。想出一種蠻力解決方案。。。如果都不行,先離開這個問題。可以去散步,或者去想一想其他的事情,然後再回來重新面對這個問題。如果你盡了力還沒能獲得突破,那麼暫時不要去想它反而會比窮思苦想效果更好。