1. What is computation thinking ?
您好,本篇博客是《Computation Thinking》的第一章 ---《什么是计算机思维 ?》 的翻译。
《Computation Thinking》:今年 4 月份出版的新书,中文名为《计算机思维》,作者是两位计算机科学家,美国的彼得·丹宁(和芬兰的马蒂·泰德。
如果直接写英文的句子,就是我看不懂的......
第一章基本没啥干货,就是科普一下 “计算”。
前言
什么是计算机 ?
大多数人会回答这是一个电子黑盒子,它通过收集、存储、检索和转换数据来完成惊人的工作。
几乎所有的设备与计算机相关:电话、平板电脑、台式机、网页、手表、导航器、温度计、医疗设备、时钟、电视、DVD播放器、wifi网络。
像无人超市、银行、滴滴、酒店预定、社交软件、在线课程这样的服务,都在 Google搜索里---一个看不见的世界。
译者补充:
- Google所有的业务,尤其是由用户产生数据的业务,比如邮件、博客、Orkut等都搬到了云计算上面。在Google内部,产品团队的工程师开发产品时,已经不关心实际用了多少物理上的服务器,这些服务器在哪里,互相是如何连接的。他们只要提出自己需要多少计算资源,包括CPU资源和存储资源就好,填好配置文件,剩下就是云计算的事了。
对于用户来讲也是如此,他们不知道自己的内容放在了哪里,这些数据就像一个存储在看不见的世界里。
- 提出云计算是为了提供服务,可以让网民们在互联网云中任何时间、任何地点都能快速和安全地访问、处理、存储和共享信息。后来发现云计算的力量超自己的想象,云计算的产业链一旦形成对信息产业的影响极大,就是让越来越多的服务从 PC 客户端转移到网上。
- 云计算最早由 Google 提出,当Google创始人佩奇和布林还在斯坦福读书时,就提出并实现了一种叫 “Big File” 的新型文件系统,TA 是后来的 Google 云计算技术中的 GFS 文件系统的雏形,有了 GFS 和 迪恩以分治思想开发的并行处理工具 MapReduce,能把很多廉价的服务器集成起来完成超级计算机的计算和存储功能,前者的成本不到后者的五分之一,便完成了云服务。
计算机创造了大量的工作机会,促进通信、经济发展、国防、提高生活水平,等等。
与此同时,也淘汰了许多工作机会、隐私泄露、被人监测,等等。
随处可见的东西,都被数字化了。计算机革命正发生在我们的身边。
计算的能力和价值
计算机思维提供了一些这些问题的答案。
很多计算机思维都是专门针对如何让计算机为我们做一件事,如何控制一个复杂的电子设备,在不造成损害或伤害的情况下,可靠地完成一项工作。
译者补充:
所谓的计算机思维,其实是一些通用的方法,人在设计程序时,总结出的经验。
递归:计算机遇到的问题的处理的数据可能是数量级,不好直接解决;这时便可以把原问题变成一个很TA相似但问题规模比TA小的问题来解决,分解为一级一级,直到变成了不可分解的个体时,问题就好解决了。
分治:将一个大问题拆解为俩个或俩个以上的小问题;企业为什么喜欢招新人,不招牛人,因为老板可以把一个大项目拆解为数十个小项目,找有相关技术的新人即可完成这个大项目,新人组合起来就比得上一个牛人了。
对立统一:计算机的 “智能” 是通过收集到的大量数据喂的,得到的结果往往具有网络效应;而人的思维常常只能局限在自己的角度,不能站在对方面或者多纬度的思考,若能做到就取得很好的效果。
全局与局部:写程序时,我们都会先定义好整个程序的模块,模块下的内容我们只会有一个模糊的想法,等模块被定义清楚后,我们再一级一级的地细化。
算法是专门说明计算机应该如何工作的过程。
虽然人类可以执行算法,但他们不能像机器那样快;现代计算机可以在人类完成一步所需的时间内完成一万亿步。
译者补充:
我电脑的处理器是 1.6 GHz,每秒可以运算 1.6 * 10 亿次。 1 GHz = 每秒运算 10 亿次。
魔法不过是一台机器,它可以快速执行大量非常简单的计算。
程序是自动化的桥梁:用编程语言编码的算法,会被翻译成控制计算机的机器指令。
译者补充:
大多数计算机科学家的工作是把现实问题转换为数学问题,判断这个数学问题是否可计算,如果是就把数学问题描述成可计算问题;“可计算”,就是不但可以算,还能算出结果来,对于计算机科学家来说:给定输入,经过计算机的有限次计算,能得到一个确定的输出就是 “可计算”。
工程师的工作是把可计算问题用编程语言实现出来,但因为工程师动手能力太强,往往问题都是被工程师提前解决(工程师也不知道为什么可以解决),而后过了很多年才被计算机科学家把理论补上,为什么这样可以完成!
但计算思维远不止于自动化。 信息和计算过程已经成为理解自然现象和社会现象的一种方式。
今天的许多计算机思维都是分析学习世界是如何运作的。
越来越多的生物学家、物理学家、化学家和其他科学家正在通过计算的角度来观察他们的主题;艺术、人文和社会科学的专业人士也加入进来。
计算机模拟使以前不可能的虚拟实验成为可能。
世界的 “信息解释” 提供了其他任何方法都无法做到的概念性和经验性工具。
译者补充:
以前的科学研究只有两种模式,一个是实验,一个是理论。
实验科学家要搭建一个真实的科学场景,或是前往一个真实的科学场景去做观测,得尝试各种不同的条件,收集数据,看看能不能验证某个模型或者想法。
理论科学家则是对实验观测的现象和数据提出解释。有时候要发明一个自己的模型,甚至提出一条定律,要不但能解释现有的实验,还能预测新的结果。
而现在出现了模拟,也许正如《黑客帝国》的故事情节,因为模拟太真实了,我们都不确定我们是否是真实的,还是只是被模拟了呢,对这方面的讨论参见博客《集合论的计算机与数学的区别》 ?
模拟不能让您得到什么一句话解释,但是计算能让你更接近真实情况;实验费钱,理论费脑,而计算……最多也就费点电,计算机的确改变了某些科学家的工作方式,调整几个参数就是一场新的实验!
计算也给我们提供了计算机在任何合理的时间内都不能做的工作。对计算机来说,这些工作根本不可能完成。
译者补充:计算的渐进复杂度如果能控制在
或以下,那这个时间是合理的,渐进复杂度参见博客《渐进记号》。
许多社会、政治和经济问题都是计算机无法解决的。
通过了解计算的局限性,我们可以避免用计算来解决这些问题的坑。
显然,在这么短的时间内设计一台程序或一台机器,这是一项艰巨的设计任务,要让机器在没有错误的情况下完成工作,就需要有自己的思维方式。
事实上,站在用户的角度上理解用户,并为他们专门设计系统,是现代计算的一大挑战。
设计是计算机思维的核心问题之一。
计算机思维的定义
计算机思维已成为一个具有多种定义的流行词。
我们总结出许多的思想为这本书中使用这个定义:计算思维是智力技能和实践
- 设计使计算机为我们工作的算法(计算方法),还有
- 解释和解释世界是一个复杂的信息过程。
设计的总结反映了计算的工程传统,在这种传统中人们创造方法和机器来帮助他人。
把现实的问题翻译为数学问题,一直是计算的科学传统,人们试图理解计算是如何工作的,以及它如何在世界上出现。
Design features immersion in the community being helped, explanation features being a dispassionate external observer.
理论上,设计计算而不解释计算,或者解释计算而不设计计算是可能的。
在实践中,这两个方面是会同时进行的。
计算是一系列复杂的数值计算和符号处理。
- 数值计算如,基本的算术运算(加、减、乘、除)和基本的三角函数(正弦、余弦和正切)。
- 符号处理如,数字或符号的逻辑比较、决定下一步要做什么指令,或者用一个字母串替换另一个字母和数字串。
以适当的顺序安排数万亿次这样的简单操作时,可以解决现实生活中的许多问题如:预测明天的天气、决定在哪里钻探石油、设计具有足够升力的飞机机翼、找出最有可能在哪个物理位置飞行等,导航,叫出租车,或者弄清楚哪两个人会成为一对好夫妻......
而计算机是执行计算操作的代理。
被算法化后,所有计算都遵循执行算术和逻辑运算的指令程序。
算法当然也可以被人类按照流程计算出来,不过,除了一些天才,大部分人的计算速度远不及机器快,或无错误。
我们用 “工作” 一词,来指任何人认为有价值的任务。
而今天,许多人依靠计算机(实际上是由计算机执行的计算)来完成工作,因为自动化的工作,而没有机器的帮助是做不到的。
计算机在一些日常工作上已经足够好了,因此,由于自动化而失去就业机会已经成为一个重要的社会问题。
译者补充:自动化是我们的工作(程序员),现在我们的工作可能会让别人失业;当我们工作到巅峰时,也是我们自己失业的时候。
这件事情,我们也没办法;被自动化的工作都是人的工作效率远低于机器的(以及成本方面),一个企业家出于长远考虑,一定会使用机器的,如果 TA 不使用机器,TA 的对手使用了就可以打价格战......
我们不要把 “工作” 一词等同于自动化哦。
【翻译ing...】