全世界的编程语言有 600 多种,TIOBE 统计的有 100 种,参与排名的有 50 种,前 20 种是常用的,它们目前正在流行,或者曾经非常流行。
图1:2021 年 10 月份编程语言排名 TOP 20TIOBE 是全球最著名的编程语言排行榜,它根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎、Wikipedia、Amazon、YouTube 等统计出排名数据。TIOBE 只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
TIOBE 排行榜每月更新一次,你可以转到 https://www.tiobe.com/tiobe-index/ 查看编程语言的最新排名。
我一直在负责C语言中文网的一对一答疑工作,有很多同学问我,该如何从这么多编程语言中选择一门适合自己的呢?选择标准又是什么呢?很早我就想写一篇文章来回答这个问题了,现在终于如愿以偿了。
要想选择编程语言,首先得确定开发方向,比如网站开发、APP 开发、机器学习、大数据、嵌入式、GUI 软件、算法设计等。编程语言不是万能的,一门编程语言只能胜任一个或者几个开发方向,一个开发方向往往也有多种编程语言可以选择。
我们首先谈一下开发方向的选择,然后再说编程语言的选择。
1. 选择开发方向
选择大于努力,只有切入一个适合自己的开发方向,才能持续进步。关于开发方向,我有以下两个选择标准。
1) 兴趣
学习编程是一个非常枯燥的过程,内容多,时间长,成本高,就算参加全职培训班,至少也得学习半年才能入门,做出一点小玩意来。要想成为别人眼中的大神,或者编程专家,没有三五年的功夫肯定是不行的。
学习编程的过程是比较艰苦的,没有兴趣很难硬抗下来,即使报名了培训班也学不会,所以,我们首先要选择自己感兴趣的一个开发方向,这样不但能快速学习,以后还能持续进步。
比如我就对网站感兴趣,高中阶段我就想开发一个属于自己的网站,感觉非常炫酷,所以大学我毫不犹豫地选择了网站开发这个方向。我在选择开发方向的时候没有任何纠结,我知道自己必须选择网站开发。
我的大学专业是电子信息工程,跟软件开发几乎没有关系,所以网站开发完全是我自学的,我也是凭借兴趣坚持下来的,一直到现在我还在运营C语言中文网,把兴趣变成了职业。
兴趣是最好的老师,没有之一。遗憾的是,对某个事物有强烈兴趣的人很少,大部分人都是被动选择。
此处我说的兴趣,是指别人无法撼动的热爱,是工作之余让你放松的事情。如果你只是有过某种想法,别人告诉你这个想法不靠谱,你就放弃了,这顶多是一时的鸡血。
2) 未来发展
如果你学习编程不是因为兴趣,只是想选择一份职业,那我希望你切入一个有发展潜力的开发方向。
每个产业的发展规律都是类似的,都要经历以下几个周期:
拓荒期 -> 发展期 -> 成熟期 -> 衰落期
我希望你在发展期切入一个产业,然后持续努力和积累,让产业的发展带着你起飞。站在风口上,猪都能飞起来。
你应该听说过很多没啥背景的人,突然之间一夜暴富了,惹得别人羡慕嫉妒恨吧,这些人,大都是在一个爆发式增长的行业里面翻了身,比如十年前的包工头、持续火热的程序员。
注意,最好不要在拓荒期切入一个产业,你很有可能坚持不到曙光到来之时就已经转行或者年老色衰了,成为了别人谈笑中的“烈士”。
对于软件开发产业来说,GUI 桌面软件已经是过去式了,APP 和网站也已经进入成熟期,我推荐机器学习(人工智能)和大数据两个方向,它们都是国家重点扶植的细分产业,而且写入了十四五规划,未来至少还有十年的发展时间。
机器学习需要大数据提供原料,反过来,大数据分析也依赖机器学习模型,它们是相辅相成的,很难隔离开。
以上是我基于 10 年的编程经验和 7 年的创业过程给出的建议,如果你觉得不对,就当做耳旁风吧,毕竟我也才三十出头,阅历还不是很丰富,难免有偏颇。
另外,选择产业方向也是有风险的,也是一次命运****博,谁也不能确定这个产业能不能发展起来,就算发展起来,又需要多少年呢?又有多大的产值呢?
比如人们一直谈论的人工智能已经发展了几十年了,到现在还是“人工智障”,底层理论并没有本质的突破。虽然国家把人工智能选为重点产业,注入了海量资金和人才,各家大公司也跟风进入,但是底层理论如果不突破,十年以后没准还是智障,只不过应用场景多了。谁也不能穿越到未来,谁也不能告诉你确定的答案。
就算一个国家,也会点错科技树,比如:
美国认为自己无人能敌,发展了朱姆沃尔特级驱逐舰,打算近岸攻击,想不到中国突然崛起,海军开始下饺子,美国不得不转为远洋作战,废掉朱姆沃尔特级。
日本押宝混动汽车和氢能汽车,积累了大量专利,但是中国却切换了赛道,倾力发展纯电动汽车,并且积累了一定的优势,日本想逆袭非常困难,汽车产业岌岌可危。
在产业发展过程中,会有很多不确定因素,我们只能尽力选择一个有前景的产业。
其实吧,很多“暴发户”也不懂得什么产业发展规律,他们只是阴差阳错地进入了某个产业,恰好赶上产业崛起而已。我自己当初也不懂互联网,只是对网站感兴趣,就进入了互联网产业,抓住了 PC 互联网的尾巴,所有才比其他行业的同学混得好点。
也就是说,我混的好,不是因为我足够优秀,而是因为我进入了互联网产业,搭上了产业的便车,我只是比我的同学更加幸运而已。
2. 选择编程语言
确定了开发方向,接下来就可以选择编程语言了。有的开发方向比较纯粹,只有一两种编程语言,有的开发方向鱼龙混杂,有五六种编程语言,选择编程语言也是一个让人纠结的过程。
以下是部分开发方向可以选择的编程语言:
1) GUI 桌面软件
能开发 GUI 软件的编程语言众多,既有传统的 C++、C#、VB、Delphi、Java,也有新晋选手 Python、Node.js(JavaScript),还有小众的易语言(中文编程语言)。
如果你只是想玩玩,那么你随意,适合自己的就行,其中 Python 上手比较简单。
如果你想找一份工作,建议学习 C++ 或者 C#。C# 虽然比 C++ 简单一点,但是它只适用于 Windows 平台;而 C++ 是一种通用语言,它可以应用于 Windows、Linux 以及嵌入式平台,就业选择较多。
2) 网站开发
网站开发分为前端和后台,前端就是用户在浏览器中看到的界面,后台就是放在服务器上的程序。
前端开发需要学习 HTML、CSS 和 JavaScript,没得选,而且必须都学习。
后台发开语言则多如牛毛,有走进坟墓的 ASP、Ruby on Rails,也有常用的 PHP、Java(JSP)、C#(ASP.NET),还有新晋选手 Python、Node.js(JavaScript)、Go 语言。
如果你想自己玩玩或者创业,建议选择 PHP,上手非常简单。我使用的也是 PHP,因为当时学不会 ASP.NET 和 JSP,所以选择了简单的 PHP。
如果你想找一份工作,那么已经走近坟墓的 ASP、Ruby on Rails 就不要选了,没人用了。C# 也不要选了,只适用于 Windows 平台,而大量的服务器都是 Linux。Python 也不要选,实际应用场景不多。Go 语言主要用作 Web 底层开发,而不是应用层开发。
剩下的 PHP、Java、Node.js 你自己看着办吧,没法说哪种语言一定有优势,它们只是适用于不同的场景。
值得一提的是,这里我们将 Node.js 和 JavaScript 看做是等价的,如果你选择了 JavaScript,那么你既能开发网站前端,也能开发网站后台,就不用学习多种编程语言了。
3) APP 开发
这个开发方向比较简单,Android APP 开发使用 Java 或者 Kotlin,iOS APP 开发使用 Objective-C 或者 Swift。
每种操作系统都有两种编程语言,一种是传统的,一种是新晋的,选择好了操作系统,把两种语言都学了吧。
4) 嵌入式开发
一般使用汇编、C语言和 C++,近年来也有开发板支持 JavaScript 和 Python。
自己玩的话,可以选择 Python,上手简单。
想找工作的话,还是走传统路线吧,把汇编、C语言和 C++ 都学了吧。
只有那些有 Web 开发基础的程序员才会选择 JavaScript。
5) 机器学习
这是一个比较综合的开发方向,初学者一般从 Python、MATLAB 开始搭建模型,实际工程应用中可能需要使用 C++、Java 等其它语言去实现。
Python 是必学的,MATLAB 最好也要掌握,C++ 和 Java 视情况而定。
6) 大数据
这也是一个比较综合的开发方向,相关语言有 Python、R语言、Java、Scala。把 Python 和R语言学习一下,剩下的看情况吧。
由于我的能力所限,我无法对所有开发方向做深入的分析,有说的不到位的地方,请大家留言,或者在公众号聊天框中反馈给我。
以上说的仅仅是编程语言,除了编程语言,大家还需要学习某些框架或者库,比如:
Java 网站开发需要掌握 Servlet、JSP 技术,以及 Spring、Spring MVC、Spring Boot、Spring Cloud、Mybatis、Hibernate 框架;
Python 机器学习需要掌握 PyTorch、TensorFlow、Caffe 等框架,以及 sklearn、NumPy 等模块。
除了编程语言和框架/库,你当然还要掌握一两种数据库,常用的有 MySQL、Oracle、MongoDB、Redis、Sqlite 等,这里不再展开讨论。
总结
软件开发是一个大产业,其中有很多细分方向,每个方向使用的技术栈都不一样,而且要经过长期学习才能掌握,所以大部分程序员都只擅长某个开发方向,那些多面手,要么是学艺不精,要么是技术大咖。
人们之所以迷茫,就是不知道如何选择,这篇文章虽然不一定能让你做出最终的决定,但是可以给你一种不同的视角和标准,帮助你打开思路。