在这个互联网时代,我们出门购物、拍照、打电话、浏览信息,只需要带上一部智能手机就可以了。如果在20年前,要实现这些功能,需要带一大堆东西。如今,我们口袋里的这台计算机,和50年前送宇航员上月球的那台计算机相比,功能更强大,体积更小巧。

计算机为什么功能强大,能读懂人类的语言?直到我看了《写给所有人的编程思维》这本书,解答了心中的疑惑,明白了计算机的工作原理。这一切能都离不开程序员的编程设计,说到编程,人们总是想到程序员坐在电脑面前,敲击着一长串神秘的代码。其实,编程体现的是人类的智慧。

在《写给所有人的编程思维》这本书中,阐述了计算机的历史和二进制工作原理,以及如何创建编程思维。计算机的编程需要逻辑、推理和数学。编程思维可以提升思维能力,创造性地解决问题。

学习编程思维并不是要掌握编码技巧,而是学习一种解决问题的思维方法。本书有四章内容:学会编程思维;解决问题;学习编程语言;继续努力。

本书的作者吉姆·克里斯蒂安,是英国著名的科技教育专家,编程怪才,曾获得Dr.Dobb’s程序设计卓越奖。

我们来看计算机是怎样读懂人类语言的,我们如何用编程思维解决问题。

一、 编程与计算机。

计算机的特征。

计算机是指能够接收、转换、存储信息,再用设定的形式将信息输出的电子设备。

计算机的形式多种多样:手机、平板电脑、台式计算机、笔记本。虽然它们形状各异,但内部的结构都大同小异,都有:主板、网络、输入和输出设备、外存储器、随机存储器、微处理器。

微处理器就是人们常说的中央处理器或CPU,是计算机的大脑,负责处理“思维”工作。

在微处理器的内部,有成千上万个开关等待电信号的到来,电信号通过通道和闸门的开关,以二进制数字的形式生成。微处理器的核越多,每秒能够运行的指令也就越多。

编程就是将人的想法、思维,翻译成计算机能读懂的二进制数字语言,转换成计算机要执行的动作。

计算机的语言--二进制。

计算机中所有的输入和输出,都是由无数个0和1组成的二进制数字经过编码、解码,转换成计算机能识别的代码实现的。

二进制是1679年,由德国天才大师莱布尼茨研发出来的。二进制是一种计数方式,只用到两个数字0和1,因为计算机只能识别0和1组成的代码。

0和1这两个数字掌管计算机内部晶体管的开关,1表示开,0表示关。人们操作计数机,就是通过控制计算机内部晶体管的开关,引导电流进入正确的方向,实现程序运行的。

我们工作、生活中常用的算数是十进制,就是逢10进1。计算机的二进制规则是逢2进11和0就是计算机能懂的语言,表示开和关,是和否,真和假。

在二进制中,数字1,用1表示;数字2用10;数字3用11;数字4用100;数字8用1000。

如果用十进制,两只手只能数到10,但如果用二进制,一只手就能数到31。

将拳头握紧,表示数字0;

大拇指代表数字1;

食指代表数字2;

中指代表数字4;

无名指代表数字8;

小拇指代表数字16;

如果用两只手,就能数到1023,因为在二进制中,后一根手指的数值是前一根手指的两倍。第1只手的小拇指表示16,另一只手的大拇指就表示32,食指就代表64,中指代表128,无名指代表256;小指代表512。

这个游戏很好玩,能够锻炼创新思维和逻辑思维。

二进制数值还可以用来表示英文的26个字母,A用数字1;B用10;C用11;……

如果这组信息:1000 101 1100 1100 1111 拼写出来就是“你好”,这样就将人类语言转化成计算机能懂的语言。

二、 编程语言。

计算机语言讲究语法和语境,一个逗号,一个字母就能改变整个句子的意思,可以说,差之毫厘,失之千里。

计算机的编程语言经历了机器语言、汇编语言、高级语言三个阶段,世界上的编程语言有100多种,但是常用的只有10-15种,这里介绍几种编程语言。

算法

算法就是为了完成某项任务,按照设定的顺序执行的一系列明确的指令。算法中指令越具体、越明确,指令运行时出错的概率就越小。

比如我们让一个叫小智的机器人来整理床铺。

我:小智准备好了吗?

小智:准备好了。

我:小智整理床铺。

小智:……(只是坐在那里发懵)。

