[New thread, spawned from the “Nicholas’ Simple Unity Tutorials” thread in the Support forum.]
This post is a reply to the question: How would I change how software development is done?
Incidentally, the title of this thread would happen naturally if the path I suggest is followed:
Programming languages are differentiated almost exclusively by their organisational and structural scaffolding. Eliminate the need for that stuff to be in the programming language itself and the very need for the Tower of Babel ceases to exist.
So what is the first step along that path?
Simple: Get rid of the dumb, flat, text files.
Store the raw code in a database. Each class or module becomes a record; each function / method becomes a sub-record in the database. Variables are just fields in the record.
This isn’t merely the first step: it’s the only step needed to bring development kicking and screaming into the 21st Century. Everything else follows on directly from this fundamental change.
Once you’re doing it this way, it’s easy to see that we can abstract all the structural and organisational scaffolding into the database’s structure and the IDE itself. All that’ll be left is the ‘naked’ instructions.
Now you can start thinking about using the database’s strengths to improve the quality of the code: define contracts for your functions and classes; the database structure makes it trivial to store this as metadata.
Speed up the compilation process too: the unit of compilation becomes the individual records. Spread this process over all the clients and even the server itself – no more long compile-and-link cycles. There’s always an compiled version ready to test.
Massive improvements in scaleability, versioning and project management. Check-out code at the function level, not just at the text file level. Versioning comes practically as standard and is trivial to implement. The database can be accessed however you please – online, offline, remotely, in-house, wherever. Metrics can be improved too.
You can build – even generate – entire test suites just by analysing the metadata in the database. You can build all sorts of tools that would be utterly impractical for current development systems.
Furthermore, eliminating all that language-specific organisational and structural fluff leaves us with something truly portable and, most importantly, reusable. Now you can do real black-box programming. You can build programs as easily as if you were using LEGO bricks. Need a quicksort? Search a trusted website for one with matching contractual requirements and you can literally drop it right in, sight unseen.
View your application any way you damned well please! Export it in any language you like (within reason)! View it as a 3D model, zooming out to see the big picture, or drill right down, into the blocks, and into the underlying raw code.
This is all blindingly obvious stuff and I’m even not the first to suggest it. I’ve banged on about it at length in the GameDev.Net forums over the last few years already. It’s a complete and utter no-brainer solution to so many development bottlenecks.
The key obstacle is that someone has to take the first step and commit to it. They’ll have to use current tools to build that first iteration, but Unity might be a good starting point too.
That “someone” isn’t going to be me. I don’t like programming for its own sake; I know how to change a fuse too, but that doesn’t mean I’d enjoy rewiring my house.
(Okay, I lied about demolishing the Tower of Babel. If this industry has taught me anything, it’s that getting two IT companies to agree on a single, global, standard is about as likely as convincing the Pope to renounce Catholicism. Nevertheless, I hope it’ll be a much shorter, less annoying, tower.)