In an earlier post of mine, I linked to this article by Jim Shore on how building software is nothing like construction. This is a topic I've been thinking about a fair amount lately and I've come to a conclusion: I don't agree entirely with Jim. Here's one of the quotes that have been hanging around in my noodle as of late:
In the software world, there is no reason for us to follow the practices of an industry limited by Newtonian laws. We have no gravity. There is no inertia. Lines of code have no weight.
If we want to dig a metaphorical hole after pouring metaphorical concrete, there's nothing to stop us. If we want to flip the software upside down and build a foundation after we've built the building, we can do it. Our only limits are in are (sic) heads. Once we stop thinking that software development is like construction, we'll have one less limitation to struggle with.
While it is technically true that we, as software developers, are not governed by Newtonian laws, I think there is one statement where Jim's hammer misses the nail's head: "Our only limits are in are (sic) heads". This is where I disagree.
It is indeed true that we are not governed by physical, world-bound laws. However, that does not mean that we are not governed by any laws whatsoever. This is not a logical conclusion. There are most certainly laws that we are bound by depending upon the context in which we are developing within. It is just that the laws are software-bound instead of physics-bound. Sometimes these laws are relative (like trying to build a new Enterprise-level application in .NET and SQL Server at a company whose entire infrastructure is built upon Unix and Oracle). I'm sure sometimes there are software laws that are absolute as well. The only limits are not in our heads. There are very real-world limits that will scope and change a possible solution. To me, that is one of the key points behind using the right tool for the right job. If we didn't have these constraints, we could use any solution for any problem no matter what the context may be (which unfortunately, I have seen done before).
To me, the interesting piece of research would not be researching the fact that we are not bound by physical laws. I think the interesting research is finding out what laws we are bound by in the virtual world. Who is going to be the Descartes, Newton, or Einstein of computer software?