计算机思维

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

 

计算机思维是全方位的,不太可能用一两句话概括。简单地讲,需要处理好这样七对关系:
1. 大和小

2. 快和慢
人的进化是很慢的,每个世纪只有百分之几,总体来讲经济和社会的发展也是比较慢的,每年最多几个百分点。因此,人本身并不适应非常快速的发展变化。但是,计算机本身的发展是18个月翻一番,大约相当于10年增加100倍,在智能时代,人的思维要适应这种快速变化。
3. 多维度和单一维度
从总体上来讲,人脑是线性处理事务的,看问题常常是一个角度,也没有能力把很多角度综合起来。但是,计算机有这个能力,因此占到了多维度的便宜。
4. 网络和个体
人的思维是个体行为,作决定彼此不干扰。这有好的一面,但是也难以集中很多人的智慧,产生叠加的效果。事实上,群体智慧的简单叠加甚至不如个人的智慧。但是人工智能是建立在网络效应基础上的,它是通过很多彼此联系的计算机共同协作工作而产生的。
5. 自顶向下和自底向上
自顶向下做事这一点是计算机的精髓,而人更适合自底向上。在一个组织内,自底向上的做事方式更容易激发群体的积极性,但是容易造成资源的浪费。这一点以后我会专门举例说明。
6. 全局和局部
人做事情时,限于自己的认知,通常得到的是局部最佳,失去对全局的优化的可能性。由于计算机有处理大数的能力,以及是自顶向下的做事方式,更容易得到全局最佳。这一点在 AlphaGo 和人对弈时表现得淋漓尽致。
7. 成本和表现
人很多时候喜欢强调对错,喜欢追求绝对的公平,喜欢要求最好的结果。但是,从工程的角度讲,好和坏,只是在固定成本下相对的表现。计算机里面无论是软件设计,还是硬件设计,都是在平衡性能和成本的关系。
此外,掌握计算机思维,还需要理解下面两个原则:
一、等价性原则
很多时候,一个较难的问题 A 和相对容易的问题 B 是等价的。但是人类常常容易给什么问题就解决什么问题,给了 A 就解决 A,尽管它很难。而计算机则会试图解决等价,但是却更简单的问题。
二、模块化原则
我们在生活中,做一个桌子,或者一个椅子,会直接去做。而在计算机的世界里,永远是先制作几个非常简单,能够大量复制的乐高积木块,然后用很多这样简单的模块,搭出复杂的桌子和椅子。

你可能感兴趣的:(软件开发体系)