[討論] Java語言被很多人抱怨語法繁瑣、開發效率低、體系繁雜而笨重,為什麼還有這麼強的生命力,尤其是在企業軟體領域?
問題源自知乎問答:Java語言被很多人抱怨語法繁瑣、開發效率低、體系繁雜而笨重,為什麼還有這麼強的生命力,尤其是在企業軟體領域?
做過五年對日外包,接觸過一點Java,提供一些觀察同事搞Java專案而得到的看法(本人主要在UNIX下寫C和Shell):
語言本身:
Java語言是不是繁瑣呢?手頭有一本《Thinking in Java》中文第四版,數了一下正文共22章856頁。隨手翻一下,示例程式碼和講解正文大概比例在1.5 : 1這樣。沒有真正用Java幹過專案的人肯定會大為驚歎:我勒個去,這麼多知識點!此為“繁”;
絕大部分搞程式設計的人,事實上,都是在使用一門語言的某個子集。該子集的形成由專案主導者發起、開發活動參與者共同決定,且相對長期穩定。每一個即將參與該專案的人肯定會先把語言學個大概(其難度參考前一條),然後再根據專案學習該語言子集,最後固化下來。不斷使用該子集固然能提升開發效率,但代價不菲,極容易就變成了專案中的一顆鏍絲釘(“專家”);
一門語言的設計肯定不會一蹴而就,一步步改良。沒記錯的話,Java誕生於1995年左右,到今天已經快滿20年。在當時那種IT環境和條件下設計出來的語言,必然存在許多妥協、限制與錯誤,既不能隨便將之抹除(可能還有很多工程依賴著),也不能隨便更正,只能通過新增新語法、新類庫來打補丁,導致語言更“繁”。舉個例子,非內建容器類庫是一個典型硬傷,再舉個例子,時間日期類沒見有多好用,也沒見有更新過,連替代品都沒見過(恕我不寫Java,的確沒見過);
類庫(框架)豐富是好事還是壞事,要看針對同一個任務能找到多少替代品。如果有三到四個,那麼肯定是好事,既不會造成單點故障,也不至於造成理解和記憶上的負擔。但是類庫太多,選擇太多,人的幸福感反而會下降,高效率也就無從談起;
框架真的可以保證快速開發嗎?熟悉的話是可以的,專家程式設計嘛!但是a)熟悉之前要花非常多時間學習使用吃悶虧,b)框架只能免除掉一部分開發工作量,c)框架跟業務總是存在“不合縫”的差異,d)只不過將複雜度從開發轉移到了部署運維,e)依賴性極強;
IDE可以提高開發效率嗎?僅僅一部分罷了。IDE本身就是個非常複雜的東西,將之調校到符合個人開發步調的程式可能會持續很久,事實上大部分人也只是用一些常用功能罷了。而且a)基於圖形介面意味著自動化不容易(需要編寫額外外掛),b)出了問題查詢原因不易,c)依賴性極強;
Java本身是面向系統(機器)的,不是面向開發人員的。這種強設計保證有助於提升目標系統的可靠性,卻犧牲了開發人員的幸福感。既然設計得如此嚴謹規範,為什麼不能自動生成Java程式,而非得找一大票北大青鳥的人來寫?
工程管理:
Java已經發展太久,太多專案依賴於它,“還在執行中的系統就不要去改動”,所以如果要選的話,後繼專案可能還是會用Java。積累下來的專案資源不復用將是巨大的浪費,但同時也會將原有的設計錯誤、補丁、複雜度一併繼承下來(能大賺一票當然好,但更好的是可以持續賺若干票);
Java的強系統可靠性保證影響了IT經理們的技術判斷和選型。有些業務第一要求是“穩”,第二要求才是“快”。如果這類業務可以分解成細小任務並行執行,沒有理由不用Java,硬體方面花錢買就是了;
IT經理們的技術選型影響著人才市場的供應。既然如此之多的公司和專案選擇Java,那麼對於人力資源供應異常豐富的中國而言,想借助初級IT能力就業那實在太容易了。反過來,人才供應豐富又進一步強化鞏固Java的地位,因為能替換的人力部件實在太多了,還便宜(真的,學Java除非能跟業務搭上關係,否則用個五年十年都是白搭);
Java語言是“業界最佳實踐”,意味著出錯了不能責怪選它和用它的人,而得責怪整個業界捧錯了它(參考《黑客與畫家》)。
其它:
- 創業公司還是不要上Java,做快速原型這玩意確實不合適,做穩定業務則可以認真考慮;
- Java該革新了;
- 如果沒有Sun和Oracle,Java又當如何?
相關文章
- mantis 修改語言為繁體
- 翻譯 | 怎麼在Java中替換掉繁雜的if語句Java
- 時至今日,為何C語言在軟體開發領域的地位仍無法撼動C語言
- 都6年過去了 為什麼企業軟體還這麼爛
- Win10系統新增繁體語言的方法Win10
- 企業級軟體系統開發為何這麼貴?
- 為什麼會有這麼多的程式語言?
- 為什麼會有這麼多程式語言
- 企業軟體領域前端開發的困境前端
- CRM系統過於繁瑣怎麼辦?
- [軟體人生]有什麼辦法擺脫人生低潮之討論
- Eclipse 不為人所知的另一面 - 企業管理軟體領域 ABAP 程式語言開發利器Eclipse
- 為什麼Julia語言這麼棒?
- 程式設計師為什麼討厭這些語言程式設計師
- 為什麼軟體會被稱為“軟體”
- PHP領域的術語對照(英中繁簡)PHP
- 企業為什麼要上管理系統軟體
- 軟體開發有什麼作用
- Java語言有什麼特點Java
- 為什麼越來越多的非計算機領域企業,在自主做軟體時都選擇使用快速開發工具?計算機
- 為什麼爬蟲語言選擇Python而不是Java?爬蟲PythonJava
- 為什麼很多公司都轉型go語言開發?Go語言能做什麼Go
- 為什麼中國開發不出流行的作業系統和程式語言作業系統
- 為什麼 Go 語言能在中國這麼火?Go
- 為什麼每個人都討厭GO語言?Go
- 軟體工程--為什麼軟體開發方法論讓你覺得糟糕軟體工程
- 為什麼越來越多的企業開始使用軟體快速開發框架?框架
- python語言有什麼特點?python應用領域有哪些?Python
- 行業應用軟體領域的問題是什麼?行業
- 為什麼那麼多人要學習go語言?go語言有什麼特點?Go
- fastjson到底做錯了什麼?為什麼會被頻繁爆出漏洞?ASTJSON
- 為什麼推薦好用的企業CRM軟體?
- 什麼是Go語言?Go語言有什麼特點?Go
- 世界上的程式語言已這麼豐富 為什麼還不夠?
- 雲流化是什麼?對軟體企業有什麼好處?
- Google 大佬們為什麼要開發 Go 這門新語言?Go
- 為什麼企業經常說:我們被軟體公司綁架了?
- 領域本體與DDD的UL語言