中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

為Java說句公道話

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

  有些人問我,在現(xiàn)有的語言里面,有什么好的推薦?我說:“Java。” 他們很驚訝:“什么?Java!” 所以我現(xiàn)在來解釋一下。

  Java超越了所有咒罵它的“動態(tài)語言”

  也許是因為年輕人的逆反心理,人們都不把自己的入門語言當(dāng)回事。很早的時候,計算機系的學(xué)生用Scheme或者Pascal入門,現(xiàn)在大部分學(xué)校用Java。這也許就是為什么很多人恨Java,瞧不起用Java的人。提到Java,感覺就像是爺爺那輩人用的東西。他們說,Java老氣,龐大,復(fù)雜,臃腫。

  某些Python程序員,在論壇里跟初學(xué)者講解Python有什么好,其中一個原因竟然是:“因為Python不是Java!” 他們喜歡這樣宣傳:“看Python多簡單清晰啊,都不需要寫類型……” 對于Java的無緣無故的恨,盲目的否認(rèn),導(dǎo)致了他們看不到Java很重要的優(yōu)點,以至于迷失自己的方向。雖然氣勢上占上風(fēng),然而其實Python作為一個編程語言,是完全無法和Java抗衡的。

  在性能上,Python比Java慢幾十倍。由于缺乏靜態(tài)類型等重要設(shè)施,Python代碼有bug很不容易察覺,察覺了也不容易debug,所以Python無法用于構(gòu)造大規(guī)模的,復(fù)雜的系統(tǒng)。你也許發(fā)現(xiàn)某些startup公司的主要代碼是Python寫的,然而這些公司的軟件,質(zhì)量其實相當(dāng)?shù)牡。在成熟的公司里,Python最多只用來寫工具性質(zhì)的東西,或者小型的,不會影響系統(tǒng)可靠性的腳本。

  靜態(tài)類型的缺乏,也導(dǎo)致了Python不可能有很好的IDE支持,你不能完全可靠地重構(gòu)(refactor)Python代碼。PyCharm對于早期的Python編程環(huán)境,是一個很大的改進(jìn),然而理論決定了,它不可能完全可靠地達(dá)到“變量換名”等基本的refactor操作。

  在設(shè)計上,Python,Ruby比起Java,其實復(fù)雜很多。缺少了很多重要的特性,有毛病的“強大特性”倒是多了一堆。由于盲目的推崇所謂“正宗的面向?qū)ο?rdquo;方式,所謂“late-binding”,這些語言里面有太多可以“重載”語義的地方,不管什么都可以被重定義,這導(dǎo)致代碼具有很大的不確定性和復(fù)雜性。Python和Ruby代碼很容易被濫用,不容易理解,容易寫得很亂,容易出問題。

  很多JavaScript程序員也盲目地鄙視Java,而其實JavaScript比Python和Ruby還要差。不但具有它們的所有缺點,而且缺乏很多必要的,方便的特性,比如基本的class定義都沒有。JavaScript的各種“WEB框架”,層出不窮,似乎一直在推陳出新,而其實呢,全都是在黑暗里瞎蒙亂撞。JavaScript的社區(qū)以幼稚著稱。你經(jīng)常發(fā)現(xiàn)一些非;镜某WR,被JavaScript“專家”們當(dāng)成了不起的發(fā)現(xiàn)似的,在大會上宣講。我看不出來JavaScript社區(qū)開那些會議,到底有什么意義,仿佛只是為了拉關(guān)系找工作。

  Python湊合可以用在不重要的地方,Ruby是垃圾,JavaScript是垃圾中的垃圾。原因很簡單,因為Ruby和JavaScript的設(shè)計者,其實都只是民科。

  Java的“繼承人”沒能超越它

  最近一段時間,很多人熱衷于Scala,Clojure,Go等新興的語言,他們以為這些是比Java更現(xiàn)代,更先進(jìn)的語言,以為它們最終會取代Java。然而這些狂熱分子們逐漸發(fā)現(xiàn),Scala,Clojure和Go其實并沒有解決它們聲稱能解決的問題,反而帶來了它們自己的毛病。這些毛病很多是Java沒有的。

  關(guān)于Go,我已經(jīng)評論過很多了,有興趣的人可以看這里。總之,Go是民科加自大狂的產(chǎn)物,這里我就不多說它了。

  我認(rèn)識一些人,開頭很推崇Scala,仿佛什么救星似的。我建議他們別去折騰了,老老實實用Java。沒聽我的,結(jié)果到后來,成天都在罵Scala的各種毛病。但是沒辦法啊,項目上了賊船,不得不繼續(xù)用下去。我不喜歡進(jìn)行人身攻擊,然而我發(fā)現(xiàn)一個語言的好壞,往往取決于它的設(shè)計者的水平,人品,和動機。很多時候我看人的直覺是異常的準(zhǔn),以至于依據(jù)對語言設(shè)計者的第一印象,我就能預(yù)測到這個語言將來會怎么發(fā)展。在這里,我想談一下對Scala和Clojure的設(shè)計者的看法。

  Scala的設(shè)計者M(jìn)artin Odersky,雖然在程序語言領(lǐng)域有所建樹,發(fā)表了不少看似高深的學(xué)術(shù)論文( 其實很多是扯淡的),然而他對于語言的“設(shè)計”,其實并不是特別在行。所以我很驚訝的發(fā)現(xiàn),有些非;镜臇|西,Scala都會搞錯。由于Odersky是大學(xué)教授,名聲在外,很多人想找他拿個PhD,所以東拉西扯的,喜歡往Scala里面加入一些不明不白,有潛在問題的“特性”,其目的就是發(fā)paper,混畢業(yè)。這導(dǎo)致Scala過度繁復(fù),加入的特性很多后來被證明沒有多大用處,反而帶來了問題。學(xué)生把代碼實現(xiàn)加入到Scala的編譯器,畢業(yè)就走人不管了,所以Scala編譯器里,就留下一堆堆的歷史遺留垃圾和bug。

  再來說一下Clojure。當(dāng)Clojure最初“橫空面世”的時候,有些人熱血沸騰地向我推薦。于是我看了一下它的設(shè)計者Rich Hickey做的宣傳講座視頻。當(dāng)時我就對他一知半解拍胸脯的本事,印象非常的深刻。Rich Hickey真的是半路出家,連個CS學(xué)位都沒有?伤欠N氣勢,仿佛其他的語言設(shè)計者什么都不懂,只有他看到了真理似的。不過也只有這樣的人,才能創(chuàng)造出“宗教”吧?Clojure大力宣傳的“特性”(什么lazy啊,pure啊,transactional memory。,都是從別的語言道聽途說抄過來,卻又沒能深刻理解其精髓。有些“函數(shù)式語言”的特性,本來就是有問題的,卻不問青紅皂白,為了“主義正確”,抄過來。所以最后你發(fā)現(xiàn)這語言是掛著羊頭賣狗肉,說得頭頭是道,用起來怎么就那么蹩腳。

  Clojure的社區(qū),一直忙著從Scheme和Racket的社區(qū)抄襲思想,卻又想標(biāo)榜是自己的發(fā)明。比如Typed Clojure,就是原封不動抄襲Typed Racket。有些一模一樣的基本概念,在Scheme里面都幾十年了,恁是要改個不一樣的名字,免得你們發(fā)現(xiàn)那是Scheme先有的。甚至有人把SICP,The Little Schemer等名著里的代碼,全都用Clojure改寫一遍,結(jié)果完全失去了原作的簡單性和精華性。最后你發(fā)現(xiàn),Clojure里面好的地方,全都是Scheme已經(jīng)有的,Clojure里面新的特性,幾乎全都有問題。我參加過一些Clojure的meetup,可是后來發(fā)現(xiàn),里面竟是各種喊著大口號的初學(xué)者,各種趾高氣昂的民科,愚昧之至。

  盲目推崇Scala和Clojure的人們,很多最后都發(fā)現(xiàn),這些語言里面的“新特性”,幾乎都有毛病。它們里面最重要最有用的特性,其實早就已經(jīng)在Java里了。有些人跟我說:“你看,Java做不了這件事情!” 后來經(jīng)我分析,發(fā)現(xiàn)他們在潛意識里早已死板的認(rèn)定,非得用某種最新最酷的語言特性,才能達(dá)到目的。Java沒有這些特性,他們就以為Java做不了,非得用另外的語言。其實,如果你換一個角度來看問題,不要鉆牛角尖,專注于解決問題,而不是去追求最新最酷的“寫法”,你就能用Java解決它,而且解決得干凈利落。

  如果現(xiàn)在要做一個系統(tǒng),真的寧可用Java,也不要浪費時間去折騰什么Scala或者Clojure。錯誤的人設(shè)計了錯誤的語言,拿出來浪費大家的時間。

  Java沒有特別討厭的地方

  Java也許缺少一些方便的特性,然而長久以來用Java進(jìn)行教學(xué),用Java工作,用Java開發(fā)PySonar,RubySonar,Yin語言,…… 我發(fā)現(xiàn)Java其實并不像很多人傳說的那么可惡。我發(fā)現(xiàn)自己想要的95%以上的功能,在Java里面都能找到比較直接的用法。剩下的5%,用稍微笨一點的辦法,一樣可以解決問題。

  很多人討厭Java,其實是因為早期的GoF Design Patterns,試圖提出千篇一律的模板,給程序帶來了不必要的復(fù)雜性。然而Java語言本身,其實跟Design Patterns并不是等價的。Java的設(shè)計者跟Design Pattern的設(shè)計者,完全是不同的人。你完全可以使用Java寫出非常簡單的代碼,而不使用Design Patterns。

  Java有優(yōu)秀的IDE支持

  我平時都用IntelliJ來寫Java代碼。我發(fā)現(xiàn)IntelliJ里面,有一些非常好的設(shè)計思想。其中很多功能,其實超越了所有的文本編輯器(Emacs,VIM……)。IntelliJ讓Java如虎添翼,開發(fā)起來感覺是在飛一樣。

  用IntelliJ的時候,你不需要為“給變量起名字”之類的事情焦慮。因為IntelliJ有非常強大而友好的refactor功能,你可以非常迅速的換掉變量的名字。所以在第一次創(chuàng)造變量的時候,你不需要花心思去起一個完美的名字。用一個還算湊合的名字,把代碼很快寫出來,實驗成功。然后再返回去看代碼,把名字換成一個更合適的就可以。

  IntelliJ還可以進(jìn)行非常迅速的結(jié)構(gòu)變換,這讓你就像藝術(shù)家在構(gòu)造一個雕塑作品。最開頭我可以大刀闊斧,把代碼劈成大致的形狀,然后再把它仔細(xì)推敲,揉捏成更好,更容易理解,更具魅力的形狀。

  結(jié)論

  我實在不忍心看著有些人被Scala和Clojure忽悠。如果沒有超級高的性能和資源需求(可能要用C這樣的低級語言),目前我建議就老老實實用Java吧。雖然不如一些新的語言炫酷,然而實際的系統(tǒng),還真沒有什么是Java寫不出來的。少數(shù)地方可能需要繞過一些限制,或者放寬一些要求,然而這樣的情況不是很多。

  編程使用什么工具是重要的,然而工具終究不如自己的技術(shù)重要。很多人花了太多時間,折騰各種新的語言,希望它們會奇跡一般的改善代碼質(zhì)量,結(jié)果最后什么都沒做出來。選擇語言最重要的條件,應(yīng)該是“夠好用”就可以,因為項目的成功最終是靠人,而不是靠語言。

標(biāo)簽: 代碼 腳本

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:2016搶紅包軟件及源碼

下一篇:Java內(nèi)部類的一些總結(jié)