最近,几个找我咨询的小伙伴,都问到一个问题:刚毕业或想转行做程序员,应该学什么开发语言?
这不是一个能够直接回答的问题。如果我胡乱推荐一个语言,对初学者是不负责任的。
如果从兴趣的角度出发,学哪一门语言随你喜欢就好,但很多人其实时间、精力非常有限,那么,学习就要带着目的性,咱们学习一门语言说白了不就是为了谋生嘛,做出选择之前,就要清楚知道每一门语言的应用场景和就业市场前景。
本文不对语言本身的优劣作评价,那是华山论剑,各自门派间的斗争,咱们只从自身利益出发,作出最优的选择。
01应用场景
硬件、嵌入式、操作系统及底层、LinuxC:
无论是纯硬件还是底层软件开发,C/C++都是最优的选择。典型的应用场景有:单片机、传感器、操作系统、数据库、编译器......凡是底层相关,或是需要极限性能的软件,C/C++都是首选。
当然比C更加底层的还有汇编语言(Assemblylanguage),但是这门语言晦涩难懂,不是一般人能够驾驭得了。
图形处理、游戏:
图形和游戏渲染其实属于内容密集型,需要强有力的硬件运算支持,当你需要直接访问硬件获得最大处理能力时,C++是不二选择。
游戏逻辑则更多使用Lua。
移动端(APP):
iOS原生使用Objective-C、Swift,安卓原生使用Java、Kotlin,Hybrid混合开发使用JavaScript或Flutter(Dart语言)。
如果涉及底层调用,还会用到C/C++。
前端:
包括PC网页、H5等一切与浏览器相关的可见页面,JavaScript是必学的,至于Typescript和Coffeescript,都是JS的变种和延伸。
后端:
通常是指运行在服务器上,与前端或APP对应的功能业务逻辑部分。我们常说的CRUD其实就是这一块了。
这里可选的语言非常多:Java、PHP、Golang、Python、C#(Asp.Net)、RubyonRails......
爬虫:
许多语言都能做爬虫,但经久不衰的只有Python。
桌面应用:
Windows平台首选C#,毕竟是C#开发出来的语言。
MacOS首选Objective-C或Swift,Swift就是苹果的自家语言,和C#一个道理。
如果需要跨平台,最好的选择是C++和Java。
大数据:
首选Java或Scala,因为众多大数据框架都是由这两门语言开发出来的。
AI人工智能:
AI把Python带到史无前例的地位,算法底层实现靠的是C++。
命令行程序:
通常是指运行在Linux环境下的命令行程序,常用的有Shell、Python、Perl、Ruby等。
另外结合自动化运维,使用较多的是Python
02就业市场前景
通过TIOBE编程语言排行榜,我们去了解一门语言的流行趋势和热度。虽然这是一个全球化的排行榜,不能完全作为在中国就业开发语言方向的选择依据,但我们还是能根据其在结合就业市场的判断去做出一个合适的选择。
C语言作为开发语言的老大,地位毋庸置疑,特别最近几年物联网和机器人的兴起,给了嵌入式工程师很多的机会,如果你想抓一把这风口,C语言在就业选择上是不错的选择。当然,这也是一门非常看重内功的语言,短时间内想要学精通且获得不错的就业机会是不大可能的,但如果能沉下心来不断修炼,前途无可量。
Java自诞生以来,凭借其跨平台移植性和逐渐发展起来的强大生态圈,企业级应用后端必选,银行、国企甚至许多其它企业首选语言,更是阿里巴巴的看家语言,是最多企业选择使用的一门开发语言,也是拥有最庞大程序员群体选择的语言。想要进入阿里,Java可以说是必学。就业岗位多,但同时竞争也大,非常卷,要学习的技术栈也是非常广而深,对于一个刚毕业的小年轻,要正面刚赢写了10几年Java的大叔,获得不错的薪资,恐怕得下不少的功夫。
Python可以说是完全由人工智能带火的语言。在人工智能之前,Python是著名的胶水语言、万能胶,后端领域曾经也是其风靡的领域,毕竟像Instagram、知乎、豆瓣等知名平台都是用Python开发。
Python底层有各种丰富的使用C/C++开发的类库,加上简洁易懂的语法是其受欢迎的最大原因。但我想说的是,你学了Python,不代表你就会玩人工智能了。相反,是懂了人工智能,才需要用Python快速编写开发程序去验证算法的可行性。说白了,这是一门给算法工程师、数据科学家用的工具。算法才是AI的核心,语言只不过把算法应用落地。所以,如果你是冲着人工智能去学这一门语言,我建议你还是先去学习算法,本末不能倒置。
C++与C语言一样伟大而强大,学习曲线前期平缓,后期增益较大。市场对这门语言的需求一直都有,尤其游戏行业。腾讯、网易这样的游戏大厂,有大量C++岗位可供选择。虽然游戏开发并非只有C++能干,小游戏也能用JS或Python开发,但正统永远是C++,毕竟能兼顾界面和性能的也就只有C++了。
C#前些年曾经能够叫板Java,微软曾希望通过Asp.Net撼动Java在web领域的龙头地位。但微软一心只想在Windows平台生态做大,C#的多平台兼容性做得非常糟糕,无论是桌面应用还是web应用,都仅限运行在Windows平台上,随着移动互联网的火热,多平台共同发展成为了常态,导致越来越少开发者专门使用C#去开发Windows平台的应用。
VisualBasic同样是微软的产物,曾经也是风靡一时的最流行编程语言之一,但处境和C#几乎一致,其应用场景比C#更少,目前剩下的应用场景,就只是Windows下的可视化应用开发了。
JavaScript,这玩意儿和Java没半毛钱关系,只是名字长的像而已,大家千万别把两者搞混了。前端当之无愧的老大,浏览器唯一能解析的语言。如果你想做前端开发,JS就是不二之选。当然有大量需求的地方,也就有大量竞争,加上前端框架层出不穷,更新迭代较快,技术栈相对没那么固定,再往移动端渗透的话,要学的东西就更多了。
PHP曾经和Java一样争夺web领域的头把椅子,生态也相对完善成熟,应用从0到1开发速度相对较快,所以依然是许多中小企业快速开荒的首选语言。虽然在web领域仍占有一定席位,但没落已经是肉眼可见的趋势了,究其原因,PHP是动态脚本语言、内存不常驻、并发性能差等特点使得用PHP开发的应用注定只能小而美,不能大而全。如果你只想在十八线小县城混,学习PHP还能有一定市场,如果在大城市,机会不多了。但话又说回来,有多少企业的应用能做到像BAT或银行国企一样大呢?最关键一点,PHP程序员比Java的便宜。
SQL从严格意义上不算一门编程语言,因为它仅仅是与数据库打交道,语言内部更是缺乏完整的逻辑体系。但你能不学吗?但凡与数据库有交互,你都得学SQL。
Go语言出身豪门,背景无比光亮,不仅有谷歌作背书,更是搭上了云原生这架快速发展的飞机。「在性能与开发速度上作出平衡」看似蹩脚,实际上,作为C++的替补,虽然牺牲了一点点性能,但开发和编译速度却杠杠的,牺牲的性能和换来的速度对于企业高速发展至关重要,毕竟性能已经不是首要考虑因素,而开发速度的提升换来了对市场的快速响应适配。除此以外,Go在web领域的生态也逐步完善,许多上文提到使用Python开发的平台均纷纷转向了Go阵营。从就业市场前景来看,是一片光明,在Java赛道上干不过对手,咱们就换到Go的赛道,也能快速达到Java的薪酬水平。从Go出来的Docker、k8s、istio未来一片光明,目前,许多大厂都已经在布局云原生了,对应的岗位也是需求很大。新进的选手不妨来个蓝海打击。
最后,祝大家挑选好合适的赛道,向钱冲!