The pleasures of orthogonality
Focusing a large format camera can be a tricky process if you’re not used to it. Unless you have a remarkably simple scene there’s usually a period of frantic adjustment of swings and tilts to try and get the plane of focus running through the most important elements of the scene. Most large format photographers will have heard of the Scheimpflug Rule which says that the plane of sharp focus, the film plane and the lens plane must all intersect in a single line. This is one of those useful in theory but useless in practice maxims.
The problem is that you can end up chasing your tail. Adjusting the focus moves the line of intersection, which means that the plane of sharp focus is suddenly missing the nearest point, so you adjust the tilt to take that into account, but that changes the angle of the plane of sharp focus so it misses the far point, so you adjust the focus, but…
Focusing a large format camera can be a tricky process if you’re not used to it. Unless you have a remarkably simple scene there’s usually a period of frantic adjustment of swings and tilts to try and get the plane of focus running through the most important elements of the scene. Most large format photographers will have heard of the Scheimpflug Rule which says that the plane of sharp focus, the film plane and the lens plane must all intersect in a single line. This is one of those useful in theory but useless in practice maxims.
The problem is that you can end up chasing your tail. Adjusting the focus moves the line of intersection, which means that the plane of sharp focus is suddenly missing the nearest point, so you adjust the tilt to take that into account, but that changes the angle of the plane of sharp focus so it misses the far point, so you adjust the focus, but…
Which is why a Harold Merklinger is a hero. He took another look at Scheimpflug’s work and discovered what he calls the ‘Hinge Rule’. Essentially the Hinge Rule lets you choose a fixed pivot line that doesn’t move about as you adjust lens:film distance (there’s a couple of caveats but they’re easily worked around). Knowing how to take advantage of the Hinge Rule means that your focusing process has disentangled itself slightly and you don’t suffer from a single control altering two or three different things at the same time. (Actually, it still alters two or three different things, but it doesn’t alter the thing you care about). It won’t guarantee you get a good photo, you still have to know where to stand and where to put the edges, but it does make the process of making a photograph easier.
There’s all sorts of other areas in photography where the battle is to find controls which don’t alter 5 things at once, usually they can’t be found so the trick is to get a good understanding of what the available controls do to what, and use that knowledge to produce a final image that looks right. I’d go so far as to argue that PhotoShop is so popular is because it provides the skilled worker with a set of controls that genuinely do alter one thing at a time rather than monkeying with an entanglement.
In other words, PhotoShop introduces orthogonality. Orthogonality is a term that comes from mathematics, a set of variables is orthogonal if adjusting one variable has no effect on any of the others.
Orthogonality is a desireable trait in programs too. When I change something in the source code of my program, I don’t want to have to go changing stuff elsewhere to compensate for that change. Both Functional Programming and Object Orientation are approaches that, used well, help to increase the orthogonality of your program source, the process of refactoring code is another process that should tend towards having a neatly orthogonal code base.
And Programming languages benefit from increased orthogonality. One of the trends that I’ve noticed in Larry Wall’s work on designing Perl 6 is that Larry seems to be favouring solutions that disentangle things and introduce orthogonal features. For instance, in a post about how properties and object orientation will work in Perl 6 Larry said (my italics):
The basic underlying philosophy is that classes should not be used both to create objects and to specify the scope of reusable code. At least, they should not be forced to do both of those. So I think Perl 6 will attempt to divorce those concerns.
Talking about Perl’s multimethod dispatch, he pointed out that multi
is “now completely orthogonal to scoping”.
Orthogonality’s a strange thing though. Seeing it is often a matter of point of view. A photographer focusing using the Scheimpflug Rule sees no orthogonality or fixed points at all. Another photographer, with exactly the same camera, scene and controls who is using the Hinge Rule sees a fixed point and a set of neatly orthogonal adjustments that he can make. When you’re introducing new orthogonality to a programming language, the trick is choosing which bits to make independent. Based on his work so far, I’d say Larry is doing a good job of making those choices.