1. What is computation thinking ?

您好,本篇博客是《Computation Thinking》的第一章 ---《什么是计算机思维 ?》 的翻译。

《Computation Thinking》:今年 4 月份出版的新书,中文名为《计算机思维》,作者是两位计算机科学家,美国的彼得·丹宁(和芬兰的马蒂·泰德。

 

1. What is computation thinking ?

如果直接写英文的句子,就是我看不懂的......

第一章基本没啥干货,就是科普一下 “计算”。

 


前言

什么是计算机 ?

大多数人会回答这是一个电子黑盒子,它通过收集、存储、检索和转换数据来完成惊人的工作。

几乎所有的设备与计算机相关:电话、平板电脑、台式机、网页、手表、导航器、温度计、医疗设备、时钟、电视、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 亿次。

     魔法不过是一台机器,它可以快速执行大量非常简单的计算。

     程序是自动化的桥梁:用编程语言编码的算法,会被翻译成控制计算机的机器指令。

译者补充:

        大多数计算机科学家的工作是把现实问题转换为数学问题,判断这个数学问题是否可计算,如果是就把数学问题描述成可计算问题;“可计算”,就是不但可以算,还能算出结果来,对于计算机科学家来说:给定输入,经过计算机的有限次计算,能得到一个确定的输出就是 “可计算”。

        工程师的工作是把可计算问题用编程语言实现出来,但因为工程师动手能力太强,往往问题都是被工程师提前解决(工程师也不知道为什么可以解决),而后过了很多年才被计算机科学家把理论补上,为什么这样可以完成!

      但计算思维远不止于自动化。  信息和计算过程已经成为理解自然现象和社会现象的一种方式。

      今天的许多计算机思维都是分析学习世界是如何运作的。

      越来越多的生物学家、物理学家、化学家和其他科学家正在通过计算的角度来观察他们的主题;艺术、人文和社会科学的专业人士也加入进来。

      计算机模拟使以前不可能的虚拟实验成为可能。

      世界的 “信息解释” 提供了其他任何方法都无法做到的概念性和经验性工具。

译者补充:

       以前的科学研究只有两种模式,一个是实验,一个是理论。

       实验科学家要搭建一个真实的科学场景,或是前往一个真实的科学场景去做观测,得尝试各种不同的条件,收集数据,看看能不能验证某个模型或者想法。

       理论科学家则是对实验观测的现象和数据提出解释。有时候要发明一个自己的模型,甚至提出一条定律,要不但能解释现有的实验,还能预测新的结果。

       而现在出现了模拟,也许正如《黑客帝国》的故事情节,因为模拟太真实了,我们都不确定我们是否是真实的,还是只是被模拟了呢,对这方面的讨论参见博客《集合论的计算机与数学的区别》 ?

       模拟不能让您得到什么一句话解释,但是计算能让你更接近真实情况;实验费钱,理论费脑,而计算……最多也就费点电,计算机的确改变了某些科学家的工作方式,调整几个参数就是一场新的实验!

      计算也给我们提供了计算机在任何合理的时间内都不能做的工作。对计算机来说,这些工作根本不可能完成。

译者补充:计算的渐进复杂度如果能控制在 1. What is computation thinking ? 或以下,那这个时间是合理的,渐进复杂度参见博客《渐进记号》。      

       许多社会、政治和经济问题都是计算机无法解决的。

       通过了解计算的局限性,我们可以避免用计算来解决这些问题的坑。

       显然,在这么短的时间内设计一台程序或一台机器,这是一项艰巨的设计任务,要让机器在没有错误的情况下完成工作,就需要有自己的思维方式。       

       事实上,站在用户的角度上理解用户,并为他们专门设计系统,是现代计算的一大挑战。

       设计是计算机思维的核心问题之一。

 


计算机思维的定义    

        计算机思维已成为一个具有多种定义的流行词。

        我们总结出许多的思想为这本书中使用这个定义:计算思维是智力技能和实践

  •          设计使计算机为我们工作的算法(计算方法),还有
  •          解释和解释世界是一个复杂的信息过程。

          设计的总结反映了计算的工程传统,在这种传统中人们创造方法和机器来帮助他人。

          把现实的问题翻译为数学问题,一直是计算的科学传统,人们试图理解计算是如何工作的,以及它如何在世界上出现。

          Design features immersion in the community being helped, explanation features being a dispassionate external observer.

          理论上,设计计算而不解释计算,或者解释计算而不设计计算是可能的。

          在实践中,这两个方面是会同时进行的。

          计算是一系列复杂的数值计算和符号处理。

  •                   数值计算如,基本的算术运算(加、减、乘、除)和基本的三角函数(正弦、余弦和正切)。
  •                   符号处理如,数字或符号的逻辑比较、决定下一步要做什么指令,或者用一个字母串替换另一个字母和数字串。

           以适当的顺序安排数万亿次这样的简单操作时,可以解决现实生活中的许多问题如:预测明天的天气、决定在哪里钻探石油、设计具有足够升力的飞机机翼、找出最有可能在哪个物理位置飞行等,导航,叫出租车,或者弄清楚哪两个人会成为一对好夫妻......

           而计算机是执行计算操作的代理。

           被算法化后,所有计算都遵循执行算术和逻辑运算的指令程序。

           算法当然也可以被人类按照流程计算出来,不过,除了一些天才,大部分人的计算速度远不及机器快,或无错误。

 

           我们用 “工作” 一词,来指任何人认为有价值的任务。

           而今天,许多人依靠计算机(实际上是由计算机执行的计算)来完成工作,因为自动化的工作,而没有机器的帮助是做不到的。

           计算机在一些日常工作上已经足够好了,因此,由于自动化而失去就业机会已经成为一个重要的社会问题。  

   译者补充:自动化是我们的工作(程序员),现在我们的工作可能会让别人失业;当我们工作到巅峰时,也是我们自己失业的时候。  

                     这件事情,我们也没办法;被自动化的工作都是人的工作效率远低于机器的(以及成本方面),一个企业家出于长远考虑,一定会使用机器的,如果 TA 不使用机器,TA 的对手使用了就可以打价格战......

            我们不要把 “工作” 一词等同于自动化哦。

                          

 

 

【翻译ing...】