我为什么讨厌 Java

By guenchi at 2017-12-04 • 0人收藏 • 461人看过

http://yuheng.io/articles/i-hate-java


因為它太容易了。

Java的容易不僅在簡單好學,更在於它超強的健壯性:靜態類型系統和自動垃圾收集保駕護航,很靠譜的的運行環境和層出不窮的自動工具雙雙加持,把Java環境開發難度降到前所未有的低。對著文檔東抄抄西改改,基本上只要能編譯過,Eclipse沒抱怨什麼,這份代碼也就差不多能用了。

如果換去寫 C, 只要你寫一個比 Hello World 複雜一點的程序,你就要開始考慮一大堆設計問題:數據結構,內存管理,句柄誰關閉指針跑哪了等等等等,設計考慮只要有一點沒到位,結果通常只有一個——直接掛掉。即使你去寫 Javascript, 難度也比 Java 高,人說 Javascript 是 copy&paste 語言,Java 纔是正宗 copy&paste 語言:你的 Javascript 工程只要稍微大點,你就不得不考慮代碼規範、設計模式約束之類,不然你的代碼就是一灘扶不上牆的爛泥。而 Java 呢,嘿嘿,再龐大的代碼庫你都能一直 copy&paste 下去。

所以,如果程序員能在 C 或者 Javascript 這種險惡的開發環境下生存下來,做出能用的東西,他們的水平也差不到哪去 —— 沒錯,我的意思是,程序開發語言可以作為一個水平篩選器,Haskell 開發強,不見得全是語言好,而是它的類型系統和 monad 給團隊成員做了個強度不低的智商測試。至於 Java,它用優異的語言特性和工具生態,把門檻設置得無可再低。

低要求必然造成低水平的程序員入行,低水平的程序員必然造成爛設計,而爛設計是會傳染的。

當然,門檻低不代表 Java 社區裡沒好程序員,沒好設計。不,我也見過很多好Java代碼,可是他們的工作並沒有得到應有的獎賞。這是因為一種 Java 社區特別熱衷的東西——設計模式。Java被宣稱是「面向對象」語言,給人一種用 Java, 把有的沒的都塞進對象裡就面向對象編程了的假象。而這個社區熱衷的「設計模式」,也是一個思路:把模式背熟了會套用了,也就會做設計了。如果天天胡寫亂改不思進取還讓程序員內心有一絲不安的話,設計模式大補丸的橫空出世讓他們徹底放了心:看幾本設計模式書就能習得N年設計功力,「設計」也終於變得如此廉價。

一個好的架構師分析項目,採用 DI, 精心定義接口和 DI 使用的範疇,在一個看過幾篇文章試用過Guice就言必稱DI的新手看來也不過爾爾,甚至還會嫌不夠標準和純粹。我看過的 Java 好代碼,外面往往被疊床架屋地壘上了各式各樣的模式接口抽象,似乎只有這樣才能合乎他們的口味吃得下去。爛設計固然不會給項目帶來什麼好處,但還是拜 Java 的健壯性所賜,如此胡鬧,代碼還是能跑下去,既然能跑,還有什麼可抱怨的?

好設計還是會閃光的,好設計更容易維護,隔好久都不用改動。而爛設計,即使堆砌上了無數設計模式,過不久就會被發現不再合用。這時,最後一個大殺器「重構」終於出場了:工具太好用了,重構太容易了。這個模式不 work, 下次重構時就做另一個模式咯…… 沒人會去想,早幹嘛去了?如果當初設計做得好,為什麼現在要重構?不過沒所謂了,反正重構很容易嘛,而且這麼有追求的行為,說出去也好聽。真正的設計功力,再次被忽略了。

今天的Java, 有強大可靠的核心基礎,有大量標準化的規範、模式,一群不需要什麼經驗的代碼工人就能做出基本符合預期的軟件來。這就是工業化大生產:產品不夠漂亮精緻,但便宜量又足,規格標準肯定能用;工人水平比專家差一大截,但規模優勢吞噬一切。他們不需要大師:大師能做到100分,一群工人可能只能做到60分,但對世界上大多數人,60分足夠了,更何況工人一抓一大把,大師卻可遇不可求。

我還是把自己當成一個手藝人,所以我討厭Java.

— Yuheng
Mar 12, 2015


5 个回复 | 最后更新于 2018-01-18
2017-12-13   #1

有道理,现代社会需要的更多的是码农,it民工所以java才这么火热啊

2017-12-13   #2

回复#1 @lovescar :

是啊 虽然有种种缺点 但是顺应潮流啊

2017-12-13   #3

回复#1 @lovescar :

java虽然写起来很烦 但捅不了大篓子


高层才不管你写起来烦不烦呢 少捅篓子他们就少背锅

2018-01-17   #4

我也讨厌Java,但是就个人接触过的语言,还是觉得Java的包管理最成熟。或许和它的流行程度有关。


没有在企业中使用C++做过开发,但是看到过比较资深的工程师写的C++项目,他会把几乎所有依赖到的C++代码都放在代码,最后编译出一个版本放到线上。我觉得这种写代码的方式很累。


Python的包管理器也非常恶心。不过现在都用docker,或许会好很多。


所以我觉得Scala非常棒

2018-01-18   #5

回复#4 @sadhen :

python那是太恶心了


个人觉得npm很赞 所以我们的包管理器就是模仿npm的

登录后方可回帖

登 录
信息栏

Scheme中文社区

推荐实现 ChezScheme / r6rs / r7rs large
theschemer.org
Q群: 724577239

精华导览

社区项目

包管理器:Raven
HTTP服务器:Igropyr (希腊火)
官方插件:vscode-chez

社区目标:

完善足以使Scheme工程化和商业化的库,特别是开发极致速度的Web服务器和ANN模块。

一直以来Scheme缺少一个活跃的中文社区,同时中文资料的稀少,导致大多数因为黑客与画家和SICP而接触Scheme的朋友,在学完SICP后无事可做,不能将Scheme转换为实际的生产力。最后渐渐的放弃。
同时Chicken等实现,却因效率问题无法与其他语言竞争。本社区只有一个目的,传播Scheme的文明之火,在最快的编译器实现上,集众人之力发展出足够与其他语言竞争的社区和库。


友情链接:

Clojure 中文论坛
函数式·China


Loading...