编程是什么——面向新人的编程概念讲解

编程是什么

在这里插入图片描述

2022-3-16
#计算机 #编程

这篇文章将讲解编程的基础概念,带你对编程语言有基本的认识,以便学习时能更加高效。

编程的概念

你面前的电子设备,包括手机、电脑、手表是如何工作的?
主要是两大部分组成

  • 硬件:也就是设备本身,由世界上或大或小的公司生产芯片、电路板等等,将其组合在一起
  • 软件:通过对设备的编程,产生“软件”,使硬件按照我们的需求进行工作

那,计算机是如何工作的?
比如一个灯泡,想让他关掉,你会把开关给开一下。两个灯泡,你要调两个。多个,要调多个。
有趣的是,你可以将电路串在一起或并在一起。串在一起的需要全部打开所有开关,并在一起的只需要任意一个开关。
除此之外,你把电路接地,电流就会往地上跑(电阻小),此时你断掉开关,反而会跑到灯泡;打开开关,灯反而灭了。
这就赋予了计算机编程的能力。我们将这些概念抽象后,恰好发现万能的数学有一个分支叫布尔代数,恰好可以解决计算机运算的很多问题。
这就是最基础的三种电路,与或非,他们的组合可以组成最基本的两种设备:运算数据的加法器,存储数据的寄存器,继续组合可以增强运算能力或存储能力。

在计算机发展早期,编程没有抽象的编程语言和逻辑符号,通过对电路板的电路开关直接进行或开或关,或者把电线从一个接口接到另外一个地方,使得他们的数据和运输方式发生改变。
这种编程,就是对计算机硬件直接编程,逻辑化后,我们称这种编程语言叫机器语言
之后伴随着对编程的需求,我们不断优化程序的描述方式,让编程语言跃进发展。

十分钟学会编程的本质

编程语言

随着计算机规模的增大,对程序员(接线员)的要求越来越高,这种方式容易出错且费时费力。
于是程序员将机器语言组合起来,抽象成数学符号,规定哪些是读取数据的命令,哪些是加法的命令等等,由此诞生了汇编语言
程序员只需要用汇编语言把程序写好,然后经过链接器,自动处理成机器语言给计算机听。

汇编语言同样用久了,会感觉不是足够舒服。有些命令还是可以组合起来一起用。之后,汇编语言随着发展继续抽象,变成了高级语言
高级语言就简洁了很多,使用起来会更加高效。
运行方式还是套娃,编程软件先把高级语言编译成汇编语言,然后汇编语言转化为机器语言。
完美

高级语言还能抽象吗?
可以,但没必要,曾经有人抛弃了输入语法的过程,全程采用可视化编程,但后来效果并不好,无法精细的表达意思、代码测试也有很多问题。
对程序员来说,高级语言够用了,目前的高级语言还可以很多 IDE 、插件有可视化设计、调试的功能。

C语言 是最基础的高级语言,可以直接访问计算机硬件,一般用于电路设备的编程,比如电子信息的学生就用这个。
为了让 C 拓宽更多功能,解决其在应用软件编程时效率不高的问题,诞生了「C++」和它的老乡「Objective-C」,都是C的后代,但设计思路和C++不太一样,主要是苹果在用。
C/C++ 一度是各种编程语言、设计工具的鼻祖。

  • 其他编程语言诸如 Java、C#、PHP、Lua、Go等语言,都是基于这样的语言开发的,使得功能专业化。
    • 比如 Java 广泛应用于前端设计、工具开发、安卓开发,是目前就业市场的主流语言之一。
  • Windows、硬件驱动的开发,就是使用 C/C++ 为核心的语言开发的。
  • 3D引擎也是基于此开发的

还有一个语言叫 Basic ,它和「C语言」也是一个辈分的,后来在微软手中变成了「Visual Baisc」再往后变成「.Net VB」。
今天,微软Office就内置了 Visual Baisc 程序,支持在Excel、Word、PPT中发挥更多编程和设计功能。

但也没有更方便的语言呢?
有,Python 是目前最简洁的编程语言之一。
为了减少高级语言编译的过程,Python、JavaScript 这样的语言直接逐条执行(解释),因为不需要转化为特定的「二进制文件」,而是用脚本就能运行,所以也称为 脚本语言
虽然这类语言出现了性能羸弱的情况,但人们依然喜欢用它进行写点小工具、在特定领域发挥作用,因为简单易用。

一般来说,不同语言有对应的特点。通过编程语言的热门指数 TIOBE Index - TIOBE ,可了解编程的分工格局,但不能认为热度高就是最好的,没有最好的语言,只有最合适的语言。
以上内容还可以参考:Crash Course Computer Science
关于编程的演化历史,感兴趣可以看看:编程难在哪里? - 知乎 (zhihu.com)

编程领域

除此之外,特定领域也可以编程,也有对应的开发工具。

比如 Matlab 是数学分析软件,同样可以进行编程、设计,主要在数学领域进行建模、分析发挥作用,操作方面比Python还简单不少。
MATLABMapleMathematica 被称为三大数学分析软件。

