说说程序员、编译器、CPU之间的三角恋

编程工作的演进史

1、CPU需要的只是1和0组成的二进制数据

(1)不管编程怎么变,最终编程得到的可执行二进制程序都是给CPU运行的。CPU需要的只是按照CPU设计时的规律(机器指令)排布的一串二进制1和0组成的数字(机器码),CPU根本不关心这些二进制是怎么来的。

(2)这些二进制可能是一个很厉害的程序员直接用1和0拼出来的;也可以是用汇编语言编写最终编译得到的;也可以是用C语言编写最终编译得到的;也可以是用java C# php bash等语言编写然后解释得到的;

(3)编程工作的演进其实一直是在处理上一个层次段落:就是使用何种语言编写程序(用某种语言进行编程),然后如何把这种程序源代码转成二进制(编译器的发明)。

(4)CPU接收到一串1010序列后如何工作达到目的,这就是设计制造CPU的公司要考虑的事情了,与软件工程师完全无关。

2、早期的纸卡打孔编程者

(1)最早期的时候,CPU也很简单,指令集很少,二进制位数也不多。那时候编译器也没被发明,编程语言也没被发明,那时候就是用二进制直接编程的。

(2)总结:最早的编程没有语言也没有编译器,程序员直接使用二进制和机器(CPU)对话。

(3)这种方式的坏处就是不容易扩展,随着CPU的进一步复杂化,指令的变多,指令位数的变多,编程难度呈几何倍数增长。人的大脑慢慢就跟不上这个节奏。

3、编程工作的第一次革命:由二进制机器码到汇编语言

(1)第一次革命就是:发明了汇编语言。汇编语言的本质就是用一个符号来代替一串二进制。

MOV 10101010101010

SUB 01010101010101

(2)有了汇编语言之后,程序员就不用再去记忆二进制序列了。编程时只需要用汇编指令来编程即可,汇编指令就是一个符号(符号就是由文字构成的,如MOV)。因为人类大脑天生对文字符号更加友好,因此用符号编程更简单。

(3)用汇编语言编写的源程序不能直接给CPU运行,必须通过一个翻译过程,把源代码翻译成二进制序列才能给CPU。这个翻译的过程就叫汇编,执行翻译动作的就是汇编器。

4、编程工作的第二次革命:由汇编语言到C语言

(1)汇编语言也有一些不尽如人意的地方,譬如:没有可移植性。在这个CPU上写的汇编程序无法直接在另一个CPU上运行。因此汇编语言是和CPU一一对应的。

(2)为了可移植性于是乎发明了高级语言。第一个高级语言就是C语言。C语言进一步靠近人的思维,为人的思维发明了很多CPU没有的东西,譬如数组。最终的目的就是降低编程难度,让高级语言更接近人的思维,然后通过编译器、汇编器等的翻译将这些源代码变成二进制然后给CPU运行。

5、革命无穷尽、层次变更多

(1)在C语言之上还有更高级语言,譬如:C++、Java、C#、bash等。越往上越靠近人的思维,越往上语言本身提供的封装越多,越往上编程难度越低、语言的掌握越容易。

1、CPU只认识二进制机器指令

(1)CPU是最终干活的,而CPU只认识只接受二进制。

2、人类喜欢符号而不是二进制

(1)人类的大脑本身不喜欢二进制而喜欢符号、文字。

(2)人类和机器之间天生有代沟,于是乎编程不容易。

3、连接人(程序员)与机器(CPU)的桥梁:编译器

(1)编译器降低了编程难度。编译器的代表就是编程语言,每一种编程语言都有对应的编译器,这个编译器的作用就是把这种语言的源文件编译成可执行程序。

(2)关键是:有了编译器(高级语言)之后,我们程序员就不再盯着CPU(二进制),而是改为盯着编译器(编程语言、编程语言的语法),所以我们学习编程的关键变成了学习编译器的习性,也就是编程语言的语法。

4、发明一门语言关键就在于发明它的编译器

(1)编译语言的关键就是编译器。yacc和lex工具就是用来发明编程语言的。

5、高级语言与低级语言的差别

(1)越高级的语言越靠近人类思维;越低级的语言越靠近机器的需要。

(2)人与机器总劳动量(总复杂度)守恒。人要是复杂一点机器就可以简单一点;人简单一点机器就需要复杂一点。这个规律描述的就是:编程语言越简单,人使用起来越简单,编译器设计起来就更复杂;编程语言越复杂、程序员使用起来越麻烦,则编译器设计越简单,CPU执行效率越高。

像编译器一样思考吧

语法是什么?语法就是编译器的习性

(1)编译器反应在编程中就是语法。

譬如1:

for (i=0; i<10; i++);

{

xxx;

}

譬如2:

int i; !!i;

解析:!在C语言中是逻辑取反的意思,逻辑取反意思就是0取反就是1,不是0的数取反就是0

问题:让你用C语言编程实现:如果一个数i是0则返回0,如果不是0则返回1

一般实现: if (i == 0){return 0;} else{return 1;}

或者可以用三母运算符: (i==0)?(0):(1);

极客式写法: !!i;

习得一门语言就像认识一个朋友

(1)从新开始认识一个人到成为好朋友,这里面要经历:时间、共事。

