
曾幾何時(shí),軟件開(kāi)發(fā)人員一直在使用C語(yǔ)言環(huán)境。幾年之后,Java出現(xiàn)在一個(gè)更好的選擇,具有一些獨(dú)特的優(yōu)勢(shì)。

例如:
Java具有更好的OOP支持,緊湊和全面的編碼模式。
Java具有強(qiáng)大的庫(kù),使開(kāi)發(fā)人員能夠超越桌面,Web甚至移動(dòng)應(yīng)用程序開(kāi)發(fā)。
Java是一種編譯語(yǔ)言,要在任何計(jì)算機(jī)/設(shè)備上運(yùn)行Java代碼,必須先安裝Java虛擬機(jī)。
再后來(lái)Python出現(xiàn)了,與Java不同,Pythons是一種解釋語(yǔ)言。 因此,Python不需要任何虛擬機(jī)來(lái)運(yùn)行代碼。 相反,Python代碼直接由機(jī)器解釋并轉(zhuǎn)換為機(jī)器可以遵循/理解的字節(jié)代碼。
Java之所以能得到廣泛的應(yīng)用,一個(gè)重要的原因是Java的互聯(lián)網(wǎng)基因,從Applet到Servlet、JSP,從RMI到JMS再到ejb,從Struts到Spring,java這一路走來(lái)正是互聯(lián)網(wǎng)技術(shù)發(fā)展的縮影。
Java以豐富的功能、強(qiáng)大的性能、可靠的表現(xiàn)、優(yōu)秀的擴(kuò)展性贏得了研發(fā)人員的青睞,目前互聯(lián)網(wǎng)大型商業(yè)服務(wù)平臺(tái)大多采用了Java技術(shù),這就是對(duì)Java性能的高度認(rèn)可。
Python的流行有一個(gè)重要的原因就是簡(jiǎn)單,Python做場(chǎng)景開(kāi)發(fā)比Java要簡(jiǎn)單太多,尤其是做大數(shù)據(jù)和人工智能領(lǐng)域的研發(fā)。一方面Python的語(yǔ)法結(jié)構(gòu)比較簡(jiǎn)單,比較符合程序員對(duì)開(kāi)發(fā)語(yǔ)言的預(yù)期,另一方面Python的庫(kù)非常豐富,寫(xiě)程序就像在“搭積木”一樣。

Python擁有簡(jiǎn)單、免費(fèi)、兼容性、面向?qū)ο?、?kù)豐富等突出優(yōu)點(diǎn),這幾年可以說(shuō)是紅得一塌糊涂,一路高歌猛進(jìn),主流深度學(xué)習(xí)框架比如TensorFlow、Theano、Keras等等都是基于它開(kāi)發(fā)的。
在未來(lái)在大數(shù)據(jù)、機(jī)器學(xué)習(xí)方面Pyton應(yīng)該會(huì)得到更廣泛的使用。

