引言
《像程序员一样思考》是一本训练程序员编程思想的指导书。本书以向个经典难题开篇,提出一些编程中常用的思想方法,如重述、类比、划分、消减等。同时也提供一些具体的技巧,如利用数组、指针动态内存、类解决问题。着重提出了大递归的思想,以及善假于外物的思路。本书注重程序员自信心的培养,提倡利用现有方法解决未知问题的同时,也鼓励探索式自主学习新技术。
三个经典难题
狐狸、鹅和玉米过河问题:用重形式化的方式重述问题,更好地洞察问题。以程序化方式列出所有的操作,从而发现“被隐藏的”的可能操作,将这些方法操作进行自由组合得到目标结果。认识到思考问题很可能与思考解决方案具有相同的工作效率,甚至更胜一筹。
瓷砖滑块移动问题:无法规划完整的解决方案并不意味着就无法采取策略或技巧系统性地解决问题。可以将问题进行细分,划分成细小部分,对其简单版问题进行研究发现一种常用技巧(“串列”),解决简单版后依次增加难度还原问题步步解决。
数独填词问题:“最大约束变量”。寻找问题约束性最强的部分,虽然约束条件往往使问题难以着手,但它们也可以消除很多选择、简化思路。如数独填词中搜索那些可能出现的值最少的空格。如果问题的某个部分具有很强的约束条件,很可能应该从这一部分开始着手,就不用担心把时间花在将来可能会返工的任务上了。
基本的问题解决技巧
制订计划:事先必须制订计划,而不是直接进行漫无方向的尝试。
重述问题:用不同的方式或术语阐述,重新审视问题,发现新思路。
划分问题(分治法):找到一种方式把一个问题的解决方案划分为几个步骤或几个阶段,可以使问题更容易解决。
从自己所知的开始:在编程在解决问题时,尽量从自己知道的部分开始着手。当用自己所掌握的技巧对一个问题进行研究时,可以更好地理解这个问题本身以及它的最终目标。
消减问题:当面临一个无法解决问题时,通过消减可以消减问题的范围。可以添加或取消约束条件,产生一个自己知道如何解决的问题。消减后的问题与原问题仍有相当多的共性,会使我们向最终的解决方案更进一步。消减问题允许我们准确地理解剩余的难点位于何处。
寻找类比:类比就是一个当前问题和一个已经解决的问题之间的相似性。其前提是已经拥有大量的解决方案可供参考。
试验:试验是一种可控的过程。我们假设当某些代码执行时将会发生什么,然后对它进行实验,观察自己的假设是否正确,根据这些观察,可以获得一些信息,帮助自己解决原先的问题。另一种形式的试验与调试相似。
避免陷入挫折感:挫折感会不断恶化,很可能一开始轻度焦虑变成最终难以遏制的烦躁。方法:首先制订计划;其次,可以休息一会儿。