(2)学习一门编程语言也需要:时间、实践(共事)

学习编程语言要懂得换位思考

(1)预处理中处理程序注释、空行。

时间: 2024-10-11 16:00:48

说说程序员、编译器、CPU之间的三角恋的相关文章

一:对程序员来说CPU是什么?

0.开篇 (1)程序是什么? 指示计算机每一步动作的一组指令 (2)程序是由什么组成的? 指令和数据 (3)什么是机器语言? CPU可以直接识别并使用的语言 (4)正在运行的程序存储在什么位置? 内存 (5)什么是内存地址? 内存中,用来表示命令和数据存储位置的数值 (6)计算机的构成元件中,负责程序的解释和运行是哪个? CPU 1.CPU的内部结构解析 ① CPU所负责的就是解释和运行最终转换成机器语言的程序内容.如下图所示: ② CPU的内部由寄存器.控制器.运算器和时钟四个部分构成,各部分

作为一个程序员,CPU的这些硬核知识你必须会!

CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制. 随我一起,来好好认识下CPU这货吧 把CPU掰开来看对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东西,构造一定是极其复杂的,毕竟是超高科技玩意,所以啊,我们今天说的组成什么的,都是指的主要的,对我们程

程序员与新技术之间的「爱」与「恨」

我们大部分做技术的,对新技术是又爱又恨. 爱的是他能让枯燥反复的工作重新获得新鲜感. 恨的是新技术太多了,学不动啊. 真到了实际要运用的时候,不同人对待新技术的态度相差很大,有的看上去很积极,有的又看上去很排斥. 一般来说,技术团队的管理者往往是“排斥者”,而团队的成员是“拥抱者”的概率居多. 看看下面这个景象是不是很熟悉? 程序员小明:老大,XX系统太乱了,需要重构一下.我建议用XX技术,它的优点有XX.XX.XX.我开了一个分支,在项目中引入测试过了,没啥问题.重构应该要趁早,否则简直是煎熬

黑马程序员————java线程之间的通信

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 多线程可以让我们同时共享一个资源,但如果在共享这个资源时需要彼此之间的联系怎么做呢? 经典实例:生产者与消费者. 问题描述,生产者每生产一个消费者就要取走一个,同时进行. 首先java为我们提供了一套等待唤醒机制,让线程与线程之间产生了联

程序员和编译器之间的关系

编程工作的演进史 CPU需要的只是1和0组成的二进制数据 不管编程怎么变,最终编程得到的可执行二进制程序都是给CPU运行的.CPU需要的只是按照CPU设计时的规律(机器指令)排布的一串二进制1和0组成的数字(机器码),CPU根本不关心这些二进制是怎么来的. 这些二进制可能是一个很厉害的程序员直接用1和0拼出来的:也可以是用汇编语言编写最终编译得到的:也可以是用C语言编写最终编译得到的:也可以是用java C# php bash等语言编写然后解释得到的: 编程工作的演进其实一直是在处理上一个层次段

工程师和程序员之间不得不说的小秘密

对于很多人来说程序员就是工程师,都是一样的,很多都分不清楚这两者这间的差别!但现实却是程序员与工程师之间有很大的不同,工程师是要负责设计,而程序员是按照工程师的设计去做最底层的开发,也就是说程序员只是工程师的一种:当然,在称呼上也体现出了不同的气质:程序猿这个称呼比较屌丝,而攻城狮立马就高大上了:这也是没办法的事情,自然进化决定了狮子本来就比猿厉害些. 工程师可以评判软件是否可以成功被写出来,可以判断软件是否具有开发的技术可行性,甚至要会经济.法律等知识去评判软件是否具有经济可行性.法律可行性等

[译]真正程序员该是什么样的

01.Real Programmers don't write specs -- users should consider themselves lucky to get any programs at all and take what they get.(真正的程序员不循规蹈矩,他们对用户说:拿到你想要的,然后滚蛋,你已经很幸运了!) 02.Real Programmers don't comment their code. If it was hard to write, it shou

当程序员的那些狗日日子

作此文,祭奠我当程序员的那些狗日日子,并与所有仍在艰苦奋斗着的同行共勉. 这里所说的是"我"当程序员的那些狗日日子,但我绝对没有说别人当程序员是狗日日子.在这里我也并没有贬低"程序员"这个职业和这个群体的意思,我只是想写出我的职业经历和表达出我的感受.所以希望您可以带着平常心去看,只当看一个小程序员的职业故事,如果您看后没有骂我,那我就已经感到很欣慰了! ──作者序 (一)毕业后的徘徊 我不是计算机相关专业毕业的,我上的是大专,我的专业叫供用电技术,是跟电力行业相关

程序员是否必须会算法

本章的标题既然是"程序员与算法",就必然要涉及一个基本问题,那就是"程序员是否必须会算法".这是一个充满争议的问题,虽然并不像"生存还是毁灭"之类的选择那样艰难而沉重,但也绝不是一个轻松的话题.朋友们在我的"算法系列"博客专栏上发表的评论和回复,并不都是我所期待的赞美和鼓励,也常常会有一些冷言冷语.比如,"穷举也算是算法吗"或者"请你说明一下算法在XX系统中能起到什么作用". 有一次,一