碰到问题时,曾试图站在机器的角度去处理,可是却感觉无从下手,请问如何用计算机思维来解决问题?
1. 宏观:找到现实世界和虚拟世界的对应;
2. 中观:在有限资源的情况下做到全局最优;
3. 微观:合理组织和利用资源,凡事留有余地。
史元春教授讲,计算机思维是在学习和应用计算机学科理论和技能的过程中,所体验和获得的思想方法和做事方法。
它分为三个层次:
首先是宏观层面,包括对“可计算”这个思想的理解,也就是如何使用计算机这个工具,将虚拟世界处理问题的方法变成解决现实生活中的各种实际问题的方法。换句话说,计算机思维需要你针对现实生活中的问题找到计算机的解决策略。
无论是 Google 让计算机下围棋,还是实现计算机开车,都首先要将现实生活中的问题和虚拟世界的问题对应。
接下来是“中观”层面,“中观”这个词是史老师发明的。要理解中观,一个很好的例子就是计算机的操作系统。
任何操作系统都要求按照各项任务的优先级和可使用的资源,设计出调配资源、让计算机各部分协同工作的方法,并且对于各种任务进行整体优化。一个好的操作系统,不是做某一件事特别好,而是在资源有限的情况下整体上让人感觉特别流畅,比如苹果的操作系统就是如此。
接下来,史教授又举了一个比较学术化的例子,就是计算机科学中的递归原理。它将大事分解、从小事做起,步步干净利落、自顶向下设计,再自下而上回归,非常具有美感。
为了便于你理解递归,我不妨举这样一个例子。如果想管理好一个公司该怎么做?这家公司的 CEO 只要管理好手下几个副总裁就可以了。
那么副总裁该怎么做?只要用同样的方法管理好自己事业部下面几个总监就可以了,类似地,总监管理好经理,经理管理好一线员工。CEO 不必操心怎样管每一个员工。我个人也觉得,递归是计算机科学的精髓所在。
第三个层面是微观。这才涉及到具体技能,但还不是简单的编程等技能,而是这样几个方面:
a)设计出计算机内部整理和查找信息的技能(addressing)。简单地讲,就是我在第2封信《思维方式决定商业模式》中所说的管理10000本书,或者10000双鞋子的方法。
计算机内外的各种资源都要合理地编号存储,然后根据编号来访问,要有合理的编号方案,以及与其配合的高效率访问算法,这是实现计算机各种应用好坏的关键。在生活中,它等同于我们处理各种事情的条理性。
b)缓存。凡事要留有余量,很多时候要预先准备好数据和程序,这就是缓存。这样当大事当前时,能有所准备,有空间回旋。
至于编好程序,史教授认为这是计算机从业者所必需掌握的,属于“雕虫小技”。
摘自 吴军 谷歌方法论