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.

Putin Sounds More Pathetic than Ever

Published at 18:07 on 26 June 2023

Putin made an unscheduled speech today in which yet again he thanked Wagner for standing down and not going into Moscow. Total weak guy stuff (a strong leader would have promised punishment and retribution).

That one year time frame I gave a few posts ago was my upper bound for how much longer Putin can last in office. His actual remaining time in office might be quite a bit less.

Remember, revolutions in Russia seldom happen in one fell swoop. In 1917, the February Revolution preceded the October Revolution. The attempted coup against Gorbachev in 1991 was followed some months later by the breakup of the USSR, and that was followed in 1993 by Yeltsin’s coup against parliament. The Wagner mutiny is probably just the beginning.

Ukraine and the Putsch

Published at 16:23 on 25 June 2023

The putsch helps Ukraine. A lot.

Russian soldiers occupying Ukraine now know that their leader is weak and vulnerable. They know that prominent, influential people on the Russian side are saying that the whole pretext for the war was a pack of lies: Ukraine was of no threat to Russia and did not need to be de-Nazified.

Ask yourself: Would you feel motivated to fight for a weak and vulnerable leader in a war based on a pack of lies?

As such, expect low morale, desertions, surrenders, mutinies, etc. to really ramp up on the Russian side.

Moreover, Putin now is fighting two wars. One in Ukraine where he had already bitten off way, way more than he could chew. And now another one at home, trying to cling to power. He is now vastly more overextended than he was before.

It doesn’t take a genius to figure any of this out. You can be sure the Ukrainians already have. They were already beginning an offensive to retake territory. Expect the offensive to get ramped up: when the enemy is weak, you hit him harder.

Yesterday’s Putsch in Russia

Published at 20:11 on 24 June 2023

It looks like Putin has survived it… for now.

And that latter phrase is crucial. Before yesterday, Putin’s power was unquestioned. Nobody dared cross him. Not if they wanted to keep on living, that is.

Now, somebody has crossed him… and Putin was compelled to cut a deal to resolve the situation. Putin is no longer the undisputed master of events in Russia. He has been shown to be weak, shown to be vulnerable.

As such, I would be surprised if Putin lasts much longer than another year.

Garmin Drivesmart 66: Pure Crap

Published at 17:25 on 24 June 2023

Last year, I decided to treat myself to a new automotive GPS system for my truck. You see, I sometimes like to explore forest service roads in backcountry areas that lack cell coverage, making smartphone maps mostly useless. I decided to buy a Garmin unit, since that is a name brand, and I have one of their hiking GPS units and it works just fine. So I assumed that Garmin’s automotive GPS units would also be well-designed. Boy, was I wrong! To reiterate the subject of this post: the thing is pure crap. It cannot honestly be described any other way.

Let me enumerate the ways in which it is crap:

  1. Crap software design. If you pair the GPS with your smartphone (which you must, if you want to receive real-time traffic updates for driving in the city), it turns on this cheesy key-click feature, in which the GPS speaker will make a loud click for each keystroke you enter on the smart phone. The rub is, the click will be randomly delayed due to the use of Bluetooth pairing by anywhere from 100 ms to a full second. Just try typing with such a misfeature, I dare you. It is extremely disorienting, and makes accurate typing virtually impossible. And there is no way to disable this crap misfeature. I spent several hours trying to, reading the manual, exploring all the settings, doing web searches. There is no escape. The only way to turn it off seems to be to unpair your phone.
  2. Crap real-time traffic information. Speaking of the real-time traffic updates, they are crap. In my experience they report less than half of significant delays. Because the device is unaware of so many instances of traffic congestion, its navigation advice in the city is also crap. Plus the chosen way Garmin indicates traffic congestion on its map is subtle and easy to miss.
  3. Crap software quality. The GPS often hangs or crashes at random times. When this happens, it takes about five minutes to recover. Typically this happens when I am running late and most need everything to work properly.
  4. Crap backup camera. I decided to spring for the optional backup camera, because my truck is old enough not to have one from the factory. About as much of a mistake as buying the GPS itself. It’s crap, too. The camera takes up to a full minute to turn on when requested. Video is frequently laggy and erratic. My old cheapo analog wired backup camera was vastly better.
  5. Crap maps. First, the maps are a good two years or more out of date from the moment you download them. A new road opened two years ago near my property in Bellingham. Its presence changed the optimal way to get there from I-5. Two years on, and the new stretch of road is still not in the latest update from Garmin. Second, the maps are woefully incomplete. The device is essentially useless for its intended purpose of navigating on remote forest service roads; most of them are not in its database.
  6. Crap hardware design. The Drivesmart 66 spews radio noise like mad on the lower radio frequencies. Use it while listening to an AM radio station? Forget it! This is extremely annoying, as the same remote areas without cell coverage (i.e. the areas that prompted me to get this unit) also tend to lack FM radio coverage, while stronger AM stations still manage to cover such areas, due to how the longer radio waves used in the AM broadcast band propagate. So even if it was useful in the backwoods (and it is not) I would still have to choose between being able to listen to the radio and having GPS guidance.

My assumption is that these misfeatures are also present in most or all newer Garmin automotive models. Because why wouldn’t they be? It’s only logical to use a common software base in all products, and a manufacturer inclined to cut corners when it comes to RF noise shielding in one device is probably going to cut them in all their devices.

Bottom line is that I cannot recommend any currently-manufactured Garmin automotive GPS units. Avoid them all.