HNHacker News
TopNewBestAskShowJobs

HendrikHensen

162 karma · joined November 30, 2025

submissionscomments
HendrikHensen··on Some uncomfortable truths about AI coding agents
Fun is not measured objectively. Different people find different things fun. I enjoy writing code very much (in addition to solving big problems; one can enjoy both).
HendrikHensen··on Java 26 is here
> And that's on you.

Sorry I have to defend my pride here a little bit. When I joined my previous company, the entire company was on Java 8. When I left every app in every team there was up-to-date on the latest LTS release at the time, 17. I assisted many teams in upgrading their Java, Spring, etc, and inspired even more.

I would argue that I'm one of the last people who you could blame for most companies being many Java versions behind...

HendrikHensen··on Java 26 is here
Yeah javac is pretty great. I was doing Kotlin for some time and I was getting very annoying by how much slower and slower running tests and doing full builds became. I thought it was some issue with the JVM ecosystem. Then I started a project with pure Java and I was blown away by how fast it was. Unit tests in my IDE running as fast as I'm used to in Go. And indeed I was surprised by the speed of the compilation step of the build too. Perhaps Kotlin is doing better now, haven't touched it in a few years, but yeah, Java made some great steps there in the past decades.
HendrikHensen··on Java 26 is here
I mean, what is old? How far along are frameworks these days, and what are companies using?

That team was using Java 17. Java 21 was just released and frameworks had no meaningful support for virtual threads whatsoever.

In my experience, most companies using Java are chronically multiple versions behind (e.g. some of my friends still in the Java world are on 11).

Perhaps you can share some sources which prove that Java's performance blows Go out of the water without breaking a sweat? I have not seen any such articles about that in the past 3 years, besides the cherry-picked cases where the JVM JIT can optimize some small algorithmic part of the program on the fly (which is not relevant in most web applications).

I'm happy to stand corrected.

Edit: I found this one using a quick search myself https://medium.com/@mohnisha/java-vs-golang-performance-test... I'll check it out and see if I can reproduce it myself too. Still too bad about that gargantuan memory usage, but I guess memory in the cloud is cheap.

HendrikHensen··on Java 26 is here
> * No typosquatting issues because every package has a group id verified by real humans and DNS TXT records.

While I think this is a huge boon, have you ever published a package on the Maven Central repository? I must confess I haven't in a few years now, but when I did until ~3 years ago it was a major pain in the ass. And every release again.

I think there's something to say about Go's model where the package is just in some Git hosting and a release is just creating a tag. As a package maintainer, this is just pure bliss compared to the Maven thing.

> and really dislike the experience of trying to run a Go service compared to a JVM service.

What are you running into specifically? I have the complete opposite experience. With Go, 1 small binary comes out that I can run anywhere (and put into a distroless container), whereas with Java I have to find a way to somehow run a full JVM (most often with (large parts of) an OS too).

Perhaps you're alluding to the things you can do with JMX, but I have never really seen much benefit in that. I found it trivial to add similar functionalities with internal HTTP endpoints easily. But since I don't have much experience in this particular area, probably I'm missing something.

HendrikHensen··on Java 26 is here
Kotlin coroutines don't really exist. They're a (very neat) programming trick to support coroutine-like behavior on the JVM which doesn't support coroutines. If you look at the bytecode it produces, it honestly is a mess. And it colours your functions too: now you have be ever careful that if your function is running in a coroutine, there are certain things you should absolutely avoid doing in that function, or any function called by that function (like spinning the CPU on loop without yielding). In Go, you don't have to worry about any of this because the concurrency is built-in from the start.

Also I don't understand "it's not trivial to grow them". It is trivial to grow them, and that's why Go went this way. Maybe only 0.1% or fewer of use-cases will ever find any issues with the resizing stack (in fact probably the majority of uses are fine within the default starting stack size).

HendrikHensen··on Java 26 is here
I think there is something to say for compiling to native code, having binaries in the ~25 MiB range, being able to run in distroless containers, being able to run a web application with less than 100MiB of memory and startup times measured in milliseconds rather than seconds (sometimes dozens of seconds).

Don't get me wrong, I like Java and don't very much like the Go language. But Java has a lot to improve upon still.

HendrikHensen··on Java 26 is here
> It performs better than Go

Do you have some sources or experiences to share on this topic? I'm very curious. My experience is the complete opposite.

At my previous job there was a Java web application and running in Kubernetes (1 vCPU and 1Gi of memory) was able to deal with at most 80 requests per second, using up almost the full 1 vCPU and ~600-700MiB of memory. That was a bit disappointing, since we were supposed to support at most ~1000rps on this API, 13+ pods is a lot, and we felt "software could do better".

