On (Not) Being a Java Careerist

Published at 07:40 on 29 July 2023

Not to slam Java careerists. One thing they are is very smart and talented. One just has to be, in order to deal with all the gratuitous complexity bred by the traditions of that programming community.

But here’s the thing: I don’t want to devote basically all of my mental effort to doing that. I don’t want to lose my botanical knowledge, or my wide-ranging general scientific knowledge. And I would have to in order to succeed in the Java world. The mental load is just so extreme.

Even if I wanted to, I am not sure I could. I crave knowledge in a diversity of subjects. My mind would rebel, strongly, against being forced to hyperspecialize.

In a sense, this means I’m “lazy” in that I “don’t want to work very hard” at software software development. But I don’t see that as necessarily a bad thing. Why should I work harder than necessary? If there is an easier way to do a good job at something, why not choose the easier way?

Is it really intelligent behavior to continue doing something in a difficult way when you are aware that an easier way exists?

This all was, in fact, something I wondered a bit about going into this job. And I decided then that if this was the case, I wouldn’t succeed at the job, wouldn’t want the job, and would end up departing from it. And so here I am.

Why I Hate Java: An Example

Published at 20:46 on 28 July 2023

Building on this entry, let us relate a little story that transpired in the past week.

About a week ago, I make a stupid error and introduce a bug into the code. Shouldn’t be a big problem; one good thing about where I work is that there is a very extensive battery of tests for things.

But this is the Java universe we are talking about. Simplicity is not appreciated as a virtue. Both the test and build frameworks are ginormous and hypercomplex. Somehow, I still do not know why, some feature got triggered that caused the test(s) that would have detected my bug to fail to run.

Because the Java universe does not appreciate simplicity, that code base itself is ginormous and hypercomplex. If the code were not written by members of such a dysfunctional programming culture, it would have been broken up into smaller, more managable bits that communicated with each other somehow. The test log for the subset of the code I was working with would have been short enough I would have probably noticed something missing. Instead, the missing tests were buried in a little over 80,000 lines of test and build output. Can you read an 80,000 line log file without falling asleep first? I sure can’t. So I didn’t even try. Naturally, the missed tests go unnoticed.

The check-ins get rejected for other reasons, so I get to work on addressing them. Meanwhile, the whatever-it-was that caused the critical tests to get suppressed ceases to do so. So my first attempt to test the recode fails for this out-of-the-blue, off-the-wall reason. I look at my recent changes and see nothing that could cause this issue to manifest.

Not much can be done but to attempt to instrument the daylights out of the code with debug log statements and try to figure out what the heck is going on with the data as it gets operated on.

My first attempt to do so fails because the company’s network infrastructure suffers a hiccup and causes my build to fail. The company’s infrastructure is super-complex, poorly-documented, and unreliable. (Everyone else just basically accepts it because everyone else is a Java programmer and thus used to unnecessary complexity and the resulting unreliability.)

In my second attempt, I discover that for some reason the test framework suppresses all log messages. So I recode to use writes to standard output, figuring (correctly) that it won’t “intelligently” suppress those. The instrumenting turns out to be insufficient, so I add more.

Each of these iterations takes way, way longer than it should, because the code is big and bloated and complex and so takes 30–45 minutes to build. If everything was factored into smaller units, I doubt builds would take longer than 5 minutes (if that). So each iteration takes roughly 6 to 10 times longer than it should.

Finally, after at least 4 hours of effort, I locate the bug.

And this is why I hate Java. Not because of the core language itself (dated, but still not bad considering it was designed in the ’90s) or because of its runtime (still one of the best virtual machines out there), but because of the traditions of the community that uses it. A minor bug, that would have been resolved in half an hour easily, instead almost makes it into production and takes half a day to resolve.

And this happens everywhere, all the time. Everything is more difficult, more tedious, and more error prone than it should be, with a lot more busy work than there should be.

