And so but anyway, did I ever tell you about my most humiliating experience as a skilled and successful computer programmer?

Canada has serious ports that are, well, kinda up-north-ish. In order to get ships in to those ports, which include some significant manufacturing and other supplies, one must use a kind of ship called an icebreaker.

Icebreakers are, basically, a big-assed razorblade at the prow, and big-assed engines at the stern.

Being an icebreaker captain is one of the most stressful jobs you can imagine.

You're working in harsh weather. You can't see shit. You have these client ships that are very slow and very large and very expensive. If you even *touch* one of the client ships, that's $3m, minimum, instantly.

An icebreaker would go right through an oil tanker, and come out the other side of it with a broken radar antenna, covered in oil.

And the icebreaker runs in front of the client breaking ice so it can get where it's going.

There are three main modern tools you can use, versus the old days: You have a radar system, you have a speed log, and you have GPS.

All of those tools have serial outputs on them, good ol' RS-232.

So here was the concept: take a PC and make a custom "ice breaking" UI, taking input from the three devices, and rendering it in such a fashion that the icebreaker skipper could get all the info in one place.

And I was sub-contracted to do that. It was about a six month long project. I wrote an entire windowing system on top of DOS to use VGA to show the display.

(I'm a good fucking programmer, and that's not the only time I've written a graphical UI from scratch.)

And. A comical note: about six weeks before the project was due, my hard drive died. And. My backup drive died.

All I had were some two-month old printouts.

So, for my juniors, when I tell you "typing is not the bottleneck", I know what I'm fucking talking about.

It took me a couple of weeks to re-create 4 months worth of work. If I had to bet, I'd bet my second edition was *better* than the edition I lost.

So we come down to the day, and I am ready.

First, I had to go before the admiral's board of the Canadian Coast Guard and give a demo.

*Second* comical note: the fucking app froze in the middle of the demo, and w/o in any way acknowledging this, I used it as an opportunity to demonstrate that even if we lost power, the app would restart correctly.

Yep. That's right. I rebooted the computer and startup.bat did its magic.

Anyway, the admiral's board is like, "cool, let's try it in the field."

So I fly to Newfoundland, and I get on an actual icebreaker ship.

Oh my people, it was so fucking cool. Icebreakers aren't gigantic, like container ships or tanker ships, but they're *big*, just the same.

And the Canadian Coast Guard is a commercial service, not a military one, so even tho they spend months at sea, they take very good care of their sailors, so, broadly speaking, the place was all modern cons.

(You still have to take navy showers, but other than that.)

Now. I was afraid of sea sickness. I'd been on fishing trips on the open ocean, and had been very sick. So I wore a patch.

You may not know this, but there are still Royal Navy traditions practiced aboard ships.

One of the important ones: there's always a comedy officer. Someone whose job it is to be funny, to make sailors smile.

You think that's silly, but sometimes these people are on board these ships for a *year*. It is important that they be amused.

And the other Royal Navy tradition: Captains are inviolate commanders, at all times in all settings. They present "serious". They eat and drink separately from the crew. They have only three or four other officers that they ever get to, comparatively, relax with.

So, you have a comedy officer, and you have a captain, and the captain simply looks the other way when the comedy officer is up to their hijinks.

He *knows* the hijinks. He *sees* the hijinks. But he pretends not to.

I'm up on the bridge, with my PC, connected to my three devices, and we're getting close to the ice.

Comedy officer comes up to the bridge, and *he* also has a sea-sickness patch.

Kids, the icebreaker, as I said, is not tiny. There's no tossing about in the waves. You do not need a seasickness patch.

Then he comes back an hour later, and now he's got *two* patches.

An hour later, he's got *four* patches.

Then he comes to the bridge and his whole jaw is covered with them.

The captain is totally ignoring this guy. He's not even spozed to be on the bridge, let alone covered in little patches (just circular bandaids, actually). But the rest of the crew is laughing their ass off.

And it's *funny*.

I mean, yeah, I was embarrassed, but, whatever, I got it. I took off my stupid patch.

We're getting to the ice, and getting to the ice is so amazingly cool, I didn't even mind the comedy officer making me the butt of the joke.

Now we're in the ice. We have a convoy of 3 container ships behind us.

If you stand at the stern, you can see those huge twin engines throwing 4-meter chunks of ice up into the air.

And I have my PC. And it has its three devices feeding my slick-assed custom icebreaker display. "I'm from the government and I'm here to help."

Here's the thing. Three devices, innit:

1) The GPS works but is spotty, cuz you're in a constant storm.

