在近期的一次訪談中,庫克反復(fù)強調(diào)了學(xué)習(xí)編程的重要性。學(xué)會編程不僅是為了適應(yīng)現(xiàn)在的就業(yè)市場,從長遠來看,隨著我們的世界日益數(shù)字化,它也是每一個人學(xué)習(xí)、理解新技術(shù)的基石。Alexander Petkov是一個優(yōu)質(zhì)IT求職社區(qū)的創(chuàng)始人,不久前,他以行業(yè)人的眼光預(yù)測了2018年的十大流行編程語言,為新手上路提供了有力參考。
注:本文排名受用戶基數(shù)影響較大,因此未出現(xiàn)C#和Go,這并不是說它們不好,事實上現(xiàn)在C#算得上是就業(yè)市場上最廣泛流行的語言。另外發(fā)展勢頭驚人的Kotlin也沒有出現(xiàn)在列表中??偟膩碚f,文章內(nèi)容較為嚴謹,但讀者還是要根據(jù)自己的職業(yè)規(guī)劃參考著自主選擇。
首先,我要聲明一點,本文不是那些所謂的圍繞搜索關(guān)鍵詞、引用量、流行語的“Top 10編程語言排名”,這是一份基于2018年初IT行業(yè)狀況、趨勢和近期保守預(yù)測的客觀實用評估。它基于各種來源可靠的統(tǒng)計數(shù)據(jù),并且是為期兩周深入研究的結(jié)果。毫不夸張地說,這是每一位想在2018年選擇正確編程語言、開啟自己工程師職業(yè)生涯的讀者必讀的權(quán)威指南!
本文的出發(fā)點在于幫助讀者更好地契合就業(yè)市場,包括推薦值得花精力和時間的利基市場、為有志于成為軟件開發(fā)者的人選擇最具優(yōu)勢的語言,以及推薦平均薪資水平最高的編程語言。眾所周知,當一個人開始決定選取哪種語言作為自己的第一語言時,他會著重考慮這幾個因素:
高薪;
人氣——是否有大量的就業(yè)機會且工作內(nèi)容多元;
前景廣大;
易于上手,工作舒心。
因此,對于下文中列出的每一種語言,我們都會考評它們的這些維度:
一個簡短的介紹,讓你了解這門語言,并知道它的就業(yè)選擇和技術(shù)優(yōu)勢;
根據(jù)TIOBE和GitHub Octoverse得到的語言流行度圖;
根據(jù)Indeed.com和StackOverflow的2017年調(diào)查數(shù)據(jù)進行薪酬對比;
根據(jù)Google趨勢得出的過去五年中該語言的市場需求變化趨勢;
一段簡短的代碼示例,讓你建立對它的初步理解。
排名中的后4種語言知名度不高,但在過去幾年中它們的普及速度非常可觀,因此我們可以預(yù)見到它們在2018年的發(fā)展和需求提升。
1. JavaScript
根據(jù)StackOverflow的年度調(diào)查,JavaScript是現(xiàn)在最流行的語言,62.5%的受訪者稱自己正在使用它。因此它毫無疑問是網(wǎng)絡(luò)的主流語言,在過去的十年中,JavaScript發(fā)展迅猛。如果你對此持有異議,請環(huán)顧四周,看看周圍支持JavaScript的網(wǎng)絡(luò)設(shè)備有多少。拿Stack Overflow的聯(lián)合創(chuàng)始人Jeff Atwood的話說,就是:
任何可以用JavaScript編寫的應(yīng)用程序最終都將用JavaScript編寫。
考慮到這個因素,我們可以肯定一點,就是在2018年及之后的幾年內(nèi),就業(yè)市場不會缺少JavaScript工作機會。
一些開發(fā)者基于JavaScript開發(fā)了許多前端框架,如Angular、React、Ember、Backbone等。另一個與區(qū)塊鏈開發(fā)關(guān)系緊密的運行環(huán)境Node.js,和JavaScript也有千絲萬縷的關(guān)系,有了它,我們就能高效地在后端運行js代碼。去年StackOverflow曾給出了一份關(guān)于2017年四大最流行框架的排名,而基于JavaScript的框架在其中占了三席。
如果你喜歡那種可以馬上看到工作成果的語言,例如制作交互式Web組件,那么JavaScript絕對算得上是一個首選。不過需要注意的一點是,JavaScript的一個重要學(xué)習(xí)前提是你必須有相當?shù)腍TML和CSS基礎(chǔ),畢竟它們都和網(wǎng)頁設(shè)計相關(guān)。
一些工具,如Apache Cordova、React Native允許開發(fā)者在移動應(yīng)用程序中使用JavaScript。有時我們甚至也能通過Electron等項目把它用于游戲開發(fā)。
讓我們來看看把JavaScript排名第一的數(shù)據(jù)支撐:
TIOBE RATING:第6名
TIOBE RATING是一項關(guān)于編程語言流行度的排名,它的計算主要基于這幾個數(shù)據(jù):全球掌握這門語言的工程師人數(shù)、語言開課數(shù)、第三方使用機構(gòu)和搜索引擎結(jié)果。
GitHub Octoverse:第1名
GitHub是全球最大的開源軟件開發(fā)與管理社區(qū),它每年都會推出“Octoverse”報告以列出一些趨勢。如上圖所示JavaScript是社區(qū)2017年評選出的最流行的編程語言。
US Salary in Indeed:平均水平
Indeed是一個全球性的與就業(yè)相關(guān)的搜索引擎,它也是美國流量最高的就業(yè)網(wǎng)站。上圖顯示了各編程語言在美國的平均薪資水平。
Salary in StackOverflow:平均水平
StackOverfllow可以說是最大的開發(fā)者社區(qū),每月流量超過5000萬。上圖是StackOverfllow 2017年對超過六萬四千名開發(fā)者進行調(diào)查后得出的薪資水平結(jié)果。
綜合以上數(shù)據(jù),JavaScript無疑是2018年及以后最受歡迎的語言之一。由于涉及大量初級職位,和另一些高級職位較多的冷門語言相比,它很難在薪水排名上高居榜首。
JavaScript五年來的流行度趨勢:穩(wěn)步增長
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發(fā)布的一種相對較新的編程語言,主要用于開發(fā)iOS或MacOS應(yīng)用程序。與Objective-C相比,很多人認為Swift在可用性和性能上都有明顯改進——曾經(jīng)Apple iOS和OS X上的APP都是用Objective-C寫的。
事實上,青睞Swift的開發(fā)者為數(shù)眾多,繼2015年在Stack Overflow的調(diào)查報告中問鼎“最受喜愛的編程語言”第一后,它在2017年的榜單中仍高居第四。所以如果你選擇Swift作為自己的入門語言,你很可能也會在學(xué)習(xí)過程中慢慢愛上它。
當然,如果你有志于進入移動開發(fā)領(lǐng)域,懂一點Swift會使你在高薪崗位競爭中更具優(yōu)勢。市場已經(jīng)證明,iOS的APP通常比Android的吸金能力更強一些。
TIOBE Rating:第12名(2018年1月)
GitHub Octoverse:第13名
US Salary in Indeed.com:高
Salary in StackOverflow:高于平均水平
對于iOS和MacOS應(yīng)用程序,Swift是一種新的、看起來更好的語言,它比它的前身Objective-C更出色。在短短幾年內(nèi),Swift就獲得了很高的聲譽,并在大多數(shù)排名中擊敗了Objective-C。這種語言被開發(fā)人員所喜愛,但也意味著要付出高昂的代價——除了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是一種通用語言,現(xiàn)在你幾乎可以在任何地方找到它的身影:網(wǎng)絡(luò)應(yīng)用程序、桌面應(yīng)用程序、網(wǎng)絡(luò)服務(wù)器、機器學(xué)習(xí)、媒體工具……NASA和谷歌是Python的實力擁躉,Guido van Rossum為什么能在谷歌待8年?主要原因就是……他是Python的作者。
這是一種代碼整潔、可讀性高、結(jié)構(gòu)良好的編程語言,對于Python,適當?shù)目s進不僅是為了美觀,它還決定了代碼的執(zhí)行情況。一些基于Python的Web開發(fā)框架,如Django和Flask,現(xiàn)在已經(jīng)越來越受歡迎。而在機器學(xué)習(xí)領(lǐng)域,它還配備了各種高質(zhì)量的庫,如Scikit-learn和Pandas等,幾乎稱得上是一家獨大。
總體而言,Python在就業(yè)崗位上有很多拓展空間,上手難度低,因此它對初學(xué)者而言是個不錯的選擇。
TIOBE Rating:第4名(2018年1月)
GitHub Octoverse:第2名
US Salary in Indeed:高
Salary in StackOverflow:高
綜上數(shù)據(jù),選擇成為一名Python專家無疑是當今和未來最好的選擇之一。這門語言幾乎在每個領(lǐng)域都名列前茅。
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強公司都在用它。它的口號是:“一次編譯,隨處運行?!保╓riteonce, run anywhere.)這句話抓住了Java的精髓——強大的JVM(Java虛擬機)使它具有其他語言難以企及的跨平臺兼容性。
在工作中,需要常常用到Java的人有后端開發(fā)人員、大數(shù)據(jù)開發(fā)人員、嵌入式系統(tǒng)工程師和Android開發(fā)人員等。雖然它并不是目前最“流行”的語言,但它的使用頻率非常高,以至于我們幾乎可以確信在未來十年甚至更長時間內(nèi),Java仍會在IT行業(yè)占據(jù)重要的一席之地。
正因為如此,我們也完全可以下這么一個結(jié)論:每個IT產(chǎn)業(yè)發(fā)達的城市都會有大量的Java工作崗位。對于列表中的一些冷門語言,我們不敢這么下定論;但對于Java,它有這個底氣。如果你對Java感興趣,那找到合適的工作只是時間問題。
TIOBE Rating:第1名(2018年1月)
GitHub Octoverse:第2名
US Salary in Indeed:平均水平
Salary in StackOverflow:高于平均水平
Java的工作范圍覆蓋很廣,且多年來已經(jīng)積累了大量高價值經(jīng)驗,因此它在薪資排名中也能名列前茅。
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年。雖然已經(jīng)完全稱不上是新語言了,但因其高性能和高可靠性,且能被用于各種環(huán)境,它的市場缺口還是很大。關(guān)于這一點,我們可以看看到現(xiàn)在還在用C++創(chuàng)建和維護系統(tǒng)的大型公司:Microsoft、Oracle、PayPal和Adobe。它們都是C++的忠實粉絲。
談及C++的使用場景,常見的有開發(fā)桌面應(yīng)用程序,尤其是性能密集型任務(wù)。雖然很復(fù)雜,但熟練掌握C++能幫你建立對編程語言的系統(tǒng)認識,讓你知道它是怎么工作的,例如讓你直接管理內(nèi)存。
TIOBE Rating:第3名(2018年1月)
GitHub Octoverse:第6名
US Salary in Indeed:高
Salary in StackOverflow:高
總的來說,C++的流行度還是很高的,如果你選擇它,你的就業(yè)前景會非常廣大,而且可能得到更高的發(fā)展機遇。它的薪資水平也處于高位。
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 < 10; ++i)
cin >> 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 < 10; ++i)
standardDeviation += pow(data[i] - mean, 2);
return sqrt(standardDeviation / 10);
}
6. Ruby
Ruby是最受開發(fā)者喜愛的編程語言之一。它的口號是“程序員最好的朋友”,所以它的使用體驗非常舒適友好,且能為開發(fā)者帶來心情“加成”。
這是一種高級語言,它的目標是write less , do more,也就是通過幾行干凈可讀的代碼就能實現(xiàn)很多功能。因此在編寫過程中,你可能需要耗費大量精力——“和其他流行編程語言相比,Ruby在寫作效率上相對過慢——但它絕對能提高你的工作效率”。
寫得非常優(yōu)美的Ruby代碼看起來幾乎就是純英文句子,所以它很適合母語是英語的開發(fā)者。而把Ruby作為自己的入門語言也有一些優(yōu)勢,之前提到了,它能給開發(fā)者帶來更多快感,并且就業(yè)內(nèi)整體薪資水平而言,Ruby的工資處于較高位置。
當然,選擇Ruby也有一些缺點,其中最主要的一點是和上述語言相比,它還是太冷門了,所以即便是在某些IT行業(yè)較發(fā)達的城市,Ruby的崗位也不好找。
TIOBE Rating:第11名(2018年1月)
GitHub Octoverse:第4名
US Salary in Indeed:高
Salary in StackOverflow:高
Ruby是一個很好的職業(yè)選擇,因為它的報酬很高,而且語言本身很有趣。它的缺點是不如其他競爭對手那么受歡迎,而且職位數(shù)量大大受限。但是,請注意一點,就是許多允許遠程辦公的美國初創(chuàng)企業(yè)會很喜歡招用Ruby(和Ruby on Rails)的人。
Ruby五年來的流行度趨勢:下降
Ruby示例代碼片段:
Node = Struct.new("Node", :parent, :coin, :total, :starting_coin)
def make_change(amount, coinage = [25, 10, 5, 1])
root = Node.new(nil, nil, 0, 0)
found_totals = { 0 => 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 << cursor.coin
cursor = cursor.parent
end
result.reverse!
end
7. Rust
Rust是編程語言界的一張新面孔,它首次出現(xiàn)于2010年,并在當年就廣受歡迎,因此我們對它的未來一致看好。在StackOverflow的調(diào)查中,它已經(jīng)連續(xù)兩年被開發(fā)者選為“最受喜愛的編程語言”(2016,2017)。
Rust由Mozilla主導(dǎo)開發(fā),因為是一種編譯型編程語言,所以開發(fā)者們往往喜歡拿它和C做比較。兩者的主要區(qū)別在于Rust的內(nèi)存安全性更高。在C代碼中,我們經(jīng)常會遇到懸掛指針、緩沖區(qū)溢出以及其他類型的內(nèi)存錯誤,但Rust不會。確切地說,它就是為了避免這些錯誤而出現(xiàn)的——在編譯期間(調(diào)試前)它就會向你指出:你在這里寫的代碼是錯的。
對于一個初學(xué)者,Rust為了安全可以放棄一切的“死板”做法可能會打擊人的靈活性,但有經(jīng)驗的開發(fā)者還是對它青睞有加。正因為如此,Rust在未來幾年內(nèi)的市場需求可能還會不斷攀升。2017年StackOverflow的一份調(diào)查報告顯示。Rust的總體薪資水平非常高,在全球范圍內(nèi)排名第二。
另外,選擇Rust的另一個理由是——為Mozilla的情懷打滿分。
Rust五年來的流行度趨勢:增長
Rust示例代碼片段:
macro_rules! calculate {
(eval $e:expr) => {{
{
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是一種首次出現(xiàn)于2011年的新語言,和Rust一樣,它一經(jīng)推出也收獲了廣泛好評。
這種語言的靈感來自Erlang——這是愛立信于二十世紀八十年代開發(fā)的一種語言,可以說是用于高并發(fā)需求的最佳工具之一。Elixir的作者JoséValim自己說他非常喜歡Erlang,但也看到了改進的余地。對于開發(fā)者來說,Erlang最大的缺點在于怪異的語法和可用性,它缺乏直接的包管理。
為此,Elixir誕生了——作為Ruby和Erlang的結(jié)合體。
Elixir現(xiàn)在還是被主要用于網(wǎng)絡(luò)開發(fā),雖然收入可觀,但上限不高。StackOverflow的調(diào)查數(shù)據(jù)顯示,它的薪資水平在全球排名第三。值得強調(diào)的一點是,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的設(shè)計初衷是實現(xiàn)可伸縮的語言,它是“重寫Java”并改進其缺點的眾多嘗試之一,可以在JVM上編譯。鑒于LinkedIn、Twitter和The Guardian等大公司都在其代碼庫中使用Scala,Scala在市場上取得的成功毋庸置疑。
對于初學(xué)者來說,直接上手Scala可能有些太復(fù)雜了,但如果能精通,它會為你提高職業(yè)發(fā)展天花板。因為未來就業(yè)市場對Scala開發(fā)者的需求肯定會越來越多。根據(jù)2017年StackOverflow的報告,Scala在薪金調(diào)查中名列前茅,位居全球前十名,且在美國居第一位。
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是用于統(tǒng)計、圖形表示和數(shù)據(jù)分析的編程語言和環(huán)境。這是數(shù)據(jù)科學(xué)家的首選編程語言之一。如果你覺得自己對這個領(lǐng)域感興趣,那么選擇R將是一個穩(wěn)定而明確的舉措。
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 bigger! ")
} elseif(guess > num) {
cat("It's smaller! ")
}
}
小結(jié)
以上就是我總結(jié)的“2018年最適合學(xué)習(xí)的十大最佳編程語言”。選擇一門正確的語言意味著一個好的開始,但有一個好的開始絕不等同于你已經(jīng)足夠優(yōu)秀并能勝任各種高薪職位。
最后,我想給每個初學(xué)者一個建議:你可以通過買書自學(xué)、上網(wǎng)絡(luò)公開課甚至參加專門的培訓(xùn)機構(gòu)等各種途徑來學(xué)習(xí)編程語言,但在你的時間、精力和金錢投入進去后,請不要就這樣照本宣科,學(xué)習(xí)語言最好的方法絕對是自己做點東西,然后用它來吸引用戶,甚至吸引一幫粉絲。等你積累足夠多獨立開發(fā)經(jīng)驗后,面對面試官,你才有更多的自信向他解釋自己是怎么做的、自己為什么要這么做——這通常比你的其他回答更令人印象深刻。
-
JAVA
+關(guān)注
關(guān)注
19文章
2978瀏覽量
105534 -
編程語言
+關(guān)注
關(guān)注
10文章
1952瀏覽量
35198 -
區(qū)塊鏈
+關(guān)注
關(guān)注
112文章
15564瀏覽量
107097
原文標題:2018年最適合學(xué)習(xí)的十大最佳編程語言
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
安全光柵十大品牌排行榜最新2025年

Triton編譯器支持的編程語言
比亞迪海豹榮獲日本年度風(fēng)云車十大最佳車型獎
選擇最適合您的系統(tǒng)需要的內(nèi)存選項

如何選擇適合自己的編程語言
編程語言的誤區(qū)與常見問題
光電感應(yīng)開關(guān)最佳檢測距離GH3-587N
NVIDIA榮登《財富》“100家最適合工作的公司”榜單第三位
plc編程st語言怎么編
TensorFlow與PyTorch深度學(xué)習(xí)框架的比較與選擇
PLC常用編程語言有哪些
UVLED固化箱選購指南:如何找到最適合你需求的固化設(shè)備?
度亙核芯榮獲“2023年度中國十大光學(xué)產(chǎn)業(yè)技術(shù)”獎

如何選擇最適合你的UV LED固化機?

評論