一、一个哲学的问题
“太极生两仪,两仪生四象,四象生八卦”,三千多年前,周文王在伏羲原创基础上进一步演变,形成八卦图,中国先秦最重要的哲学家老子进一步悟出“道生一,一生二,二生三,三生万物”,而道法自然,这是个哲学问题。无独有偶,恰恰大自然中有阴阳两极,电有正、负两端,于是在集成电路控制下,正、负变成1、0,形成了二进制,仔细对照一下3位的二进制和八卦,简直一模一样,所以二进制也是一个哲学问题。
从计算机基础开始,我们就知道,CPU、内存、主板基本就构成了计算机的主体,有了这些加上电就可能进行计算了,就能解决现实中的问题了。这些计算可能是由很多不同编程语言实现的程序实现的,无论是什么语言,最终都是由最基础的机器语言0、1计算出来的,就算是以后量子计算机出来了,原理依然可用。这种二进制的机器语言,最基础的计算只有三种:与、或、非,这就是它的思想精髓,这是包括汇编语言在内的所有其他语言的基础和根源。
编程语言它是一种语言,像汉语、英语一样,有自己的语法逻辑来描述周边的这个世界,所不一样的是,编程语言是逻辑缜密的语言,不像一般意义的语言会产生歧义。这种缜密的逻辑就是哲学所追求的境界。二进制对于计算机来说,是最容易识别的语音,但是对于人类来说,编写、识别、调试都是极大的困难。由于这是个哲学的问题,所以我们可以通过哲学的思维来解决这个问题。假如把机器语音当作是本体,我们需要有个摆在这个本体和人类之间的假体,以人类能够轻松认知的方式把机器语音呈现出来,这个假体就是各种更高级别的编程语言:汇编、c、c++、java、object c、kotlin、swift。之所以叫高级语音就是,它们更接近人类的基本常识,更接近人类的思维方式,这些语言演进的过程,就是编程思想不断丰富完善的过程。
二、面向过程的编程思想POP(Procedure Oriented Programming)
汇编语言,即第二代计算机语言,将机器语言做了简单编译,主要用来写驱动程序,汇编里面的那些标记可是直接对应硬件的。硬件生产厂商都有明确的指令说明书,比如用“ADD”代表数字逻辑上的加减。在汇编里主要有三个操作:比较,跳转(goto),过程调用(call)。指令加上这三个操作就形成了面向过程的编程的基础,最早的面向过程编程的思想也随之而来。
面向过程的程序设计是以功能为中心来进行思考和组织的一种编程方式,强调的是系统的数据被加工和处理的过程,说白了就是注重功能性的实现,效果达到就好了。
三、结构化编程思想SP(Structured Programming)
c语言是典型的结构化编程语言,两个基本特点:
1、c语言的三种基本结构:“顺序(按照它们出现的先后顺序执行)、选择(if)、循环(while,for)”
2、c语言的构造类型:数组类型,联合类型,结构体
数组不用多说,结构体各成员变量有自己独立的存储位置,而联合的成员变量共享同一片存储区域,因此联合变量同一个时刻只能保存它的某一个成员的值
union Student //声明联合类
{
int age;
double tall;
char str[16];
};
struct Student{ //声明结构体
char name[20]; //姓名
int num; //学号
float score; //成绩
};
SP着眼点是:面向过程
SP基本思想是:自顶向下和逐步细化的设计,将一个复杂任务按照功能进行拆分,并逐层细化到便于理解和描述的程度,最终形成由若干独立模块组成的树状层次结构,各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口。举个较简单的例子:读入一组整数,要求统计其中正整数和负整数的个数。