I find this comment thread on how programmers will "automate" our way out of jobs to be especially pertinent as I work on my proposal. A contention I have, as do many others, is the primary practical challenge standing between us and robust systems is complexity. There are several on this thread who believe we have essentially mastered complexity for a broad number important application areas.
I think I could be convinced of this argument as long as those application areas are very narrow. As long as the creators of those applications are content with relatively standardized solutions. The moment there are A) functional requirements not covered by the standard case or B) differentiating requirements (such as aesthetics etc...) the general tool stops working. This is what makes complexity such a beast. If you make a fully generic tool, you have created a programming language. Perhaps a very high level (even graphical language like LabView) but still a language. Such things require trained people to operate.
We will never not need programmers.