Python
優(yōu)點(diǎn) :
語(yǔ)法簡(jiǎn)潔優(yōu)美, 功能強(qiáng)大, 標(biāo)準(zhǔn)庫(kù)跟第三方庫(kù)灰常強(qiáng)大, 應(yīng)用領(lǐng)域非常廣,跟PHP形成了鮮明的對(duì)比!
語(yǔ)言方面, 舉幾個(gè)例子:
一切都是對(duì)象!!!
類(lèi)(class本身)/函數(shù)/類(lèi)方法是callable的對(duì)象
因?yàn)槭菍?duì)象,所以你當(dāng)然可以傳來(lái)傳去啦. 比如:
List表達(dá)式(其他好多語(yǔ)言也有,但是我最喜歡python的寫(xiě)法):
把”1023″變成 [1, 2, 3]
(當(dāng)前你可以用Lisp風(fēng)格的: map(int, filter(lambda x: x != “0”, “1024”)))
對(duì)dict也是類(lèi)似:
yield關(guān)鍵字:
當(dāng)你需要返回很多東西然后一個(gè)一個(gè)用的時(shí)候, 你可以一次返回一個(gè)
裝飾器@:
把something_heavy()返回的結(jié)果緩存起來(lái)(以函數(shù)名+args為緩存的鍵值,只緩存最近使用的10條)
運(yùn)算符重載:
試試numpy, 你會(huì)驚呆的, 操作向量/矩陣跟基本類(lèi)型一樣方便
缺點(diǎn):
慢
目測(cè)python是最慢的腳本語(yǔ)言,比V8上的JS還慢不少。 (研究一下描述符,你會(huì)發(fā)現(xiàn)python調(diào)用對(duì)象方法的開(kāi)銷(xiāo)好大!)
但是python創(chuàng)始人說(shuō)了, 一般程序的瓶頸在于20%的代碼, 所以你可以把那20%的代碼用C重寫(xiě)(因?yàn)閜ython是膠水語(yǔ)言,顧名思義,在多個(gè)語(yǔ)言之間左右逢源,游刃有余,用C重寫(xiě)部分代碼當(dāng)然很easy啦)
同時(shí),你可以試試PyPy, 引入了JIT技術(shù)。
動(dòng)態(tài)類(lèi)型
有人說(shuō): 動(dòng)態(tài)類(lèi)型寫(xiě)時(shí)爽, 重構(gòu)起來(lái)是災(zāi)難。
對(duì)于不寫(xiě)unittest, 不做代碼覆蓋率測(cè)試的人來(lái)說(shuō), 動(dòng)態(tài)語(yǔ)言當(dāng)然是危險(xiǎn)的, 拼寫(xiě)錯(cuò)誤都可能被隱藏, 重構(gòu)?別搗亂!
python創(chuàng)始人有話說(shuō): “如果你認(rèn)為編譯器可以幫你解決所有問(wèn)題,那你一定干編程沒(méi)多久,不管什么程序,都需要寫(xiě)testcase, 既然要寫(xiě)testcase, 那么動(dòng)態(tài)類(lèi)型不是問(wèn)題!”
Java:
優(yōu)點(diǎn)
用幾個(gè)詞形容一下Java語(yǔ)言:優(yōu)美,嚴(yán)謹(jǐn),健壯,不易出錯(cuò)。
當(dāng)然,使用也非常的廣泛: 常年盤(pán)踞編程人員數(shù)量排行榜第一名!
各種庫(kù)也灰常多: akullpp/awesome-java · GitHub
同樣的代碼, 相比C++(甚至python), Java代碼出BUG的概率要小點(diǎn)(當(dāng)然,寫(xiě)的時(shí)候一般會(huì)比python長(zhǎng))
Java從語(yǔ)言設(shè)計(jì)上盡量避免了程序員犯錯(cuò),比如自動(dòng)垃圾回收, 拋棄無(wú)符號(hào)類(lèi)型, 安全的枚舉,編譯期泛型檢查(Java1.5之后加入的泛型,但是只是用來(lái)做編譯器檢查,運(yùn)行時(shí)跟以前一樣),強(qiáng)制的異常處理(遇到異常必須catch或者申明throws) 等等(當(dāng)然,某些特性python也有)
Java標(biāo)準(zhǔn)庫(kù)和好多第三方代碼都充斥著濃濃的設(shè)計(jì)感!!! 各種設(shè)計(jì)模式到處可見(jiàn)。 從下面的語(yǔ)句可以看出一點(diǎn)來(lái):
好多字, 看它們的:
C:
Python:
Java代碼多,但是API可復(fù)用行更強(qiáng),選擇更多(我想一次讀完文件,不要buffer呢?)
因?yàn)榻寻踩?,所以Java成了企業(yè)級(jí)后臺(tái)的標(biāo)準(zhǔn)。想想銀行后臺(tái), 關(guān)鍵地方出點(diǎn)bug可不得了。
缺點(diǎn):
要敲好多代碼, 參考上面的例子…
沒(méi)有Python那些奇葩特性,靈活性不足,怎么寫(xiě)你還是Java, 而Python可以寫(xiě)的像Javascript/Lisp/Matlab…..
簡(jiǎn)單來(lái)說(shuō), Python是給人設(shè)計(jì)的(人生苦短,請(qǐng)用Python), C/C++更像是為機(jī)器設(shè)計(jì)的,而Java則介于兩者之間。
Java趨勢(shì):
Java正在逐漸走向中年,逐漸走向規(guī)劃市場(chǎng)逐漸消失的趨勢(shì)。但是,Java在企業(yè)和移動(dòng)應(yīng)用程序開(kāi)發(fā)中的普及是巨大的。 在靜態(tài)類(lèi)型的編程腳本中,Java仍然是一個(gè)王者。
Java是一種定義良好的語(yǔ)言,因此如果不先定義類(lèi),就無(wú)法編寫(xiě)代碼。 作為一種令人敬畏的OOP語(yǔ)言,準(zhǔn)備開(kāi)發(fā)人員的導(dǎo)師將首先學(xué)習(xí)Java。因此,開(kāi)發(fā)人員可以習(xí)慣于最新的編碼樣式,模式和最佳實(shí)踐。
Java是多線程語(yǔ)言,運(yùn)行在8核CPU上 由于市場(chǎng)競(jìng)爭(zhēng)激烈,真正的Java開(kāi)發(fā)人員正在使代碼緊湊,編碼速度更快,并且從以前的版本中獲得更大的靈活性。 由于功能強(qiáng)大的JVM,跨平臺(tái)和設(shè)備的交叉兼容性在市場(chǎng)上是不兼容和無(wú)與倫比的。
因此,90%的財(cái)富500強(qiáng)公司或企業(yè)更喜歡Java。 谷歌從一開(kāi)始就選擇Java作為其Android平臺(tái),因?yàn)樗诩夹g(shù)和一般意義上都有巨大的優(yōu)勢(shì)。
Python趨勢(shì):
今天,Python正在發(fā)達(dá)國(guó)家和富裕國(guó)家獲得驚人的增長(zhǎng)和普及,人們開(kāi)放并提供即將到來(lái)的技術(shù),如AI,物聯(lián)網(wǎng),機(jī)器學(xué)習(xí)和基于大數(shù)據(jù)的應(yīng)用程序開(kāi)發(fā)以及創(chuàng)新初創(chuàng)公司的實(shí)施。
Python在桌面應(yīng)用程序,Web應(yīng)用程序,網(wǎng)絡(luò)服務(wù)器和媒體工具中非常有用。 Python非常適合提高開(kāi)發(fā)人員的工作效率,提高語(yǔ)言的靈活性,支持優(yōu)秀的庫(kù),并且易于學(xué)習(xí),特別是誰(shuí)知道至少有一個(gè)像Java這樣的OOP腳本。
Python由于其全局解釋器鎖(GIL)而是單線程的,并且目前在單個(gè)CPU核上運(yùn)行。
Python是新一代開(kāi)發(fā)人員的最?lèi)?ài),Python開(kāi)發(fā)人員的需求高于Java。因此,Python開(kāi)發(fā)人員的薪水高于Java開(kāi)發(fā)人員。Python編碼需要更少的代碼行來(lái)表達(dá)Java的相同內(nèi)容。當(dāng)任何錯(cuò)誤或異常發(fā)生時(shí),它可以節(jié)省大量編寫(xiě)和檢查代碼的時(shí)間。
Python是一種有文化的編程語(yǔ)言 在早期,編程語(yǔ)言?xún)H用于應(yīng)用程序開(kāi)發(fā),但是今天,除了開(kāi)發(fā)之外,它還有各種各樣的應(yīng)用程序。這意味著非程序員也會(huì)在沒(méi)有編程技巧的情況下跳上代碼。
Java具有簡(jiǎn)潔的語(yǔ)法和開(kāi)發(fā)人員,可以創(chuàng)建軟件應(yīng)用程序。但是,Python在這方面有所不同。它簡(jiǎn)單易懂,易于編碼,學(xué)習(xí)曲線流暢。
Python的另一個(gè)重要方面是能夠?yàn)閺?qiáng)大的應(yīng)用程序/用途構(gòu)建良好的編碼技術(shù)。因此,Python正在成為技術(shù)學(xué)校和大學(xué)中流行的編程語(yǔ)言。學(xué)生從不覺(jué)得他們正在做一些像編程這樣的特殊事情。相反,他們?cè)趯?xiě)一篇文章時(shí)接近它。 在有文化的編程技術(shù)中,代碼,解釋性散文,圖像,圖形和其他表示材料屬于單個(gè)文檔,并且代碼仍然可以與環(huán)境一起執(zhí)行。
Python支持使用Leo和Jupiter Notebook(如IDE)的文字編程環(huán)境。 因此,Python是一種有文化的編程語(yǔ)言,在演示,演示,教學(xué),協(xié)作和研究等各個(gè)領(lǐng)域都表現(xiàn)出色。
Python和Java性能方面的比較 當(dāng)我們從技術(shù)上說(shuō)Java正在使用虛擬機(jī)(JVM)在任何機(jī)器上執(zhí)行代碼時(shí),我們知道它總是會(huì)保持快速的性能。解釋性編程的性能總是很慢。因此,與Java相比,Python仍然較慢。 不幸的是,它總是不正確。根據(jù)規(guī)則,語(yǔ)言的性能依賴(lài)于環(huán)境。需要考慮的另一個(gè)問(wèn)題是庫(kù)的類(lèi)型和功能,編碼樣式和應(yīng)用的范例。
Python支持多種范例,例如功能,OOP和它的混合。而Java只有一個(gè)而且它是OOP。但是,如果您已經(jīng)在Python中開(kāi)發(fā)了一個(gè)應(yīng)用程序,但是當(dāng)您要擴(kuò)展它時(shí),您必須使用Java。因此,從某種意義上說(shuō),性能成為一個(gè)復(fù)雜的指標(biāo),與Java直接比較是一場(chǎng)噩夢(mèng)。
市場(chǎng)份額和社區(qū)支持比較
Java與Python 當(dāng)我們考慮一種語(yǔ)言的市場(chǎng)份額時(shí),可靠的市場(chǎng)調(diào)查是很容易知道的工具。根據(jù)兩年前和今年進(jìn)行的此類(lèi)調(diào)查,我們觀察到Java仍處于領(lǐng)先地位,而2017年的Python排名第五,但在2019年,它緊挨著Java。 測(cè)量員根據(jù)招聘人員在一段時(shí)間內(nèi)的招聘數(shù)量方面的需求,考慮了一種語(yǔ)言的流行程度。因此,我們可以說(shuō)Java和Python之間的差異很小。
另一個(gè)用于比較的指標(biāo)是開(kāi)發(fā)者社區(qū)。語(yǔ)言社區(qū)的數(shù)量比其他語(yǔ)言的數(shù)量更多表明開(kāi)發(fā)人員如何采用它以及您可以從社區(qū)獲得多少?gòu)?qiáng)有力的支持。 毫無(wú)疑問(wèn),就用戶(hù)組而言,Java擁有比Python更大的開(kāi)發(fā)人員社區(qū)。這些小組可在各種技術(shù)論壇和平臺(tái)上使用。他們還能夠向另一位開(kāi)發(fā)人員伸出援助之手,無(wú)論是免費(fèi)還是收取合理費(fèi)用。
當(dāng)我們比較編程腳本的流行度時(shí),還需要在這里公開(kāi)一個(gè)事實(shí)。一些編程領(lǐng)域比其他語(yǔ)言更適合特定語(yǔ)言。 適用于Java和Python的多語(yǔ)言FTW 今天,全棧開(kāi)發(fā)是市場(chǎng)上的流行語(yǔ)。這意味著全棧開(kāi)發(fā)人員具有各種語(yǔ)言,平臺(tái)和框架的工作能力。
因此,當(dāng)一組開(kāi)發(fā)人員發(fā)現(xiàn)適合特定項(xiàng)目及其目標(biāo)時(shí),他們可能更喜歡某種語(yǔ)言。 例如,Python是數(shù)據(jù)科學(xué)家,AI專(zhuān)家和機(jī)器學(xué)習(xí)應(yīng)用程序開(kāi)發(fā)的最佳選擇。當(dāng)動(dòng)態(tài)/服務(wù)器端,嵌入式和跨平臺(tái)應(yīng)用程序開(kāi)發(fā)成為必需品時(shí),Java可能會(huì)非常出色。