因为小智不明白“整理床铺”的做法,我们整理的要求是:把羽绒被、毯子、枕头收拾好,所以我们下达的指令要具体、清晰。

1. 将羽绒被平整地铺在床上。

2. 将毯子平整地铺在羽绒被上。

3. 将枕头放在毯子的上面。

算法就像做菜使用的菜谱,是计算机要执行的命令,我们来看一下,给机器人小智发出指令,做一个加奶酪的三明治。

1. 拿起一片面包。

2. 将面包放在厨房的操作台上。

3. 把黄油盒的盖子打开。

4. 把盖子放下。

5. 握住刀柄拿起刮取黄油的小刀。

6. 一只手握住小刀的手柄,让刀口向外。

7. 一小刀并在黄油上刮取三秒钟。

8. 拿起小刀。

9. 使小刀靠近面包片。

10. 放低小的在面包上涂抹三秒钟,一共涂抹两次。

11. 把小刀放在操作台上。

12. 拿起一片奶酪。

13. 把奶酪片放在涂有黄油的面包上。

14. 再拿起一片面包。

15. 将面包片覆盖在奶酪和有黄油的面包片上。

你看,在上面的步骤中,描述很具体,讲到了如何握刀,刀口的方向,其实,还可以具体到小刀的角度和抹黄油的速度。

在7-10步中,指令包括了涂抹黄油的时间,因为小智不知道涂抹黄油多少才算够了,所以,程序员做出估算,大概需要三秒时间。

循环

编程语言的设计要做到便捷、高效,在算法编写时,要做很多具体的指令,不仅繁琐,而且还有重复。为了避免重复的指令,在编程中,可以用循环来处理一些基础的指令,让程序变得简单一些。

比如,我们让机器人小智走过来10步,我们要说10次“向我走1步”,这样下达的指令不仅繁琐,还容易在次数上出错,解决方法就是用循环:“向我走10步。”

循环就是执行重复的指令,直到过程结束的一种结构。循环分为两种:计数循环和条件循环。

计数循环是通过次数控制的循环,叫for循环。for循环会一直重复指令,不管结果如何。

条件循环式通过条件来控制循环次数,就是While循环。

在算法中运用循环,修改一个语句就能完成双倍的编程工作,达到事半功倍的效果。

比如,我们在三明治的程序指令中,可以运用循环来提高效率。在第10步之后,多加一条指令:重复以上1-10步。这样,机器人就会重复工作,但是这样会出现无限循环,机器人会按照指令工作,一直在面包片上涂抹黄油,直到面包片用完,最后程序崩溃。

为了避免这一缺陷,我们要对程序进行修补,将步骤11修改为:重复以上1-10步,直到给两片面包片涂完黄油为止。这样增加了一个特定的条件,就使机器人的操作更加完美。

变量

编程中经常会遇到变量,变量就像一个贴着标签的盒子,里面装有变量名和变量值。

电子游戏中经常遇到变量,比如,游戏角色还剩多少条命,命的次数是变量。

我们人体也有变量,比如:头发的长短,身高、体重的变化,年龄的增长。

下面我们来做一个猜年龄游戏。

1. 让你的朋友在纸上写下他的年龄。

2. 将这个数字乘以2。

3. 再加上1。

4. 然后乘以5。

5. 再加上5。

6. 再乘以10。

7. 再减掉100。

8. 最后再划掉末尾两位数。

在这个游戏中,程序中的年龄适用于任何年龄的人,人的年龄就是变量名,年龄的数值是变量值,可以编写出:((年龄×2+1)×5+5)×10-100==年龄

经过推算,左边的公式最后的结果是100倍年龄,划掉最后两个00,自然就是年龄了,这个游戏玩的就是数学魔术。

条件语句

条件语句是计算机根据给定的信息做出选择的语句。

生活中,我们每天都要根据条件做出选择。比如:如果人行道信号灯是红色,那么我们就要等待绿灯亮,否则就可能被车撞倒。

下面我们来做一道和条件语句相关的题:假如你去找朋友约翰还钱,结果发现,约翰、詹姆斯、威廉是一模一样的三胞胎,有人告诉你,约翰、詹姆斯总是说谎话,只有威廉说真话,你只能问一句话,确认此人是不是约翰,你会怎么问?

正确答案是:“你是詹姆斯吗?”因为威廉说真话:“不是。”詹姆斯说谎话:“不是。”只有约翰说谎话,是唯一一个回答“是”的人。

调试

