如果你是一个资深Java爱好者,建议直接按 Ctrl + W 完成阅读。
1995年,Sun正式对外公布了Java,并且发布了JDK 1.0。
弱鸡的语法
我2014年的时候是做ASP.NET MVC,也就是C#起步的。C#的语法相当优美,10年前的语法都吊打当前的 Java10 十条街。
C#的泛型是一个很优美的设计。这个设计,直到今天,Java 还是在用类型擦除的方式去实现。
而 C# 的泛型加上 linq,简直是神挡杀神,佛挡杀佛。与之相对比,Java 的 Stream API,啰嗦就算了,限制也一大堆。
关于这一点,可以看我写过的这篇《Java8的stream API与 C#的 LINQ 拓展方法对比》。
继母没有爱
1997年10月,Sun 向美国加州地方法院起诉微软公司违反两公司就微软使用Java技术所签定的合同,指控微软公司在自己的Java产品中做了”不恰当的修改”,违反了合同中承诺向用户提供Java兼容产品的条款。
我们认为Oracle借助Sun现有的硬件平台,能够更好地推广自己的数据库、中间件等产品。
可以说 2009 年 Oracle 公司收购 Sun 公司之后,就已经宣布了 Java 的死期。后面所做的一切都不难理解。
面向裹脚布编程
如果你有看我写的 《How To Do In Java》 就不难理解,JAVA API 是非常坑爹的。这些坑爹的地方说好听点叫做”非常稳定”,说难听点叫做”面向裹脚布编程”,正是这些不合理的设计,构成了这门语言的历史遗留债务。而且这个问题是不可解的,因为 Java 习惯向前兼容。
脑残JVM
找工作的时候你会发现,title 稍微高一点的岗位,都会有如下类似的描述:
了解JVM,包括内存模型、类加载机制以及一般内存问题审查;
Java基础扎实,熟悉IO、多线程、集合等基础原理,对JVM有一定的了解;
我觉得互联网从业者的骄傲应该在于技术创新,用技术去满足这个社会的需求。而不是满足这个语言对你的需求。
语言是一种工具,终究要为商业/业务价值服务。从资源能效比考虑,Java是一门有问题的语言(因为很占内存,启动也慢),但如果是面向稳定开发的项目,比如银行这一类不差钱的大户,Java 还是能继续发挥余热的。但 Java JVM 作为一种容器的技术传承给 docker,已经实现了它的历史使命,是该退休了。
我个人不喜欢给历史遗留问题擦屁股,写 Java 对我来说如同掏粪。
结论
Java 老矣,不能饭否。
参考链接
If you’re a die-hard Java enthusiast, I suggest you press Ctrl + W right now to close this tab.
In 1995, Sun officially announced Java and released JDK 1.0.
Weak Syntax
I started with ASP.NET MVC in 2014, which means C# was my first language. C# syntax is quite elegant—even the syntax from 10 years ago absolutely crushes Java 10.
C#’s generics are beautifully designed. To this day, Java still implements generics using type erasure.
C# generics combined with LINQ are absolutely unstoppable—they destroy everything in their path. In contrast, Java’s Stream API is not only verbose but also full of limitations.
For more on this, check out my article: Java 8 Stream API vs C# LINQ Extension Methods.
The Stepmother Has No Love
In October 1997, Sun sued Microsoft in a California court for violating their Java technology contract, accusing Microsoft of making “inappropriate modifications” to Java products and breaching the promise to provide Java-compatible products.
We believe Oracle leveraged Sun’s existing hardware platform to better promote its database, middleware, and other products.
Google Cries: Must Pay Oracle $8.8 Billion!
It’s safe to say that after Oracle acquired Sun in 2009, Java’s death sentence was already announced. Everything that followed makes perfect sense.
Foot-Binding Programming
If you’ve read my article How To Do In Java you’ll understand that the Java API is absolutely terrible. These terrible parts are euphemistically called “very stable,” but more accurately described as “foot-binding programming.” These unreasonable designs constitute the language’s historical technical debt. And this problem is unsolvable because Java insists on backward compatibility.
Brain-Dead JVM
When job hunting, you’ll notice that positions with slightly higher titles all have similar descriptions:
Understand JVM, including memory model, class loading mechanism, and general memory issue review;
Solid Java fundamentals, familiar with IO, multithreading, collections, and other core principles, with some understanding of JVM;
I think the pride of internet professionals should lie in technological innovation, using technology to meet society’s needs. Not in meeting the language’s demands on you.
A language is a tool, ultimately serving commercial/business value. From a resource efficiency perspective, Java is a problematic language (it’s memory-hungry and slow to start), but for stable development projects like banks—those big players with deep pockets—Java can still be useful. However, Java JVM, as a container technology legacy passed to Docker, has fulfilled its historical mission. It’s time to retire.
Personally, I don’t like cleaning up after historical legacy issues. Writing Java feels like shoveling manure to me.
Conclusion
Java is old and can’t eat anymore.
References
- Java 20 Years: History and Future
- JVM Series (1): Java Class Loading Mechanism
- Wait, Does Java Have Memory Leaks?
- Will Go Replace Java as the Next Enterprise Programming Language?
- Java is Old, Can It Still Eat?
- Does Java Have Value Types?
- Attacking Java - Cloud Native Evolution
- Sun-Microsoft Trial: Preliminary Injunction Order
- The Background of Java’s Birth
もしあなたが熱心なJava愛好家なら、Ctrl + Wを押してこのタブを閉じることをお勧めします。
1995年、Sunは正式にJavaを発表し、JDK 1.0をリリースしました。
弱い構文
私は2014年にASP.NET MVCから始めました。つまり、C#が私の最初の言語でした。C#の構文は非常にエレガントで、10年前の構文でさえJava 10を完全に圧倒しています。
C#のジェネリクスは美しく設計されています。今日まで、Javaは型消去を使ってジェネリクスを実装しています。
C#のジェネリクスとLINQを組み合わせると、まさに無敵です。対照的に、JavaのStream APIは冗長なだけでなく、制限もたくさんあります。
これについて詳しくは、私の記事をご覧ください:Java 8 Stream APIとC# LINQ拡張メソッドの比較。
継母には愛がない
1997年10月、Sunはカリフォルニア州の裁判所で、Java技術契約に違反したとしてMicrosoftを訴え、MicrosoftがJava製品に「不適切な変更」を加え、Java互換製品を提供するという約束に違反したと主張しました。
OracleはSunの既存のハードウェアプラットフォームを活用して、データベース、ミドルウェア、その他の製品をより良く宣伝できると考えています。
Googleが泣く:Oracleに88億ドルを支払わなければならない!
2009年にOracleがSunを買収した後、Javaの死刑宣告が既に発表されたと言っても過言ではありません。その後のすべては完全に理解できます。
足を縛るプログラミング
もしあなたが私の記事を読んだことがあれば How To Do In Java Java APIがどれほどひどいか理解できるでしょう。これらのひどい部分は婉曲的に「非常に安定している」と呼ばれていますが、より正確には「足を縛るプログラミング」と表現できます。これらの不合理な設計が、この言語の歴史的な技術的負債を構成しています。そして、この問題は解決不可能です。なぜなら、Javaは後方互換性を主張しているからです。
脳死JVM
就職活動をしていると、少し高いタイトルのポジションには、すべて同様の説明があることに気づくでしょう:
JVMを理解し、メモリモデル、クラスローディングメカニズム、一般的なメモリ問題のレビューを含む;
堅実なJavaの基礎、IO、マルチスレッド、コレクション、その他のコア原則に精通し、JVMについてある程度理解している;
インターネット専門家の誇りは、技術革新にあり、技術を使って社会のニーズを満たすことにあるべきだと思います。言語があなたに要求することを満たすことではありません。
言語はツールであり、最終的には商業/ビジネス価値に奉仕します。リソース効率の観点から、Javaは問題のある言語です(メモリを大量に消費し、起動が遅い)。しかし、銀行のような深いポケットを持つ大企業の安定した開発プロジェクトでは、Javaはまだ役立つ可能性があります。しかし、Java JVMは、Dockerに渡されたコンテナ技術の遺産として、その歴史的使命を果たしました。引退する時が来ました。
個人的には、歴史的な遺産問題の後始末をするのは好きではありません。Javaを書くことは、私にとって糞をすくうようなものです。
結論
Javaは老いて、もう食べられません。
参考リンク
Если вы заядлый поклонник Java, я предлагаю вам прямо сейчас нажать Ctrl + W, чтобы закрыть эту вкладку.
В 1995 году Sun официально объявила о Java и выпустила JDK 1.0.
Слабая синтаксическая структура
Я начал с ASP.NET MVC в 2014 году, что означает, что C# был моим первым языком. Синтаксис C# довольно элегантен—даже синтаксис 10-летней давности абсолютно превосходит Java 10.
Дженерики C# красиво спроектированы. До сих пор Java все еще реализует дженерики с помощью стирания типов.
Дженерики C# в сочетании с LINQ абсолютно непобедимы—они уничтожают все на своем пути. В отличие от этого, Stream API Java не только многословен, но и полон ограничений.
Подробнее об этом можно прочитать в моей статье: Java 8 Stream API против методов расширения C# LINQ.
Мачеха не любит
В октябре 1997 года Sun подала в суд на Microsoft в Калифорнии за нарушение контракта на Java-технологии, обвинив Microsoft в внесении “неуместных изменений” в Java-продукты и нарушении обещания предоставлять Java-совместимые продукты.
Мы считаем, что Oracle использовала существующую аппаратную платформу Sun для лучшего продвижения своих продуктов баз данных, промежуточного программного обеспечения и других продуктов.
Google плачет: должен заплатить Oracle 8,8 миллиарда долларов!
Можно с уверенностью сказать, что после того, как Oracle приобрела Sun в 2009 году, смертный приговор Java был уже объявлен. Все, что последовало, имеет полный смысл.
Программирование с завязыванием ног
Если вы читали мою статью How To Do In Java вы поймете, что Java API абсолютно ужасен. Эти ужасные части эвфемистически называются “очень стабильными”, но более точно описываются как “программирование с завязыванием ног”. Эти неразумные конструкции составляют исторический технический долг языка. И эта проблема неразрешима, потому что Java настаивает на обратной совместимости.
Мозг-мертвая JVM
При поиске работы вы заметите, что должности с немного более высокими титулами имеют похожие описания:
Понимать JVM, включая модель памяти, механизм загрузки классов и общий обзор проблем с памятью;
Солидные основы Java, знакомство с IO, многопоточностью, коллекциями и другими основными принципами, с некоторым пониманием JVM;
Я думаю, что гордость интернет-профессионалов должна заключаться в технологических инновациях, использовании технологий для удовлетворения потребностей общества. Не в удовлетворении требований языка к вам.
Язык—это инструмент, в конечном итоге служащий коммерческой/деловой ценности. С точки зрения эффективности ресурсов, Java—это проблемный язык (он прожорлив по памяти и медленно запускается), но для стабильных проектов разработки, таких как банки—тех крупных игроков с глубокими карманами—Java все еще может быть полезной. Однако Java JVM, как технологическое наследие контейнеров, переданное Docker, выполнила свою историческую миссию. Пора уходить на пенсию.
Лично я не люблю убирать за историческими проблемами наследия. Написание Java для меня похоже на копание навоза.
Заключение
Java стара и больше не может есть.
Ссылки
- Java 20 лет: История и будущее
- Серия JVM (1): Механизм загрузки классов Java
- Подождите, есть ли у Java утечки памяти?
- Заменит ли Go Java как следующий корпоративный язык программирования?
- Java стара, может ли она еще есть?
- Есть ли у Java типы значений?
- Атакующий Java - Эволюция облачных нативных
- Судебный процесс Sun-Microsoft: Предварительный судебный запрет
- Предыстория рождения Java