2) The speed log is basically a vent on the bottom of the hull, measuring the water passing by. But the ice is rushing under the bottom of the hull, and it jams the vent.

3) The radar tracks the target, but the target is so close it might just as well be the icebreaker itself, and the tracker gradually creeps on to the icebreaker's own ass.

So my display, which is accurately showing the data, is like:

We're going slower than a Toronto pub crawl. No, wait! We're going faster than the speed of light!

We're somewhere in Mexico. No, wait! We are probably in Kansas.

The client ship is going the exact same speed at the exact same location as us! No wait. It *is* us. No wait, it's *ramming* us at full speed!!

Man, I had some fails in my time, but this one wasn't just a fail, it was fucking *embarrassing*.

"Build a special custom icebreaking display using the hardware on the ship, it'll be brilliant!"

The hardware doesn't work in the ice. Any actual icebreaker captain could have told me -- us -- that, had we -- they -- ever actually consulted one.

Not, I repeat, my only great failure as a geek.

But, *damn*, that was humiliating.

I wrote an *excellent* program that *brilliantly* displayed data coming from hardware that didn't work.

It was a gig. I got paid. That's not the point. I was a pro, and pro's deliver *value*.

All I delivered was a good laugh.

Upside: I saw many many seals, and a polar bear from a distance. The comedy officer was actually the helicopter maintenance guy, and I got a helicopter tour of an iceberg. All of that was rather awesome.

And, for the record, I have been a successful professional programmer, an independent, for 45 years. I've failed more times than most people have even tried.

Some days you get the bear.

Some days the bear gets you.

Find joy in it. Without joy, why are we even doing this shit?

@GeePawHill Yep. It’s that joy that I love about engineering in general. Which is why I don’t subscribe to the current fad of using random text generators. Altman can pry that joy from my cold, dead fingers.

@thirstybear Indeed. I keep re-posting it:

"Take the pledge, kids: I don't use LLMs for coding and I don't kiss boys who do."

@GeePawHill This was a great story.  

Moral of the story: talk to the fucking customer.

@mayintoronto Talk to the motherfucking customer.
@GeePawHill @mayintoronto and talk to the end-user, who may not be the same person!

@pozorvlak @GeePawHill @mayintoronto

Thanks for sharing this entertaining story and the advice.

@pozorvlak @GeePawHill @mayintoronto Speaking as someone who has programmed any robot anywhere ever, another lesson is:

"Sensor fusion is hard."

@pozorvlak @GeePawHill @mayintoronto I just have three questions:
Am I allowed to talk to an end user?
Is it actually possible for me to talk an end user?
Is the end user willing to talk to me?
It's like herding genies.

@drgroftehauge depends on the context, but that's what a lot of my work is about. Getting people access to context so they can make better decisions.

@pozorvlak @GeePawHill

@GeePawHill Thank you for sharing this story. It was a very good, insightful and entertaining read. My takeaway from this anecdote is: always consult a potential user of the software you are developing.

@GeePawHill as someone who once worked on calibrating software for inertial navigation units...

Yeah.

Your story is epic. 🙃

🤣

@knowprose
Tell us more, please. Which depths lie there unseen?
@GeePawHill

@yala @GeePawHill in that role and others, I was always adjacent to those things, never a participant.

I was the one slaying dragons while the cool kids were out doing the fun stuff. 🤣

But I got stories. None of them mine. 🙃