调试这一术语起源于20世纪40年代,是美国海军少将格雷斯·赫柏提出的。她在哈佛大学为计算机编写程序时发现了一只真正的虫子(bug)钻进了计算机,使计算机无法正常运行,调试(debugging除去虫子)由此而来。

调试就是仔细检查编写过程、算法、流程图,排除并修复使程序无法正常运行的问题或错误。

在编写程序的过程中,计算机只是执行接受的指令,不会像人类一样思考,所以,在程序编写完成后,要花很多时间在代码的调试上。

调试常用的方法是:寻找bug(程序错误);给代码加注释;小黄鸭调试法。

小黄鸭调试法看似很笨,却很有效,就是在电脑旁放一个小黄鸭,然后对一无所知的小黄鸭解释程序中的所有细节。

这个方法的奥妙是,程序员给不懂编程的人解释代码如何运行时,必须非常详细的讲解代码运行的细节,程序员就会发现到程序中的错误,自己解决问题。

三、 用编程思维解决问题。

编程思维包括理性推理、逻辑思维和数学运算,学习编程思维能够创造性地解决问题、表达思想。

编程思维有四个部分:问题分解;模式识别;抽象思维;算法设计。

问题分解

比如,我们把电影看做一个需要解决的大问题,导演、演员、摄影师等工作人员就是问题的组成部分,所有这些组成部分共同协作才能完成一部电影。

模式识别

比如,我们要在一些网站上登录,会被要求输入验证码,这就是模式识别,目的是为了防止其他人伪装成用户开启别的功能。

抽象思维

使用抽象思维时,要抛开那些与问题无关的信息。

比如,你星期天下午两点要去打球,家离球场有5.2公里,你上午要给花浇水,拖地板,中午要去妈妈家吃饭,估计一点钟能吃完,妈妈家距离球场有3.5公里,那么在一点到两点的时间内,要走多远的路?

在所有的信息中浇花、拖地都与去球场无关,因为妈妈家离球场的距离更近,唯一的相关信息只有一个:妈妈家离球场有3.5公里。

算法设计

你一定听说过数学天才高斯的故事。1785年,高斯的老师给学生出了一道题,把1-100的数字全部加起来,老师本来想多占用一些课堂时间,没想到令老师吃惊的是,只有8岁的高斯很快给出了答案:5050。

在那个年代并没有计算机,高斯也不是从头到尾将数字一个个相加。

我们来看高斯是怎样用编程思维来解决问题。

首先是问题分解,他将一个大问题分解成小问题,找出每组数字的规律性,就是每对首尾数字相加,得数相同。

其次是形成自己的模式识别,可打乱顺序,只要把所有数字相加就可以,1+100=101,2+99=101……,有50组首尾相加等于101的数字。

再次是采用抽象思维,略去了不必要的算数步骤,没必要将首尾数字依次相加到最后一组,

最后是算法设计,是用乘法进行运算:50×101=5050。

无论计算机的功能多么强大,也是人类赋予的,真正强大的还是人的大脑。

随着互联网的发展,人们的生活已经离不开计算机,比如:用手机打电话、听歌、拍照;用电脑发邮件、浏览财经信息;在超市买东西结账,只需扫码商品,计算机会自动结算金额,核对账单。

《写给所有人的编程思维》这本书告诉我们,编程是人与计算机之间的桥梁,人类通过编程创造了更加美好的世界。我们可以不学编程,但要学习编程思维。

编程思维是我们解决问题的元技能,与我们的生活息息相关,工作、学习,甚至家务劳动,都离不开编程思维的逻辑能力和创造力,学习编程思维就是学会思考。

