codersnotes

The Illusion Of Controls October 15th, 2016

Some things are just plain hard to use. There's a lot of things you have to learn before you can use it effectively, there's big manuals you have to read, there's gotchas you need to be aware of first.

I can't use this thing, people will say. I just want to do X, why do I have to mess around with all these details which are getting in the way? Why can't it be simple?

It's a common enough complaint, one you'll hear directed against anything from the Linux command-line through to the user interface of Dwarf Fortress.

But for every complicated interface, there's always someone who'll reply with the common phrase:

"X needs to be that complicated. Y is fine for noobs, but with X you get so much more control."

And herein lies the problem. The illusion of controls. It's not often that one letter can make such a difference, but what we're talking about here is control vs controls.

Whenever a problem is presented, all good programmers know to head directly for a good car analogy. It's a tried-and-tested method we've used for years which I'm almost certainly sure won't backfire on me terribly. Nope. Here we go!

I'll quote from these instructions on how to drive a Model-T Ford, an experience once described by Top Gear's Jeremy Clarkson as "the hardest thing in the world", like trying to pat your head and rub your belly at the same time.

How To Drive a Model-T Ford

There are three pedals on the floor marked from left to right when sitting in the driver's seat: C (clutch), R (reverse) and B (break). There are two levers on the steering column, spark advance and throttle, and one floor lever to the left of the driver. The floor lever is neutral while in the upright position, second gear when in the forward position while the leftmost pedal (C) is not depressed, and emergency brake when all the way back.

All speeds are controlled by a foot pedal enabling the driver to stop, start, change speeds, or reverse the car without removing the hands from the steering wheel. The foot pedal at the right, operates the brake on the transmission. The pedal in the center, operates the reverse. The left foot pedal, is the control lever acting on the clutch.

The hand lever when thrown forward engages high speed; when pulled back, operates the emergency brake. The lever is in neutral when almost vertical and clutch is in a released condition. With the hand lever thrown forward in high speed, a light pressure on pedal 'C' releases the clutch while a full pressure on the pedal throws into slow speed; by gradually releasing the pedal, it will come back through neutral into high speed.

There's more -- you've also got the "spark advance" lever (no idea), a carburetor adjustment, and an additional throttle lever.

On the other end of the spectrum is something like a bicycle. On a bicycle you have pedals for your speed, and handlebars to steer. That's basically it, there's a brake lever and maybe a gear selector. It's an incredibly simple machine though, one which you can learn without instruction very quickly.

Part of the simplicity of the bicycle is that you can see how it works. It's immediately obvious how your action on the pedals affects the ground speed. You can directly see the relationship between the brake line and the wheel.

The difference is a bicycle has control. The Model-T has controls. With a bicycle every part of your body is in direct connection with the movement. You can lean into corners, shift your weight around. You can feel the brakes and whether you're applying the right pressure.

The Model-T takes the approach of having controls. A complex beast of a machine that requires memorization, and the knowledge of what each control does and how it operates the beast. Modern cars try to simplify that as much as possible, and cars like the Tesla go to an extreme, having not even a clutch or gearbox. Perhaps it's not the best parallel, and I'm sure some reader will call me out on my terrible automotive knowledge. But the point remains valid, and programmers would do well to heed it.

An Etch-a-Sketch has more controls than a paintbrush, but has no control. Give an artist a paintbrush and it becomes an extension of him, a tool he can use to apply different pressure, to feel the paint as he moves it around a canvas. An operating system like Linux gives you a lot of controls -- a hundred different config files to adjust, fontconfigs to manage, but it gives you no control. We spend so long caught in a Byzantine complex of configurations and dotfiles that we fool ourselves into thinking that the controls were the reason we originally came here.

And for the record, I don't feel the solution is to just hide the complexity like so many programs do (I'm looking at you, Apple). That's like putting the controls inside a sealed box and hoping you won't try and adjust them. We need more systems like the Tesla and its all-electric drivetrain, where the need for controls dissolves away.

Written by Richard Mitton,

software engineer and travelling wizard.

Follow me on twitter: http://twitter.com/grumpygiant