@GeePawHill This was an amazing read, thank you! :D
@GeePawHill It also reminded me of the gorgeous icebreakers I saw in Helsinki a few years ago.
@GeePawHill That's a great story, thanks very much for sharing.
@GeePawHill what a fantastic lesson in humility. Much needed in our industry.
@GeePawHill The challenging part for using PC hardware for icebreaker navigation (in the 1980s) was the amount of physical shock computers have to continuously survive. It is about the same if you have ~1000+ kg piece of metal on a long stick and drop that to swing down (from a side) to a box of PC hardware. First times the PC goes to the wall in pieces, because it can't last the impact. It takes a lot of engineering to make a PC case that can survive that amount of stress. It was done back in 1980s, with the hardware of those days (with traditional HDDs).
@GeePawHill amazing story for multiple reasons (we have comedy officers!?!) — wonder if you ever read Madeleine Akrich? Her 1992 "The de-scription of technical objects" was an enormous influence on my field of STS, basically from the same story of good-idea-at-the-time design failing to inquire about local conditions of use. https://www.researchgate.net/publication/242461431_The_De-scription_of_Technical_Objects
@GeePawHill fantastic story thanks for sharing!!

@GeePawHill I should totally write up probably my greatest failure as a programmer, where I may have quietly killed a professor's research project (well, one of them) by developing on a too-small machine. And I got to learn that I'd developed on a too-small machine in person in an awkward way.

(Someday I also have to write up my most successful program, which was more or less an accident that snowballed and I didn't even discover how successful until years and years later.)

@GeePawHill this was a great read, thanks for sharing
@GeePawHill Thanks for sharing! It’s always good to be reminded of how many ways clever software can easily be defeated by real world conditions!
@GeePawHill Amazing! Thank you for sharing!

@GeePawHill

Awesome story!

Did anyone then suggest "what if we added a Kalman filter to integrate the sources?"

@GeePawHill Thanks for the great story! It's all about having fun.
@GeePawHill 😂 Fantastic story. Would you mind if I screenshot it and share it on Tumblr - I would link back to your posts as a source.

@GeePawHill Thank you for this great story. As so often, we programmers don't get access to clients soon enough to catch these kinds of unclear/misleading requirements.

I don't think I can count the times where at product delivery the client has crucial insights that nobody told me about.

...and I never even got a helicopter flight out of those situations. 😁

@tsturm @GeePawHill ^this...

The times I've requested "real data" to be told that "its simple" or "covered in the spec" and guess what. Huge bits were complex or/and not in the spec. Usually followed by a massive rewrite, or once, abandoning the project entirely.

@GeePawHill Thanks for the story ! :)
@GeePawHill great story. Thanks for sharing.
@GeePawHill thanks for the write up. Really cool.
@GeePawHill wonderful story, well told. there are special skills, and wrangling multiple serial datastreams is among them. these days I'd lazily convert separately, drop into database and hide all the complexity in totally separate software that can only read the db. How times have changed...

@GeePawHill
That was a great story.

Thank you!

@GeePawHill your writing is so engaging, I had a lot of fun reading it. Thank you for sharing! Anywhere else you put up your writings?
@adityakhanna Sure, check geepawhill.org , tho I must say I don't usually just tell funny stories about my career. :)
@adityakhanna True 👍. I think, @GeePawHill wanted to be the comedy captain on this ship here 😀.
Thanks a lot for the story, GeePaw, it made my day 🐻‍❄️

@GeePawHill You have no idea how much I needed this story at this exact moment.

It’s easy to get depressed about perceived failures, and the longer you are alive, the longer that list will be. But there are other ways to look at it. The successes also stack up— it just takes more effort to remember those, some days.

@GeePawHill thanks for this great accounting and storytelling! amazing history and story.
@GeePawHill Epic failure and a wonderful story!
@GeePawHill the only safe way to see a polar bear. If you see one NOT from a distance, something's gone wrong, right?

@dtwx I read (from Jon Turk, who traveled extensively in eastern Siberia) that walruses are scarier than polar bears!

@GeePawHill