聊聊计算机的几个基本概念
2020-07-20
0. 前言
今天想跟大家聊聊我对 IT 的一些基本概念的理解,这些概念都是大家不陌生的,也是非常基本的。
如何把概念串起来,内化成自己的知识,是本文的核心。
本文针对没有太多基础的读者,所以我会用最浅显易懂的文字来解释概念(宗旨:能不用专业术语就不用)。
也许有些地方在专业人士看来不够严谨,望见谅。
1. 计算机科学的本质
我们拥有的智能手机、电脑、电子设备……抛开操作系统、抛开 App Store 的软件,抛开鼠标键盘,抛开音乐影像,你有没有想过,这些东西的本质是什么?
两个字:电路。
离开了电,电子设备啥也干不了。
那么电路和我们所使用的软件又有什么关系呢?
想象你家的电灯开关,你可以打开,也可以关闭。电路的基本形态是两种:关、开。
用数字表示,也就是 0,1。
在这里,0 和 1 是唯一可用的两个数字,计算机使用的就是二进制。
本质上,计算机只认识这两个数字。
平时我们用的都是 10 进制,因为有 0 到 9 这 10 个数字可以使用。
2. 编码
01
简单的 0 和 1,是如何与文字、语音,图像以及所有我们所熟悉的一切所联系起来的呢?
我们首先需要理解,数据的最小单位是 bit(比特),一个 bit 代表一个【01】的可能性。
- 0
- 1
两个 bit 就代表两个【01】的可能性:
- 00
- 01
- 10
- 11
也就是说,bit 越多,01 的组合越多。
字节(Byte)
那么,我们可以人为地定义了一些 0 和 1 的组合,用来匹配人类所使用的字母、文字、符号。
比如你可以这样定义:0 = A, 1 = B,01 = C,10 = D。
但是显然人类的符号不仅仅只有这四个,想要把所有的字符都用一组 01 表示出来,需要多少个 bit 呢?
一开始,人们以为 4 bit 就够了,也就是 2 的 4 次方=16 种可能性,可惜人类的字符太多了……大家最后发现,8 bit 是个不错的选择。
所以现在我们说的 Byte(字节)就等于 8 个 bit 连在一起,这样一来,一个字节可以表示 256 种不同的符号。
在这里你可以看一下你打字的键盘,总共有多少个不同的符号。
字符编码
刚才提到,我们可以人为地定义,01 的组合如何匹配人类符号。
目前通用的编码标准是 Unicode,感兴趣的可以查查每个符号具体是如何用 01 来代表的。
https://cryptii.com/pipes/text-decimal
解码
别忘了,计算机只认识 01,所以你在键盘上面敲的字,最终还是会以 01 的形式储存在电脑里面~
你所看到的符号,其实是解码之后的结果。
总结一下:
编码(encode) = 符号变成 01
解码(decode) = 01 变成符号
事实上,编码分为好几种类型,我们这里说的编码 = 字符编码,另外还有图像编码、声音编码、视频编码等。
3. 数据类型 (Data Type)
这部分开始是跟编程相关的~
前面的内容是跟数据(Data)相关的,那么数据类型(Data Type)又是什么呢?
或者说,我们为什么需要不同的数据类型呢?
一句话:数据类型是数据的一个属性,用来告诉 Compiler(编译器)或 Interperter(解释器),这个数据到底应该怎么使用。
换言之:数据类型直接暴露了程序员的意图,计算机可以少花点心思猜。
最终结果:数据类型让程序员和计算机之间的沟通更加顺畅了!!
Compiler 编译器是干嘛的?
假如你用 Java 写了个程序,那么编译器会负责把 Java 翻译成另一种语言。
为啥要翻译?
Java 属于高级编程语言,程序员写起来爽,但是计算机其实不认识……所以想要执行 Java 程序,编译器需要先把 Java 代码翻译成计算机喜欢的低级编程语言(比如汇编语言),不然计算机就不理你啦(傲娇脸)~
Interperter 解释器是干嘛的?
解释器的目的是跟编译器一样的,就是让计算机搞懂程序员写的代码到底是什么意思。
区别在于,编译器喜欢一次性把所有的代码都翻译完,但是解释器喜欢一句一句翻译。
编译器和解释器的最终目的一样,只是方法不同罢了~(殊途同归)
有哪些数据类型呢?
这个说来话长,本文就不增加大家的负担了。
举例:数字(int)、字符串(string)、对象(object)。
4. 数据结构(Data Structure)
数据结构又是什么呢?
一句话:你用来整理数据的方式。
比如:把洗面奶、洗发膏、护发素放在一个盒子里,或者把三双鞋放在一个柜子里。
各种各样不同类型的数据,可以用不同的方法来整理。
比如:
-
array 里面可以把数据按照顺序放好;
-
dictionary 里面可以给数据取个名字;
区别数据结构和数据类型
数据类型是用来告诉编译器/解释器,这个数据的属性是什么,计算机应该怎么对待它。
数据结构是用来管理、整理数据的。
5. 数据格式(Data Format)
哎?怎么还有个数据格式。。这和数据结构有什么区别啊?
数据格式的作用是交换数据,让 A 和 B 能用同样的方式去理解数据。
比如你看的是一本英文书,就要用英文语言来理解内容,不能用中文理解。
再比如,word 文档,ppt 文档,excel 文档,都是不同的文件格式。
文件格式可以简单地理解为,电脑之间约定的一种数据阅读方式。
PS: JSON 就是一种非常受程序员欢迎的数据交换格式~
区别数据格式和数据结构
数据结构是用来管理、整理数据的。
数据格式是一种语法,用来交换数据。只要两台电脑都认识这种格式,就能正确地理解文件里面的数据。
6. 算法(Algorithm)
算法是用来干嘛的?
用来处理数据、解决问题的。
比如:鞋柜里有 10 双鞋,如何最快找到鞋码最大的那双。
算法的好坏取决于什么?
处理的速度,占用的空间。
速度很好理解,你找的越快当然越好。
占用的空间,打个比方:找鞋的时候,是否需要把所有的鞋全部拿出来放在一个另外的柜子里?
占用的空间越少,找的越快,这个算法就越棒~~
算法跟数据结构啥关系?
数据结构和里面存放的数据类型,决定了算法的选择。
了解算法之后,也可以根据数据的用途和类型,选择更恰当的数据结构来管理数据。
为什么要学算法和数据结构?
更快地处理问题,提高效率,减少空间浪费。
7. 结语
总结一下本文的要点:
-
01 组成数据,数据有不同类型,数据结构用来管理数据,数据格式用来交换数据,算法用来处理数据。
-
编码是把符号变成 01,解码是把 01 变成符号;人类喜欢符号,计算机喜欢 01。
-
编译器和解释器的任务就是把高级语言翻译成计算机能理解的低级语言;程序员喜欢高级语言,计算机喜欢低级语言。
看完这篇,大家应该就能很好地理解这些概念啦~