Part of the problem is the preoccupation with fads. While AI and 4GLs were developed with whiz-bang user interfaces, most app dev tools still were saddled with the same old UIs. We have come from the Wild West, but we're still waiting for the great railroad expansion. What we absolutely need is an open, extensible environment for software development that will let us churn out applications faster. Tools need to work the way we do, and they need to "remember" what we've done in the past.
Before all of you developers click on the "flame the author" link, let me clarify. Yes, Visual Studio will let us develop applications pretty rapidly, but if we are working on anything that wasn't considered by Microsoft, or we have a better way to do things, we're on our own, working in a text editor. Real life doesn't come out of a Microsoft design guide, and not every Web client is Internet Explorer. Some Java tools make development faster, but they are also tied to a single environment.
Our best hope out there is an open-source project. More innovation in development tools has sprung from the Eclipse project than from anywhere else over the past decade. The simple ability to highlight a group of code, say "make this a function"and then say "replace all instances of that code with the function" is the best innovation since autocomplete. And Eclipse is open, supporting more languages with more innovative approaches than any other tool on the market.
But we need more improvements if we are to reduce the cost and complexity of software. HTML is a well-documented standard with (relatively) few command words. I should never have to type in an HTML tag. Never. And yet I do all the time with all the major development tools. The same is true of most other languages. Once I set up my XML (via schema or hand-entering), I should never have to type another tag from it.
Also, database access needs to be universal and simple. ODBC was a joy when it came out, and JDBC follows suit. But why did we stop there? I should not have to install drivers on a PC to get database access. I should be able to bundle drivers into my applications so that they know how to use a standardized data backbone that is distributed with the operating system. Windows isn't optimal--the drivers aren't easily repackaged, and they require separate installation--and Linux hasn't even caught up to Windows.