TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Ask HN: Java Suffers from an Identity Problem

3 pointsby itsmefazalmost 3 years ago
Most of the day to day software engineering is our ability to work with the language tooling, we can also call it the ecosystem of the language. From Java&#x27;s perspective most of our interaction with the language is not directly with the language but with frameworks like Spring etc. These things are meant to make the language more easily digestible. The problem comes in when the platform becomes so huge that there is no way to logical develop a thorough understanding of the actual technology at hand. I started studying Java again to brush up my knowledge of it but found that the language has grown so much it was difficult to derive a logical conclusion to the platform.<p>This was further evident when I started looking for Java developer roles in my country and found that just understanding the language and its principles were not enough. There seemed to be a general consensus that Java developers must know other related technologies like Spring, JPA, Hibernate, etc. All these related technologies bring their own software paradigm into the picture and hide the actual technology (Java) under the hood.<p>* Why for some weird reason a Java developer must know or supplement his understanding of the language with framework like Spring, JPA, Hibernate, etc? This is true for other platforms like Node.JS where you have MERN stack etc.<p>* Are there other languages (or platforms) like Go or Rust where the language is well developed that these external dependencies are minimal.

4 comments

topspinalmost 3 years ago
&gt; Are there other languages (or platforms) like Go or Rust where the language is well developed that these external dependencies are minimal.<p>Seeking a language with minimal external dependencies is futile. Real world work almost always involves a substantial collection of dependencies regardless of the language. Gone are the days when the language has everything you need built-in; that went when the network and myriad protocols appeared.<p>Compared to Java, Go is generally &#x27;simple&#x27; in the sense that it doesn&#x27;t involve a lot of programming complexity created by the dependencies. There are no macros, annotations are few; mostly you just deal with the language itself and the APIs of dependencies. I really like that aspect of Go and I think it is closest to what you have in mind. Wading through error handling boilerplate is no fun though; easily the most tedious part of Go.<p>Rust is similar to Java in that you find yourself using dependencies that &#x27;decorate&#x27; the language with annotations and macros that add capability and complexity. Many of these dependencies are well designed so the annotations and macros are straightforward to use and easy to live with. Others are mystifying and obtuse. Incompatibilities abound; stable vs nightly, Tokio vs std::async, etc. Rust can be a struggle.<p>I feel like you&#x27;re making too big a deal over the commonly used Java stack dependencies. Spring is ubiquitous; there are all manner of resources to help you figure things out and when you understand it and stay between the lines it&#x27;s fine. Add Lombok (a curated Spring dependency) and writing Java is fairly pleasant and highly productive. I can&#x27;t speak to Hibernate; I&#x27;ve been fortunate to be able to mostly avoid ORMs. The little experience I&#x27;ve had with Java ORM only encourage that tendency.
评论 #31788473 未加载
tomohawkalmost 3 years ago
I remember primarily working in Java when it was the one main choice you had. People were actively looking for alternatives, and then Spring came along and saved it from the archonauts. But the counter revolution by the archonauts ended up pretty much as you describe - layers of sophistry. Java is kind of like a really old city, built upon many layers of cities that predate it. Witness the recent log4j debacle. There&#x27;s so much complication buried amongst the layers, that something as obviously bad as log4j escapes notice. Even the author of log4j abandoned it many years ago to create logback and slf4j. So, just with logging, there is the standard logging (which nobody uses), log4j (hopelessly complicated), a few others, and then slf4j&#x2F;logback. Even doing logging in java is a choice fraught with peril.<p>Come to think about it, the Java ecosystem now resembles more of a Big Ball of Mud (<a href="http:&#x2F;&#x2F;www.laputan.org&#x2F;mud&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.laputan.org&#x2F;mud&#x2F;</a>), where being a swamp guide is more important than other skills.<p>These days I primarily work in go, and the reduction in cognitive overhead to get things done is immense. Its a language that learned from the mistakes of many others, and gets many things right.
评论 #31713607 未加载
franzwongalmost 3 years ago
It depends on what applications you write. I write financial applications with Java but I don&#x27;t use Spring and JPA&#x2F;Hibernate. Spring is quite suitable to write CRUD applications.<p>You either have a bloated runtime or you need to include more external dependencies. It&#x27;s just trade off. The trend is to have lightweight runtime in cloud era.
评论 #31714345 未加载
aristofunalmost 3 years ago
Java is just an old boring legacy swamp. Back from the days when nobody cared about devx.<p>Not even close to nodejs, even though js infra is far from perfect too.<p>But you can’t avoid the need to build hundreds of reused libraries when you build anything bigger than hello world.<p>It’s just some languages care about your comfort (like Ruby) while others - dont (like Scala)
评论 #31715760 未加载