Hacker News new | past | comments | ask | show | jobs | submit login

There's plenty I'd like to improve but it's honestly in a very good shape. There's a reason enterprise picks Java - it's battle tested and there are enough quality developers around. Frameworks like Spring for webdev are top notch. Unless you've got a very specific reason to pick something else (python or rust or whatever) Java is the safe bet (along with c# but Java is an order of magnitude bigger I think).

It's just people taking memes seriously. Java is great and continuously improving.




Should have been C# with ASP.NET Core and EF Core instead. Hibernate is extremely dreadful to work with and no one in their sane mind should even have the gall to ask users to touch it when better options exist. Spring Boot also performs very poorly against ASP.NET Core.


It's not just a meme. The developer experience in Java is worse compared to some other popular programming languages like JavaScript, Go, Python, etc. The language is a bit verbose, and the compiling speed is slow, hence the development speed is slower. Java developers tend to overly abstract things, so the code tends to be unnecessarily complicated. The JVM also has a high memory footprint, the startup speed is slow, and it requires warming up the JIT. Some popular libraries and frameworks overuse reflection and annotation, they are nice to use but are nightmares to debug when issues happen. This is why GraalVM and Kotlin have been gaining popularity recently, as they aim to address several issues with the JVM and Java. The biggest strengths of Java are its ecosystem and community.


It is a meme.

I'm not sure if any of this is true and you seem to be contradicting yourself. Java is far less verbose than Go, and the compiler is leagues faster than kotlin's, graal's native compiler, probably most other languages, and I'm sure its faster than Babel. Javac doesn't do any optimizations, just emits bytecode. Why is it acceptable for Go to be verbose and kotlinc to be slow?


I'm not saying that Go or Kotlin is better than Java in all of those aspects. I'm just saying that Kotlin, GraalVM exists because Java, JVM have certain issues or limitation. For Golang, I'm just saying that the developer experience in Go is better. It's not just my personal experience, you can find the same result in any developer survey.


I clearly wasn’t surveyed. I don’t even like Java but I would need a an extender to my ten foot pole before touching Go. (Unless we are talking microcontroller embedded software, and I only could choose between Java and Go.)


I initially disliked Go as well, but it's a language that can only be truly appreciated when you start using it. Many of its advantages come from from its simplicity, explicitness, fast compilation speed, single executable binary, and some opinionated choices made by its authors. Unless you're working with a legacy system, Go (or Rust) is the preferred choice nowadays for distributed systems and system softwares (Kubernestes, TiDB, traefik, to name a few). It's also the default choice for numerous internet companies like Uber, ByteDance, and Monzo.

Here is a survey if you'd like to participate this year, but I don't think it will significantly alter the results.

https://survey.stackoverflow.co/2022#technology-most-loved-d...


Oh that survey. Solidity leads over Javascript.


The developer experience when trying to maintain a Python codebase the size of an average enterprise Java codebase is pretty...abysmal.


A python codebase never gets to the size of a Java one for the equivalent functionality. There's a reason the other ongoing mocking of Java is about its abundance of IAbstractGeneratorFactoryFactory classes.


This is true but Python codebases never reaches the feature parity of large Java code bases. I like Python up to about 10 kLOC or so, after that I tend to forget what is going on where, but in Java the IDE just knows what is going on where.


I hear you, and if you're using anything other than PyCharm (or Eclipse with PyDev back in the day) then that's what you'll find. But try it with PyCharm, it works flawlessly with near perfect refractor on million line of code python code bases.


> The developer experience in Java is worse compared to some other popular programming languages like JavaScript, Go, Python,

Wait, what?

Go, maybe.

But the dev experience in languages that are only able to catch errors at runtime, like Javascript and Python, are painful!

Looking at existing Python/Node.js codebases, half the automated tests are there simply to catch errors that statically typed languages catch for free, and even those tests aren't a match for a statically-typed language anyway.

I hate, hate, hate, HATE working on languages where my only options are:

1. Pray that no future code calls this function I just wrote with the wrong parameter types.

2. Write tests for all the callers of that function, to defend against some caller getting called with some combination of arguments that result in the function being called with the wrong types, while knowing full well I can't cover all possible cases like I would in a statically typed language.

Honestly, the first step in writing software is modelling the data types and structures[1]. In Node.js and Python you can model all you want but enforcement is left to developer discretion.

At this point in time, having done a few Node.js and Python backends, the dev experience in c11 is superior.

In order of least painful to most painful, in my experience of writing backends:

1. Go 2. Java 3. C# 4. C 5. C++ 6. PHP, Python, Node, Ruby, etc.

Those languages in #6 above are popular because they allow you to hodge-podge your system together.

[1] The second step is modelling the data flow, of course.


Perhaps your experience with them was a long time ago. I agree that working with dynamic typing languages can be painful, but Python has had type hints since version 3.5, and JavaScript has Flow, or you can use TypeScript.


You can’t be serious comparing ASP.NET Core and EF Core to the abomination that is writing full back-end including DB access in Go or Java (assuming Spring Boot and Hibernate).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: