Luna Tech

Tutorials For Dummies.

聊聊计算机的几个基本概念

2020-07-20


0. 前言

今天想跟大家聊聊我对 IT 的一些基本概念的理解,这些概念都是大家不陌生的,也是非常基本的。

如何把概念串起来,内化成自己的知识,是本文的核心。

本文针对没有太多基础的读者,所以我会用最浅显易懂的文字来解释概念(宗旨:能不用专业术语就不用)。

也许有些地方在专业人士看来不够严谨,望见谅。


1. 计算机科学的本质

我们拥有的智能手机、电脑、电子设备……抛开操作系统、抛开 App Store 的软件,抛开鼠标键盘,抛开音乐影像,你有没有想过,这些东西的本质是什么?

两个字:电路。

离开了电,电子设备啥也干不了。

那么电路和我们所使用的软件又有什么关系呢?

想象你家的电灯开关,你可以打开,也可以关闭。电路的基本形态是两种:关、开。

用数字表示,也就是 0,1。

在这里,0 和 1 是唯一可用的两个数字,计算机使用的就是二进制。

本质上,计算机只认识这两个数字。

平时我们用的都是 10 进制,因为有 0 到 9 这 10 个数字可以使用。


2. 编码

01

简单的 0 和 1,是如何与文字、语音,图像以及所有我们所熟悉的一切所联系起来的呢?

我们首先需要理解,数据的最小单位是 bit(比特),一个 bit 代表一个【01】的可能性。

两个 bit 就代表两个【01】的可能性:

也就是说,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

Encode

Encode

Decode

解码

别忘了,计算机只认识 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)

数据结构又是什么呢?

一句话:你用来整理数据的方式。

比如:把洗面奶、洗发膏、护发素放在一个盒子里,或者把三双鞋放在一个柜子里。

各种各样不同类型的数据,可以用不同的方法来整理。

比如:

区别数据结构和数据类型

数据类型是用来告诉编译器/解释器,这个数据的属性是什么,计算机应该怎么对待它。

数据结构是用来管理、整理数据的。


5. 数据格式(Data Format)

哎?怎么还有个数据格式。。这和数据结构有什么区别啊?

数据格式的作用是交换数据,让 A 和 B 能用同样的方式去理解数据。

比如你看的是一本英文书,就要用英文语言来理解内容,不能用中文理解。

再比如,word 文档,ppt 文档,excel 文档,都是不同的文件格式。

文件格式可以简单地理解为,电脑之间约定的一种数据阅读方式。

PS: JSON 就是一种非常受程序员欢迎的数据交换格式~

区别数据格式和数据结构

数据结构是用来管理、整理数据的。

数据格式是一种语法,用来交换数据。只要两台电脑都认识这种格式,就能正确地理解文件里面的数据。


6. 算法(Algorithm)

算法是用来干嘛的?

用来处理数据、解决问题的。

比如:鞋柜里有 10 双鞋,如何最快找到鞋码最大的那双。

算法的好坏取决于什么?

处理的速度,占用的空间。

速度很好理解,你找的越快当然越好。

占用的空间,打个比方:找鞋的时候,是否需要把所有的鞋全部拿出来放在一个另外的柜子里?

占用的空间越少,找的越快,这个算法就越棒~~

算法跟数据结构啥关系?

数据结构和里面存放的数据类型,决定了算法的选择。

了解算法之后,也可以根据数据的用途和类型,选择更恰当的数据结构来管理数据。

为什么要学算法和数据结构?

更快地处理问题,提高效率,减少空间浪费。


7. 结语

总结一下本文的要点:

看完这篇,大家应该就能很好地理解这些概念啦~