Those dysfunctional traditions are such an irritant that I have developed my own special term for them: Java community antipatterns, or JCA’s for short.

I have recently learned that I am on my way out where I work, mainly because I can’t cope with the JCA’s as well as the Java careerists. And frankly, I can’t wait till I move on. I’m already looking for another position, and it will be as far from the enterprise Java world as it can be.

Assigned Reading… and More

Published at 20:42 on 25 July 2023

First, the assigned reading:

The extra content is a little discussion.

First, will this foot dragging result in any action being too little, too late? It might. Had the lawbreaking by the most powerful been treated more seriously sooner, Trump might already be seriously damaged to the point that the GOP would finally throw him under a bus. (His base of cult followers would never do so, but the party leadership might, if they realize that the sooner they do so, the sooner they can move on from a candidate who is doomed to lose. They don’t care about democracy, but they do care about remaining politically viable.)

Second, it really all goes to show what a bunch of pure unadulterated bullshit the “they are picking on Trump” line of the Right continues to be. Trump has gotten nothing but free rides and special treatment from the entire system, basically since the very first day of his life as the heir of a multimillionaire. If Trump wasn’t getting special treatment, he would already be in prison.

Zelensky’s Hissy Fit

Published at 06:56 on 12 July 2023

Too bad. As mentioned earlier, Ukraine does not belong in NATO. Not yet at least. Moreover, the process of getting to where Ukraine’s membership in NATO makes sense is likely to be long and complex enough that any sort of strict timeline is foolish to promise.

Biden was wrong to give Ukraine cluster bombs but he is dead right when it comes to NATO membership for Ukraine.

Ukraine is not getting an express ticket to NATO membership and Zelensky can like it or lump it. (Who else is he going to get to shovel mass quantities of military aid at his country in its time of need? Beggars can’t be choosers.)

… And More Pathetic Yet

Published at 21:05 on 11 July 2023

Now it has come out that Putin has actually met personally with Prigozhin in the wake of the Wagner mutiny. This just screams weakness. A strong authoritarian would have had the leader of a mutiny against him disappeared within a matter of days.

To reiterate: I can’t see Putin lasting much longer than a year.

Ukraine Policy Heads off the Rails

Published at 19:07 on 6 July 2023

Cluster bombs? NATO membership (not eventually, right away)? It seems like no bad idea is bad enough not to get serious consideration these days.

Cluster bombs first: the problem with cluster bombs is that the bomblets in them don’t all explode. Most of them do, but not all of them. The remaining unexploded ones lie in wait for some unfortunate individual, often a civilian, sometimes a child. Then, tragedy. They are as bad as land mines (which are banned by international treaty for a reason).

Fast-tracked NATO membership: no, no, no.

First and most important, Ukraine is actively fighting Russia. Membership while that state of affairs exists violates the unwritten rule that two superpowers don’t directly fight each other. (The NATO treaty requires an attack against one nation to be interpreted as an attack against all. This means that the next bullet fired by a Russian soldier brings the USA into a direct war against Russia.) The argument being proffered for this is that since there hasn’t been a nuclear exchange with Russia yet, what the hey, it’s worth a roll of the dice, let’s push our luck and go for broke. This is so reckless that it frankly boggles the imagination.

Second, Ukraine is not a functioning, first-world democracy. Yes, Ukraine is definitely better at the whole democracy and civil rights thing than Russia has been in recent decades, no disagreement there. But it’s still best understood as a democratizing country, not a democratized one. Ukraine still has huge problems with corruption. There are right now headaches at times caused by the likes of Turkey, Poland, and Hungary voting contrary to Western norms. Why compound them by giving another less-than-fully-compatible nation an express ticket to full membership?

Look, I get it. Putin is a piece of fascist, imperialist shit who started this war. Nothing wrong with helping Ukraine defend itself against Putin’s aggression. But please, be prudent about it. The above two ideas are disasters.