2018年最适合学习的十大最佳编程语言

在近期的一次访谈中,库克反复强调了学习编程的重要性。学会编程不仅是为了适应现在的就业市场,从长远来看,随着我们的世界日益数字化,它也是每一个人学习、理解新技术的基石。alexander petkov是一个优质it求职社区的创始人,不久前,他以行业人的眼光预测了2018年的十大流行编程语言,为新手上路提供了有力参考。
注:本文排名受用户基数影响较大,因此未出现c#和go,这并不是说它们不好,事实上现在c#算得上是就业市场上最广泛流行的语言。另外发展势头惊人的kotlin也没有出现在列表中。总的来说,文章内容较为严谨,但读者还是要根据自己的职业规划参考着自主选择。
首先,我要声明一点,本文不是那些所谓的围绕搜索关键词、引用量、流行语的“top 10编程语言排名”,这是一份基于2018年初it行业状况、趋势和近期保守预测的客观实用评估。它基于各种来源可靠的统计数据,并且是为期两周深入研究的结果。毫不夸张地说,这是每一位想在2018年选择正确编程语言、开启自己工程师职业生涯的读者必读的权威指南!
本文的出发点在于帮助读者更好地契合就业市场,包括推荐值得花精力和时间的利基市场、为有志于成为软件开发者的人选择最具优势的语言,以及推荐平均薪资水平最高的编程语言。众所周知,当一个人开始决定选取哪种语言作为自己的第一语言时,他会着重考虑这几个因素:
高薪;
人气——是否有大量的就业机会且工作内容多元;
前景广大;
易于上手,工作舒心。
因此,对于下文中列出的每一种语言,我们都会考评它们的这些维度:
一个简短的介绍,让你了解这门语言,并知道它的就业选择和技术优势;
根据tiobe和github octoverse得到的语言流行度图;
根据indeed.com和stackoverflow的2017年调查数据进行薪酬对比;
根据google趋势得出的过去五年中该语言的市场需求变化趋势;
一段简短的代码示例,让你建立对它的初步理解。
排名中的后4种语言知名度不高,但在过去几年中它们的普及速度非常可观,因此我们可以预见到它们在2018年的发展和需求提升。
1. javascript
根据stackoverflow的年度调查,javascript是现在最流行的语言,62.5%的受访者称自己正在使用它。因此它毫无疑问是网络的主流语言,在过去的十年中,javascript发展迅猛。如果你对此持有异议,请环顾四周,看看周围支持javascript的网络设备有多少。拿stack overflow的联合创始人jeff atwood的话说,就是:
任何可以用javascript编写的应用程序最终都将用javascript编写。
考虑到这个因素,我们可以肯定一点,就是在2018年及之后的几年内,就业市场不会缺少javascript工作机会。
一些开发者基于javascript开发了许多前端框架,如angular、react、ember、backbone等。另一个与区块链开发关系紧密的运行环境node.js,和javascript也有千丝万缕的关系,有了它,我们就能高效地在后端运行js代码。去年stackoverflow曾给出了一份关于2017年四大最流行框架的排名,而基于javascript的框架在其中占了三席。
如果你喜欢那种可以马上看到工作成果的语言,例如制作交互式web组件,那么javascript绝对算得上是一个首选。不过需要注意的一点是,javascript的一个重要学习前提是你必须有相当的html和css基础,毕竟它们都和网页设计相关。
一些工具,如apache cordova、react native允许开发者在移动应用程序中使用javascript。有时我们甚至也能通过electron等项目把它用于游戏开发。
让我们来看看把javascript排名第一的数据支撑:
tiobe rating:第6名
tiobe rating是一项关于编程语言流行度的排名,它的计算主要基于这几个数据:全球掌握这门语言的工程师人数、语言开课数、第三方使用机构和搜索引擎结果。
github octoverse:第1名
github是全球最大的开源软件开发与管理社区,它每年都会推出“octoverse”报告以列出一些趋势。如上图所示javascript是社区2017年评选出的最流行的编程语言。
us salary in indeed:平均水平
indeed是一个全球性的与就业相关的搜索引擎,它也是美国流量最高的就业网站。上图显示了各编程语言在美国的平均薪资水平。
salary in stackoverflow:平均水平
stackoverfllow可以说是最大的开发者社区,每月流量超过5000万。上图是stackoverfllow 2017年对超过六万四千名开发者进行调查后得出的薪资水平结果。
综合以上数据,javascript无疑是2018年及以后最受欢迎的语言之一。由于涉及大量初级职位,和另一些高级职位较多的冷门语言相比,它很难在薪水排名上高居榜首。
javascript五年来的流行度趋势:稳步增长
javascript示例代码片段:
document.addeventlistener(domcontentloaded, function(event) {
var e = document.getelementbyid(myform);
var msg = ;
// wait for user to click the button
e.addeventlistener(change, function () {
var mycolor = this.color.value;
if (mycolor == blue) {
msg = just like the sky!;
} elseif (mycolor == red) {
msg = quite daring!;
} elseif (mycolor == green) {
msg = like... grass?;
}
// output message
document.getelementbyid(msg).innerhtml = msg;
}, false);
});
2. swift
swift是2014年由apple发布的一种相对较新的编程语言,主要用于开发ios或macos应用程序。与objective-c相比,很多人认为swift在可用性和性能上都有明显改进——曾经apple ios和os x上的app都是用objective-c写的。
事实上,青睐swift的开发者为数众多,继2015年在stack overflow的调查报告中问鼎“最受喜爱的编程语言”第一后,它在2017年的榜单中仍高居第四。所以如果你选择swift作为自己的入门语言,你很可能也会在学习过程中慢慢爱上它。
当然,如果你有志于进入移动开发领域,懂一点swift会使你在高薪岗位竞争中更具优势。市场已经证明,ios的app通常比android的吸金能力更强一些。
tiobe rating:第12名(2018年1月)
github octoverse:第13名
us salary in indeed.com:高
salary in stackoverflow:高于平均水平
对于ios和macos应用程序,swift是一种新的、看起来更好的语言,它比它的前身objective-c更出色。在短短几年内,swift就获得了很高的声誉,并在大多数排名中击败了objective-c。这种语言被开发人员所喜爱,但也意味着要付出高昂的代价——除了ios,你还能找到哪些用武之地?
swift五年来的流行度趋势:急剧增长
swift示例代码片段:
importuikit
classviewcontroller: uiviewcontroller {
override func viewdidload() {
super.viewdidload()
self.navigationcontroller!.navigationbar.bartintcolor = uicolor.yellow
self.navigationcontroller!.navigationbar.titletextattributes = [nsforegroundcolorattributename: uicolor.black]
let navbgimage:uiimage = uiimage(named: bg_blog_navbar_reduced.jpg)!
self.navigationcontroller!.navigationbar.setbackgroundimage(navbgimage, for: .default)
}
override func didreceivememorywarning() {
super.didreceivememorywarning()
}
}
3. python
python是一种通用语言,现在你几乎可以在任何地方找到它的身影:网络应用程序、桌面应用程序、网络服务器、机器学习、媒体工具……nasa和谷歌是python的实力拥趸,guido van rossum为什么能在谷歌待8年?主要原因就是……他是python的作者。
这是一种代码整洁、可读性高、结构良好的编程语言,对于python,适当的缩进不仅是为了美观,它还决定了代码的执行情况。一些基于python的web开发框架,如django和flask,现在已经越来越受欢迎。而在机器学习领域,它还配备了各种高质量的库,如scikit-learn和pandas等,几乎称得上是一家独大。
总体而言,python在就业岗位上有很多拓展空间,上手难度低,因此它对初学者而言是个不错的选择。
tiobe rating:第4名(2018年1月)
github octoverse:第2名
us salary in indeed:高
salary in stackoverflow:高
综上数据,选择成为一名python专家无疑是当今和未来最好的选择之一。这门语言几乎在每个领域都名列前茅。
python五年来的流行度趋势:增长明显
python示例代码片段:
import itertools
def iter_primes():
# an iterator of all numbers between 2 and +infinity
numbers = itertools.count(2)
# generate primes forever
whiletrue:
# get the first number from the iterator (always a prime)
prime = numbers.next()
yield prime
# this code iteratively builds up a chain of
# filters...slightly tricky, but ponder it a bit
numbers = itertools.ifilter(prime.__rmod__, numbers)
for p in iter_primes():
if p > 1000:
break
print p
4. java
java可以说是普及率最高的编程语言,因为90%的世界500强公司都在用它。它的口号是:“一次编译,随处运行。”(writeonce, run anywhere.)这句话抓住了java的精髓——强大的jvm(java虚拟机)使它具有其他语言难以企及的跨平台兼容性。
在工作中,需要常常用到java的人有后端开发人员、大数据开发人员、嵌入式系统工程师和android开发人员等。虽然它并不是目前最“流行”的语言,但它的使用频率非常高,以至于我们几乎可以确信在未来十年甚至更长时间内,java仍会在it行业占据重要的一席之地。
正因为如此,我们也完全可以下这么一个结论:每个it产业发达的城市都会有大量的java工作岗位。对于列表中的一些冷门语言,我们不敢这么下定论;但对于java,它有这个底气。如果你对java感兴趣,那找到合适的工作只是时间问题。
tiobe rating:第1名(2018年1月)
github octoverse:第2名
us salary in indeed:平均水平
salary in stackoverflow:高于平均水平
java的工作范围覆盖很广,且多年来已经积累了大量高价值经验,因此它在薪资排名中也能名列前茅。
java五年来的流行度趋势:下降
java示例代码片段:
publicclassstandarddeviation {
publicstaticvoid main(string[] args) {
double[] numarray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
double sd = calculatesd(numarray);
system.out.format(standard deviation = %.6f, sd);
}
publicstaticdouble calculatesd(double numarray[]) {
double sum = 0.0, standarddeviation = 0.0;
for(double num : numarray) {
sum += num;
}
double mean = sum / 10;
for(double num: numarray) {
standarddeviation += math.pow(num - mean, 2);
}
returnmath.sqrt(standarddeviation / 10);
}
}
5. c++
c++是一种高效且灵活的语言,它“出生”于1985年。虽然已经完全称不上是新语言了,但因其高性能和高可靠性,且能被用于各种环境,它的市场缺口还是很大。关于这一点,我们可以看看到现在还在用c++创建和维护系统的大型公司:microsoft、oracle、paypal和adobe。它们都是c++的忠实粉丝。
谈及c++的使用场景,常见的有开发桌面应用程序,尤其是性能密集型任务。虽然很复杂,但熟练掌握c++能帮你建立对编程语言的系统认识,让你知道它是怎么工作的,例如让你直接管理内存。
tiobe rating:第3名(2018年1月)
github octoverse:第6名
us salary in indeed:高
salary in stackoverflow:高
总的来说,c++的流行度还是很高的,如果你选择它,你的就业前景会非常广大,而且可能得到更高的发展机遇。它的薪资水平也处于高位。
c++五年来的流行度趋势:起伏不定
c++示例代码片段:
#include
#include
usingnamespace std;
float calculatesd(float data[]);
int main() {
int i;
float data[10];
cout << enter 10 elements: ;
for(i = 0; i > data[i];
cout << endl << standard deviation = << calculatesd(data);
return0;
}
float calculatesd(float data[]) {
float sum = 0.0, mean, standarddeviation = 0.0;
int i;
for(i = 0; i < 10; ++i) {
sum += data[i];
}
mean = sum / 10;
for(i = 0; i root }
queue = [root]
catch(:found) do
until queue.empty?
node = queue.shift
node.starting_coin.upto(coinage.size - 1) do |index|
coin = coinage[index]
new_total = node.total + coin
nextif new_total > amount || found_totals[new_total]
new_node = node.new(node, coin, new_total, index)
found_totals[new_total] = new_node
throw :found if new_total == amount
queue << new_node
end
end
end
returnnilif found_totals[amount].nil?
result = []
cursor = found_totals[amount]
until cursor.coin.nil?
result < {{
{
let val: usize = $e;
println!({} = {}, stringify!{$e}, val);
}
}};
(eval $e:expr, $(eval $es:expr),+) => {{
calculate! { eval $e }
calculate! { $(eval $es),+ }
}};
}
fn main() {
calculate! {
eval1 + 2,
eval3 + 4,
eval (2 * 3) + 1
}
}
8. elixir
elixir是一种首次出现于2011年的新语言,和rust一样,它一经推出也收获了广泛好评。
这种语言的灵感来自erlang——这是爱立信于二十世纪八十年代开发的一种语言,可以说是用于高并发需求的最佳工具之一。elixir的作者josévalim自己说他非常喜欢erlang,但也看到了改进的余地。对于开发者来说,erlang最大的缺点在于怪异的语法和可用性,它缺乏直接的包管理。
为此,elixir诞生了——作为ruby和erlang的结合体。
elixir现在还是被主要用于网络开发,虽然收入可观,但上限不高。stackoverflow的调查数据显示,它的薪资水平在全球排名第三。值得强调的一点是,elixir的流行度正一年比一年上升。
elixir五年来的流行度趋势:增长
elixir示例代码片段:
defmodule chaindo
def counter(next_pid) do
receive do
n ->
send next_pid, n + 1
end
end
def create_processes(n) do
last = enum.reduce 1..n, self,
fn (_, send_to) ->
spawn(chain, :counter, [send_to])
end
send last, 0
receive do
final_answer when is_integer(final_answer) ->
result is #{inspect(final_answer)}
end
end
def run(n) do
io.puts inspect :timer.tc(chain, :create_processes , [n])
end
end
9. scala
scala的设计初衷是实现可伸缩的语言,它是“重写java”并改进其缺点的众多尝试之一,可以在jvm上编译。鉴于linkedin、twitter和the guardian等大公司都在其代码库中使用scala,scala在市场上取得的成功毋庸置疑。
对于初学者来说,直接上手scala可能有些太复杂了,但如果能精通,它会为你提高职业发展天花板。因为未来就业市场对scala开发者的需求肯定会越来越多。根据2017年stackoverflow的报告,scala在薪金调查中名列前茅,位居全球前十名,且在美国居第一位。
scala五年来的流行度趋势:增长
scala示例代码片段:
package examples.actors
import scala.actors._
import scala.actors.actor._
objectmessage {
def main(args: array[string]) {
val n = try {
integer.parseint(args(0))
}
catch {
case _ =>
println(usage: examples.actors.message )
predef.exit
}
val nactors = 500
val finalsum = n * nactors
scheduler.impl = newsinglethreadedscheduler
def beh(next: actor, sum: int) {
react {
case value: int =>
val j = value + 1; val nsum = sum + j
if (next == null && nsum >= finalsum) {
println(nsum)
system.exit(0)
}
else {
if (next != null) next ! j
beh(next, nsum)
}
}
}
def actorchain(i: int, a: actor): actor =
if (i > 0) actorchain(i-1, actor(beh(a, 0))) else a
val firstactor = actorchain(nactors, null)
var i = n; while (i > 0) { firstactor ! 0; i -= 1 }
}
}
10. r
r是用于统计、图形表示和数据分析的编程语言和环境。这是数据科学家的首选编程语言之一。如果你觉得自己对这个领域感兴趣,那么选择r将是一个稳定而明确的举措。
r五年来的流行度趋势:增长
r示例代码片段:
readinteger <- function() {
n <- readline(prompt=enter an integer: )
if (!grepl(^[0-9]+$,n)) {
return(readinteger())
}
return(as.integer(n))
}
num <- round(runif(1) * 100, digits = 0)
guess <- -1
cat(guess a number between 0 and 100.)
while(guess != num) {
guess <- readinteger()
if (guess == num) {
cat(congratulations,, num, is right.)
} elseif (guess num) {
cat(it's smaller!)
}
}
小结
以上就是我总结的“2018年最适合学习的十大最佳编程语言”。选择一门正确的语言意味着一个好的开始,但有一个好的开始绝不等同于你已经足够优秀并能胜任各种高薪职位。
最后,我想给每个初学者一个建议:你可以通过买书自学、上网络公开课甚至参加专门的培训机构等各种途径来学习编程语言,但在你的时间、精力和金钱投入进去后,请不要就这样照本宣科,学习语言最好的方法绝对是自己做点东西,然后用它来吸引用户,甚至吸引一帮粉丝。等你积累足够多独立开发经验后,面对面试官,你才有更多的自信向他解释自己是怎么做的、自己为什么要这么做——这通常比你的其他回答更令人印象深刻。

好书推荐:工业机器人与PLC通信落地实战教程
SmartbiV10新品线上交流会完美收官盘点大会精彩瞬间!
MAX16823 线性高亮度LED驱动器,高压、3通道、具有
digilent JTAG-HS3编程电线 介绍
单轴转台的功能特点及应用
2018年最适合学习的十大最佳编程语言
RFID如何推动智能交通管控发展
曙光StackCube-K超融合云平台的优势
宁德时代布局碳酸锂产业
颜值和能力双出众的YESOUL 野小兽P30炫彩智能跑步机
瑞萨电子推出ClockMatrix系统同步器, 针对O-RAN S-Plane的要求实现D级合规性
操作系统的安装进度缓慢的原因及其解决方案
网件(Netgear)即将发布世界首款千兆无线路由
EMC COMPLIANT RS-485收发器保护电路
扫二位码数据采集MES系统架构有效管控产品质量
那些鲜为人知的非主流移动操作系统
详解点阵LED显示屏的工作原理与制作过程
常见传感器电路图讲解
发动机发出异响是什么原因
中低端市场价格之争,车用PCB市场该何去何从?