1.计算机编程语言的分类
低级语言/高级语言;(高级语言中的)编译型语言/解释性语言;动态语言/静态语言;
2.主要的流行高级语言介绍
Java、C++、python、C#、C、JavaScript、Go、ruby、Groovy、Kotlin等
3.硬件编程
只了解一点FPGA/DSP,就简单提一下
低级语言包括机器语言和汇编语言,Java、C++、python这些常见的都是方便程序员与电脑高效交互的高级语言。
机器语言是计算机可以直接识别的 0/1 串
,对应计算机硬件的“断开”和“闭合”两种状态。
汇编语言实际上就是描述指令集的语言
。通过汇编这一过程,汇编语言
转换成机器指令
执行。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不具备移植性。
高级语言更接近人类的思维方式
,编写容易,开发效率高。
C、C++语言是典型的编译型语言。可以这么理解,有一个事先编好的叫做“编译程序”的“机器语言程序”(*未求证,感觉这里不太对)*安装在计算机内,它的功能是通过预处理、编译、链接等将高级语言变为机器可执行的目标代码(注意区分,这个目标代码是机器指令,并非0 / 1二进制代码。
这里涉及到ABI的相关知识)。C++编译链接后生成的.exe可执行文件,也是作用/运行在操作系统上的,并非直接运行在硬件上。
解释型语言:python是典型的解释型语言,即计算机有专门对应的解释器程序,一边扫描python代码、逐句输入逐句翻译,没有编译产生目标程序的过程,而是翻译后由计算机直接一行一行执行。
这里特殊讲下Java语言,因为Java运行过程是,先 javac xxx.java 即编译Java文件,这一步生成一个 .class 文件(一个与平台无关的字节码程序),然后 java xxx 运行这个名为xxx的Java源程序。所以这么看来Java也有编译的过程,但是Java被定义为解释型语言
,因为它并不是编译生成常规的机器指令,而是生成在JVM上运行的指令字节码。
这就涉及到Java语言的运行机制:JDK JRE JVM与Java。
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK),它是Java实现的核心,我们要运行Java必经痛苦的配置环境的过程,就是在部署JDK。
JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),它负责类的加载、初始化静态变量、二进制字节码的校验、解析类中调用的接口和类
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。经过Java编译器生成的字节码.class文件就是运行在JVM。
这也是针对高级语言来讲的。静态语言即编译时变量的数据类与就可以确定的语言,大多数静态语言要求在使用变量之前就必须声明数据类型,C++、Java都是如此,所以他们用起来更安全。
动态语言的变量类型是由其上下文决定、动态赋予的,其类型检查是在运行时做的。它的优点是方便阅读,不需要写非常多的类型相关的代码;缺点是不方便调试,容易出错。比如众所周知的ECMAScript(JavaScript)、Ruby、Python等都属于动态语言。
脚本语言都属于动态语言,动态语言又都属于解释型语言。
诞生于1995年,是分布式服务开发的最佳选择之一;
Java做后端服务居多,包括网站后端、手机app后端,微信小程序后端、h5页面的后端等等。
Java也可以用来做安卓开发,不过现在Android发布了官方的开发语言kotlin,可能会形成相对聚集的生态圈。
Java开源框架超多,spring全家桶等;
游戏方面,《我的世界》就是用Java写的;
Java提供web插件,允许在浏览器中直接运行此类应用;
在大数据存储和应用方面,Java是必备语言,Hadoop也是基于Java进行开发的;
诞生于1972年,最初构建目标是用来编写系统软件;
Linux操作系统就是用C语言开发的;
C语言不支持面向对象编程,也不具备运行时检查机制;但具有出色的可移植性;
通信电子类的公司(华为、中兴等),开发相关的软件都是用的标准C语言;
嵌入式系统编程、单片机开发板都是用C语言来进行开发的;(直接接触底层,执行效率高)
python诞生于1991年,本身是用C语言开发的;
用于数值分析与计算(金融系统分析、量化展示等);
在机器学习、人工智能、数据挖掘等领域应用广泛;
第三方开源库和工具繁花似锦,不用造轮子,调包非常方便;
python脚本可以用来分析系统效率、覆盖率、做数据可视化,以及爬虫;
也可以用来做web的后端服务,开发小程序等,Flask、Django框架等都非常火热;
python是Google的官方语言之一,常用的软件中,Instagram、YouTube、Dropbox(媒体存储和处理方向)和spotify等后端都是用python开发的。
诞生于1983年,属于C语言的一个超集;
对C语言的扩充和延申,非常有设计感,容器、泛型编程、模板库、面向对象编程等元素的使用,使得C++非常具有表现力;
嵌入式编程、电信级软件、windows/Linux上的(ps、office、QQ、微信,基本都是c++开发的。Foxmail / Outlook 等各种邮件收发工具、Chrome浏览器、IDE visual studio、搜狗输入法等也都是由C++开发;
C++可跨越全部设备实现移植,并受到Android、苹果、Windows phone以及黑莓四大移动平台支持;
JavaScript诞生于1995年,属于客户端脚本语言;(JS代码被写入HTML页面中,客户端的用户通过内部JS请求某HTML页面时,该脚本会被发送至浏览器,并由(客户端的)浏览器决定下一步操作。)
代码在客户端执行,减轻了服务器端的压力,但这也意味着有时会被恶意活动所利用,从而带来安全隐患;
JavaScript在不同的浏览器上有时会以不同的方式进行解释,相比于提供稳定输出结果的服务器端,js脚本的可预测性较差。不过充分测试可避免此类问题。
也是典型的全栈语言,在前后端无处不在;
用户交互UI、动态页面生成,主要在前端大放异彩;
广泛应用到各种企业级开发,如Vue.js、React.js、Angular.js等框架;
也可以用来做后端服务器开发、高性能服务器编程等,其支持框架为大名鼎鼎的 Node.js,具有异步编程的特点;
诞生于2000年,语法很像Java,可以做web后端(ASP.NET)、桌面软件开发、Windows应用开发等;
常用的 stack overflow、印象笔记就是由C#开发的;
全面集成.net库,提供出色的功能与支持库访问能力,但也由于集成了.net库而不具备跨平台的能力;
在国内生态不太好,就业形势一般;
诞生于1994年,超文本预处理器,是一种服务器端的脚本语言;
可以用来做后端的web服务,典型框架 ThinkPHP,以及现在比较流行的 Larvaral;
Facebook中就用到了PHP;
PHP拥有庞大而活跃的社区,易于上手,能够丰富支持html、js、css等语言,与各类数据库、文件系统的协作都非常顺畅;
数据库查询语言,很简单,但必须要学;
经久不衰的话题是:如何对SQL语言进行优化;(社招常问)
O-C诞生于1983年,是苹果IOS开发官方语言,用于构建 Mac OS、IOS;
由Google开发发布;
对在多处理器系统上的运行进行了特别的优化,据说编译后的运行速度可以媲美C++/C;
也拥有自己web后端开发的典型框架:Beego框架、Gin框架;
基于Go语言的博客框架:Hugo,可以用来搭建自己的个人博客;
Go语言在虚拟化技术方面应用十分广泛,大名鼎鼎的远程虚拟机工具Docker就是Go语言的典型作品;
隶属于Java系的脚本语言;可以理解为Java动态机制的一种补充,二者可以互相调用;
它也需要JDK的支持;
典型的应用:Jenkins 2.0的流水线 pipeline 脚本,只能用groovy来写;
也需要JDK的支持,也和Java语言互通;
2017Google开发者大会官宣了kotlin为Android开发的官方语言;
和python类似,也是用C语言实现的,很容易和C代码互相调用;
OpenResty = Nginx + Lua:这个项目就是 Lua 语言对 Nginx 服务器进行二次开发得到的,用于web后端服务器开发、游戏开发等;
高性能动态科学计算语言;
支持非常多的数据类型,在科研中(尤其机器学习)用的非常多;
Field Programmable Gate Array,现场可编程逻辑门阵列;
FPGA 芯片并非单纯局限于研究以及设计芯片,而是针对较多领域产品都能借助特定芯片模型予以优化设计。从芯片器件的角度讲,FPGA 本身构成 了半定制电路中的典型集成电路,其中含有数字管理模块、内嵌式单元、输出单元以及输入单元等。
我们的计算机中,CPU芯片处理器负责调度、计算,GPU用来图形加速显示等,上面布满了密集的电路元件,FPGA也是一种芯片,它在通信领域用途较广,常规也用于图像、数据处理的一些算法辅助实现,现在比较火热的是用于深度学习加速。
TI公司的DSP用CCS开发平台,编程语言一般是C语言;来ADI公司的源DSP用VDSP++开发平台,一般也是用C语言。
这个我了解不多,只知道在我们直观看不到的地方应用非常广泛,还有就是EDA技术那一套。有机会了解了再说。
参考链接:
https://blog.csdn.net/zdb292034/article/details/80732098
bilibili @ codesheep 高级语言介绍的部分内容由程序羊大哥的视频搬运而来
知乎 @ 周萌萌 部分内容参考来自四年前由周翻译过来的一个外国网站的统计图