原始人都能听懂的编程课(1)——要当爸爸的小王是如何发明二进制的

警告:计算机科班出身的程序员禁止进入!

自从写了上一篇文章以后,一直没有进一步的动作。这些天我一直在思考,我希望自己能做一个课程,这个课程能够给下面这些人提供帮助。
1、非科班出身的绝对小白。希望找到一条路进入编程行业。
2、it行业的其他非编程人员,你或许每天与神秘的程序员打交道,但是却无法了解他们。对他们的神秘咒语——“这个需求实现不了”,完全没有抵抗能力。那么,这系列文章帮你了解编程到底是怎么回事。
今天,我们先来了解一个最简单的问题:

计算机到底是如何工作的?

计算机是由软件和硬件组成的。
硬件就是我们的电脑、手机,这一堆能够摸得着的有实物存在的东西。
而软件呢,你在计算机或者手机屏幕里看到的一切都是软件。
操作系统是软件,office是软件,订餐的app是软件,网站是软件,游戏是软件,播放视频的播放器也是软件。
软件是由程序组成的,而程序是整个电子世界的灵魂。
那么程序到底是如何运转的呢?
程序这东西,说起来很神秘,但实质就是一个文件,一个可执行的文件。
通俗上来说,我们把文件分为两种,一种叫文本文件,一种叫可执行文件。
文本文件,顾名思义,就是文件本身是文本形式,比如咱们常见的TXT文件就是文本文件,我们人能够查看能够读懂。
而可执行文件,基本上是没有办法直接读懂的。不信你用你的记事本打开一个mp4文件试一下。
当然不管是文本文件还是可执行文件,本质上都是二进制文件。因为计算机跟我们人不一样,它只能读懂二进制文件。

什么是二进制?

说起二进制,大家可能觉得很神秘。但是我要说,这其实没什么神秘的。
如果当初由你来发明计算机,你也一定能做出二进制的东西。
不信你跟着我来。
现在我们找一个原始人来解决这个问题。
假设我们有一个原始人叫做小王。
小王现在遇到一个问题。
他老婆晚上要生了但是部落大首领让他晚上去对面山头站岗,防止野生动物半夜猫过来。
小王虽然不情愿,但是领导让加班,还是不得不去的。因为这是福报。
所以,临走之前,他和自己妈说,要是孩子生了,你就告诉我一声。
可是这大晚上的,月黑风高,隔得又远,既看不见,又听不见,怎么告诉你呢。
小王找来找去,哎——家里有一个火把。于是跟他说,要是生了,你就把火把点亮就行了。
几十万年以后,小王的智慧被计算机科学家发扬光大了。
我们把小王的问题稍微抽象一下,就是:
如何用一个火把,来表示两个数字。
在这里插入图片描述
生了是1,没生是0。
用火把点亮表示1,用火把没点亮表示0。
问题解决了。

那如果小王希望知道到底生了几个该怎么办呢?是生了一个,两个,还是三个(小王老婆肚子大,很多人说有可能是三胞胎)。
一个火把显然解决不了问题了,但只需要再加一个火把,我们就能很方便的表示四个数字了。
两个火把全灭就是0;
第一个灭,第二个亮表示1;
第一个亮第二个灭表示2;
两个全亮表示3。
看,是不是完美解决了问题。
在这里插入图片描述

然后我们再扩展一下,3个火把是不是就可以表示8个数字?

4个火把是不是就可以表示16个数字?
5个火把是不是就可以表示32个数字?
6个火把是不是就可以表示64个数字?
是的,小王因为生孩子的问题,一下子茅塞顿开。第二天就向大首领建言,在山头架上六个火把,这样就可以每天汇报山下野牛群有多少野牛可以抓了。
然后我们把火把的亮灭换成0和1,用灭表示0,用亮表示1,下面这一串数字是不是有点眼熟?
在这里插入图片描述

是的,二进制产生了。
几十万年以后,计算机科学家解决问题的方法和小王是一样的。
因为计算机作为电子产品,状态只有两个,有电和没电。
有电代表1,没电代表0。
所以我们就可以用一串1和0代表世界上任意一个数字。