比如诸如「Unity」、「UE4」这样的3D引擎,可以实现对画面的设计、模拟等功能。
这样的工具也是基于C++、C#、Java、JavaScript、GLSL及各类脚本开发的。

编程环境

顺带一提,编程语言需要有对应的 [[编程方式]] ,这样才能提高使用编程语言的效率。
编程语言的软件由最基本编辑器、处理工具组成,写好的程序在操作系统上运行

  • 编辑器用来写字符、数字啥的;
  • 处理工具用来把你写的东西给处理出来;
  • 操作系统用来运行程序

比如安装 python ,实际上安装了两个工具,编辑器 IDLE,Python 解释器核心。
如果用 pyinstaller 对程序进行打包,就可以获得代码经过解释器处理后的程序,可以直接在操作系统上运行,不需要再安装python解释器了。

编程软件

编程软件是由多部分组成的,包括编辑器、编译器、链接器、调试器、版本管理等等,集成起来的叫整体叫 IDE。

  • 编辑器就是写文字、代码的工具,一般需要代码高亮、自动补全、错误提示,提高开发效率
  • 编译器是把代码转化为机器语言的工具,是编程语言的核心
    • 预编译:变成组合文件
    • 编译:变成汇编语言
    • 处理:目标文件.obj
    • 链接器:整合用到的文件,变成机器语言
  • 解释器是特殊的编译器,它的特点是一步一步执行,所以一般不像编译器一样打包完了再执行
  • 调试器:也是一种特殊的编译器,用来中断执行代码,是 debug 工具
  • 版本管理:管理好不同的版本记录
  • IDE:把以上工具集成起来的整体
  • 操作系统:运行生成的 exe 文件

一个方便的软件可以事半功倍,我建议使用最简单的工具,然后熟练后再增加复杂度。

  • 比如一开始编程 Python,可以用自带的 IDLE,别看他小,人家是一个 IDE。
    • F1 可以打开Python文档,这个太有用了
    • 刚打开IDLE,是个解释器,直接可以输入并执行。比在cmd里执行要好的多
    • 上一条命令:Alt+P,相当于在shell里按上方向键↑
    • 运行:F5,Breakpoint 甚至可以断点运行
  • 熟练后使用 Pycharm,用自动补全、错误提示来熟悉更优雅的代码写法,还可以学习使用 Git 等工具
  • 等很熟练之后,可以使用 VS Code 来编辑,使用插件来感受原来的功能,拓展软件的可能性
  • 再往后,可以试一下 Vim 来编辑, Git 来版本管理,最自由化管理程序

这个过程最好不要跳,否则会因为对功能的不熟悉,出现代码错误找不到,程序错误修不了等情况

更多编程软件可见:[[编程方式]]

跨平台

因为不同系统运行的程序不一样,有的编程语言就在每个 OS 准备了一个虚拟机,这样的话一个程序就可以跨平台运行了。
比如对 Java 来说

  • 编程过程:
    • 准备一个编辑器写好 .java 代码
    • .java 和对应的库经过 JDK 编译成了 .class
    • .class 可通过 JVM 运行
  • 编程工具组成:
    • Java IDE = JDK + 编辑器 + 其他编程工具
    • JDK = JRE + 开发工具(编译程序)
    • JRE = JVM(运行程序) + 核心类库(被调用)

开发框架

除了 IDE,以编程语言为基础还有开发框架,提供库、功能的支持。
比如软件领域, C++ 有「.Net」「QT」这些这两个比较知名的开发框架。
比如 AI 领域,Python 有「TensorFlow」、「PyTorch」这两个很好用的框架。

编程的语法

说了编程的基本概念,接下来我们来看看编程是该怎么写的。
和一门自然语言(汉语、英语等)一样,计算机有自己的语法结构,包括数据类型、语句结构等等。

数据类型

首先我们定义几种基本的量,用来区分和计算

  • 数字:最基本的东西,十进制
    • 整型:整数,123就是一百二十三
    • 浮点型:由精确位和指数位组成,比如123会存成两部分:0000123(精确位0-8388608)和002(指数位0-255)(我记得不太清了,但大体是这样)
    • 复数:和浮点型类似,复数也是两部分,实部和虚部组成的,实际上是复合类型
  • 字符:我们把刚才的数字进行编码,然后做个一一对应的编码表,就可以表示字母、汉字等东西了
    • 字符串:我们说话不会说一个字,需要把多个字符组合起来,这也是是后面要讲的复合类型
  • 序列(列表):按顺序给一堆量编个号,放一起统一管理,比如字符串、数组
    • 元组:固定的列表,每个编号的量不再改动
    • 字典:二维的列表,每个编号存两个量,一个叫键,一个叫值,键对应值,比如名字对应王福昊
    • 集合:不重复的列表,如果列表里由两个或更多相同的量,变成集合后,这个量就只剩一个了
  • 其他结构
    • 结构体:列表要求数据类型要一致,为了存储不同数据我们创造结构体使不同数据共存,同时可作为模板做到批量生成不同数据
    • 共用体:互相覆盖的结构体
    • 类:既可以像「结构体」一样把各成员实例化,也可以构造函数
    • 枚举:批量 #define
    • 指针:对地址进行编辑

