Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了。

聊一聊编程到底是啥,怎么发展起来的呢?

编程语言是从哪蹦出来的?

一、什么是编程?

看过《黑客帝国》这部电影的人们应该会对一个场景印象深刻,黑色的屏幕落下一行行的代码,屏幕前的程序员十指飞舞干脆利落,十分炫酷。

这个画面让很多人以为这就是编程,坐在电脑前飞快的敲键盘,其实也没错,编程确实等价于敲代码,但是可没有电影中表现的那么精彩。

编程其实就是程序员通过键盘输入代码与计算机做沟通,既然是沟通,那就必须是双方的,程序员通过代码向计算机发出指令,计算机执行指令之后将结果反馈到屏幕或文件上显示给程序员。

计算机的反馈,可以是文字,可以是图片,也可以是视频,这是以我们能理解的方式显示,所以编程也是必须以计算机能理解的方式发布指令。

我们都知道,计算机底层所有的工作都是以二进制的形式进行的,也就是说它只认识0和1,当初最早的程序员也确实是靠二进制写程序。

由二进制代码0和1表达的指令称为机器指令,所有的机器指令的集合构成计算机的机器语言。


慢慢的,程序越来越多,逻辑也越来越复杂,特别容易出错,代码维护极其困难,单独的0和1已经不能够满足需求了,为了让编程变得更加直观,程序员就把二进制的01进行分组,四位二进制数表示一位十六进制数,程序员输入十六进制的数,然后有一个专门的程序将十六进制数转换为二进制数之后再交给计算机执行。

但是,这种由十个数字和六个字母组成的语言还是不够直观,只有专业人员能看懂,普通人想要理解太过困难,这就导致编程的学习门槛高,最好是能够让计算机直接认识单词,这样的程序看起来也比较直观。

程序员又把二进制的机器语言重新分组,让固定长度的由01字符组成的机器码直接对应英文单词,这样程序员就可以直接输入单词进行编程,于是汇编语言就此诞生。

我们来看一段汇编语言的代码:

section .textglobal _start       ;must be declared for using gcc
_start:                     ;tell linker entry pointmov   edx, len    ;message lengthmov    ecx, msg    ;message to writemov  ebx, 1     ;file descriptor (stdout)mov   eax, 4     ;system call number (sys_write)int  0x80        ;call kernelmov    eax, 1     ;system call number (sys_exit)int   0x80        ;call kernelsection    .datamsg db  'Hello, world!',0xa  ;our dear string
len equ $ - msg         ;length of our dear string

这段代码的功能其实就是输出“Hello World!”而已,这么一个简单的功能,却需要那么多行的代码,那我每次要想输出字符的时候都要把上边的代码再敲一遍。

因此,又有程序员将固定功能的汇编语言代码封装起来,用一个简洁的单词代表,比如上述汇编语言的代码是向屏幕输入一个字符串,那么我把这个功能用一个单词print代表,这样就只需要输入print(“Hello World!”),就可以在屏幕上打印字符串,这就是高级语言。

高级语言简化了编程的过程,具有如下优点:

1.不需要再使用繁琐的二进制或十六进制的机器码2.更加平易近人,让编程是以程序员的思路进行,而不是思考计算机底层应该怎么做

编程语言经过层层优化,从最开始的机器语言,到汇编语言,再到高级语言,风格越来越优雅,现在通过高级语言编程只需要输入美丽的英文语句就可以向计算机发布指令。

二、高级语言的分类

在屏幕上打印字符串,使用高级语言可以写成:

print("Hello World!")

对我们而言,一看这行代码就知道我们是给计算机发布了一个打印字符串的命令,而在计算机内部会把这条语句转换成用机器语言编写的等价指令,一大堆以01机器码形式表现的指令,看起来非常麻烦。

但是对于计算机来说恰恰相反,高级语言编写的指令就是一堆火星文,毫无用处,计算机本质上还是只能识别二进制的机器码,要想执行我们给它发布的指令,就必须把指程序翻译成机器语言。

