基本的问题解决技巧
把它们作为自己的问题解决方法的常规武器,就能想出办法解决任何特定问题。
总是要制定计划
我们在解决问题时必须要制定一个计划。也许这个计划一旦与敌人交火就不再有效,也许我们在源代码编辑器中开始输入代码时就会抛弃这个计划,但我们还是必须要制定一个计划。
创建一个具有一系列分阶段目标的计划,虽然看上去与主要问题不是非常密切,仍然可以朝着解决方案取得可衡量的进展,并感觉自己的时间被合理的使用了。
重新陈述问题
在某些情况下,一个看上去非常困难的问题如果用一种不同的方式或术语去阐述,就会变得非常简单。就像登山之前寻找不同的出发点。完成计划后,我们就可以把“形式化地重新陈述问题”作为自己的第一个步骤,完成了重新陈述就意味着取得了进展。即使重新陈述问题并没有直接让我们重新获得新思路,它仍然可能在其他方面提供帮助。重新陈述问题可以转化整个问题领域。
1.首先列出约束条件2.列出所有的操作3.列出更基本的操作
划分问题
按照顺序编写while,for,if等控制语句要更容易理解和编写。记住,像瓷砖滑块这样的问题常常隐藏着潜在的划分方法。寻找问题的划分方法就是削弱问题的方法。
从自己所知的开始
作者在开始创作的时候,常常会收到这样的建议“写自己知道的东西”。作者所写的东西距离他自己的经历越远,写作的难度就越大。同样在编程的时候,我们应该尽量从自己知道的部分开始着手,在寻找其他方法之前,我们应该用已掌握的技巧对问题进行完整的研究。如果我们把编程技巧看成是工具,把编程问题看成是家庭维护项目,首先应该用手头上已经有的工具进行修理,然后再考虑到五金店购买工具。
削减问题
当我们面临一个无法解决的问题时,通过这种技巧,可以削减问题的范围。我们可以添加或取消约束条件,产生一个自己知道如何解决的问题。削减问题允许我们对一个更简单的问题进行操作,即使我们无法找到一个方法将问题划分为几个阶段。在实际效果上,它相当于故意同时,又是临时的小林丸号。尽管我们知道不是对整个问题进行处理,但是经过削减的问题与原先的问题仍然具有相当多的共性,足以让我们向最终的解决方案又迈出一步。削减问题还允许我们准确的理解剩余的难点位于何处。有助于准备地描述自己所需的帮助。
寻找类比
类比就是一个当前问题和一个已经解决的问题之间的相似性。我们可以利用这种相似性来解决当前问题,而这种相似性可能已多种形式存在。大多数类比并没有这么直接,有时候,相似性只涉及问题的一部分。我们所编写的每个成功地程序并不仅仅是一个当前问题的解决方案,它还是一种潜在的类比资源,可以供解决未来的问题所用。良好的复用和不良好的复用。
试验
有时候,取得进展的最好方法是对事情进行试验并观察其结果。试验是一种可控过程,我们假设当某些代码执行时将会发生什么,然后对它试验,观察自己的假设是否正确。根据这种试验,我们可以获得一些信息,帮助自己解决原先的问题。尤其在自己关心的场景下对它进行试验,可以揭示出源代码所存在的问题,为自己的思路打开一个缺口,不管怎样,我么都朝着解决方案迈进了一步。
避免陷入挫折感
如果完成了最初计划的所有步骤,但还是无法开始编写代码,这个时候应该制定另一个计划。
休息放松,在此之前,不再考虑那个问题。