Tom

Professional programmer, amateur speculator People pay me money to write code so I guess I'm ok at that. Nobody pays me to write words but sometimes I want to do that anyway so here I am, doing it for free. DISCLAIMER All opinions expressed in this space are my own and not representative of any employer of mine (past, present, or future), any organization to which I belong, or the broader community of well-adjusted human beings in general.

Elegant Languages and Useful Languages

or, here's why some real living humans enjoy PHP I've been writing a fair amount of Bash lately, mostly to automate some repetitive manual processes at my day job, and it's got me thinking. Bash is not a pretty language. In fact, as far as languages go, at least those which are actively used for real work today, it's got to be one of the ugliest. If you don't believe me, here's what a case statement looks like: case EXPRESSION in PATTERN_1) STATEMENTS ;; PATTERN_2) STATEMENTS ...
Read post

Some "Learn To Code" Advice

Author's Note: this is an abridged and somewhat edited version of an email I originally sent to a friend, a couple years ago, who had asked for advice on getting into the programming career field. He was already working in some sort of physical engineering role and had some basic programming experience from his college work so it seemed like a plausible lateral path for him, but before he could pursue it he found a better physical engineering job that he actually liked and last I've heard he's s...
Read post

Waiting for the Fourth Computer Revolution

The first computer revolution was world-shattering. Within a decade and a half, computers went from expensive monstrosities commonly found deep in the bowels of large organizations to household appliances, as commonplace as refrigerators or televisions. Fortunes were made and lost. Multiple different companies started in nerds' garages and ended up multinational behemoths, still lumbering along today. The big winners were hardware companies making the computers, and software companies selling o...
Read post

Technical Exodontia

One idiom in the programming/technical world that really should exist is a snappy term for "the act of painfully extracting information from someone who is insistent they have a problem with your system, but refuses to give you anything useful or diagnosable about said problem". For example, here is a conversation I have had, in some form or another, with probably a dozen QA analysts over the last few years, including at a famous, multinational tech corporation: QA: Your code isn't working! I...
Read post

History Isn't Boring

Author's note: this is some deep post necromancy here. I originally wrote this back in 2014, when I held a low-level position at a long-defunct nonprofit called the World Future Society, which billed itself as the premiere professional organization for "futurists", the 21st Century English term for "soothsayers". Unfortunately, the images are long lost to link rot, so you'll have to imagine them from the descriptions I include, which are of course based on my unreliable memories. That said, I do...
Read post

Social Hacks to Selfishly Up Your Work Game

If you, like me, work in a technical position, you probably think of social skills as a waste of brainpower. And one of the greatest advantages of having a technical position is that most of the time, social skills are optional for your job progression! But what I've discovered over the last few years is that if you develop social skills in particular ways, it can actually be a worthwhile investment, because they can make your job easier while making you look more valuable to your management. Th...
Read post

Complication, Complexity, and Chaos part 3: The "AI Sweet Spot"

Previously: Part 1 and Part 2 Now that we've established a basic understanding of some systems context, we can use it to draw useful conclusions. Let's start by establishing a coherent and somewhat meaningful definition of "AI": statistical and computational techniques that allow humans to "train" and "generate" algorithms to work in problem spaces where we cannot directly write useful algorithms, and the vast, inscrutable algorithms which are generated by these techniques. Though the specifi...
Read post

Complication, Complexity, and Chaos part 2: Life is Chaotic

(Part 1 here) Imagine yourself as a single-celled organism living in a puddle. You have exactly one top-level priority: propagate so that your descendants are more numerous than you. In service of this goal, you have exactly two primary objectives: 1) don't die, and 2) acquire resources. In service of these objectives, you have a solid handful of secondary objectives; for example moving toward potential food, moving away from potential predators, responding to nonliving hazards like contaminant...
Read post

Complication, Complexity, and Chaos

There are three separate dimensions to any dynamic environment: complication, complexity, and chaos1. I'm going to explain what these dimensions mean, and why it's so important to keep track of them, in this post, and if you're willing to read on and bear with me, I'm eventually going to apply them to make some statements about "AI" and the limitations of the future impact of algorithms and binary computing in general. Complication is when a system follows a large number of specific rules. Com...
Read post

How to explain a software system

Has THIS ever happened to YOU? You're in a meeting with a bunch of other developers. The presenter, who is one of the smartest people you will ever meet, starts off by saying "I know you mostly aren't familiar with the FroznakDecombobulationService, so I'm going to give everyone a high-level overview. As you will see from the boxes and arrows on this slide, ..." Fifty minutes later, your coffee cup is empty, your bladder is full, your notepad is full of explanation on all the different framewo...
Read post

Git learnt

(ya know, if you want) Git is a powerful tool, and by far the most effective way to unlock its potential is to use it on the command line. There's just one issue with that, which is that the syntax for Git commands is unintuitive, often overly verbose, and written at a very low level, so doing many operations you care about (like, say, "put me on the latest version of this specific branch from the remote") tend to involve several commands. And since the commands are often context-dependent, com...
Read post

"AI Alignment" is impossible, but that's OK because it's also a silly thing to worry about

Fine, I'll elaborate. The version of "AI Alignment" I'm talking about here is the kind that a bunch of big-shot internet celebrities and "research foundations" and such are "trying" to "solve", where we build an AI with arbitrary capabilities far greater than human, and then try to make it do what we want. Here's why it's stupid: For any galaxy-brained constraint that we could place on an arbitrarily powerful AI, there exists an even more powerful AI which could develop an even more galaxy-bra...
Read post

Now featuring sweet aesthetics

I wrote a custom theme for this blog based on dark mode for hack.css. I had to copypaste it all into a single file and change a bunch of selectors which were targeting class names to just directly target the HTML elements, because Listed doesn't give the customizability to change any of the selectors on your HTML itself. I then went out and found the hex color code for old-school terminal style bright green text, which turns out to be #4AF626 (roughly speaking). I changed the primary colors to ...
Read post

A past post on Azure databases

While I polish up some of the drafts, I'd like to collect some of my other writing online too. So here is a post I did a few years back for my work's dev blog, about how to tune your Azure Cloud SQL database to make it go extra fast. ...
Read post

A Taxonomy of Software Failures

(Somewhat inspired by this classic article about categorizing exceptions, which anyone who writes software should read.) There are an infinite number of specific ways that a production software system can fail, and in my career I've encountered a vast array of them (of course, some percentage of them were my fault in the first place). But I've noticed that production failures tend to fall into a few broad categories, so my hope is that by sorting the categories out, it can be easier to anticipa...
Read post

First Poast

Testing this thing out -- there's a bunch of stuff I kind of want to write up, polish up, and broadcast to the general public. But since social media is demonic for numerous and well-documented reasons, I'd rather do it on a place like here; also because I'm hoping this will force me to be more proactive and coherent than I otherwise would. Current agenda is to get the general layout and metadata and CSS looking nice and fancy while I also polish up the posts I have in the drafts, and hopefully...
Read post