我们知道,翻译有两种方式,假如我用中文写了一本书,然后想让一个只懂英语的外国人看,第一种方案是我找一个翻译把整本书翻译成英文版本,把译本直接给外国人,他就可以直接阅读,第二种方案是把翻译人员和外国人都叫过来,我把内容读给翻译人员听,翻译人员理解了之后再翻译成英文说给外国人听。

这两种方案其实就是编程语言的两种分类,一种是将程序代码全部翻译成机器语言之后交给计算机执行,这叫编译型语言,承接翻译工作的是编译器;另一种是将程序代码一行一行的翻译成机器语言然后计算机一行一行的执行,这叫解释型语言,承接翻译工作的是解释器。

统一来讲,编译器或解释器就是将我们能够理解的高级语言程序转换成计算机能够理解的机器语言程序。

程序员负责进行思维活动编写代码,编译器或解释器负责代码的翻译工作。

编译型

我们说编译就类似于将一本书全部翻译成机器语言程序,那么编译的过程肯定要消耗一定的时间,而计算机拿到“这本书”之后可以很快的阅读,不仅如此,编译之后的译本还可以给很多能看懂的计算机执行,相比与此编译所使用的时间就不足为虑了。

编译型语言的优点:

1.执行速度快。对于同一个任务采用不同的语言实现,一般编译型语言的执行速度是解释型语言执行速度的2~10倍。2.调试方便。编译型语言的代码编写要求比较严谨,在调试时比较方便。3.源码不依赖。编译型语言执行时不需要源代码。

编译型语言的缺点:

1.代码量大。完成同一个任务一般编译型语言的代码量是解释型语言代码量的10~50倍。2.平台依赖性。编译型语言是要基于不同平台底层实现的,因此对平台的依赖性比较大。3.更新代价大。每次修改完源代码之后都要重新编译。

常见的编译型语言:C、C++、Fortran、Visual Foxpro、Pascal、Delphi、Ada。

解释型

解释型语言的优点:

1.代码简洁。解释型语言的代码相对编译型语言的代码更为简洁,方便阅读。2.平台独立性和安全性。解释器内部已经实现了对不同平台的交互处理,这使得解释型语言适合互联网和WEB应用的开发。

解释型语言的缺点:

1.执行速度慢。相比于编译型语言,解释型语言的执行速度较慢。2.内存占用大。必须先运行相关的解释器才能执行解释型语言,而解释器会大量消耗资源,占用CPU周期和内存。

常见的解释型语言:Python、Tcl、Perl、Ruby、VBScript、 JavaScript。

