這些優勢主要體現在哪些領域和什麼樣的情景?
回複內容:
雙方都可以列出很多優點,然而這個問題太過草率了……
這裡替Java說幾句話:
JVM的品質遠勝於 Python 的虛擬機器。在JVM環境可以構建起高品質的Python解釋環境,反過來不行。
Java對IDE更友好。
你要想騙Python程式員加班,得談人生理想,談股權,談加班費,談情懷。跟Java程式員談加班,告訴他這是編程規範就好了。沒有什麼誰比誰好,只有誰更適應。
java:用的人多,平台,工具,庫很成熟。企業級應用比較多
python3:靈活,現在正在流行中,後台開發用它也是很快的。可以把小項目輕而易舉地寫成大型項目。Python寫一些簡單的指令碼,小項目比較方便,迭代也快。
當項目大到一定程度java就有優勢了,項目易於維護管理。
動態類型用起來方便,然而並不是很讓人放心除了500行上下的臨時指令碼之外,Java幾乎在任何場合都比Python好
- 絕對效能好;又是真多線程
- 絕大多數Java的庫都是Pure的(即純Java位元組碼),可以隨便部署到目標機上不用擔心跑不起來。Jar格式可以自己任意合并
- 有JMX植入式對象監視器/控制器
- 強靜態類型系統意味著編譯器和靜態檢查器自動幫你寫了N多測試
- 沒有2 or 3版本大分裂(絕殺)
說Java不好的人一般都是嫌Java常見架構累贅 -- 這個完全可以用自己寫的輕量架構代替。還有些人嫌某些Java IDE不Sexy,這簡直是現代版買櫝還珠(何況我覺得IntelliJ IDEA夠好看的了)我有個比較“激進”的觀點:你要是採用物件導向方式開發軟體,特別是那些規模大些的包容複雜邏輯和處理流程的軟體系統,從分析、設計、再到實現,物件導向一條線貫通下來,那就請把動態類型的諸如Python之類程式設計語言給忘了吧,動態語言的靈活性在這種場合,帶來的不是好處是麻煩,使用Java/C#之類是更合適的選擇。
舉兩個例子,使用物件導向思路進行軟體系統的分析與設計時,一個基本的原則是:
類和對象的職責一定要儘可能地明確。還有一個基本原則:
找出變化點,然後封裝它,讓它的變化對系統其他部分的影響最小。
看到沒有?為了提升系統的可維護性,我們是希望盡量地控制“可變”因素對系統所帶來的影響的。既然如此,一個方法與屬性可以隨時添加與移除的對象,與物件導向設計原則是不是有衝突?
你非要在分析設計時想著:“喲,我用動態程式設計語言實現的,因此對象方法與屬性是可以隨時變化的,我要按照這個特點進行設計”,當然沒人攔著你這麼做。但做過真實商業項目的人一定有體會,那不是幾個十幾個類,通常是數百上千個類,彼此之間還有著複雜的關聯,它們建立的對象之間的互動相當複雜,通常必須遵循一堆的商務規則,就算是基於相對穩定的靜態類進行分析設計,己經夠頭大了,你再來幾條“動態”的“變色龍”攪在裡頭,那滋味,自己體會吧!這話反過來問估計會比較容易兩者的適用面都非常廣。都算是萬金油型的,只要你敢想,就可以用。。
當然java各種開發庫更多。話說,python 91年就出來了,比java和Php都要早。。現在才熬出頭。。我一直以為它是一個比較新的語言來著。。
然後,大項目開發上,java更合適。甚至,如果是不是那種密集計算型的,是比c++要好的。
因為java開發效率雖然比不上python。。
但兩者是可以一起鄙視c++的。
所以對於創業公司來說,c++在前期是完全不用考慮的,什麼時候用?使用者千萬層級。不過大部分活不到哪個時候就跪了。。所以,Python和java是創業公司不錯的選擇。
然後,java更適合大項目,是因為java在中期,使用者在百萬層級左右,但是千萬不到。。發現並發,記憶體各種不夠,但好像最佳化一把也可以用的時候。。
雖然用Python可以拓展c,但終究還是麻煩。
這個時候,jvm的強大之處就出現了。可以各種最佳化,找個熟悉jvm的人,最佳化效率就能提升不少。
大點的項目,都是選c++或者java為主,然後Python或者lua做邊角料,縫縫補補。。用java寫了個程式爬點小資料,擴充的時候聽說python不錯,就想拿來試試。
結果寫了三天了,控制台還沒打出中文來,據說是beautifulsoup的問題java崗位多,好找工作。