A
Arlet Ottens
Mmm.... I think you'll find that in both software and electronics,
things can get as complex as you'd like them to be. It's not at all
"elegant, simple, and obvious" how you build, e.g., a 1GHz op-amp with
low noise, input capacitance, and offset voltages, nor is it entirely
simple and obvious how you might implement something like a
hardware-based MP3 decoder once the real world throws on the constrain
of it having to cost $0.25 in quantity.
I think there's a difference in design complexity, and running
complexity. The design of a good 1GHz op-amp is certainly very complex,
but once the design is finished, it's much less complex for another
engineer to understand and verify that it works according to
specification.
Software has a potential to remain very complex, even after it's
finished. The reason is that software programs have a tremendous amount
of internal state, and only a tiny portion of the state-space gets
visited during a typical run.
A million line program that uses 10^8 bits of state remains very hard to
understand and very hard to verify, no matter how smart the engineer.