今天学习《番外篇》第1章认识计算机世界的第1课~第4课内容。没有练习,完成阅读并理解即可。
学习目标
- 了解计算机是如何响应人类的交互请求的,对于1 1这样简单的问题,计算机是如何计算的。
- 了解计算机是如何实现及提供可编程机制的,人类是如何通过编程语言控制计算机的交互行为的。
- 了解编程语言具有哪些常见特征,变量是什么,语句是什么,逻辑控制语句具有哪三种结构,什么是代码区块,什么是函数,什么是类。
主要知识点
- 所有计算机表面上复杂的软件运行,都是底层简单的节字叠加。
- 机器码是像 010110010 这种二进制格式的数据,计算机只能认识和执行这种数据。
- 汇编语言是给人类看的机器码注解,所有汇编程序编译后,在给计算机执行前,都会变成机器码。
- CPU由寄存器、算术运算单元等元件组成。寄存器像商场里的寄物柜,是暂时寄存有待运算的数据的。算术运算单元是处理计算工作的。
- 加法器是CPU中非常基本的逻辑元件,对于加法器,输入数据一定,输出数据也一定,这是由物理电磁学定律决定的。其它逻辑组成元件,及使用基本逻辑元件复合成的更为复杂的逻辑元件,也遵循同样的物理电磁学定律。
- 现代计算机 CPU 里用的是更高级、更微小的场效应管,本质上它也是一种晶体管。晶体管是组成加法器等基本逻辑元件的基本组成部分,是计算机CPU里最最基础的存在。
- Bug指代码中的错误,在英语中是飞蛾的意思,而 Debug 是由 Bug 派生的单词,指查找、解决Bug的过程。
- 由于物理电磁效应,线圈变成一个磁铁,吸附铁片闭合电路,这是继电器开关的工作原理。人类从继电器开关上继续迭代,发明了逻辑门电子元件,例如逻辑非门、逻辑与门等。
- 人类使用逻辑门元件组成了半加器,又用半加器组成了全加器,全加器及其它类似的逻辑元件共同组成了ALU(算术逻辑单元)。ALU及其它同类单元共同组成了计算机的核心————CPU。
- 人类第一台真正意义上具有冯·诺伊曼结构的电子计算机叫ENIAC,诞生于1942年的美国宾夕法尼亚大学,有40吨重,占地四室一厅那么大,1秒钟可以计算5000次。现在随便一台装在口袋里的智能手机,性能都完爆它。
- 早期计算机并没有编程语言,先后经过了拨动开关编程、卡带编程时代。
- 编程语言是给人类看的,计算机不需要看编程代码,编程语言的核心是编译器。葛丽丝·霍普发明了人类历史上第一个计算机编译器——A-0系统,这是一个工具,负责将人类编写的字母翻译成计算机可以理解的机器码字节。霍普的A-0系统被称为汇编语言鼻祖,这个编译器工具具有划时代的意义,但很遗憾在当时霍普的布道却遭到了抵制和泼冷水。人类在近代文明发展史上表现出来的愚昧,并不比哥白尼时代将宣扬哥白尼日心说的哲学家布鲁诺当众烧死的罗马教众有所降低。
- C语言是现代高级编程语言的鼻祖。上世纪 70 年代,在贝尔实验室工作的肯·汤普逊为了可以在实验室的一台小型计算机PDP-7上玩一款太空游戏,在A-0的的基础之上发明了B语言,并用B语言重写了PDP-7的系统————即后来的Unix系统的前身,使其可以运行太空游戏。后来他的同事丹尼斯·里奇加入,又与肯·汤普逊一起,将B语言进一步简化,形成了C语言。两个程序员大神,为了玩一个小游戏,写了一个操作系统,发明了两个编程语言,其中一个至今仍在广泛使用。
- 汇编语言是负责计算机与高级编程语言打交道的,而高级编程语言是负责汇编语言与人类打交道的。
- 变量是一种指代数据的动态符号,它是计算机世界第一个“魔法”元素,为计算机开启了“智能”。它和人类的智能类似,在人类文明中也有许多类似“变量”的存在,这方面最普通的符号就是自然语言,例如符号“moon”、“月”指代月亮。
- 编程语句是对操作的符号描述,它指代早期一波开关的拨动,或者一段卡带上的输入信息。变量指代数据,语句描述操作。
- 无论什么编程语言,逻辑控制语句只有三种:顺序、分支和循环。
- 函数是最基本的代码复用单位。函数有输入条件,有输出结果,输出结果又可以作为另一个函数的输入条件,加上逻辑控制语句(例如分支和循环),同样的代码可以演绎出不同的执行结果,这就是计算机的“智能”。这与人的人生发展很像,决定一个人一生成就的不仅在于基因,还在于不同阶段接收到的外界输入条件,及每个阶段的执行结果。
- 类是对函数的封装,是面向过程软件思想遇到挑战时,面向对象软件思想诞生时产生的概念。类包括属性和方法,属性是数据描述,方法是操作描述。类是一种集合了数据描述和对数据操作描述的对象,从这个意义上讲,Go语言虽然没有类,但它的结构体(struct)就是类的概念。
- 数据结构是组织、存储数据的一种复杂方式。简单的数据类型经过复合,便是复杂的数据类型——即数据结构,计算机的数据结构可以描述任何我们需要描述的信息。
- 栈是一种从顶部推入、从顶部抽出的一维有序数据集合。队列是一种从尾部推入,从顶部取出的数据结构。与栈、队列只能在两端处理数据的方式不同,链表可以在任何一个子节点上处理数据,它是一种可以在任一数据节点上处理数据的链状数据。
- 冒泡排序通过相邻两个元素之间的比较和交换,使较大的元素逐渐从左边升序,移至右边,就像水底下的气泡一样,逐渐向上冒出,故称为冒泡排序。
- 算法工程师要在具体的某个特定细分领域的数据结构及算法上钻研得深入,而架构师必须在软件系统设计的方方面面考虑得周全且缜密。怎么做一名合格的架构师?只有对自身业务充分了解,才能在丰富的软件架构经验上,设计出足够强壮稳定、又充分灵活的软件架构;只有对当下业界的主流技术充分了解,才能在选择技术方案时,做出风险最低、效率最优的架构决策。
实践疑难点
无
小结
- 计算机没有智能,所有智能都是人类赋予它的,计算机是人类文明在数据处理能力上的工具延伸,和一万年前原始人打磨石器制作工具是类似的。
- 霍普发明的A-0翻译系统,是编程语言的鼻祖,标志着人类对计算机的使用进入了新时代。
- 变量、函数、类,这三个概念的引入在计算机编程史上具有重要意义,这三个概念每一个概念的诞生,都让计算机的数据处理能力有了层级跃升。
2022年12月24日
新人一半的问题都是因为粗心大意所致,遇到问题时不妨先认真自检一下,或者使用谷歌搜索一下,大部分问题谷歌都能给出建议或线索。
最后说明一下,这个公众号主要是我业余用于辅助编写PBL实战教学内容的,关于计算机编程学习方面,你有什么想了解的,都可以在最新推文的评论区留言告诉我。
感谢读者朋友的理解与支持。