99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁CDA發(fā)布為什么說Python是目前熱度增長最快的編程語言?
為什么說Python是目前熱度增長最快的編程語言?
2017-09-20
收藏
近年來 Python 的熱度不斷上升,知名IT技術(shù)問答社區(qū) Stack Overflow 最近公布了程序語言排行榜,讓我們從數(shù)據(jù)的角度解讀為什么說 Python 是目前熱度增長最快的編程語言...

之前我們探討了富裕國家(被世界銀行定義為高收入的國家)比起其他國家更傾向于使用各種不同的技術(shù)。我們發(fā)現(xiàn)當(dāng)中最大的差異是關(guān)于編程語言 Python 。在高收入國家中,Python 的增長熱度甚至比 Stack Overflow 的 Trends 工具等更為明顯。

在本文中我們將探討在過去五年中,高收入國家中 Python 熱度的驚人增長。下面讓我們用數(shù)據(jù)解讀為什么說在主要編程語言中 Python 的增長速度是最快的。

這篇文章中涉及的數(shù)據(jù)主要針對(duì)高收入國家 ; 這通常代表美國,英國,德國,加拿大等國家的趨勢,這些國家共占 Stack Overflow 總流量的 64%。印度,巴西,俄羅斯和中國等國家,也為全球軟件開發(fā)生態(tài)系統(tǒng)做出了巨大的貢獻(xiàn)。盡管 Python 在這些國家也顯示出了增長,但這篇文章對(duì)這些經(jīng)濟(jì)體涉及的不多。

但同時(shí)值得強(qiáng)調(diào)的是,一種語言的用戶數(shù)量并不是衡量語言質(zhì)量的標(biāo)準(zhǔn):在此我們說明的僅為當(dāng)前開發(fā)人員使用語言的情況。(實(shí)際上:之前我主要用 Python 編程,但后來轉(zhuǎn)為了使用 R 語言)。

Python 在高收入國家的熱度增長

在 StackOverflow 編程語言流行趨勢中可以看到,Python 在過去幾年中一直在迅速增長。但是在本文中,我們將重點(diǎn)關(guān)注高收入國家,并主要考慮被瀏覽的問題,而不是所提的問題(這會(huì)得出類似的結(jié)果,但是具有較小的每月噪音,特別是對(duì)于小的標(biāo)簽)。

關(guān)于 Stack Overflow 瀏覽問題的數(shù)據(jù)可以追溯到2011年底,在這段時(shí)間內(nèi),我們將 Python 的熱度增長對(duì)比其他五種主要編程語言。(注意,這比 Trends 工具的時(shí)間范圍短,Trends 可追溯到2008年)。包括的編程語言為目前高收入國家中十大 Stack Overflow 訪問標(biāo)簽中的六個(gè); 我們沒有包括的四個(gè)是 CSS,HTML,Android 和 JQuery。



2017 年 6 月,Python 第一次成為高收入國家在 Stack Overflow 訪問量最多的標(biāo)簽。當(dāng)中,Python 是美國和英國訪問量最大的標(biāo)簽,在其他高收入國家 Python 訪問量為前兩名(除 Java 或 JavaScript 之外)。這是令人印象深刻的,因?yàn)樵?2012 年,Python 的訪問量還低于其他五種語言,如今比當(dāng)時(shí)增長了 2.5 倍。

部分原因是由于 Java 的季節(jié)性流量特征。由于 Java 在本科教育中比重較大,因此在春秋季 Java 流量上升,夏季則下降。到今年年底它會(huì)再次趕超 Python 嗎?我們可以嘗試使用 “STL” 模型預(yù)測未來兩年的增長情況,該模型將增長與季節(jié)趨勢相結(jié)合,以預(yù)測語言的未來價(jià)值。



根據(jù)該模型,在秋天 Python 可能會(huì)保持領(lǐng)先地位,亦或者會(huì)被 Java 超越(大致處于模型預(yù)測的變化范圍之內(nèi))。但在 2018 年,Python 顯然會(huì)成為最受歡迎的標(biāo)簽。根據(jù) STL,與過去兩年一樣,JavaScript 和 Java 在高收入國家中將保持相似的流量。

哪些標(biāo)簽的增長速度最快?

以上只包括了六種最受歡迎的編程語言。那么在其他值得注意的技術(shù)中,哪些技術(shù)在高收入國家中增長最快呢?