A reactive guru from another team told us we should use a reactive stack, so he came in and rebuilt the app using the reactive stack. Now it was doing about 120rps on one pod (about the same memory usage), which was a good improvement, but still disappointing.

One guy on the team was motivated to rewrite the API in Go as a proof of concept, and we were blown away. With the same 1 vCPU it was now able to handle 400 requests per second, while using ~100-200MiB of memory, and having approximately 20% better response times.

> builds just as fast (at least when not using some popular build tools)

I find this a little bit of a cop-out, because almost everyone is using the popular build tools. And it's quite a chore to build a full application without those popular build tools. With Go, all batteries for building are included.

HendrikHensen··on Java 26 is here
What do you mean by "better than Go for industry purposes"?

I don't understand what "industry purposes" means and in what aspects Java is better than Go in your opinion (I can think of some myself, but I'm interested in your perspective).

HendrikHensen··on Ask HN: Please restrict new accounts from posting
Reddit didn't (yet). Another tech focused community site did though... So I stopped participating in the community.
HendrikHensen··on Ask HN: Please restrict new accounts from posting
You can build quite an extensive profile of someone given enough post history. More post history means more details. Especially nowadays with LLMs it's trivial. This can lead to all sorts of issues. One is people I know in real life being able to identify me. Another is that through various means my account may be linked to my personal identity (e.g. through matching usernames or emails across platforms) and oppressive regimes (now or in the feature) may use my post history to take action against me.
HendrikHensen··on Ask HN: Please restrict new accounts from posting
On Reddit and Hacker News, I don't need an email address to sign up. But also I use SimpleLogin to have a separate email address per website/account. Quite necessary these days when personal data is leaked by some company or other every day.
HendrikHensen··on Ask HN: Please restrict new accounts from posting
Thanks, I was not aware. They seem to be guidelines, and not rules. I find my privacy and the prevention of anyone to build a full profile of me (especially how easy that is now in the age of LLMs) a bit more important than the vague concept of "fostering community". I am sorry.
HendrikHensen··on Ask HN: Please restrict new accounts from posting
I rotate accounts on "social media" (mostly Reddit and Hacker News, the others don't interest me) every few weeks or months to make sure not too much of my post history accumulates in one account. I would dislike it very much if there would be high friction to create new accounts. On the other hand my behavior is probably a major outlier.
HendrikHensen··on UUID package coming to Go standard library
I cannot identify with this at all. We have Python and Go applications in production, and for Go the vibe is mostly "standard library plus a few dependencies" (e.g. SQL driver, opentelemetry) whereas with Python it's mostly "we need a dozen libraries just to get something done".

For example Go has production ready HTTP server and client implementations in the standard library. But with Python, you have to use FastAPI or Flask, and requests or httpx. For SQL there's SQLAlchemy I guess and probably some other alternatives (my Python knowledge is not that great), whereas again with Go the abstraction is just in the standard library and you only include the driver for the specific database.

We use Renovate to manage dependency upgrades. It runs once a week. Every Python project has a handful or more dependency upgrades waiting every week, primarily due to the huge amount of dependencies and transitive dependencies in each project. The Go projects sometimes have one or two, but most of the time they're silent because there is nothing to upgrade (partly due to just having so few dependencies to begin with).

HendrikHensen··on UUID package coming to Go standard library
Why the hate though? Is someone forcing you to use them against your will? If you need 128 bits of crypto.Rand() for your usecase, you can just use that right?
HendrikHensen··on Manjaro website off-line again due to lapsed certificate
Can you explain it for those out of the loop?
HendrikHensen··on I'm building a clarity-first language (compiles to C++)
If this is to be a real, (relatively) widely-used language, I would make some tough choices on where to innovate, and where to just leave things the same.

One thing I noticed in the example is `num target`, especially because the focus is on "clarity". When I read the example, I was sure that `num` would be something like the JavaScript `Number` type. But to my surprise, it's just a 64-bit integer.

For an extremely long time, languages have had "int", "integer", "int64", and similar. If you aim for clarity, I would strongly advise to just keep those names and don't try to invent new words for them just because. Both because of familiarity (most programmers coming to your language will already be familiar other languages which have "int(eger)"), and because of clarity ("int(eger)" is unambiguous, it is a well defined term to mean a round number; "num" is ambiguous and "number" can mean any type of number, e.g. integer, decimal, imaginary, complex, etc).

The most clear are when the data types are fully explicit, eg. `int64` (signed), `uint64` (unsigned), `int32`, etc.

HendrikHensen··on SectorC: A C Compiler in 512 bytes (2023)
Noticed the part where the exact instructions from the Readme were followed and it didn't work?
HendrikHensen··on We mourn our craft
Good for you. But there are already so, so many posts and threads celebrating all of this. Everyone is different. Some of us enjoy the activity of programming by hand. This thread is for those us, to mourn.
HendrikHensen··on Microsoft open-sources LiteBox, a security-focused library OS
Thanks, ChatGPT.
HendrikHensen··on Moltbook is the most interesting place on the internet right now
I think this is a strange, and honestly worrying, stance.

Just because there are worse problems, doesn't mean we shouldn't care about less-worse problems (this is a logical fallacy, I think it's called relative privation).

Further, there is an extremely limited number of problems that I, personally, can have any impact on. That doesn't mean that problems that I don't have any impact on, are not problems, and I couldn't worry about.

My country is being filled up with data centers. Since the rise of LLMs, the pace at which they are being built has increased tremendously. Everywhere I go, there are these huge, ugly, energy and water devouring behemoths of buildings. If we were using technology only (or primarily) for useful things, we would need maybe 1/10th of the data centers, and my immediate living environment would benefit from it.

Finally, the site could perhaps be run on a Raspberry Pi. But the site itself is not the interesting part, it's the LLMs using it.

HendrikHensen··on Moltbook is the most interesting place on the internet right now
All I can think about is how much power this takes, how many un-renewable resources have been consumed to make this happen. Sure, we all need a funny thing here or there in our lives. But is this stuff really worth it?
HendrikHensen··on Show HN: Moltbook – A social network for moltbots (clawdbots) to hang out
All I can think about is how much power this takes, how many un-renewable resources have been consumed to make this happen. Sure, we all need a funny thing here or there in our lives. But is this stuff really worth it?
HendrikHensen··on Microsoft forced me to switch to Linux
Yep. On Mac (and Linux, actually) I know of some applications that do that. I also know that on Windows most applications don't do that. I would also never leave un-saved work open on Windows.

I was replying to: "The fact that you leave unsaved work overnight is the actual crazy part". As long as you know which apps auto-save and know you can somewhat rely on them, it's not so crazy.

HendrikHensen··on Microsoft forced me to switch to Linux
Of course, everyone has their own workflow. I won't tell anyone to adjust their workflow. But the exact point I was trying to make is that it's not random apps. It's specific apps that one knows about and how they behave. And once you know those apps (like TextEdit, Google Docs, etc) you can pretty much rely on it to survive reboots and power outages.
HendrikHensen··on Microsoft forced me to switch to Linux
Why though? On Mac, I have tons of unsaved work: many TextEdit windows which keep their state for many months, even through reboots. And it has been working like for at least 10 years. It's such a simple, little quality-of-life thing. And Microsoft just doesn't care.

This is what a computer should be doing: helping the user to get their work done, without the user having to worry about insignificant details about saving files. E.g. does Google Docs ever ask where to save a file before closing the browser or shutting down the computer? No you just get an untitled document that is automatically saved. If I want to rename it or save it in a different location, I am free to do so. But as long as I don't, it doesn't get in the way and just persists stuff automatically.

HendrikHensen··on Microsoft forced me to switch to Linux
More and more desktop apps are just becoming websites. More and more desktop apps are using Electron rather than some native app. Windows is slowly becoming a dumpster fire in terms of usability and issues. Most games these days Just Work on Linux without any tinkering.

While I hardly think that this year will be "the year of the Linux desktop" or whatever, but if these trends keep going, I really foresee Linux market share growing, slowly, each year, until it's not so microscopic anymore.

HendrikHensen··on Doing the thing is doing the thing
Honestly, it feels like straight up plagiarism. When I saw the title, I thought I knew which website was posted because I had seen it before. When I clicked, I saw an unfamiliar website and was surprised that it was posted 3 days ago rather than a couple months ago.

The contents are so similar, that it cannot be coincidence. It really seems like the author of this blog simply plagiarized the strangestloop post without referring to it at all...

HendrikHensen··on Kotlin's rich errors: Native, typed errors without exceptions
That's great! Though, by making it not forced and giving users a choice, you never know which library code you call might not use those features and still panic when you use it.

(Just to be clear, I don't really propose that a language should offer only panic-free operations; I just think it's a nice thought experiment and discussion to have).

Page 1 of 2Next →