Log in

No account? Create an account
entries friends calendar profile Elf Sternberg's Pendorwright Projects Previous Previous Next Next
Not even elegance matters to most software devs... - Elf M. Sternberg
Not even elegance matters to most software devs...

Akin’s Laws of Engineering apply strictly to physical systems. Dave Akin was an engineer at NASA who specialized in designing launch vehicles, and his laws apply to build things that go into space. Many of his laws he attributes to other people, but one that is his own is

Any run-of-the-mill engineer can design something which is elegant. A good engineer designs systems to be efficient. A great engineer designs them to be effective.

His example is: an ordinary city has an elegant water system; New York City has an efficient water system; Rome has an effective water system (parts of it date back to Julius Caesar and are still in use!).

I’m quite certain that the designers of the Roman and New York water systems wanted a system that worked and engineered their way into elegance along the way.

The thing that gets me about Akin’s Law of Elegance is that it seems to me to be exactly backward, on the one hand, and to be an example of why Go is popular and Haskell is still struggling on the other. Javascript’s map/reduce/filter are examples of things that are both elegant and effective: they reduce the messy and chronically off-by-one for loop filled with expressions and allocators into something much more readable: (expression, and things to express on). They trade those for efficiency, but software has a lot more ‘give’ than launch vehicles, even in something as small as a watch. If you want all three, then I have to suggest Lisp or Scheme: you can extract the sequencing and allocation out of the passes into a single, transduced pass without function calls, saving yourself a lot of memory and CPU.

Given that fact that so few developers care about elegance, I really wonder if we even have systems that are efficient and effective. Go is “effective” in that it trades developer cycles for CPU cycles, but the things written in it have no long-term guarantees of maintainability; Go creates the illusion of this with a hard style guide, but style and elegance are still too different things: you can hire someone to buy you stylish clothes, but if you don’t walk in them well elegance will be beyond you.

Then again, most developers I know still wear a t-shirt and jeans to work, so I don’t expect elegance to be a trend anytime soon.

Leave a comment