我們根據(jù) 2017 年至 2016 年的流量比例對(duì)增長率進(jìn)行了定義。在分析中,我們決定僅考慮編程語言(如 Java 和 Python)和平臺(tái)(如 iOS,Android,Windows 和Linux),而不考慮如 Angular 的框架或如 TensorFlow 的庫(盡管其中許多增長顯著,我們?cè)谥蟮难芯恐袑⑸婕埃?

由于在圖表中難以定義“增長最快”,我們將增長量與總體平均值進(jìn)行比較。



以 27% 的年增長率,Python 成為流量大且增長迅速的標(biāo)簽 ; 第二名是 R 語言。在高收入國家中大多數(shù)其他標(biāo)簽的流量增長保持穩(wěn)定,Android,iOS 和 PHP 的訪問量則略有下降。還可以注意到,在函數(shù)式編程語言中,Scala 所占比重最大并不斷增長,而 F# 和 Clojure 所占比重較小增長率縮小,Haskell 比重居中,且增長保持穩(wěn)定。

上圖中有個(gè)遺漏的部分:去年,關(guān)于 TypeScript 問題的流量增長達(dá)到驚人的142%,為了避免給數(shù)據(jù)帶來的影響我們未將其列入其中。我們還可以看到,還有一些語言的增長速度與 Python 類似或者更快(如 R 語言,Go 和 Rust),并且還有許多標(biāo)簽(如 Swift 和 Scala)也呈現(xiàn)令人印象深刻的增長。那么與 Python 相比,這些語言的流量增長隨著時(shí)間呈現(xiàn)什么特點(diǎn)呢?



如 R 語言和 Swift 等語言的發(fā)展確實(shí)令人印象深刻,而且在較短的時(shí)間內(nèi) TypeScript 也顯示出非??焖俚脑鲩L。許多使用量較小的語言,在軟件生態(tài)系統(tǒng)中的增長顯著。但如圖所示,當(dāng)標(biāo)簽一開始比重較小時(shí),更容易顯示出快速的增長。

我們并不是說這些語言在一定程度上在與 Python 競爭。相反,在這里要說明的是為什么要單獨(dú)把這些語言的增長量放到其他類別中; 一開始這些語言都為流量較小的標(biāo)簽。而 Python 則一個(gè)不尋常的例子,它既是 Stack Overflow 中最受歡迎的標(biāo)簽之一,也是增長最快標(biāo)簽的之一。(同時(shí)它也在加速增長!自 2013 年以來,Python 的增長速度在逐年加速)。

世界其他地區(qū)

到目前為止,在本文中我們一直在分析高收入國家的編程語言趨勢。那么在印度,巴西,俄羅斯和中國其他等國家,Python 的增長情況是否也是如此呢?

確實(shí)如此。



在高收入國家之外的國家,Python 仍然是增長最快的主要編程語言; 開始它的比重較低,兩年后才開始增長(2014 年而不是 2012 年)。事實(shí)上,非高收入國家中Python 的年增長率速略于高收入國家。本文中我們沒有涉及到,而其使用率與國內(nèi)生產(chǎn)總值為正相關(guān)的R語言也在增長。

本文關(guān)于高收入國家中的程序語言增長和下降的許多結(jié)論都適用于世界其他地區(qū); 兩個(gè)部分增長率之間的斯皮爾曼等級(jí)相關(guān)系數(shù)為 0.979。在某些情況下,我們可以看到類似 Python “滯后”的現(xiàn)象,一般來說一項(xiàng)技術(shù)在高收入國家中被廣泛采用,一兩年后才會(huì)才在世界其他地區(qū)擴(kuò)張。(這是一個(gè)有趣的現(xiàn)象)

結(jié)語

我們并不想挑起爭論哪種編程語言更好的所謂“語言戰(zhàn)爭”。一種語言的用戶數(shù)量并不意味著它的質(zhì)量,當(dāng)然也不能說明哪種語言更適合某種特定的情況。但是從這個(gè)角度而言,我們應(yīng)該了解開發(fā)者生態(tài)系統(tǒng)的語言構(gòu)成,以及該生態(tài)系統(tǒng)是如何變化的。

本文表明了在過去的 5 年中,Python 已經(jīng)顯示出驚人的增長,尤其是在高收入國家中。之后我們將探索當(dāng)中的原因。我們將按國家和行業(yè)對(duì)增長情況進(jìn)行劃分,并分析哪些技術(shù)會(huì)與 Python 一起使用(例如,我們會(huì)分析 Python 的增長量中哪些是來自 web 開發(fā),哪些是來自數(shù)據(jù)科學(xué))。

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }