Category Archives: Programmer at Large

Programmer at Large: Can we not?

This is the latest chapter in my web serial, Programmer at Large. The first chapter is here and you can read the whole archives here or on the Archive of Our Own mirror. This chapter is also mirrored at Archive of Our Own.

“I think that went well, don’t you?

I let out a huff of frustration.

“What on the ground was that about?”

Sam cuddled up closer into a two person conversation stance.

“Brian is just a bit… sensitive about the subject of sex. Not sure why. Their profile says they have a high disgust reflex, but I’ve never been sure if it says that because of the sex thing or whether it’s the reason for it.”

“OK, but call me off consensus here, but wasn’t that just straight up rumour mongering? We’re not supposed to do that, right? What am I missing?”

Sam grimaced and (check tagging) looked uncomfortable.

“There are… special cases. Sex is one of them. Kimiko could legally challenge Brian about this if they wanted, but without that Brian is technically within socially acceptable bounds, though they’re being a bit gauche about it.”

I called up Kimiko’s social graph into a shared workspace and highlighted ties that had risen and then fallen. Brian was connected to about a third of them. I switched it to timeline mode and the pattern was even clearer.

“Gauche? Look at that. This isn’t gauche, this is practically aggression!”

I was getting mood warnings again, and Sam was stroking my back in a calming manner.

“Arthur, calm down. This isn’t your problem.”

“How is this not my problem? This is a clear social breakdown on the ship! Those are everybody’s problem! It says so right there in the charter!”

“Look, it’s complicated.”

“That’s what people always say when they think the rules don’t apply to them!”

Sam grimaced again and shook their head.

“Ugh, Arthur, I can’t do this right now. I’m sorry. I’m not angry at you, and I understand why you feel this way, but this is a much higher effort conversation than I have the capacity for at the moment. Can we drop it?”

Sam and I have had more than a few conversations like this, and they probably could tell how this one was going to go.

The problem was that it was hitting right at the core of the things I find hardest about shipboard society.

The goals of our charter are mostly worthy, and the rules it defines are mostly a fair way of achieving those goals. It’s not perfect, but nothing created by humanity is. We’ve learned that the hard way.

The official rules are sometimes very hard for me to follow, but I accept their legitimacy and where I struggle too much I have software to help keep me on track.

But then there are all the unofficial rules, which are impossible to keep straight because nobody knows what they are in any formal sense, they just somehow magically know how to follow them. Every time I ask people to explain, we just both get frustrated – they tell me things they want to be true, and I get mad because they obviously aren’t.

And when the unofficial rules override the official rules you got this sort of completely hypocritical situation where people just said “it’s complicated” and can’t really explain why.

But it wasn’t Sam’s fault the ship was like this, and I could definitely understand not feeling able to talk about it. Even if it wasn’t basic courtesy, I’d respect that.

I was glad they had clarified they weren’t angry with me though.

I took a deep breath, pulled myself together, and nodded acceptance.

“Of course. Sorry I got carried away there, but this stuff… gets to me.”

“I understand. It gets to me too sometimes.”

“It’s fine to not talk about it, but then I need to not talk right now. I think this is going to be on my mind for a while and I’m probably not going to be able to stay off the subject.”

“That’s fine. Do you want to go? Or should we hang out together quietly for a bit?”

I hesitated briefly, but the need to show Sam that I wasn’t angry at them won out.

“I don’t need to be anywhere, and the company would be nice if you’re still willing.”

“Of course I am! And I’ve got plenty of quiet things I can get on with, so this works well.”


We shifted around a bit so we weren’t directly facing each other and could each have a hand free to work with.

The first thing I did was drop a note in Kimiko’s inbox saying I’d like to talk to them at their convenience. I flagged it as low-urgency but mildly important. Their status showed as busy at the moment, so they wouldn’t get the notification until later.

The second thing I did was start calling up social network diagrams.

Kimiko was indeed poorly connected to a lot of the rest of the crew. They had the obvious contacts in the biology sections, and there was a fairly densely connected group of about fifty people that they were part of that didn’t have any obvious reason for the connection.

I guessed that was probably the sexual subset of the crew, assuming Brian hadn’t simply been wrong or lying.

The network structure here was weird. The group was much more densely connected relative to its external connections than a group this size should be. It looked a lot like a clique or a minority interest group, and we weren’t suppose to have those. I looked up the various group metrics to see why it hadn’t been flagged.

Apparently the answer was that it consistently sat just under the alerting threshold on every single metric – slightly too large to be a clique, slightly too small to be a minority interest. The standard clustering algorithms all cleaved the group roughly in half, though they didn’t agree on which halves. Average group centrality was low but not quite low enough to be worth a flag. And so on – we have about ninety social unity metrics and this group managed to just avoid alerting on every single one of them.

If I’d found a system in the plumbing like this then I would have immediately flagged it up for review. It’s in the nature of difficult systems to push right up against the alerting boundaries, and often it’s a sign that you need a new alerting metric.

Properly that was exactly what I should have done here too: The rules don’t distinguish systems made out of humans from systems made out of machines. If you see anomalous structure you should flag it for review.

But I had a nagging feeling that doing that here would be… bad. I resolved to wait until after I talked to Kimiko, and raised the importance level of my request to meet slightly, while still leaving it as non-urgent. This had clearly been going on for a while, and just because I only found out about it now didn’t make it suddenly urgent.

The whole scenario left me feeling intensely uncomfortable, but on the plus side I’d found my own little exception to the rules to be hypocritical about. Maybe I was starting to understand the rest of the crew after all.

Next chapter: Does that work?

Like this? Why not support me on Patreon! It’s good for the soul, and will result in you seeing chapters as they’re written (which is currently not very much earlier than they’re published, but hopefully I’ll get back on track soon).

This entry was posted in Fiction, Programmer at Large on by .

Programmer at Large: Didn’t you notice?

This is the latest chapter in my web serial, Programmer at Large. The first chapter is here and you can read the whole archives here or on the Archive of Our Own mirror. This chapter is also mirrored at Archive of Our Own.

As usual, I paused at the entry to the common area to scan the room.

It was incredibly quiet. Apparently I’d got out of sync with the normal meal rhythm of the ship again. Oh well, too bad.

Sam was there, along with someone else my HUD told me was named Brian. Apparently I’d met them twice before, but I had no memory of that at all. My notes for them said “Likes to talk about game theory”.

Sam waved a greeting at me as I passed. I waved back, and considered my options. Registered eccentricity or not, ignoring them and eating on my own would just be rude. Sam probably wouldn’t mind – they know about my eccentricity and are generally a forgiving sort – but particularly with someone else involved it would look bad and is best avoided.

I grabbed a meal pouch – extra protein, as per the system’s suggestion – sighed, and bounced back to join the two of them.

Brian was a pretty typical looking crew member. Short – slightly shorter than me, even – somewhat curvy, skin maybe a bit darker than average. They were currently doing a rather impressive fractal braid that I was pretty sure my hair wasn’t thick enough to pull off, but I made a note to see if I could steal some of the geometries. Sam was fully bald as usual.

“Hey Sam, hey Brian.”

“Hey Arthur! Brian was just telling me about why they’ve been hogging all that simulator time.”

“Oh?” I inquired politely while glancing at the contextual cue from our last conversation to remind myself what that was about.

“Yeah, apparently some of the information that we’d got on the broadcast has given them a breakthrough on some really exciting stuff. Brian, do you want to explain it or do you mind if I do to see if I understand it properly?”

Brian waved their hand. “Go on, as long as you don’t mind me jumping in if I think you’re off track.”

“OK, great. Arthur, how’s your game theory?”

I smiled. Looks like my notes were reliable at least.

“Eh, rusty at best. I’ve taken all the standard courses on it of course, but plumbing systems don’t try to outsmart you so I’m pretty out of practice.”

“OK. Do you remember what a trembling hand perfect equilibrium is?”

I blinked and called up the definition to refresh my memory, then nodded.


“OK, so…”

The explanation went on for a long time. I asked some questions, got some explanations, and think in the end I got maybe a third of it.

My very naive summary of it is this: Apparently some pure research that came in on the broadcast when we were in the last star system had applications after all. It established slightly tighter bounds on a classic convergence result in continuous time Markov chains. This in turn lead to a new strategy for dealing with boycotts of hostile planets, because in certain circumstances you could force a suboptimal equilibrium into a better state.

If the results of the simulations panned out in practice, this would reduce expected total length of boycotts by almost 1%. As well as saving a lot of lives, it had the more important effect that if it doesn’t disturb the standard model too heavily it should bring the best estimated likelihood of success of the coreward expansion from 99.72% to 99.73%. This would be extremely exciting, as that would be the first significant improvement in that number in several tens of gigaseconds of lineage time.

I’m sure the details were very clever, and Sam and Brian seemed very excited about them, but it was too far out of my field for me to really get more than the gist of it and, honestly, I didn’t really care enough to try that hard.

Eventually the explanation wound down and we hit a lull in the conversation. Brian broke it.

“So, uh, Arthur.”

They had a strange look on their face which I couldn’t interpret. I checked my HUD and apparently they were embarrassed. Odd.

“Yes?” I said in my best tone of polite interest.

“I noticed from your status that you’ve become friends with Kimiko recently…”

That sounded ominous.

“I guess so? We’ve talked a bit and they seem nice. Why?”

“Well, um, did you notice anything off about them?”

“What, you mean the uh-” check cue, and vaguely gesture at my face to cover the hesitation – “beard? Sure, it was a bit strange, but it seemed harmless.”

They waved their hand dismissively.

“No, no, beards are fine. There was a big trend for them a while ago before people got bored. But surely you noticed their social centrality markers?”

I shrugged.

I have a lot more status information configured than most people, and I’m not really that interested in the social games given how badly I do in them, so the relevant statistics tend to get crowded out.

I called them up and noted with some surprised that they were even worse than me. Curious. They seemed friendly enough.

“Oh, huh. That’s weird. No I hadn’t noticed that before.”

Sam rolled their eyes at me.

“Arthur you really do need to be better at paying attention to these things.” they said.

“Sorry. So, uh, what’s up with the low centrality? I don’t see any markers on their file to explain it.”

Brian looked even more embarrassed.

“Well, uh, you see. They have sex.”

I blinked. I knew people cared about that, but I wasn’t entirely clear on why. Anyway we didn’t ostracise people for it did we? That couldn’t be healthy. A lot of people experimented once or twice, so that sounded like a great way to create social division.

“OK? And?”

“What? You don’t care?”

“Well, sure, it’s gross, but it’s not like they’re having sex with me, right? They haven’t asked and I’d just say no if they did. Unless you’re suggesting…”

They looked horrified at the idea.

“No, no. They wouldn’t still be around on the ship if they did that. Just, you know, sex. A lot of it apparently.”

“OK. I don’t see the problem then?”

Was I starting to sound annoyed? I think I was probably starting to sound annoyed.

The look on their face changed. HUD said probable sudden realisation.

“Oh, sorry, do you uh…?”

“What? No! Yuck. I just don’t see the point in worrying about aspects about someone else’s private life that don’t affect me and are explicitly kept behind a privacy screen by charter!”

I was starting to get alerts that this was a bad social interaction and that we were making Sam very uncomfortable, but I had no idea how to deescalate when I didn’t start this mess in the first place.

We glared at each other for a little while while I tried to figure it out, but in the end they were the one who backed down.

“Ugh, fine. Be like that. I’m sorry I brought it up.”

“That’s OK. I’m sure you meant well.”

I’m reasonably sure they didn’t need any sort of HUD notification to notice the lie.

“Anyway, I’d better get back to work. Good to see you, Sam. Uh, nice to meet you again, Arthur.”

And, for once, I didn’t either.

We both cheek kissed Brian goodbye, mine rather more perfunctory than Sam’s, and they pushed off the wall and made a rapid exit.

Sam turned to me with a pained smile.

“I think that went well, don’t you?”

Next chapter: Can we not?

Like this? Why not support me on Patreon! It’s good for the soul, and will result in you seeing chapters as they’re written (which is currently not very much earlier than they’re published, but hopefully I’ll get back on track soon).

This entry was posted in Fiction, Programmer at Large on by .

Programmer at Large: How old is this?

This is the latest chapter in my web serial, Programmer at Large. The first chapter is here and you can read the whole archives here. This chapter is also mirrored at Archive of Our Own.

I awoke to the usual morning startup screen – diagnostics for my sleep, news, patches to my software, etc. Nothing very exciting. I was being gently chided for not having had a proper dinner yesterday – two protein bars after the gym really don’t count – but the system had replaced the worst of it while I slept and informed me I should just have a large breakfast to compensate for the rest. Other than that, all systems looked good.

I acknowledged the instruction for breakfast and spent another hundred or so seconds reviewing the data, but it was all pretty boring.

The correct thing to do at that point would of course have been to shower, get dressed, and go get some food as instructed, but something was nagging at me from yesterday’s work… I checked, and it was fine for me to put off breakfast for another 5 ksec or so (though I got the irrational sense that the system was judging me for it), so I decided to just go straight to work.

“Ide, how many temporary patches do we have in the system?”

“Four million, five hundred thousand, one hundred and seven.”

