一場(chǎng)編程語(yǔ)言之戰(zhàn)
@Author:Runsen
本人懂一點(diǎn)Python,Java,根據(jù)自己想法而來(lái),純屬虛構(gòu)。
現(xiàn)狀
進(jìn)入2020年3月,新的編程語(yǔ)言排行榜新鮮出爐,TIOBE最新發(fā)布了3月編程語(yǔ)言排行榜。
從榜單中我們可以看到,前三名分別為Java、C、Python。相較于上個(gè)月,Python繼續(xù)以1.85%上升至10.11%,以10.11%的份額穩(wěn)居第三。
我們先了解下比較常見的編程語(yǔ)言的,如Java,Python,JavaScript,C/C++,Go,C#各編程語(yǔ)言的用途。
“眾口難調(diào)”,面對(duì)多種多樣的編程語(yǔ)言,大家眾說(shuō)紛紜,每種編程語(yǔ)言都有其存在的意義,編程之戰(zhàn)從未停止,“戰(zhàn)火”一觸即發(fā)。
家庭內(nèi)戰(zhàn)
最近,編程語(yǔ)言家族開了一場(chǎng)“家庭聚會(huì)”,都是在討論自己的排名。
下面是家庭成員的對(duì)話。
老三Py:最近,我可厲害了。從2015年,人工智能的開始,人人學(xué)我,基本上我成為最無(wú)敵的大佬。
老四C++:可不是嘛,老三,你的爬蟲,數(shù)據(jù)分析,機(jī)器學(xué)習(xí),深度學(xué)習(xí),自然語(yǔ)言處理再加上你的Django,flask等Web開發(fā)等,就連你的PyQt也想占領(lǐng)我的QT圖形界面市場(chǎng),都是你這個(gè)流氓,害得我從老三變成老四。
老三Py:那都是你太難寫了,學(xué)我就是幾分鐘就能入門的,誰(shuí)叫你這么難懂,什么面向?qū)ο螅愕囊话傩写a,我十幾行就搞定了,誰(shuí)還會(huì)學(xué)你,很快,我就是老大,你就是我的小弟。
老四C++對(duì)老大Java說(shuō):大哥,有人想謀權(quán)篡位。
老大Java:現(xiàn)在,確實(shí)是老三的時(shí)代,現(xiàn)在個(gè)個(gè)數(shù)據(jù)分析師只會(huì)Python,都喊出了:人生苦短,我用Python。要怪就怪?jǐn)?shù)據(jù)分析人員編程水平太低了,寫來(lái)寫去就是py代碼,完全學(xué)不會(huì)其他語(yǔ)言。
老二C鄙視的說(shuō):就算寫Python太厲害,也最多就是一個(gè)導(dǎo)包俠,沒(méi)有什么了不起的。老三,話說(shuō)你有什么本事當(dāng)老大,我都不敢謀權(quán)篡位。
老三Py:不如我們比一比,看看現(xiàn)在開發(fā)者需要我多些還是老大多先。
老大Java:好,比就比。誰(shuí)怕誰(shuí),我到底看看你有什么本事。
老三Py:我代碼簡(jiǎn)單,寫起來(lái)輕松易懂,比如我打印一句HelloWorld,就是一個(gè),就是這么簡(jiǎn)單。就問(wèn)你們服不服?
老大Java:打印一個(gè)HelloWorld,我確實(shí)需要好幾行代碼,還要聲明一個(gè)HelloWorld對(duì)象。
老二C:我還要定義一個(gè)main的主函數(shù),打印一個(gè)HelloWorld確實(shí)有點(diǎn)多。
老四C++:我是抄老二的,寫個(gè)HelloWorld比老二還要多。
老三Py:看見沒(méi)有,這就是差距,誰(shuí)會(huì)寫那么多代碼,直接簡(jiǎn)單粗暴我就是一個(gè)打印HelloWorld。
老大Java:老三,你這樣不行啊,萬(wàn)物都是對(duì)象,寫一行代碼,我覺(jué)得都要聲明一個(gè)對(duì)象。
老三Py:什么對(duì)象,我能打印出來(lái)就Ok了。
其他人:確實(shí)老三寫的代碼太簡(jiǎn)單了,連小學(xué)生基本都能學(xué)會(huì),我們自愧不如,老三,你還要什么本事嗎?
老三Py:要說(shuō)我牛逼莫過(guò)我的第三方庫(kù),超過(guò)上萬(wàn)個(gè),安裝也簡(jiǎn)單,一個(gè)就輕松搞定,還給人看到安裝進(jìn)度條,你們說(shuō)我牛不牛逼。
老大Java:這我可不服,你去的maven倉(cāng)庫(kù)看看
我的jar包任何一種場(chǎng)景都有,我的生態(tài)系早就完善,怎么不如你老三?
老三Py:你在pom.xml安裝什么任何信息告訴別人,而且你的dependency鬼死那么長(zhǎng),人家愿意寫嗎?
老二C和老四C++:我們gcc和cmake添加第三方庫(kù)還要編譯才可以。
老三Py:我的requests,selenium,beautifulsoup,pyquery,lxml,Scrapy,Crawley,Pyspider等一系列爬蟲庫(kù)和爬蟲框架厲害到爆,幾乎所有爬蟲都是我來(lái)編寫的,你們的爬蟲市場(chǎng)早沒(méi)有你們的份了。
老大Java:我的WebMagic,Nutch,Heritrix,Jsoup,SeimiCrawler,JLiteSpider爬蟲編寫的代碼確實(shí)比你多了好幾倍,以前爬蟲的市場(chǎng)都是基本用我,現(xiàn)在給你占去,悲哀。
老二C老四C++:爬蟲,小心爬進(jìn)監(jiān)獄,現(xiàn)在首例爬蟲禁令,禁止爬取微信公眾號(hào),都是老三你的爬蟲造成多少假流量,造成多少網(wǎng)站奔潰,就說(shuō)12306有盡20%以上都是爬蟲訪問(wèn)流量,有多少人搶票,再提價(jià)出售,官方發(fā)票,又被他們搶了,你以前讓多少人搶不票,這背后引發(fā)了一系列的骯臟的資產(chǎn)鏈。
老三Py:這關(guān)我毛事,現(xiàn)在的百度蜘蛛爬取,多少網(wǎng)站雙手叫好,這都是他們的問(wèn)題。
其他人:你除了爬蟲,還有什么?
老三Py:我的數(shù)據(jù)分析三劍客numpy,pandas,matplotlib,在加上Seaborn,Scipy,StatModels,Pyecharts,Bokeh,Blaze,Plotly,NetWorkX,Biopython,SymPy和gwpy等數(shù)據(jù)科學(xué)庫(kù)簡(jiǎn)直無(wú)敵,都喊出了,從excel學(xué)Python了。
老大Java:數(shù)據(jù)分析我雖然也有jar提供,但是我派了我的兒子scala去幫我完善。
老二C老四C++:這東西不是SPSS,stata,tableau,powerbi,excel,Echart,F(xiàn)ineReport等強(qiáng)大的數(shù)據(jù)分析工具就可以解決了,都是用我們和老大開發(fā)的,干嘛還要寫代碼。
老三Py:我一把屠龍劍Pycharm,一把倚天劍anaconda,一個(gè)開發(fā),一個(gè)數(shù)據(jù)分析,雙劍合并,威力無(wú)敵。
老大Java:比IDE開發(fā)工具,我可不怕,我有Eclipse,MyEclipse,IntellijIDEA,NetBeans功能厲害到爆。
老二C老四C++:Dev-C++,C-free,CLion,Code::Blocks,CodeLite,C++Builder,我們覺(jué)得同樣沒(méi)問(wèn)題。
老三Py:我的Web開發(fā)Django社區(qū)非常龐大,江湖上,Python有兩條腿跑,一腿就是我的django,因?yàn)閮扇f(wàn)個(gè)包,一萬(wàn)以上都是我的Django,再加上了其他兒子flask,tornado,我開發(fā)了國(guó)內(nèi)的豆瓣、知乎,國(guó)外:Instagram、Disqus、NationalGeographic、NASA
老大Java:Web開發(fā),你還敢比,我就拿出一個(gè)Spring家族就夠了,SpringMVC,SpringBoot,SpringCloud,再說(shuō)了我還有自己的Tomcat,Jetty應(yīng)用服務(wù)器,微服務(wù)的架構(gòu)早就深化人心。如果以前的網(wǎng)站不是用php開發(fā),那基本就是我以前的Servlet,jsp開發(fā)的(雖然落后了,但基本都在維護(hù)),現(xiàn)在網(wǎng)站開發(fā)首選我的Spring家族。
老二C老四C++:雖然在網(wǎng)站開發(fā)我們幾乎沒(méi)有市場(chǎng),但是軟件開發(fā)都是采用我們的,比如早期的QQ,微信,支付寶等大部分軟件都是我們開發(fā)的。
老三Py:有本事比一比現(xiàn)在最火的人工智能,我的機(jī)器學(xué)習(xí)sklearn,深度學(xué)習(xí)keras,Pytorch,tensorflow,Caffe,PaddlePaddle,哪個(gè)不知道,哪個(gè)不用?就是因?yàn)檫@個(gè),我才算最近的王者。
老大Java:你是不是想王者榮耀想多了,王者榮耀的客戶端應(yīng)該是C#(Unity3D)開發(fā)的,核心后端服務(wù)是C++開發(fā),可沒(méi)有你的份。人工智能,我怎么實(shí)現(xiàn)不了,我的深度學(xué)習(xí)庫(kù)——DL4J、ND4J以及Deeplearning4j,深度學(xué)習(xí)框架就是因?yàn)閿?shù)據(jù)分析者只會(huì)用Python,才讓你火到現(xiàn)在。
老四C++:CPP-Call-Tensorflow,Caffe2C++API,PyTorch-CPP,我的性能比你的好不知道多少倍。對(duì)了,說(shuō)說(shuō)性能,老三,你這不怎么行。
老大Java補(bǔ)刀:連數(shù)據(jù)都沒(méi)有,老三你做什么人工智能,看看得我的apache社區(qū)的大數(shù)據(jù)框架ApacheHadoop,ApacheHive,ApacheHbase,ApacheSqoop,ApacheFlume,ApacheSpark,ApacheBeam,ApacheFlink,ApacheStorm,SparkStreaming,ApacheOozie還有CloudersManager(CDH)都是我開發(fā)出來(lái),大數(shù)據(jù)平臺(tái)都是我干的,沒(méi)有了數(shù)據(jù),你做什么Ai,你是不是猴子請(qǐng)來(lái)的逗逼?
老三Py:游戲方面,我可以有我的Pygame,性能方面,我承認(rèn)比較低效,大數(shù)據(jù)不是還有我的pyspark?
老五C#:你的Pygame就是小孩子過(guò)家家的,游戲市場(chǎng)我已經(jīng)占領(lǐng),老三你可不要來(lái)。
老大Java笑道:spark是我的兒子scala開發(fā)的,spark就是為了你們這些數(shù)據(jù)分析的人不會(huì)我(Java)和我兒子(scala),你們的壓力下,不好意思的開發(fā)了pyspark,對(duì)Python提供了APi,再說(shuō)了我們也給R提供了Rspark。話說(shuō),老R從前十掉下到了十一。
老R:就是你老三一直打擊我,害得現(xiàn)在數(shù)據(jù)分析的人員不學(xué)習(xí)R了,都以為學(xué)你,就天下無(wú)敵了。
老四C++:就是明明每個(gè)人占領(lǐng)一種市場(chǎng)就夠了,現(xiàn)在提出了”人生苦短,我學(xué)Python“口號(hào)。
老三Py:就是要”人生苦短,我學(xué)Python“。
老大Java:就是因?yàn)槟悖Φ盟腥说木幊趟街唤迪聛?lái)。Java開發(fā)人員學(xué)習(xí)Python,就是分分鐘的事情。
老二C:不要說(shuō),大學(xué)我敢保證所有人都必須學(xué)習(xí)我開始。
老四C++:有本事你讓學(xué)Python的來(lái)學(xué)我或者老大,我不信他能學(xué)得了。學(xué)我的人基本被我折磨死了,學(xué)你py就是分分鐘的事情,有本事繼續(xù)聊性能,我好像記得知乎得推薦系統(tǒng)用go重寫了,還不是因?yàn)槟愕男省?/p>
老十go:今天我難得上了前十,什么”人生苦短,我學(xué)Python“,明明就是”2020年,我們一起學(xué)go“。
老三Py:我去你的,你老十有什么資格說(shuō)話?再說(shuō)了我有cpython,Numba提高運(yùn)行速度不就可以了嗎?
老大Java:那你老三有什么資格在我面前說(shuō)話,你連多線程和并發(fā)都處理不好,還不如提出我的口號(hào)”O(jiān)nceWrite,RunAnywhere“,一次編寫,到處運(yùn)行,我的強(qiáng)大的JVM,你老三有嗎?
老三Py:我可以用Pyinstall打成exe,到處運(yùn)行,不就是”一次編寫,到處運(yùn)行“,
老大Java:我的強(qiáng)大,你不知道,你還是在mac和liunx運(yùn)行你的exe吧。我還有一個(gè)兒子Kotlin和我占領(lǐng)APP市場(chǎng),你有APP市場(chǎng)嗎,還想當(dāng)大佬,這日子是不是有點(diǎn)早了。
老三Py:我有kivy開發(fā)APP。
老二C老四C++:老三,你怎么不說(shuō)用flutter開發(fā)APP?
老三Py:那是Google開源的UI工具包,關(guān)我毛事。
老二C老四C++:flutter的底層是基于我們的開發(fā)的。
老三Py:我不管,反正現(xiàn)在人人學(xué)Py,我的市場(chǎng)就是慢慢變大,我就是當(dāng)老大。
老二C:我從1972年誕生,可以說(shuō)我是老三你的長(zhǎng)輩。Java可是運(yùn)行在全球的三十億設(shè)備上的,我都沒(méi)有把握當(dāng)老大,你哪里來(lái)的勇氣?
老三Py:我是從1991年出生,Java可是1995年出生,這樣我不就是老大的長(zhǎng)輩嗎?
老大Java:老三說(shuō)得沒(méi)錯(cuò),老三要當(dāng)老大,他膨脹了,要先超越老二你了。
老二C:什么?老三,他連編譯器都沒(méi)有,一個(gè)解釋器基于我的編譯器,竟然敢叫囂超越我,用我編譯器,底層封裝我的代碼,沒(méi)有我,哪里來(lái)你,腳本就是腳本,動(dòng)態(tài)語(yǔ)言就是動(dòng)態(tài)語(yǔ)言,老大,老四和我哪個(gè)不是靜態(tài)語(yǔ)言,哪個(gè)沒(méi)有自己的編譯器?信不信我不給你用我的編譯器,讓你從前十消失。
老三Py:臥槽,爸爸,我錯(cuò)了,別讓我從前十消失啊。
一聲不吭的老八php叫道:php才是最好的語(yǔ)言。
我想說(shuō)的
Python這語(yǔ)言,只適合作為加分項(xiàng),不適合作為技術(shù)支撐。因?yàn)樗鼘懖涣藦?fù)雜邏輯。只適合寫一個(gè)爬蟲,計(jì)算器,記事本,Qt之類的小程序。Python超越了Java和C,那是不可能的。Python從老四超越了C++,已經(jīng)是一個(gè)很震驚的大事了。
說(shuō)這個(gè)也許有人不服,憑什么Python就寫不了復(fù)雜邏輯?豆瓣和知乎不是用Python寫的嗎?
先聲明,豆瓣的后端,已經(jīng)廢棄了絕大部分的Python代碼,重新寫過(guò)了。youtube也正在重寫中。目前以Python為主的網(wǎng)站,就只有知乎這么個(gè)獨(dú)苗,而且知乎的推薦算法已經(jīng)用go重寫了。
為什么?不是因?yàn)镻ython的性能慢,而是因?yàn)镻ython的語(yǔ)法太悲劇了。也許Python的語(yǔ)法簡(jiǎn)潔,在初學(xué)者看來(lái)是優(yōu)點(diǎn)。因?yàn)槌鯇W(xué)者一般練手,都只寫1000行以下的小玩意,Python的語(yǔ)法簡(jiǎn)直爽翻了,真沒(méi)任何缺點(diǎn)。
但如果你真的嘗試用Python封裝幾十個(gè)類,去寫個(gè)一萬(wàn)行以上的東西,自然就明白它的語(yǔ)法問(wèn)題有多嚴(yán)重了。不只是難受,而是根本寫不下,去維護(hù)成本太大了。沒(méi)有靜態(tài)類型檢查是主要原因。能解決么?也能,好的模塊設(shè)計(jì)還有codereview能回避掉一些,不過(guò)這樣一來(lái)也就抵消掉一些Python能帶來(lái)的快速開發(fā)的優(yōu)勢(shì)了。
還是江湖那句話,動(dòng)態(tài)一時(shí)爽,重構(gòu)火葬場(chǎng)。并不適合大項(xiàng)目,Python還是適合原型,前期項(xiàng)目。
搞it要想混得好,如果哪能只會(huì)一樣?xùn)|西呢,除非你不想混好,拼得就是綜合素質(zhì),除非你Python登峰造極的程度,python五分鐘都能入門,Python的語(yǔ)法和英語(yǔ)完全一樣。學(xué)Python的人,去學(xué)Java,真的覺(jué)得很難。
如果按難度評(píng)分0-5的話,Python沒(méi)有難度指數(shù)0,php難度指數(shù)1,go難度指數(shù)2,Java難度指數(shù)3,C++/C難度指數(shù)4。靜態(tài)語(yǔ)言的難度是比動(dòng)態(tài)腳本難的,如果你是編程零基礎(chǔ),建議從學(xué)習(xí)Python,再深入到Java。一手Python,一手Java基本在市場(chǎng)屬于比較靠前的水平。
阿里基本Java的天下,騰訊的前世是靠C/C++出生,華為主要業(yè)務(wù)是在硬件方面,也需要C/C++的編程基礎(chǔ)。百度,字節(jié)相反用的Python,go,ruby比較多。
不過(guò)如果自己想要有更長(zhǎng)遠(yuǎn)的發(fā)展,只學(xué)python肯定是不夠的,個(gè)人覺(jué)得Java、Python這二門語(yǔ)言都熟練掌握最好。如果想成為大神,那就補(bǔ)充一個(gè)C++,你就是無(wú)敵的存在。
@Author:Runsen公眾號(hào):潤(rùn)森筆記
這個(gè)分好多種,比如前段、后臺(tái)、嵌入式開發(fā)、全棧、移動(dòng)開發(fā)等。
如前端開發(fā)的語(yǔ)言有:HTML、CSS、JavaScript、HTML5、CSS3、JQuery庫(kù)、Vue框架、微信小程序等;后端開發(fā)的語(yǔ)言有:PHP、Java、SpringBoot、Python、C、C++、C#等;移動(dòng)開發(fā)的語(yǔ)言有:Android、IOS等。
太多了,使用人數(shù)較多的有java,C#,C,C++,html,javascript,php......
現(xiàn)在最火熱的就是python