个人网站:https://jonssonyan.com
今天和大家聊一聊那些编程语言值得学习,本文讲的东西一部分来自网络,一部分是我自己的理解,希望对你有些帮助。
封面图
第一门编程语言学什么?
如果你是一名刚入门的学生,大学通常都回上一门 C 语言课,无论是计算机专业,电子通信等理工科类专业都会学习作为基础入门语言,因为 C 语言是很多语言的母语言,很多语言都是借鉴的 C 语言,比如 C++,Java 都是 C 语言发展而来的高级语言,吸收了 C 语言的优点,并且在此基础上有新增了自己的特性。所以 C 语言作为入门级语言是毋庸置疑的,可以帮助你更快的学习其他语言。但是以后找工作只学习入门阶段的 C 是远远不够的。
哪些语言值得去学习
首先我们先看一张图
这张图是 Tiobe 在 2021 年 6 月份统计的编程语言流行度,评级基于全球熟练工程师、课程和第三方供应商的数量,谷歌、必应、雅虎、维基百科、亚马逊、YouTube 和百度等流行搜索引擎来计算评分。虽然以上不是每个语言都被广泛应用,但也从不同方面展现了当前时代语言的流行度。
Python
首先我们聊一下 Python(以下指的是 Python3),Python 是一门语法最为接近数学的语言,语法相比较其他语言确实简单,Python 的强大在于它的第三方包特别丰富,常被人调侃为调包工程师,它的缺点是运行比较慢,但是在当今硬件越来越便宜,而且说它慢是与其他语言比较,在人的角度是感觉不出来的,所以在不是注重性能的地方,使用 Python 开发 是可以考虑的。作者龟叔说要在将来给 Python 提速 1 倍,我们拭目以待吧。如今它在科学计算和人工智能领域应用广泛,像现在很多专业在研究生阶段都会去学习 Python,写论文的时候用 Python 整一套高大上的算法。其实 Python 在其他领域也有应用,比如 Python 在 Web 方向有大名鼎鼎的 Dingo 框架,也可以用来写脚本,最出名的就是 Python 爬虫了,爬虫领域比较出名的有 Scrapy 框架,所以 Python 也被人称为胶水语言。Python 语法简单,上手快,现在小学生都会 Python,你要是不学习一下都被小学生看不起。这几年 Python 被一群人炒的火热,很多人都慕名去学习,培训班也开设 Python 的课,有些学校也开设了人工智能大数据的相关专业,在这个浮躁的世界里,我们需要理想的看待这些事情,就我个人对大家学习的建议,我不建议用 Python 作为主语言,如果学历不错是可以的,毕业之后可以从事人工智能,算法方向,如果学历一般强烈不建议学习,但可以作为第二语言,写一些小工具还是很方便的,又或者你以后不打算从事 IT 行业也想学习一门编程语言,可以考虑 Python,我平时会用 Python 写写爬虫,嗯~真香。
Java
Java 说是一门编程语言,准确的说它是一个生态,有很多基于 Java 实现的框架,最为知名的就是 Spring 全家桶,企业级开发首选,Java 于 1995 年发布第一个版本,在 Java8 发布后大火了一把,从此奠定了一哥的位置。Java 原属于 Sun 公司,后来 Sun 被甲骨文收购,此后一直是甲骨文公司在持续维护。当初 Java 的口号是:一次编译,到处运行,原因是 Java 运行基于虚拟机,在任何装有虚拟机的地方,Java 都可以运行,正因为 Java 和底层中间有一个虚拟机所以运行速度会打一点折扣,刚出来时 Java 运行速度慢常被人吐槽,包括现在 Java 开发的程序也挺占内存的,不过在之后虚拟机这块做了优化,而且现在硬件越来越便宜,这个缺点都可以忽略。就目前而言,Java 在国内的招聘岗位是最多的,如果你是为了工作而学习编程语言,那么首选 Java,只要技术到位,找到一份满意的工作还是没问题的。Java 的应用领域主要是在后端,而在十年前 Java Web 很流行,没有前后端之分,Java 都可以做,这块可以单独写一篇文章讲一下,这里不再赘述。Java 在服务端表现较好,GUI 方向也可以做,Java GUI 做到极致的莫过于 Jetbrains 公司开发的 IDE。Java 主要应用于互联网行业和金融行业,像淘宝支付宝后端都是 Java,大部分银行的软件系统也都是 Java 开发的。如今有些人说 Java 不行了,而现在 Java 的现状恰恰发展的很好,一个语言是不是衰落在于它的社区有没有保持活力,国内阿里是推动 Java 生态的主力军,我目前所在的公司分布式框架就是用的 Spring Cloud Alibaba,而且 Java 亲爹是甲骨文,背后有亲爹的帮助,Java 现在以飞快地速度在更新,现在快要更新到 17 了。所以,作为第一门语言,推荐学习它。
C/C++
C 和 C++可以放在一起讲,很多人分不清 C、C++、C#的区别,C++是 C 语言的超集,C#是微软开发的用于和 Java 做竞争的语言。C/C++主要应用于嵌入式和算法,C++是语法比较难的,据说当初设计的时候,设计者是想提高入门的门槛。第一门语言我建议学习 Java 和 C++中的一种,学完后学习其他语言也会比较轻松,C/C++的优点想必大家都知道的,就是运行快,性能之王,很多时候高性能的模块一般都是使用 C++写,另外 C++可以做算法(标准库很强大)、计算机视觉(OpenCV)以及桌面开发(QT)。C++可以作为备选,如果可以选择其他语言,最后考虑 C++,因为 C++新手写的程序 bug 比较多,如果你对 C++不是很熟悉,这会导致很容易在代码里埋雷,而且 C++底层代码非常晦涩,不像其他语言,点开源码基本就知道了底层的逻辑。
C sharp
亲爹是微软,发布比 Java 晚几年,但就晚这几年,现在市场占有率远不及 Java,光看语言本身 C#语法特性很多。C#对标 Java,.Net 对标 JVM,和 Java 一样,C#基于.Net 平台,但是它运行速度还行,原因是.Net 平台随系统启动而启动。学习过.Net 的小伙伴都知道安装好.Net 之后都要重启一下电脑。如果以后会到微软或者微软辐射到的公司可以考虑学习 C#,或者如果你对游戏开发和桌面开发感兴趣,也可以选择学习C#。
PHP
PHP 是世界上最好的语言(狗头保命),这是一个梗,这是在一次 PHP 版本更新的时候,PHP 开发者所说的一句话。PHP 前些年很火,有一年成为了 Tiobe 年度编程语言,但是近几年每况愈下,原因是 PHP 只能用于开发 Web,太容易被替代了。PHP 作为弱类型语言,不太适合开发复杂的系统。PHP 相应的优点就是快速开发,开发速度比 C++,Java 快得多,目前 IDC 厂商的虚拟主机都支持 PHP 环境。个人建议也可以作为第二语言。
JavaScrpit
如果从事Web相关的工作JavaScrpit(以下简称 JS)必学,前端开发最主要的语言,没得选,TypeScript 是 JS 的超集(其实TS最终也是编译成JS运行的),当时是因为 JS 对于开发复杂系统很鸡肋,急需一种强类型的语法的编程语言,这就诞生了 TypeScript,TS 亲爹是微软。有人会问 JS 和 Java 的区别,我打个比方它两就是雷锋和雷峰塔的区别,啥关系没有,有一种说法是 JS 为了蹭 Java 的热点,毕竟当时 Java 非常火。说到JS了就要说到前端,前端三大框架Angular、React、Vue,全部基于JS/TS,以前可能说JS是前端语言,但是Node的出现让JS可以应用于服务端,从此JS便是一门全栈语言。如果从事Web方向,JS必学。
Golang
Golang简称Go,一开始是谷歌自己用的语言,后来在2009年开源,这个语言来头不小,背后有大公司撑腰,开发Go的三个人也都是大佬级别的人物,罗伯特·格瑞史莫(曾开发过V8 JavaScript引擎和Java HotSpot虚拟机),罗勃·派克(曾开发过Plan 9操作系统,他与肯·汤普逊共同开发了UTF-8)及肯·汤普逊(Unix操作系统的发明人,C语言发明人之一)。Go语言有着媲美C++的运行速度,又有着敏捷的开发速度,语法优美,而且方便部署,编译好的二进制文件可以直接在服务器上运行,不需要安装Go语言环境。就我目前使用情况看,Go语言有几处不足,首先异常处理不是很友好,随时随地的判断err!=nil,第二,不支持泛型,据说Go会在2.0版本会支持泛型。Go适合做云计算和网络编程(自带net包很强大),同时它也可以做后端开发(Gin&Beego),也可以做容器开发(Docker)目前Go的生态在国内不是很好(Go语言官网在国内是被屏蔽的),肯定比不了了Java的地位,但是随着时间流逝,Go语言终究会在某一天惊艳所有人,腾讯字节主C/C++,据说正在转Go。
Rust
Rust最擅长系统开发,专注于安全,尤其是并发安全,语法和C++类似,运行速度也媲美C++。
Kotlin
JetBrains开发,擅长安卓开发,原本安卓开发使用的是Java,后来甲骨文和谷歌有版权纠纷打过很多官司,谷歌就把安卓开发的首选语言编程了Kotlin,它也是基于JVM的语言。
SQL
Tiobe上榜的还有SQL,全称结构化查询语言,后端开发必学,数据开发,数据分析必学,虽然在不同的数据库语言略微有些差异,但是换汤不换药。
总结
编程语言只是一个工具,语言之间没有谁好谁坏,只有擅长不擅长,我们需要锻炼的是自己的学习能力,假如某天一个编程语言要被淘汰了,我们可以扔掉换另一门语言就行了,语言之间都是互通的,你会一门语言学习其他语言也会很快。程序员最好接触和使用最好是3-4门语言,这样你就可以理解它们之间的差异,2周上手一门编程语言是一个程序员的基本素养。最后我列一张表来说明每个编程语言适合的领域:
硬件相关: 汇编,C/C++
操作系统: 汇编,C/C+,Rust
安卓开发: Java,Kotlin,C++
IOS开发: Object-C,Swift,C++
移动端跨平台: Dart(Flutter),JS(uni-app&React Native)
桌面应用开发: JS(Electron),C#(MFC),C++(QT),Java
服务端开发: Java,Go,C++,Python,PHP,JS(Node)
前端: JavaScript
游戏开发: C#,C++,Java
人工智能: Python,Java,C++
大数据: Python,Java,Scala
计算机视觉: C++,Python