那么除了数字之外,我们是不是还可以用来表示文字呢?
当然可以了,我们只需要规定,一个数字代表一个文字就行了。
英语26个字母,就算加上大小写,52个数字足够了对不对?汉字虽然多一点,但也不过就是字库大一点而已。
所以,到这儿我们就可以得出结论了。
二进制可以记录和表示世界上任何一个概念。
好,解决了二进制的问题,我们接下来来看另外一个问题。

计算机语言如何执行

既然计算机只认识二进制的,那么,我们人类编写的程序语言,是怎么在计算机上执行的呢?

我们还是来看看原始人小王是怎么解决这个问题的吧。
小王的六个火把计划被大首领采纳了。
大首领在山上竖起六个火把,打算给全部落的人传递野牛群的数量。
但是很快就发现,这个PPT演示起来很丰满,执行起来很骨感。
为什么?
最大的问题就是谁能记住什么数量对应怎么点火把啊。
比如今天山下有31头野牛,谁能告诉我该点多少火把,怎么个点法?
大首领一看急了,限令时间,由小王来给大家培训,每个人都必须记住计算方法。
领导的话谁敢不听啊,996也是福报啊。
于是所有部落的人牺牲睡眠时间,啃硬骨头,把算法都给学会了。看见野牛数,咔咔咔咔咔咔一通算,就知道该点几根火把了。
是的,你没看错,最初的计算机语言就是这样的。既然计算机只能读懂二进制的东西,那咱就写二进制的东西给他看。
但是你想一想就知道这东西有多折磨人了。今天在山下看见31头野牛,我咔咔咔咔咔咔一通算,终于算出来了,回头一看,野牛已经跑光了。
所以,这法子不行啊,为了更好的完成部落的信息化建设工作,小王同学必须另辟蹊径啊。
于是小王同学冥思苦想,终于想出一个大力出奇迹的办法。
找两个人,什么事情也不干,专门负责点火。
你也不用去打猎了,你就给我把换算规则背过。给你数量,马上知道点多少火,看见火把,马上知道多少数量。
这解决方案一出来,事情终于简单了。
不管是谁负责找猎物,只要看到了,马上告诉这个人,这个人一听数量,马上就知道该怎么点火,然后就把火炬点起来。找猎物的人专心负责找猎物就行了。
完美。
是的,我们复盘一下小王的解决方案,其实就是找了一个专门的翻译。负责把人类能听懂的数字翻译成二进制,再去点火。
计算机科学家最终的解决方案和这个是一样一样的。
计算机里加一个专门的模块,负责把源代码翻译成机器语言,这样计算机就可以识别了。
而编写程序的人再也不用和01打交道了,他只需要写一些类似英文的程序代码就可以了。
比如if…else…就可以解决“如果怎么样,否则怎么样”的逻辑判断问题。
看下图,源代码需要经过翻译层,翻译成机器语言,计算机才能执行。
在这里插入图片描述

这种编程语言,我们现在把它称之为高级语言。

是的,你现在能听到的几乎所有编程语言,都是高级语言。从上古时代的C,到人到中年的JAVA、PHP、C#,再到后起之秀python、go等等。
当然,根据翻译方式的不同,这些语言其实还可以分成两类。
这儿再举个例子,就比较好理解了。假设你要去见一个国外客户,你不懂他们的语言。这时候你找了一个翻译。但是如何把你要说的话都传递给客户,你有两种方式。
一种是你先把所有的话都写好稿子,然后翻译把它翻译完,直接把翻译好的东西给客户看。
还有一种是你见客户的时候带着翻译去,你说一句,翻译给你翻译一句。
是的,对应计算机,就是下面这张图。
在这里插入图片描述

第一个是先编译再执行,叫编译型语言,典型代表是java,第二个是边解释边执行,叫解释型语言,典型代表是php。
两种类型的语言各有各的优势,编译型语言因为先编译后执行,所以执行效率更高一些,但是灵活度稍逊。解释型语言灵活度更好,但是效率上稍微差一点。但随着计算机语言的发展,目前这两种语言也在互相学习,差异正变得越来越小。

好了,篇幅问题,今天就先说到这里。这是一个系列课程的第一篇,如果你有兴趣,可以关注我的公众号——全栈工程师养成,下次我们讲一讲一个大型的项目到底是如何工作的。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值