Inch forward a bit, a bit more...
Programming is still way too hard. Even the smallest piece of software takes a huge amount of effort to build.
Software tools are not great. The tools I use now are not really that far away from what I first started using professionally in 1992. Back then it was a command line compiler with make scripts and Brief as the text editor. Now it is a Integrated Development Environment wrapping the same command line compiler. Not much change there.
Yep, there are lots of UML tools. But, from my experience, they are as likely to hinder productivity as encourage it especially on small/medium projects. You can’t beat a notepad and a pencil for software design.
Debugging tools are certainly better but not by much. A debugger from ten years ago is pretty close in terms of features to its modern equivalent. The Edit and Continue feature sounds like a great idea but in practice I rarely use it.
The big hope was Object Oriented Programming combined with feature rich libraries. They still are 😉
One very interesting field that holds real promise, when combined with object orientation, are design patterns. I can remember reading the GoF book and being absolutely bowled over by it. Obvious really, but only when somebody else has thought of it.
Another interesting idea that has gained a lot of traction recently is automated testing. Most interesting of all is the concept of continuous integration. Every time code is added to the software repository build it and make sure it works properly. Great! The tools are slowly getting there, though only for Java and .NET environments.
Test first programming is also a very good idea, though not always easy to achieve. The idea being to write the tests before you write the code. Then, when all of the tests work you know you’re done. The great thing about this is that you have a body of code that you know works, and you will keep a tight reign on the features you put into the software. Controlling the specification in software is a much under appreciated art.
My belief is that software won’t get better by the invention of a single tool that revolutionises the software industry. Rather it will be a continual evolution of tools, technique and practice over the next few decades.