【4】到底该学哪一种编程语言?各类不一样的编程语言如今都用来干吗?

本菜鸡通过调研,决定了硕士将来两年的学习路线。最近半年主攻算法+数据结构基础,LeetCode就用C++写,配合学习资料:1.卜东波算法视频课;2.两本学长的刷题总结pdf;3.清华大学本科数据结构(C++版)教材。课题正好也是C++和Java都要用到。而后课余时间学习课外机构的Java大数据视频课(买的),大数据有点难不必定能学好,但总之就业具体方向仍是肯定了以Java为主。css

0 本文要点

1.计算机编程语言的分类
低级语言/高级语言;(高级语言中的)编译型语言/解释性语言;动态语言/静态语言;
2.主要的流行高级语言介绍
Java、C++、python、C#、C、JavaScript、Go、ruby、Groovy、Kotlin等
3.硬件编程
只了解一点FPGA/DSP,就简单提一下html

1 编程语言分类

(1)低级语言 / 高级语言

低级语言包括机器语言和汇编语言,Java、C++、python这些常见的都是方便程序员与电脑高效交互的高级语言。
机器语言是计算机能够直接识别的 0/1 串,对应计算机硬件的“断开”和“闭合”两种状态。
汇编语言实际上就是描述指令集的语言。经过汇编这一过程,汇编语言转换成机器指令执行。特定的汇编语言和特定的机器语言指令集是一一对应的,不一样平台之间不具有移植性。
高级语言更接近人类的思惟方式,编写容易,开发效率高。前端

(2)编译型语言 / 解释型语言

C、C++语言是典型的编译型语言。能够这么理解,有一个事先编好的叫作“编译程序”的“机器语言程序”(*未求证,感受这里不太对)*安装在计算机内,它的功能是经过预处理、编译、连接等将高级语言变为机器可执行的目标代码(注意区分,这个目标代码是机器指令,并不是0 / 1二进制代码。这里涉及到ABI的相关知识)。C++编译连接后生成的.exe可执行文件,也是做用/运行在操做系统上的,并不是直接运行在硬件上。java

解释型语言:python是典型的解释型语言,即计算机有专门对应的解释器程序,一边扫描python代码、逐句输入逐句翻译,没有编译产生目标程序的过程,而是翻译后由计算机直接一行一行执行。python

这里特殊讲下Java语言,由于Java运行过程是,先 javac xxx.java 即编译Java文件,这一步生成一个 .class 文件(一个与平台无关的字节码程序),而后 java xxx 运行这个名为xxx的Java源程序。因此这么看来Java也有编译的过程,可是Java被定义为解释型语言,由于它并非编译生成常规的机器指令,而是生成在JVM上运行的指令字节码。c++

这就涉及到Java语言的运行机制:JDK JRE JVM与Java。程序员

在这里插入图片描述

JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK),它是Java实现的核心,咱们要运行Java必经痛苦的配置环境的过程,就是在部署JDK。web

JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并非一个开发环境,因此没有包含任何开发工具(如编译器和调试器),它负责类的加载、初始化静态变量、二进制字节码的校验、解析类中调用的接口和类算法

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是经过在实际的计算机上仿真模拟各类计算机功能来实现的。通过Java编译器生成的字节码.class文件就是运行在JVM。spring

(3)静态(强类型)语言 / 动态(弱类型)语言

这也是针对高级语言来说的。静态语言即编译时变量的数据类与就能够肯定的语言,大多数静态语言要求在使用变量以前就必须声明数据类型,C++、Java都是如此,因此他们用起来更安全。

动态语言的变量类型是由其上下文决定、动态赋予的,其类型检查是在运行时作的。它的优势是方便阅读,不须要写很是多的类型相关的代码;缺点是不方便调试,容易出错。好比众所周知的ECMAScript(JavaScript)、Ruby、Python等都属于动态语言。

脚本语言都属于动态语言,动态语言又都属于解释型语言。

2 主要高级语言介绍

(1)Java

诞生于1995年,是分布式服务开发的最佳选择之一;
Java作后端服务居多,包括网站后端、手机app后端,微信小程序后端、h5页面的后端等等。
Java也能够用来作安卓开发,不过如今Android发布了官方的开发语言kotlin,可能会造成相对汇集的生态圈。
Java开源框架超多,spring全家桶等;
游戏方面,《个人世界》就是用Java写的;
Java提供web插件,容许在浏览器中直接运行此类应用;
在大数据存储和应用方面,Java是必备语言,Hadoop也是基于Java进行开发的;

(2)C语言

诞生于1972年,最初构建目标是用来编写系统软件;
Linux操做系统就是用C语言开发的;
C语言不支持面向对象编程,也不具有运行时检查机制;但具备出色的可移植性;
通讯电子类的公司(华为、中兴等),开发相关的软件都是用的标准C语言;
嵌入式系统编程、单片机开发板都是用C语言来进行开发的;(直接接触底层,执行效率高)

(3)python

python诞生于1991年,自己是用C语言开发的;
用于数值分析与计算(金融系统分析、量化展现等);
在机器学习、人工智能、数据挖掘等领域应用普遍;
第三方开源库和工具繁花似锦,不用造轮子,调包很是方便;
python脚本能够用来分析系统效率、覆盖率、作数据可视化,以及爬虫
也能够用来作web的后端服务,开发小程序等,Flask、Django框架等都很是火热;

