一旦做出了将来到底做前端还是后端的选择,并且从你的第一门编程语言中获得了坚固的基础知识和编程原则,现在或许是时候考虑开疆扩土了。下图中的表格显示各个编程语言的开发者平均薪资水平。
当你开始选择第二门语言该学什么时,最好的方式就是选一个能挑战你现有编程知识与思维的语言。比方说,你之前一直在使用函数式编程思想,现在可以考虑试试面向对象原理的语言,反之亦然。这样不仅的扩展你的技能书,还能让你未来更轻松地融入不同的团队。尤其对于刚入行不久的职业开发者来说,在寻找自己的专业重心时务必多多涉猎。
请务必记住,某些编程语言更适合解决某种特定类型的问题,因此在考虑难度与挑战性时,我们也应该考虑到每种语言的具体用例。
基于上述几点,并以我们在文章上一次推送中提到的四种语言(
Python
,
Java
,
C++
,
JavaScript
)为基础,下面是一些值得大家研究的语言。
对Java开发者,Scala颇具挑战性。Scala被设计的初衷就是要“成为更好的Java”,它将函数式编程和面向对象编程共同整合到了一个简洁的包中,让你可以自由选择编程风格。
对Python开发者,C++是一个不错的选择。作为一门高级语言,Python向用户隐藏了很多基本操作,但在你职业生涯中的任何阶段C++都值得你学习。掌握了C++,你能更好地理解“编程”到底是如何实现的以及计算机到底是如何工作的。
对C++开发者,你应该研究一下Rust或者Go。C++的一个常见陷阱就是对内存管理与并发的处理方式。Rust和Go这类语言使用了不同的内存管理模型,使创建安全的并发程序变得更加容易。
为什么Scala和Go开发的平均工资这么高?随着Scala的重大改进,很多企业开始留意并使用它来构建可扩展的程序。Scala通常还被用于企业环境中,因此这也解释了它平均起薪高的原因。
Go语言仍是一门相对较新的语言,但它具有一些很棒的功能,并且精通它的人也还不多,尤其对于企业来说,Go开发者的缺口很大。Go非常适合使用微服务架构的现代化开发与程序。
对JavaScript开发者,不消说你应该学习HTML和CSS,但除此之外你也应该花些时间在一些库和框架上,比如React.js,Angular.js,Node.js或Vue.js等。
无论接下来你想学习哪一门语言,对自己的职业道路有清晰的认知。如果你是一个C++程序员,钻研HTML可能并不能让你出类拔萃(
虽然从长远来看也不是一件坏事
),因为它们的用途完全不一样。
前端开发中的框架与库
没有了这些丰富的库和框架,JS不会发展到今天的程度。下图中显示的是专攻如下领域的开发者的薪资水平。在这个部分中,我们仅讨论专做JS开发的人,在JS的基础上加上相应的框架技能能为他们的职业发展带来什么优势:
StackOverflow的年开发者调查显示,JQuery,React.js和Angular.js是最受欢迎的库和框架。他们在专业化开发中被大量使用。虽然它们相互间有一些相似之处,但其核心是完全不同的,它们的用例也在不同的领域,解决着不同的问题。JQuery在开发者社区中可能是最流行的,但就现代化的前端开发而言,它的相关性越来越差。
值得注意的是,技能中包含JS和JQuery的开发者薪资比只做JS的还要低。虽然实际生活中,你并不会因为懂JQuery就被降工资,但这足够说明现代企业对JQuery的兴趣越来越小——或者至少企业不愿意在JQuery开发上有过多金钱投入。
如果你对全栈开发感兴趣,应该考虑投入一些时间学习Node.js这种时下流行的JS运行时。上面所提到的流行的库与框架都是被运用在客户端上的,但Node.js是用在服务器端的。Node.js与上面的其中一个框架结合起来,就是你构建一个web应用前端与后端的最佳组合。
最后,在框架的选择上应该结合自己的具体需求,以及使用习惯。但一言以蔽之,作为一个JS开发者,上面的技术将不仅能扩展你的技能书,提升你的开发水平,也务必可以为你带来一些物质上的回报。
扩展你的技能
目前市面上有大量的库,框架与工具,但不是每一个都适合所有人,因此合理分配自己的时间。下面是几个可能对你的收入带来较大影响的技术,此部分中我们对比的是基础的开发者与这类开发者学会这些工具之后的收入:
这里有趣的一点是,当你的技能组合中含有Ansible和.NET时,工资会“减少”——和前一部分相同,学会它们并不会使你工资下降,但这也说明企业对Ansible和.NET的兴趣逐渐下降了。
Kubernetes和Docker席卷全球,掌握这两项技术的人供不应求,并且需求还会持续增长。如果你想学习一种新工具,不妨参考一下这个趋势,它至少不会是坏的时间投资。
作为一名Python程序员,如果你对机器学习感兴趣,不妨看看TensorFlow和Pandas。
找到适合自己的数据库管理系统
数据库系统数量繁多,其中一些是基于SQL的,一些是基于NoSQL的。两者同时使用的案例很罕见,因此我建议大家花时间把两种都学习一下。不过,NoSQL数据库比如Redis和MongoDB是我会建议给开发者的DBMS。
如果你想专注于一个方向,那么首先应该决定你想如何组织你的数据。你是想要使用关系型的数据库(比如SQL)还是非关系型(比如NoSQL)?从这个角度,最好再理一理每种DBMS的利弊,比如说很多开发者都选择MongoDB,因为它的数据储存方式和JSON对象类似。
虽然MongoDB看上去似乎是最受欢迎DBMS,但我们也可以看到对专用Redis数据库的开发者的需求。
如果不确定要选择哪个数据库,请查看下图以便快速了解SQL和NoSQL数据库。
云端开发
对紧跟时代脚步的开发者而言,云端业已是当务之急。在你的职业生涯中,你需要适应至少在一个云平台上构建和部署软件的方式。如果拿基础开发者来说,从下图中我们就能看到熟悉亚马逊AWS和微软Azure平台的开发者需求比较高。
至于谷歌家的GCP平台,由于用户数量还不足以匹敌其它家,暂时没有合适的数据。
移动开发:安卓还是iOS?
说到移动开发,你是想专注于安卓系统还是iOS呢?如果是安卓,最常见的编开发语言是Java;如果是iOS则是Objective-C。尽管下面的细分显示iOS开发人员的收入通常要高一些,但安卓正在迅速成为移动开发者们的首选平台。StackOverflow的调研报告也显示安卓是使用最多的操作系统。
总结
在这里值得重申的是,薪资对于开发者而言并不一定是最重要的事,并且它将永远应该是在你决定自己志向时的次要决定因素。不过如果你准备投资一些时间学点东西,那么了解了解从这个投资中能够获得什么样的回报会很有用。