编程语言是从哪蹦出来的——大型伦理寻根现场相关推荐

  1. 樊振东拟保送上海交大!评论区变大型P图现场

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文来源:南方都市报.中国青年报综合自国家体育总局科教司.上海交通大 ...

  2. 如何执行大型会议活动现场管理

    在人潮涌动的活动或会议现场,组织管理者总有千头万绪需要去打理,会场布置.设备搭建.嘉宾接待.会场签到.流程场控.礼品发放.分会场/区域管控.大会安保等等,市场人既要在忙碌的现场工作中挣扎突围,还要应付 ...

  3. YOLOv4来了,大型调优现场,速度和准确率俱佳

    作者 | VincentLee 来源 | 晓飞的算法工程笔记 简介 论文提出YOLOv4,从图1的结果来看,相对于YOLOv3在准确率上提升了近10个点,然而速度并几乎没有下降,论文主要贡献如下: 提 ...

  4. 程序员裸辞求夸,众网友上演大型夸夸秀现场:楼主好样的

    最近这几天,夸夸群火了.不管做什么,不管好坏,只要求夸,就有众多夸夸网友开始了各式各样的表演.无独有偶,一名程序员最近裸辞了,其在论坛发帖求夸. 就这么一个帖子,吸引了两百多名网友夸赞,各路网友纷纷秀 ...

  5. 面试官:了解雪崩效应吗?了解Hystrix吗?怎么解决雪崩效应吗?(大型社死现场,教你运筹帷幄之中)

    上篇我们模拟了高并发场景下,系统资源被耗尽导致其他接口访问非常之慢.至此,这篇给出了五种解决方案(当然这个是次要的,主要还是理解原理) 上篇地址:https://blog.csdn.net/Kevin ...

  6. 大型社死现场,两程序员互为彼此面试官

    本文转载自程序员八卦 世界之大无奇不有,有些巧合简直就是天作之合,就像下面这位百度程序员和阿里程序员的故事. 某百度程序员发帖吐槽:中午面试了一个阿里程序员,问了他一些刁钻的问题,结果自己晚上去阿里面 ...

  7. 小雨的三周年创作纪念日 —— # 大型立flag现场

    写在最前面 听说写<我的创作纪念日>会有红包掉落!让我来试试~ ლ(´ڡ`ლ) Tips 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章 优质的纪念文 ...

  8. YOLOv4: 虽迟但到,大型调优现场,43mAP/83FPS | 论文速递

    YOLOv4在速度和准确率上都十分优异,作者使用了大量的trick,论文也写得很扎实,在工程还是学术上都有十分重要的意义,既可以学习如何调参,也可以了解目标检测的trick.   来源:晓飞的算法工程 ...

  9. YOLOv4: 43mAP/83FPS,虽迟但到,大型调优现场 | 论文速递

    YOLOv4在速度和准确率上都十分优异,作者使用了大量的trick,论文也写得很扎实,在工程还是学术上都有十分重要的意义,既可以学习如何调参,也可以了解目标检测的SOTA trick  来源:晓飞的算 ...

最新文章

  1. Week4-作业1:阅读与博客
  2. eBPF在大厂的应用
  3. [转]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
  4. java写入文件的几种方法分享
  5. java 配置jmstemplate_SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解...
  6. 事务的隔离级别与锁的申请和释放
  7. Progressive Scramble 复杂模拟
  8. RCP之病人信息系统开发总结(4):MVC模式之View层—透视图
  9. 啊哈c语言逻辑的挑战课后题答案,啊哈C语言 逻辑的挑战(修订版)pdf
  10. 100兆的网速在电脑上怎样测试软件,电脑如何测网速多少兆(台式电脑怎么测网速多少兆)...
  11. 微信小程序中使用阿里(iconfont)字体图标
  12. R绘图| Kaplan-Meier曲线及美化
  13. 获取图片外链的方法--网易相册
  14. 编译低版本的binutils-2.16.1错误:ld.texinfo:1592: @itemx must follow @item
  15. 使用 certbot 申请泛域名证书和自动续签
  16. qpython3:安卓上运行Python
  17. startup_stm32f10x_hd.S:1: Error: junk at end of line, first unrecognized character is `*‘
  18. Java 后端工程师的书单推荐,周立功linux开发教程
  19. Android 每周一个小轮子之 学习仿网易云广场歌单的效果
  20. c++中文件的读处理多种方案解析

热门文章

  1. BZOJ 1012: [JSOI2008]最大数maxnumber
  2. 关于eclipse里启动Tomcat访问不到8080页面的问题
  3. Andorid ListView使用技巧
  4. secureCRT 小技巧
  5. 用WPF开发Mapxtreme-- 在.net 4.0 下面开发WPF mapxtreme 程序
  6. css怎么使元素绝对定位有过度效果_小猿圈web前端讲解div+css绝对定位和相对定位...
  7. python简单定义_python定义类的简单用法
  8. 【数据结构】排序相关题目及各种排序方法的总结
  9. phpquery类php,一个基于phpQuery的php通用采集类分享
  10. Java怎么在if输出中进行运算_磕代码:c/c++/java:输入三个整数,输出运算结果;if条件句的使...