1 序言
截至目前为止,即2025年8月,作者学习编程已经五年有余。
因为起初对于编程领域一窍不通,受困于网络言论,导致了我第一门语言学的是Java,但我对它并没有太多的好感,也并不推荐,直至五年后的今天,我仍旧是这个态度。
Java是一门很繁琐、很重的语言,写Java代码让我感受到了味同嚼蜡的既视感,因此在我学习了大半年后、最终还是放弃了。
但这并非是Java的问题,而是我的问题,我喜欢刨根问底,但Java封装的太过彻底,让我始终有种“悬空”的不安全感。
比如以前的我常常困惑于以下问题:
- 为什么我写的Java代码编译好的程序不能直接发给别人运行使用?
- 为什么写Java代码前需要我亲手去配置这么繁琐的电脑环境?
- 为什么QQ、微信这些软件都是带着exe后缀的可执行文件,Java编译后却没有?
- QQ、微信这些软件到底是怎么写出来的,我怎么写不出来界面好看的程序?
这一切在如今的我眼中看起来简单至极的东西,对于当时的我来说,却都是天坑。
直到后来我接触了C/C++语言、接触了Windows系统编程、写了一个又一个软件、对电脑越发的熟悉,对软件的运行原理越发的了解,对编程越发的深入,我逐渐理解了一切,理解了整个互联网的基本运行逻辑、以及程序员在其中所起到的作用。
再后来,我开始在一些平台上写一点编程随笔,或许是写的比较认真,很快就收获了很多好评,于是便开始创造付费教程。
再后来因为种种原因,我开始自建网站,也就是你现在所看到的这个网站:酷程网,专门用来更新我自己的文章。
直至目前,我更新的知识领域有:C/C++、rust、go、逆向、vue、python等等编程语言与框架。
但随着更新的越来越多、对各种知识了解的越来越深,我愈发觉得“无趣”。
这种无趣来源于没有创造性:无论什么编程语言、又或者是什么框架,无非就是一些语法规则、写法经验。
新讲述一门语言,我就需要将这些东西重新复述一遍,一次又一次,时常让我感到厌恶。
所以我一直都很想写一本书,一本可以贯彻所有语言、所有流行框架、所有主流系统的体系书籍,从零带领大家学习编程、从零基础成长为一名出色的全栈工程师。
在AI越来越强大的今天,如果没有成体系的知识、没有对整个软件工程的设计概念,人类已经很难去与AI竞争了。
所以本书不仅仅是去讲述编程,更是会涵盖互联网的方方面面,同时也会包含作者本人的多年编程认知与见识。
我希望其实现的效果是,你仅仅只需要花费一两个月的时间认真看完本书,便能够获取我多年编程学习的大部分经验,了解整个互联网如今的体系架构与发展方向,让你可以少走很多弯路。
2 计算机核心概念
以前我一直不懂,计算机不是用来计算公式的吗,比如计算Π有多少位,为什么它还能用来玩游戏、看电影、听音乐呢?
即使是开始学习编程了,这个问题在很长时间里,我也一直没有寻找到答案、并且反而更加疑惑了。
众所周知的事实,计算机的核心是CPU,CPU只能进行二进制数值的运算。
那么CPU为什么只靠高速的计算二进制数值,就能组成我所能看到的、如此强大而丰富的计算机呢?
也许是我愚钝,这个答案是我深入学习编程一两年后、才渐渐找到答案的,在此之前,我并不知道原因。
《计算机组成原理》是一门计算机专业的通识课程,大概在大一、大二的时候会进行学习。
如果你是以考试得分为目的,那么直接购买该书籍学习为最佳,本文不会去讲的那么细、甚至描述的都不会那么的准确,因为我的目的仅仅是想让读者可以快速的对计算机的构成有清晰的整体认知。
从直觉上来讲,大众会认为我们所使用的个人电脑便是计算机的代词,但实际上并不准确。
我们所使用的个人电脑仅仅只是计算机的子集,只不过很多其它类型的计算机,对于非专业人士来说了解的比较少而已。
比如没有屏幕的服务器、你所使用的手机、各种家电设备、汽车等等,均可以被称为计算机。
其中各种家电设备、汽车,又被称为嵌入式设备,编程领域因此也有了嵌入式编程这一岗位。
计算机实际上正如其名,指的是一切可以进行“计算”、“数据处理”、“信息存储”的设备。
从这里我们可以总结出,计算机本质上是由三个关键字组成的:计算、数据、信息。
其中数据涵盖一切、信息只是它的一个子集,一般指的是有实际意义的数据。
所以计算机本质上可以用两个关键字涵盖:计算、数据。
这两个字非常关键,因为这也是我们后续编程的核心。
2.1 CPU
其中计算,对应的核心部件一般是CPU,是Center Processing Unit的简写,即中央处理器的意思:
CPU可以说是21世纪最伟大的发明之一,它是全人类最顶尖的科技缩影,而它现在就存放在你的手机、电脑的内部。
一个让我感悟至深的一句话:越是伟大的发明,便往往越是频繁的出现在人们的生活之中,即使你可能从未察觉。
CPU的内部构造非常复杂,我并不打算去过多的讲解它的内部构成,并且也相信即使我讲了,你也未必有那个耐心去看,因为那对我们学习编程来说,用处非常有限。
在我上小学、中学时,班里常会有同学购买计算器,而CPU则可以看作是一个无情而又极其高效的计算器。
只不过我们所购买的那个计算器看起来可能会更加高级一点,因为它既可以计算十进制、还可以计算十六进制,既可以计算加减法、还可以计算乘除法、乃至一些数学公式。
而CPU则要单纯、甚至可以说“简陋”的多,因为它只能计算二进制,并且大多数只计算加法、以及执行逻辑运算:与(AND)、或(OR)、非(NOT)。
我们最常见的是十进制,也就是逢十进一,其它进制同样如此,二进制便是逢二进一,编程中常用的还有八进制、十六进制也是同理,其中十六进制是通过A、B、C、D、E、F这五个字母来代表10、11、12、13、14、15这六个数字的。
至于减法、乘法、除法,则是由上面这四个基本操作所组成的。
这涉及到一些与二进制有关的数学原理,比如减法,便是取负数补码与被减数相加实现。
举个例子,现在需要计算7-3的结果,那么先将其转换为二进制:
7:0111
3:0011
然后获取3的补码,规则是所有位取反后加一:1100+1=1101
因此-3的二进制形式便是1101,此时让两数相加得到结果:10100。
由于只有4位(实际计算机表示数值是8位,但效果一样),超出的数值将被直接舍弃,因此得到结果0100,转换为十进制也就是4。
至此我们就完成了用加法实现减法运算。
乘法与除法也是同理,通过一些数学原理都可以换算为基础运算操作交给CPU进行计算。
所以只要CPU算的足够快,那么我们就能用CPU干很多事情,而衡量CPU计算速度的一个方式就是查看CPU的频率。
查看方法在不同系统上有不同的分别,这里默认你使用的和我一样都是Windows系统,那么可以打开任务管理器查看。
在windows系统上,你可以按快捷键Ctrl+Shift+ESC
快速打开Windows系统上的任务管理器。
进入任务管理器后,按照下图步骤即可看到查看到CPU的计算速度:
比如我这里的速度是2.22GHz,代表该CPU每秒可以完成2.22*10亿
个计算周期,而一个加法操作,一般占用一个CPU的周期。
由此可见,CPU的计算能力是非常强大的,它可以在很短的时间内完成巨量的数据计算,并且这还只是普通的办公电脑,如果是那种专门用来做科学计算的计算机,只会更加强大。
2.2 GPU
事实上,能够进行计算的并不只有CPU、GPU同样也能进行计算,只不过两者的用途不太一样。
GPU是Graphics Processing Unit的首字母简写,意思是图形处理器。
两者主要的区别在于:
- CPU:更兼顾通用性,核心数一般较少、但每个核心都很强,适合处理复杂的运算逻辑。
- GPU:更兼顾并行性,它通常内部包含数千上万个能力较弱的核心,可以同时执行大量的并行计算任务。
这里提到了核心,你可以将其理解为它是最小的物理计算单元,一个核心同一时间只能计算一个任务,所以核心数越多,那么其同时能够计算的数量就越多,性能一般就越好。
比如我电脑上CPU的核心便是14个:
这意味着它能在同一时间计算十四个任务。
至于GPU,由于我的电脑只有一个英特尔显卡,并不支持直接查看核心数,所以这里就不举例了,但依旧可以从网上随意找到的一张照片一窥究竟:
可以看到,随便一张家用GPU,其核心数量就来到了2304个,这意味着它同一时间能够处理2304个,相比之下GPU在并行计算领域下,要比CPU强大太多了。
并行,其含义便是多个任务同时执行,与之相对应的是串行,这意味着多个任务需要排队挨个执行。