从零开始的自我提升计划:计算机科学(三)

本系列为作者学习记录
感谢Jack-Cui视频的启发
视频地址:【计算机科学速成课】[40集全/精校] - Crash Course Computer Science

系列文章目录

从零开始的自我提升计划:计算机科学(一)
从零开始的自我提升计划:计算机科学(二)



前言

本文内容包括:

  1. 早期的编程方式-Early Programming
  2. 编程语言发展史-The First Programming Languages
  3. 编程基础:语句和函数-Programming Basics: Statements & Functions

一、早期的编程方式

早期的编程方式
给机器编程的需求实际上在计算机出现之前就有了,1801年出现了可编程纺织机,利用可穿孔纸卡来形成图案。穿孔纸卡也用于早期的计算机,在第1节中有提到。为了执行不同的运算,程序员需要某种控制面板,“插线板”应运而生,通过连接不同的电线,执行不同的功能,但是这意味着运行不同的程序需要重新接线,因此后面将其优化为可插拔的控制面板,让编程更方便。
随着技术进步,内存的价格下降容量上升,将程序存在内存变得可行。当内存足够时,不仅可以存储要运行的程序,还可存储程序需要的数据,包括程序运行产生的新数据,它们都存在一个结构中——“冯诺依曼结构”。

我在思考比炸弹重要得多的东西——计算机。
                                    ——冯·诺依曼

冯诺依曼计算机的标志是,包含算术逻辑单元的处理器+数据寄存器+指令寄存器+指令地址寄存器+负责存储数据和指令的内存,第7节中的结构即为一个冯诺依曼计算机。
直到20世纪80年代,几乎所有计算机都使用穿孔纸卡读取、存储、输出数据。除了插线板和穿孔纸卡,还有一种编程方式——面板编程,即使用一堆开关和按钮替代插线板中的电线,并用指示灯来代表各种函数的状态和内存中的值。

二、编程语言发展史

编程语言发展史
在计算机早期阶段,使用二进制编写程序:需要先对程序进行高层次描述,即伪代码,然后用操作码表将其转换为二进制码。接着程序员开发出一种更可读、更高层次的语言,给每个操作码分配一个名字,成为“助记符”,其后紧跟数据,形成完整指令。后来程序员开发了一个程序,可以将文字指令自动转换为机器码,这就是“汇编器”,使编程更加容易。
汇编语言与机器指令是一一对应的,但是这样会带来很多麻烦,假设你需要增加一个变量,可能需要更改许多代码。因此世界上第一名程序员Grace Hopper设计了一个高级编程语言,名为“Arithmetic Language Version 0”,简称“A-0”。一行高级编程语言可能会转化为几十条二进制指令,为了实现这种转换,她创造了第一个编译器**,将高级语言转为CPU可以直接执行的低级语言。
可惜的是,没有任何关于A-0的代码留下,所以使用Python举例。假设我们需要将两个数字相加并保存结果,如果用汇编语言,需要从内存取值,写入寄存器等很多操作,但是使用Python语言则只需要简单的加法,不需要考虑寄存器或者内存位置,编译器会处理细节。程序员只需要创建代表内存地址的抽象,即“变量”。
FORTRAN主宰了早期计算机的编程,用其写的程序比汇编代码短20倍,它的编译器会把代码转化为机器码。但是在那时,大多数编程语言和编译器都只能在一种计算机上运行,因此计算机专家在1959年成立了一个联盟,“Committee on Data Systems Languages”,Hopper担任顾问,目的是开发一种通用的编程语言,可在不同机器上通用,最后诞生了COBOL语言,它为每个计算架构都设计了一种编译器。如今,大多数编程语言都是这种“一次编写,到处运行”的模式,不需要接触CPU特有的汇编码和机器码,降低了使用门槛,使得很多职业都可将计算机用于工作,让计算机成为大众化的工具。
在此之后,计算机编程语言迎来了发展的“黄金时期”,诞生了LISP、BASIC、C、C++、Python、Java等编程语言。

三、编程基础:语句和函数

编程基础:语句和函数
就像口语一样,编程语言也有“语句”。例如:

a = 5

是一个编程语言语句,意为创建一个名为“a”的变量,它的值是5,这叫“赋值语句”。为了表达更复杂的含义,需要更多的语句,例如:

a = 5
b = 10
c = a + b

变量名可以随意取。
假设我们要编写一个游戏,Grace Hopper拍虫子,阻止虫子飞进计算机造成故障。关卡越高,虫子越多,需要在虫子进入继电器之前拍死虫子,且还有几个备用继电器。当开始编写这个游戏时,我们需要一些值来保存游戏数据,例如当前关卡数、分数等,所以我们需要“初始化(Initialize)”变量。
为了使游戏具有交互性,我们需要用一些“控制流语句”,例如if语句,即“条件语句”。如果希望多次执行,就需要“条件循环”,例如while循环,for循环。
为了隐藏复杂度,可把代码打包为“函数(Functions)”,有些编程语言也将其称为“方法”或者“子程序”,函数包含函数名,需要从外部传入的变量名以及返回值。在使用时直接调用函数名,传入变量,就可得到返回值。在使用时,函数之间可以相互调用,不需要知道函数内部是如何运行的,只关心其得到的结果,从而复杂度就隐藏起来了。
使用函数进行模块化编程,有许多优势。现代编程语言有许多预先写好的函数集合,称为“”,效率更高。


总结

本文介绍了早期的编程方式、编程语言发展历史,以及一些编程基础,包括几种常见的语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值