各种编程语言的适用范围

自1956年第一门高级语言Fortran诞生至今,历史上出现过的各类计算机编程语言总和已超过1500种,但今天还流行的并不多。相当一部分人在初学编程时都会问:我该学什么语言?

我认为:某种程度上,语言没有明显优劣,只有适合还是不适合,擅长与否。有的语言就是要比其他语言更适合某个领域,更能作出产品来。本文主要梳理一些类语言工具和TIOBE榜上一部分语言的适用场景,希望能成为一份粗略的编程语言选择指南。(排名没有先后)

类语言工具

下面四个不算编程语言,但又有些类似高级语言的用法,是非常好的工具。

Tex
(1) 高德纳开发,排版工具,追求高质量必不可少,漂亮的ConTeXt也很好。
(2) 适用于书籍,报刊,杂志,论文,报告等等文档的排版。
(3) 详细内容请看另一篇博文Tex排版系统及其衍生系列产品的简介

Awk
(1) Unix/Linux系统工具,字节流数据处理,按列处理数据

Sed
(1) Unix/Linux系统工具,字节流数据处理,按行处理数据

Grep
(1) Unix/Linux系统工具,文档搜索,以文档为单位

TIOBE Index收录编程语言的适用范围

下面是其中的44种语言。

Assembly
(1) 木马,病毒
(2) 底层,硬件控制
(3) 优点:快,能控制底层;缺点:学习难度大,不直观

C
(1) 木马,病毒
(2) 编译器,调试器
(3) 工程控制领域,机器人
(4) 驱动程序,航空飞行器
(5) 类Unix操作系统,嵌入式
(6) 交换机,路由器,防火墙
(7) 优点:快,能控制底层;缺点:学习难度大,内存泄漏

C++
(1) 木马,病毒
(2) 编译器,调试器
(3) 游戏引擎,服务器
(4) 数据库,安全协议
(5) 图像处理,虚拟现实
(6) 图形用户界面,网络
(7) 科学计算,人工智能
(8) 音视频处理,压缩技术
(9) 优点:面向对象,可扩展;缺点:学习难度极大,内存泄漏

Rust
(1) 系统,网络
(2) 游戏,嵌入式
(3) Web开发,桌面GUI
(4) 优点:安全;缺点:学习难度大

Go
(1) 服务器,数据库,容器
(2) 分布式大型系统,云平台
(3) 优点:并发,分布式,Web时代的C;缺点:括号不能换行,缺少库

Dart
(1) 物联网
(2) Web,服务器
(3) 优点:移动开发,Fuchsia系统钦定语言;缺点:运行时环境大

Java
(1) 大数据和科学应用
(2) 桌面应用,Web应用
(3) 软件工具,交易程序
(4) 企业级应用,安卓应用
(5) 优点:跨平台可移植,高性能;缺点:复杂臃肿

Python
(1) 木马,病毒
(2) 大数据,云计算
(3) 量化金融,运维
(5) 图像,音视频处理
(4) 科学计算,Web开发
(6) 网络爬虫,人工智能
(7) 优点:简单易学,各种库多,缺点:速度慢,老是重构

JavaScript
(1) 网站前端,Web应用
(2) 网站后端,浏览器插件
(3) 前后端(Node.js/Deno)
(4) 优点:功能强大,简单;缺点:依赖浏览器

WebAssembly
(1) 浏览器使用
(2) 优点:高性能,支持多种语言;缺点:类型检验严格

TypeScript
(1) 应用级的JavaScript开发语言
(2) 优点:支持js,兼容第三方库;缺点:学习有难度

HTML
(1) 网页生成
(2) 电子书制作
(3) 优点:跨平台;缺点:浏览器兼容麻烦

Kotlin
(1) 安卓官方开发语言
(2) 优点:兼容Java,节省代码;缺点:编译慢

Swift
(1) IOS及OS X开发
(2) 优点:安全,快;缺点:版本不稳定

Objective-C
(1) IOS平台软件开发
(2) 优点:库丰富;缺点:不支持重载,多重继承

PHP
(1) 网站开发,电子商务
(2) Web应用,企业级应用
(3) 微信开发,客户端界面
(4) 优点:上手快,框架成熟;缺点:慢,应用单一

Shell
(1) 类Unix系统中,自动化脚本
(2) 优点:简单,高效;缺点:IO性能,效率不高

PowerShell
(1) 自动化脚本,可调用.Net和COM对象
(2) 优点:功能强大;缺点:不兼容老版

Ruby
(1) Web开发
(2) 优点:简单,正则;缺点:慢

Perl
(1) Unix系统维护,CGI脚本
(2) 邮件文本处理和FTP自动化
(3) 数据库通信,Web站点维护自动化
(4) 优点:简单,正则;缺点:写大程序很麻烦

R
(1) 自动化报告
(2) 生物医学领域
(3) 数据挖掘,统计分析
(4) 优点:简单,本身小;缺点:大文件处理差

Julia
(1) 科学计算,数据处理,仿真
(2) 优点:支持python库和R库;缺点:启动需预热

Lua
(1) 游戏脚本,内嵌脚本
(2) 优点:小,快;缺点:重复造轮子,nil值问题

MATLAB
(1) 人工智能
(2) 数值计算,仿真模拟
(3) 优点:矩阵,仿真强;缺点:慢,软件太大

Fortran
(1) 科学研究,物理
(2) 优点:快;缺点:太老,生态不好

SQL
(1) 数据库
(2) 优点:安全;缺点:慢,可移植性差

C#
(1) Windows桌面应用,Web应用
(2) 优点:分布式,面向对象;缺点:复杂

Visual Basic
(1) 木马,病毒
(2) 可视化程序设计
(3) 优点:小;缺点:无继承

COBOL
(1) 银行,保险,金融
(2) 优点:数据处理高效;缺点:老

Delphi
(1) 木马,病毒
(2) 桌面开发,数据库开发
(3) Web服务,游戏控制软件
(4) 优点:简单,控件丰富;缺点:死了

Pascal
(1) 编程竞赛,算法研究
(2) 优点:语法严谨;缺点:语法严谨

D
(1) Web开发
(2) 优点:效率高,和C/C++交互容易;缺点:缺乏企业支持

Scala
(1) 大数据,Web服务
(2) 优点:生态丰富,扩展性强;缺点:学习曲线陡峭

Clojure
(1) 游戏后端
(2) 自动化测试,黑盒测试
(3) 优点:简单,实用;缺点:要懂Java

Groovy
(1) Java的替代品
(3) 优点:比Java灵活;缺点:性能损失

Lisp
(1) 人工智能
(2) 优点:符号推演;缺点:能教学用

Scheme
(1) 科学计算
(2) 优点:简单,移植性好,理解语言本质

Haskell
(1) 函数式编程
(2) 优点:惰性求值;缺点:复杂

Prolog
(1) 不用于开发软件
(2) 逻辑编程,用于挖掘关系
(3) 优点:培养逻辑;缺点:慢

Erlang
(1) 游戏网页,高并发
(2) 优点:灵活;缺点:数据抽象弱

PostScript
(1) 印刷机,打印机使用
(2) 优点:设备无关;缺点:贵

Scratch
(1) 儿童编程语言
(2) 优点:简单;缺点:简单

VHDL
(1) 电路设计

LabVIEW
(1) 图形化编程语言,产生框图程序
(2) 测量,控制系统,快速工程化实践

结语

一般人用得到的语言估计就这些,每门语言的适用领域不一定写全了,但是大体不会错。个人感觉 Go,Rust,WebAssembly,Dart在未来可能会火起来。

更多推荐

各种编程语言的适用范围