How do we add gravity to software?
"When you blow something up by a factor of one hundred, it gets weaker by a factor of one hundred. If you try to build a cathedral that way, it just collapses into a pile of rubble." - Alan Kay
Having spent time as both a "Software Engineer" and a Structural Engineer, I am always interested when key industry figures start comparing the two disciplines. Alan Kay's insight into one of the fundamental problems with software reminded me of the arguments over the use of the word "Engineering" for software.
"'Software Engineering' is something of an oxymoron. It's very difficult to have real engineering before you have physics, and there isn't anything even close to a physics for software" - L. Peter Deutsch
The more I think about it, the more I can see what these guys are saying. Within the idiom, software isn't subject to the physical laws that govern structures.
For instance, about a decade ago, I was tasked with building the structural analysis model of the London Eye. As you can imagine, this included a very thorough consideration of the different combinations of force and load acting on the structure in order to calculate how much material was required for it to stand up. We considered over 200 different loadcases for self-weight, wind, people, motion, etc. but in all of them the major force was due to the self-weight of the structure. On average, about 90% of the material in that big wheel is only there to hold itself up.
This introduces some interesting approaches to the engineering solution. In these circumstances, if you have a large force to resist, you cannot just throw more material at it because you are just worsening the problem. Eventually the whole thing will fall down. One wonders what kind of software we would produce if, like London Eye steelwork, 90% of the code written did nothing apart from retain the structural integrity of the software. Without the constraints of gravity, won't we just keep on building and building?
I guess we apply some constraints to ourselves by using application frameworks such as Rails or Django, but the only real physical constraint on sheer volume of code I can see is factors such as disk space, processor speed, RAM, etc. And how many of us push our servers to that extent? Hmmmm.