在C语言中,一个变量是什么类型,要预先说明,否则报错。

int a;
a = 1;
float b;
b = 3.14;
char c;
c = "hi";
int d[5] = {1, 2, 3, 4, 5};

在Python中就省事,直接定义,python自动识别。

a = 1
b = 3.14
c = "hi"
d = [1, 2, 3, 4, 5]

其他语言都差不多,比如Shell脚本语言(高级语言的一种,用来向操作系统输命令,一般比较简单)

a = 1
b = 3.14
c = "hi"
d = ( 1, 2, 3, 4, 5)

然后我们可以用语句将他们组合起来,比如上述定义变量的语句,就是用 = = = 这个运算符实现的。
除此之外,运算符还有很多,自行查找即可。

语句结构

在编程中,出于习惯形成了三种基本的语句结构。

  • 顺序:做完第一个做第二个,然后第三个,以此类推
  • 分支:如果满足,就XX,否则,就YY
  • 循环:把一段语句重复很多次,for循环是让某个东西循环多少次,while循环是满足某个条件就循环

不同语言的语句规范大同小异,我就不举例了

编程就是对各种量进行处理的过程,处理其实就是函数,有输入对象,变成输出对象,编程里有自己的叫法。

  • 函数:比如 y = function(x) 就是把x经过function函数赋值给y
  • 方法:比如 y = x.method() 就是把x经过method方法复制给y
  • 其他:比如 S = a*b*p = NULLfor i in ls: 等等,都是把一些东西赋值给另一个东西

虽然我们只能看到函数、方法的名字,给我们的,只有一个括号来输入。
实际上,函数是有自己的语句的,但藏起来了,没被看到。
比如 print() 函数长这样

def print(
	*values: object,
	sep: str | None = ...,
	end: str | None = ...,
	file: SupportsWrite[str] | None = ...,
	flush: Literal[False] = ...,
) -> None: ...

如果没有print函数,你就要每次输出一次,就打那么多东西,费事、易错、难懂。
就比如说我们学指数计算, a 8 a^8 a8 我们当然可以写成 a ∗ a ∗ a ∗ a ∗ a ∗ a ∗ a ∗ a a*a*a*a*a*a*a*a aaaaaaaa 但费事、易错、难懂。

print()是一个内置函数,在写程序的过程中,你如果自己写的一段代码用的很多,也可以自己写一个函数。
比如python你经常使用 print("hello") 这句话,就可以用def定义一个函数,起名叫hello吧。

def hello():
	print("hello")

然后你就可以用函数 hello() 来代替这东西了。
当你运行时,编程语言会调用这个函数,运行 print("hello")
C语言等类似,都是定义函数,然后复用,就不多举例了。

以上是编程语言的基本组成部分,还有一些以后再写。
这些部分组合后可以实现很多功能,当今计算机应用如此广泛,就是这些功能的产物。

函数、类、库

编程是由最基本的一些语句组成的,比如基本的运算、转换数据类型等,为了批量运行,我们将其封装成函数、类等功能,实现抽象化。
这比较像数学,当你学会一个二级结论的时候,比如▲三角形面积公式,就不愿意一点点计算了边、高、勾股定理了。

当我们编程时,经常发现自己的功能可能不够用,而别人已经写好了我们需要的功能,基于不要重复造轮子的原理,拿别人的功能过来用是非常好(懒)的方法。
那如何才能弄到手呢?
python 来说,它内置了一个叫包管理器的功能(叫 pip ),用来在命令行中快速下载需要的库。
比如 pyinstaller 是一个可以把 .py 文件编译为 .exe 的库。我们只需要打开命令行(比如Cmd或Powershell),然后运行pip,也就是输入 pip install pyinstaller ,稍等片刻即可安装完成。
然后我们就可以在命令行中调用pyinstaller来安装程序了,比如 pyinstaller -F xxx.py

20分钟通俗讲解编程的基本框架_哔哩哔哩_bilibili
专业来说,编程是抽象化地设计功能。我们通过属性行为(python叫方法)设计功能,实现操作对象,并通过对属性和方法进行管理。通过对属性和行为的封装并提供接口,我们创造了函数,以层层封装出需要的功能。

编程的发展

面向对象编程

基本概念:5分钟通俗讲解面向对象编程_哔哩哔哩_bilibili

相关概念

类是工厂,对象是产品。

  • 静态类:新建的类只能用,不能 new
  • 分布类:一个类没写完,在其他地方继续写
  • 继承:子类继承了父类的特点,使得父类具有多形态

注:本文写作时间较久远,相关概念了解并不深刻,仅供参考

文章链接:https://blog.csdn.net/dao1023/article/details/128738983

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值