python是Google的官方语言之一,经常使用的软件中,Instagram、YouTube、Dropbox(媒体存储和处理方向)和spotify等后端都是用python开发的。

(4)C++

诞生于1983年,属于C语言的一个超集;
对C语言的扩充和延申,很是有设计感,容器、泛型编程、模板库、面向对象编程等元素的使用,使得C++很是具备表现力;
嵌入式编程、电信级软件、windows/Linux上的(ps、office、QQ、微信,基本都是c++开发的。Foxmail / Outlook 等各类邮件收发工具、Chrome浏览器、IDE visual studio、搜狗输入法等也都是由C++开发

C++可跨越所有设备实现移植,并受到Android、苹果、Windows phone以及黑莓四大移动平台支持;

(5)JavaScript

JavaScript诞生于1995年,属于客户端脚本语言;(JS代码被写入HTML页面中,客户端的用户经过内部JS请求某HTML页面时,该脚本会被发送至浏览器,并由(客户端的)浏览器决定下一步操做。)

代码在客户端执行,减轻了服务器端的压力,但这也意味着有时会被恶意活动所利用,从而带来安全隐患;
JavaScript在不一样的浏览器上有时会以不一样的方式进行解释,相比于提供稳定输出结果的服务器端,js脚本的可预测性较差。不过充分测试可避免此类问题。

也是典型的全栈语言,在先后端无处不在;
用户交互UI、动态页面生成,主要在前端大放异彩;
普遍应用到各类企业级开发,如Vue.js、React.js、Angular.js等框架;
也能够用来作后端服务器开发、高性能服务器编程等,其支持框架为大名鼎鼎的 Node.js,具备异步编程的特色;

(6)C#

诞生于2000年,语法很像Java,能够作web后端(ASP.NET)、桌面软件开发、Windows应用开发等;
经常使用的 stack overflow、印象笔记就是由C#开发的;
全面集成.net库,提供出色的功能与支持库访问能力,但也因为集成了.net库而不具有跨平台的能力;
在国内生态不太好,就业形势通常;

(7)PHP

诞生于1994年,超文本预处理器,是一种服务器端的脚本语言;
能够用来作后端的web服务,典型框架 ThinkPHP,以及如今比较流行的 Larvaral;
Facebook中就用到了PHP;
PHP拥有庞大而活跃的社区,易于上手,可以丰富支持html、js、css等语言,与各种数据库、文件系统的协做都很是顺畅;

(8)SQL

数据库查询语言,很简单,但必需要学;
经久不衰的话题是:如何对SQL语言进行优化;(社招常问)

(9)Objective-C、Swift

O-C诞生于1983年,是苹果IOS开发官方语言,用于构建 Mac OS、IOS;

(10)Go

由Google开发发布;
对在多处理器系统上的运行进行了特别的优化,听说编译后的运行速度能够媲美C++/C;
也拥有本身web后端开发的典型框架:Beego框架、Gin框架;
基于Go语言的博客框架:Hugo,能够用来搭建本身的我的博客;
Go语言在虚拟化技术方面应用十分普遍,大名鼎鼎的远程虚拟机工具Docker就是Go语言的典型做品;

(11)Groovy

隶属于Java系的脚本语言;能够理解为Java动态机制的一种补充,两者能够互相调用;
它也须要JDK的支持;
典型的应用:Jenkins 2.0的流水线 pipeline 脚本,只能用groovy来写;

(12)Kotlin

也须要JDK的支持,也和Java语言互通;
2017Google开发者大会官宣了kotlin为Android开发的官方语言;

(13)Lua

和python相似,也是用C语言实现的,很容易和C代码互相调用;
OpenResty = Nginx + Lua:这个项目就是 Lua 语言对 Nginx 服务器进行二次开发获得的,用于web后端服务器开发、游戏开发等;

(14)Julia

高性能动态科学计算语言;
支持很是多的数据类型,在科研中(尤为机器学习)用的很是多;

3 硬件编程

(1)Verilog、VHDL(用于FPGA编程的两种常见语言)

Field Programmable Gate Array,现场可编程逻辑门阵列

FPGA 芯片并不是单纯局限于研究以及设计芯片,而是针对较多领域产品都能借助特定芯片模型予以优化设计。从芯片器件的角度讲,FPGA 自己构成 了半定制电路中的典型集成电路,其中含有数字管理模块、内嵌式单元、输出单元以及输入单元等。

咱们的计算机中,CPU芯片处理器负责调度、计算,GPU用来图形加速显示等,上面布满了密集的电路元件,FPGA也是一种芯片,它在通讯领域用途较广,常规也用于图像、数据处理的一些算法辅助实现,如今比较火热的是用于深度学习加速

(2)DSP

TI公司的DSP用CCS开发平台,编程语言通常是C语言;来ADI公司的源DSP用VDSP++开发平台,通常也是用C语言。
这个我了解很少,只知道在咱们直观看不到的地方应用很是普遍,还有就是EDA技术那一套。有机会了解了再说。

参考连接:
https://blog.csdn.net/zdb292034/article/details/80732098
bilibili @ codesheep 高级语言介绍的部份内容由程序羊大哥的视频搬运而来
知乎 @ 周萌萌 部份内容参考来自四年前由周翻译过来的一个外国网站的统计图