电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

為Java說句公道話

瀏覽:51日期:2022-09-05 17:18:49

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

為Java說句公道話

Java超越了所有咒罵它的“動態語言”

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

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

在性能上,Python比Java慢幾十倍。由于缺乏靜態類型等重要設施,Python代碼有bug很不容易察覺,察覺了也不容易debug,所以Python無法用于構造大規模的,復雜的系統。你也許發現某些startup公司的主要代碼是Python寫的,然而這些公司的軟件,質量其實相當的低。在成熟的公司里,Python最多只用來寫工具性質的東西,或者小型的,不會影響系統可靠性的腳本。

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

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

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

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

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

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

關于Go,我已經評論過很多了,有興趣的人可以看這里??傊?,Go是民科加自大狂的產物,這里我就不多說它了。

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

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

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

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

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

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

Java沒有特別討厭的地方

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

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

Java有優秀的IDE支持

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

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

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

結論

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

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

標簽: Java
相關文章:
主站蜘蛛池模板: PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 层流手术室净化装修-检验科ICU改造施工-华锐净化工程-特殊科室建设厂家 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 物流公司电话|附近物流公司电话上门取货 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 防爆电机_ybx3系列电机_河南省南洋防爆电机有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | Pos机办理_个人商户免费POS机申请-拉卡拉办理网 | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 交通信号灯生产厂家_红绿灯厂家_电子警察监控杆_标志杆厂家-沃霖电子科技 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 优考试_免费在线考试系统_培训考试系统_题库系统_组卷答题系统_匡优考试 | 光栅尺厂家_数显表维修-苏州泽升精密机械 | 中央空调维修、中央空调保养、螺杆压缩机维修-苏州东菱空调 | 岛津二手液相色谱仪,岛津10A液相,安捷伦二手液相,安捷伦1100液相-杭州森尼欧科学仪器有限公司 | 小学教案模板_中学教师优秀教案_高中教学设计模板_教育巴巴 | 阜阳在线-阜阳综合门户| 玉米深加工设备-玉米深加工机械-新型玉米工机械生产厂家-河南粮院机械制造有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 精密交叉滚子轴承厂家,转盘轴承,YRT转台轴承-洛阳千协轴承 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 博客-悦享汽车品质生活| 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 |