语言编程思维陈萌_这本书告诉你,计算机为何能读懂人类语言,编程思维让你更聪明...相关推荐

  1. 计算机是怎么读懂C语言的?

    文章目录 前言 程序环境 翻译环境 翻译环境分类 编译 预处理 预处理符号 预定义符号 #define #undef 命令行定义 条件编译 文件包含 头文件包含查找规则 嵌套文件包含 其他预处理指令 ...

  2. centos 删除文件夹_手机文件夹是英文,占空间还不敢乱删?花一分钟读懂手机语言...

    不少人肯定发现,自己的手机里面有一些莫名其妙的文件夹,占据内存空间.且占据很大,想删除,但全部是由英文标注,不知道从何删起. 今天小兰就来帮助大家决绝这么问题,一分钟教你读懂这些手机语言,快速清理手机 ...

  3. 如何读懂 C 语言复杂的声明

    如何读懂 C 语言复杂的声明 作者能力有限, 如果您在阅读过程中发现任何错误, 还请您务必联系本人,指出错误, 避免后来读者再学习错误的知识.谢谢! 参考<<C专家编程>> 废 ...

  4. html语言代码大全,菜鸟快速读懂HTML语言_html

    html语言是网页制作的基础,是初学者必学的内容.虽然现在有许多所见即所得的网页制作工具,但是说到底,还是有必要了解一些HTML的语法.这样,您可以更精确的控制页面的排版,可以实现更多的功能.HTML ...

  5. [一篇读懂]C语言五讲:指针

    [一篇读懂]C语言五讲:指针 1. 指针的本质(间接访问原理) 1 指针的定义 2 取地址操作符与取值操作符,指针本质 2. 指针的==传递==使用场景 1 指针的传递 [例1.1]指针的传递使用场景 ...

  6. 百度AI全面开放EasyDL开启AI普及化时代;讯飞翻译机2.0发布:支持34种语言;华为开发能读懂人类情绪的AI技术

    百度AI全面开放EasyDL开启AI普及化时代,"小白"也能用AI 百度"燎原计划2018"暨百度AI开发者实战营第二季强势回归,首站北京即放送三大满足各类开发 ...

  7. 个人知识体系思维导图_“知识体系”打得好,学霸孩子跑不了,巧用“思维导图”来帮忙...

    文章纯属原创,版权归本作者所有,欢迎个人转发分享. 相信很多妈妈都会看见孩子学习学不进去的苦恼,孩子看着很用功,每天按时完成作业.做练习题,但是成绩就是一直上不去,还会出现成绩不升反降的情况.这成了许 ...

  8. 《一本书读懂24种互联网思维》---- 读书笔记

    虽然书中很多内容,在IT 老司机来看都是老生常谈,但对于我们每个有互联网思维的小伙伴来说还是常读常新的. 很多我摘抄的内容,没有上下文语境不是很好理解,推荐花5个小时左右时间把书读一遍,算是温习一遍互 ...

  9. 一篇文章读懂儿童机器人编程入门学习的好处

    儿童机器人编程现在来看,虽然还不是孩子考试.升学的硬性需求.但是随着各国对编程教育重视程度逐步加深,以及孩子通过编程学习对适应未来智能社会的帮助,这些都让家长深刻地意识到:儿童机器人编程教育对于孩子的 ...

最新文章

  1. 图像五值化与基于三值图像的车牌识别(1)
  2. 机器学习算法基础——朴素贝叶斯算法
  3. linux无线网卡的安装
  4. sqlliet 创建多表查询的视图_第4关 复杂查询
  5. 跨站脚本攻击(selfxss)笔记(三)
  6. android开发工具下载
  7. Unity3D的50个技巧:Unity3D最佳实践
  8. SpringMVC基础配置
  9. jquery的deferred使用详解
  10. Excel: 如何对Excel2007工作表做统一编辑修改
  11. Python堆叠式神经网络模型实践【Stacking策略+Keras框架】,GUI可视化应用
  12. php 变量 unset,在PHP中unset变量
  13. 天枢系统 | 白条账单架构及618备战
  14. Centos7 搭建多用户SFTP服务,并开启日志记录
  15. Oracle 实体用户授权及同步同义词
  16. python 机器识别_用Python端对端数据分析识别机器人“僵尸粉”
  17. 咖啡师学习需要注意什么
  18. Web前端和后端的异同
  19. java 返回类对象_JAVA如何实现返回不同类型的对象
  20. C#支付宝当面付扫码支付开发,包括demo代码的修改和蚂蚁金服开发平台的配置

热门文章

  1. 【转】iphone开发中NSMutableAttributedString/NSAttributedString 富文本设置
  2. Android开源项目汇总
  3. Java Web开发应用中要掌握的一些感念 疯狂JAVA
  4. h3c ospf stub total stub nssa
  5. Prototype库终于有了文档了
  6. 7-7 全量复制开销
  7. java扫描局域网中可用ip_使用java线程扫描局域网ip简单方案
  8. 【毕业设计】JSP网络在线考试系统设计(源代码+论文)
  9. 你要的六级成绩批量查询,它来啦......
  10. 吉大20春学期计算机系统结构在线作业一,吉大20春学期《计算机原理及系统结构》在线作业一【奥鹏百分答案】...