天天看点

一套解决问题的方法

转自  G.波利亚在数学领域发展的一套解决问题的方法,它同样可以用于解决软件设计中的问题

1. 解决问题,你必须要理解的问题。

    未知量是什么?

    现有数据是什么?

    条件是什么?

    能够满足这些条件吗?

    这些条件足以决定未知量吗?

    还是并不够?

    或者其中有冗余?

    甚至是矛盾?

    画一幅图,引进一些合适的记号,把条件的不同部分分离开。你能把他们一一写下吗?

2. 设计一个计划。找出现有数据与未知量之间的联系。如果你找不出居中的联系,那么可能还得考虑些辅助性的问题。最终你应该能得出一份解决方案的计划表。

    在此之前你遇见过这一问题吗?或者曾经遇见过与此差别不大的问题?你知道某个相关的问题吗?你知道一个可能会有用的定力么?

    盯住哪个未知量!试着想出一个有着相同或者类似的未知量的问题来。一定有一个和你的问题相关的而且此前已经被解决过的问题,你能用它吗?你能用它的结果吗?或者用它的方法?你能再次用与以前都不同的方式重述这个问题吗?回过头去考虑一下定义把。

    如果你还是解决不了提出的这个问题,那么试着先去解决一些相关的问题吧。你能设想出一个更容易解决的与此有关的问题吗?一个更一般的问题?一个更特殊的问题?一个类似的问题?你能解决这个问题的一部分吗?只留下一部分条件而去掉其他条件,未知量能够确定多少,它又能怎样变化?你能从和谐数据中得出有用信息吗?你能找出其他适合用于确定未知量的数据吗?你能修改未知量或者已知数据,或者必要时修改两者,以使新的未知量和新的数据更加接近吗?

    你使用了全部的数据吗?你使用了所有的条件吗?你考虑了该问题所涉及的所有核心概念了吗?

3. 执行这一计划。请执行你的计划。

    执行你的求解计划,检查每一步,你能清楚地看到每一步都是正确的吗?你能证明它是正确的吗?

4. 回顾。检视整个的解。

    你能核对结果吗?你能核对论据吗?你能用不同的方法来得出这个结果吗?你能一眼就看出来吗?

    你能在其他问题是使用这一结果或方法吗?

    最有效的原则之一就是不要卡在单一的方法上。如果用UML画设计图不可行,那么久直接用英语来写。写简短的测试程序。尝试一种截然不同的方法。想出一种蛮力解决方案。。。如果都不行,先离开这个问题。可以去散步,或者去想一想其他的事情,然后再回来重新面对这个问题。如果你尽了力还没能获得突破,那么暂时不要去想它反而会比穷思苦想效果更好。