I squeaked slightly.


“Four million, five hundred thousand, one hundred and seven.”

OK, fine. I was expecting a large number. I wasn’t expecting it to be that large – I’d have thought maybe ten thousand at the upper limit – but it didn’t actually make a difference. Either way it was too large to handle manually, so it was just a question of getting the software right.

Still, more than four million? I know there’s nothing so permanent as a temporary fix, but that’s just ridiculous.

“Ide, what sort of time frame does that span?”

“The oldest is approximately 0.26 teraseconds old.”

“Wow, OK.”

That didn’t make any sense. The current patch system isn’t even that old. The trade fleet is barely that old.

“Ide, how are you defining temporary patch?”

“I have a complex heuristic subprogram that indexes logical patches from either the fleet system or imported software strata and looks at metadata and comments to flag them as temporary.”

“Oh, right. If you just look at trade fleet authored patches in the modern system which have been explicitly flagged as temporary how many are there?”

“One million, sixty two thousand and eight.”

“Ugh. And when is the oldest of those?”

“Approximately 0.15 teraseconds old.”

This was not going to be a productive line of inquiry, but curiousity got the better of me once again.

“OK, show me the oldest.”

ID: 3b2ca7b197f9c65e883ef177178e20e6bb14b...
Author: Demeter [bim-bof 3 of the Entropy's Plaything née Wild Witless Bird]
Revert-On: Closure of f265957e0a2...

Add a flag that deliberately ties the theorem prover's hands by restricting
the set of valid interleavings when running in time travel mode.

Why? Well it turns out that *some* Linux descendants have a very peculiar idea
of how x86 is supposed to work. This idea is backed up by neither the spec,
nor by the actual physical machines that existed back when x86 was still a
real thing rather than an interop standard.

How did that happen? Well this wasted code comes from a descendant of the
"Corewards Bound", who at some point introduced a bug in their
implementation which made things run faster and didn't obviously break any of their
software. When they found this problem a few hundred gigaseconds later they decided
to patch Linux instead of their misguided grounder-inspired broken emulation software.
Nobody backed it out later, it got passed down through three generations of ships,
and finally got handed over to us and now we're stuck with it.

This patch is stupid and should go away once the referenced issue is resolved.

I looked at the patch. It was some really hairy logic right down at the formalism layer for one of our emulators. I had absolutely no idea whatsoever what was going on in it. I didn’t know the language it was written in, I can barely read either x86 or the intermediate representation it was being compiled to, even with Ide’s assist, and besides I don’t know half of the maths required to understand why it was doing what it was doing.

The referenced issue was about patching Linux to not depend on this broken behaviour. It had reached almost a million words of discussion before just trailing off – I think given the timescales involved everybody who cared about it had died of old age. Or maybe we just lost touch with them – neither this code nor the code it patched were from anywhere in our direct lineage.

“Ide, how many services are running with this flag set?”


I breathed a sigh of relief. That was a much better answer than I was afraid of.

“When was the last time any of them had a bug?”

“No bugs have ever been reported in these services.”

“OK. How about in their service categories?”

“Approximately 80 gigaseconds ago.”

“What was it?”

“The Untranslatable Word passed through an area with an unusually high helium mix in the local interstellar medium. This increased the crash rate of the process by 15%, which triggered a maintenance alarm.”

“How was it fixed?”

“The alarm threshold was raised by 50%.”

OK. So I’d found a weird hack in the implementation of some extremely reliable services. My duty was clear: Do nothing, touch nothing, make like a diasporan and leave at extreme velocity. I was more likely to break something by trying to “fix” it than do any good by touching this.

Time to back up and look at the actual problem.

“OK. How many temporary patches are there that were created on the Eschaton Arbitrage which apply to some but not all running processes in a category, have a trigger to revert on a hardware change, but predate our last planetary stop?”


OK. Now we were getting somewhere.

I spent the next few ksecs triaging those nine manually. They all looked pretty harmless, but I bet there were some gremlins that they’d flush out when the relevant teams looked into them. That definitely wasn’t going to be my job though.

After that, I wrote up a wiki entry about this problem and filed an issue making some general suggestions for how we could improve the systems around this to stop it happening again. I wasn’t very optimistic it would go anywhere, but it was at least worth making the effort.

At which point, I decided it really was time for breakfast, and headed to the showers to get ready for the day.

I showered quickly, dressed, and spent a few hundred seconds dealing with my hair. I found the style my schema gave me a bit boring so I spent a little while tweaking the parameters to give something less symmetrical.

Eventually I got my hair decisions resolved, and headed for the common area for my much delayed breakfast.

Next chapter: Didn’t you notice?

Like this? Why not support me on Patreon! It’s good for the soul, and will result in you seeing chapters as they’re written (which is currently not very much earlier than they’re published, but hopefully I’ll get back on track soon).

This entry was posted in Fiction, Programmer at Large on by .

Programmer at Large: Who wrote this?

This is the latest chapter in my web serial, “Programmer at Large”. Previous chapters are best read at the Archive of our Own mirror. This chapter is also mirrored there.

I was only asleep for about a kilosecond before I started getting an alert from the system. It was quite reasonably informing me that if I insisted on sleeping in the hot tub then perhaps I should consider doing it face up?

I certainly hadn’t started face down in the water, so apparently I’d rolled over in my sleep at some point. I drifted for another couple of tens of seconds and then finally decided to acknowledge that OK yes breathing was useful. I rolled back over and sighed dramatically (important to get the order of those right).

I really hadn’t wanted to fall asleep there. Unsupervised sleep is awful even in zero gravity. In gravity you also have to deal with nonsense like which way up you sleep. I mean really, why should that matter?

Between the exercise, the heat, and the bad sleep I now had an annoying nagging headache and an overwhelming urge for food, water and painkillers, more or less in increasing order of priority.

I put in an order to the nearest delivery slot and heaved my way out of the hot tub to go have a shower while I waited for them to arrive.

I’m not too proud to admit that I shrieked when the cold water hit my head. It’s supposed to be very good for you after the hot tub but I was still half asleep and even at the best of times I usually manage to forget that these showers aren’t kept at a sensible temperature.

I lasted about 40 seconds before I decided enough was enough. I did feel better afterwards, but I swear that’s mostly because of how glad I was to have it stop.

Yes, I know that what’s good for you isn’t the same as what you enjoy. I’ve heard it enough times by now.

I dried off and quickly put my hair up into a bun – I really couldn’t be bothered to do it properly at that point – and by the time I was done with that the delivery had arrived, so I padded over to the nearby delivery point and tore into it.

I put the painkillers in my shunt and gulped down most of the electrolytic drink. Once my thirst had been slaked and the painkillers had kicked in, I turned my attention to the protein bars and devoured them in a few bites.

None of it would be particularly tasty in normal circumstances, but post-gym hunger is a harsh master and salt, water, sugar and protein was exactly what I needed at that point.

I removed the empty painkiller capsule and put it and the empty packaging back in the compartment to be taken for recycling. I figured it would take a while for things to kick in, so now was as good a time as any to get around to that meditation I’d been putting off.

I sat down cross legged (I can do a full lotus, but I couldn’t really be bothered. I know it’s cultural, but I also know the science says it doesn’t help) and called up my program. In the end it took me almost two kiloseconds to work through it – I’m not very good at meditation in the first place, and I was still feeling a bit twitchy from my impromptu nap, but eventually I got my mind into the right state and after that it proceeded more smoothly.

By the end of my meditation I was feeling a lot more human. My headache had subsided, along with the hunger and thirst. I went through some finishing stretches to undo the sitting – yet another reason why gravity is awful. Those finished, I fetched a clean uniform from the wall and changed into it.

I called up an image of myself and quickly checked my hair – I still couldn’t be bothered with more than a bun, but there’s no point in looking outright scruffy – and fixed a few stray bits at the back that I’d missed.

I decided I’d really had enough of people for now, so I got the transit chair back to the main ship and tucked myself away in a quiet pod to work on my Evolve strategies for a kilosecond or five.

Eventually, though, I got curious about work, and my schedule told me I was unlocked for it again and was welcome to resume if I wanted to, so I did.

I’d left some of my prototype zombie hunters running while I was away. They weren’t reporting anywhere except privately to me – I was sure they had bugs in them, but looking at some of the answers they gave now and seeing if they were right would help me figure out what those bugs were.

“Ide, how many potential zombies have my new hunters flagged up?”


“Ugh. All right, show me.”

I spent some time looking through the list and filtering things down. A bunch were false positives as expected – some interfaces that I had treated as read only in my original criteria were actually read/write but used some obscure different convention due to historical reasons – but eventually after some filtering I’d narrowed it down to 31 that were probably legitimate.

After a while of scanning through them at a high level and doing some basic triage I spotted one that looked interesting. I dug into it for a couple of kiloseconds until I was sure I understood what was going on, but it was exactly what it looked like.

Which left me with a dilemma: I was going to have to tell Kimiko about this. I didn’t want to seem too needy though, so it felt a bit soon to get in touch with them.

I dithered for a couple hundred seconds, but eventually concluded that I was being stupid. Even if I’d never met them I’d want to contact them about this, so putting off telling them about it because I did know who they were was just ridiculous.

I checked their status and they were apparently awake and working, so I opened up a line.

Arthur [vic-taf]: Hey, Kimiko?
Kimiko [jad-nic]: Oh, hey Arthur. What’s up?
Arthur [vic-taf]: I found some broken processes when I was looking into that bug for you, which has sent me off on a zombie hunt. It’s been running for the last couple of tens of kiloseconds and it surfaced something you should probably know about.
Kimiko [jad-nic]: That’s great, I’d love to hear about it later, but I’m kinda in the middle of figuring this yeast problem so do you mind if we take a pause on you telling me about it?
Arthur [vic-taf]: Actually this is about the yeast problem. I think. Maybe. Did you know the nutrient feed for the vat it’s in isn’t working properly?
Kimiko [jad-nic]: … what.
Arthur [vic-taf]: The feedback loop isn’t running properly – the process that’s monitoring the nutrient levels in the vat has the control part of it patched out, so the feed is just defaulting to a standard rate of flow.
Kimiko [jad-nic]: Argh, waste it. That would do it. This yeast uses slightly more feed than the normal batch, so it’s eating through the available feed stock and then doesn’t have enough to replace it. No wonder the little wasters are going sexual.
Arthur [vic-taf]: Oh good. I wasn’t sure it was relevant, but it seemed too much of a coincidence to ignore.
Kimiko [jad-nic]: Yeah this is absolutely relevant and you’ve probably just saved me a couple tens of kiloseconds of work debugging this. Thanks! [200 millivotes kudos attached]. But why on the ground is that happening?
Arthur [vic-taf]: Apparently the control sensor on it broke when we were last interstellar and we didn’t have replacement parts, so it was patched out as a temporary fix.
Kimiko [jad-nic]: Yeah, I remember that, but we replaced the sensors in-system and that should have triggered the reset condition, right?
Arthur [vic-taf]: Well it should have, but we picked up a new design from the locals and it uses a new interface, but the patch was expecting the old interface so the reset didn’t trigger.
Kimiko [jad-nic]: So who did the patch anyway? I should give them a rap on the knuckles.
Arthur [vic-taf]: Oh, uh, heh. Funny story… [Patch reference attached]
Kimiko [jad-nic]: Huh. I do not remember doing that at all.
Arthur [vic-taf]: Sorry.
Kimiko [jad-nic]: No biggie. Anyway, I’m going to go untangle this and see if I can prove this was all that was going on. Thanks again!
Arthur [vic-taf]: No problem! Happy to help. Good luck.

I closed off the link.

That was satisfying. Even if the plumbing bug turned out to be completely innocuous, this line of work had proven definitely useful – sure they’d have figured out the bug with the vat in the end, but that wasn’t the point. The point was that the zombie detection worked and it worked well enough that if we’d been running it we’d have caught this bug before it actually ruined a batch of yeast.

Which, I decided, made this a good point to down tools. I was still feeling a bit off from my nap earlier, but some proper sleep would fix that.

I shut down my workspace, plugged into the wall, an initiated my sleep program. The lights dimmed, and after a few tens of seconds I was once again fast asleep.

Next Chapter: How old is this?

Like my work and want to say thanks? Or just want to see more of it in advance? Support me on Patreon! You’ll get access to early drafts as and when they’re completed (although right now I’m a bit busy with PhD applications, so e.g. this chapter only got written late last night, but you’ll also see drafts of other blog posts).

This entry was posted in Fiction, Programmer at Large on by .

Programmer at large: How did people come up with this?

This is the latest chapter in my serial novel, Programmer at Large. If you’ve not been reading so far, the easiest place to read the archives are at the Archive of Our Own mirror.

“OK. Have you heard about gender?”

It didn’t ring a bell, and my HUD wasn’t indicating any sensible translation for the concept to ones I had, so probably not.

“I don’t think so?”

“OK. So you know how grounders often have all these weird appearance based caste systems?”

I nodded.

“Right, the skin colour thing.”

Now I felt bad that the first thing I’d noticed about them was their pale skin.

“Yeah, that’s the big one. Causes us no end of trouble. Anyway- argh, waste it. I’m sorry, can we put this on pause? I’m getting an alarm that I need to do another set before I cool down too much.”

I did a quick check to see if they were just blowing me off, but the alarm was legit, and the social cues system suggested they were perfectly comfortable up until the alarm annoyed them.

“Sure, no problem. I guess I should do another circuit or two too.”

“Great. This is my last set, so how about we meet up at the hot tub?”

I queried my program.

“Sure, I’m good to stop after this set too.”

I heaved myself up and broke into a run again, which gave me time to think things through.

That hadn’t gone… too badly. I fumbled my introduction something awful, but I think I recovered well enough. I then went straight for the personal questions, which wasn’t great but they seemed happy enough to discuss it and were generally a genial sort. All told, not too bad. Still plenty of scope to mess things up, but doing OK for a first meeting.

And the rest of the conversation would be had in a hot tub, which helps. It’s hard to get too stressed out in a hot tub.

Gravity is awful and I hate it, but the way water behaves in gravity is almost enough to redeem it. Water in zero gravity is a menace that you have to keep very well separated from any sort of free space, and swimming requires a breather mask. But in gravity it just… sits there. Or flows downhill. it’s pretty amazing, and it enables hot tubs, which are so much better than steam rooms.

Basically what I’m saying is I like hot tubs.

Which may have contributed to the fact that I only made it about one circuit before I decided I was entirely over running. I sent a message to the hot tub to prepare for occupancy and declared myself done with exercise for now when I next passed it.

The hot tubs we have are pretty great. They’re giant pools raised above the base of the ring off to one side of the track. You could easily fit 20 Crew in one, so Kimiko and I were going to be practically lost in it unless anyone else decided to join us.

I stripped off, threw the dirty clothing into the refresher, and showered. Showers are better in zero gravity, but I’ll admit they’re a lot easier in gravity.

Once I was suitably clean I eased myself into the gently steaming water and stopped thinking for a couple hundred seconds.

Eventually I was roused by Kimiko.

“Mind if I join you?”

They sounded amused.

I cracked open an eye and realised I’d drifted out to the center of the pool and was floating splayed out on my back. There was no way for me to take up the whole tub, but I was doing my level best.

I blushed – though between my skin colour and heat it probably didn’t show much – and scrambled to a slightly more civilized position on the ledge at the side of the pool.


They waved a hand dismissively.

“Not a problem.”

I looked them up and down as they got into the pool. I hadn’t really being paying attention earlier so I hadn’t noticed but they were really impressively muscular. Not the sort of grotesquely huge muscles you sometimes saw on grounder shows, but way more athletic than I’d ever seen on a Crew member before. I guess that’s what doing extensive calisthenics in high gravity will do to you, but wow.

I wondered why they bothered. It’s not like strength is much use to us.

They sat down on the shelf next to me, leaned into my shoulder slightly and closed their eyes.

We sat in silence for a while. I figured I should give them, and me, some time to relax before we started talking again.

Eventually they opened their eyes.

“So, I was telling you about gender. Still interested?”


“OK, so, as well as these skin colour based distinctions, most grounder societies also have another way they split people up, which they call gender. Usually there are two genders, sometimes three or four, but the common genders everyone seems to have are men and women.

“That makes sense so far. So what determines your gender?”

“Well it depends on where you are. But basically men have beards and women have big breasts.”

I turned to look at them. Apparently not joking, but it can’t hurt to check.

“You’re kidding?”

“No, honest. Beards and big breasts.”

“That doesn’t make any sense. I’ve seen grounders. Most of them don’t have either, and some of them have both!”

They shrugged.

“Yeah, it doesn’t really make sense. We’re pretty sure about the beards and big breasts thing, but the rest is all a bit blurry. Supposedly it’s meant to be about genitals – the men have a penis and the women have a vulva – but that doesn’t really explain the other genders, and the grounders I’ve met seemed perfectly happy to accept me as a man without checking if I had a penis or not.”

I resolved not to keep asking if they were kidding, but couldn’t resist the urge to check if they had a penis (they didn’t). I changed tack slightly instead.

“But what is gender for exactly?”

“Well it’s all a bit culturally dependent, but it’s primarily a status marker. Men are usually high status.”

“So you have a beard to show you’re… high status?”

I didn’t entirely succeed at keeping the disgust from my voice.

“Gah. No! Definitely no. I just like the beard.”

I relaxed slightly.

“Anyway, even if I wanted to use it that way it wouldn’t work. Most of the Crew learn about beards from Lesbian Space Pirates, where the men are low status.”

I pinched the bridge of my nose and groaned.

“So men may or may not have penises or beards and may or may not be low status but it’s clear to everyone except us which ones are men and we’re not really sure why?”

“Pretty much.”

“This seems like a complete mess. How did people come up with this?”

They shrugged.

“Archaic reproductive methods. If you don’t have uterine replicators, only people with a natural uterus can bear children.”

I winced and clutched my stomach slightly. No thank you.

They continued.

“Between that and the correlated biological differences you’ve got enough of a split to create one of those arbitrary social divides grounders like, which then mutates and changes over time, and tends to stick around even after they get proper reproductive methods. Like the charter says, social structures never die unless you kill them off.”

“This all sounds terrible.”

“Yeah, it’s pretty bad. Grounders, eh? Still, the beard looks good, don’t you think?”

“I’m still getting used to it to be honest.”

“It’ll grow on you.”

“Maybe, but I don’t think I’ll be getting one myself.”

They looked me up and down.

“Not unless you feel like really confusing some grounders, no. Which is always funny, but they get a bit touchy and violent about this one, so maybe best not if you plan to go ground side.”

“If they’re going to declare me low status just because of my breast size I’m not sure I want to!”

“Eh, you’d mostly be protected by being Crew. Grounders are intimidated enough by us that they tend to give us a high status by default, unless you’re in one of the really bad places.”

“Ugh. More status rules? How do you keep track of all this?”

“Oh, we don’t. We just do it in software and tag people with the relevant information. It’s healthier than trying to internalise whatever ridiculous rules the local grounders feel like playing by.”

“Oh. That’s not so bad I guess.”

In fact, it’s more or less exactly how I navigate Crew social conventions. We don’t have status hierarchies like that, but what we do have is just as complicated, and I think I probably have two or three times as much annotation as normal people do.

“Yeah, it’s annoying at first but you get used to it pretty quickly.”

No signs of that after more than a gigasecond so far, sadly.

We lapsed into silence again. I think they picked up that this was a bit of a touchy subject for me.

“So, if you don’t watch Lesbian Space Pirates, what do you watch?”

“Uh, not much. I’m not big on passive media. I play a lot of Evolve instead.”

“Oh, the graph theory game?”

“Well it’s really more of an abstract strategy game where the core playing field is graph theory. I tend to play it through the topological view.”

“Right. What’s the appeal? I tried it for a while but I couldn’t really get into it. It’s very slow moving.”

“That’s the appeal! I know a lot of people who I’m not shift synchronized with, and it’s really good for long play, so it makes a good way of staying in touch across shifts.”

After that the conversation became more casual – the games we played, the people we knew, etc. Nothing of great consequence, just the sort of social maintenance you use when sounding out someone new.

After another kilosecond or so, Kimiko had to go.

“Arthur, it’s been great meeting you, but I think I’m going to go get some food and sleep. Want to join me?”

I thought about it for a moment. I couldn’t tell if it was a genuine invitation or just politeness. I decided to play it safe.

“No thanks, I think I’m going to float around here for a little longer. See you soon, though?”

“Absolutely. We still have to talk about that bug if nothing else.”

We hugged and cheek kissed goodbye – the beard was scratchier than I expected, point against it.

I watched them as they blow dried themself. They really were very muscular, and I hadn’t quite decided yet whether it looked good or ridiculous. It was still impressive, either way.

They finished dressing and putting their hair back up and we waved a final goodbye.

Which left me alone in the hot tub. Honestly, I’d probably been here long enough – I was starting to prune – but I was going to need some food after this and we’re only running one dining room at the moment, so it would be awkward to leave now.

Oh well, more floating time. I pushed back off to the center of the pool and drifted for a while.

All told, I thought that went quite well. Positive first meeting of a fellow crew member. Possibly even a new friend. My HUD certainly thought so and was giving me all sorts of encouraging feedback.

They were a bit odd, granted, but I’m hardly one to point fingers there.

Rather than mull on all of the things I could have done better, I idly flicked through the news feeds to see what else was going on on the ship and whether we’d picked up any interesting new data from the larger network.

After a while, the heat of the pool and the earlier exercise got the better of me, and I drifted off to sleep.

Next chapter: Who wrote this?

This chapter is also mirrored at Archive of Our Own. Updates are currently every other Friday. Patreon backers get access to early drafts of upcoming chapters.

This entry was posted in Fiction, Programmer at Large on by .