I think the kind of education and training needed for most software development situations is not widely available. What's needed, and starting to show up is a software engineering degree that bridges the gap between code-monkey and computer scientist.
Vocational education programs in computer programming tend to produce code-monkeys who produce internal applications that don't do anything especially interesting. The applications are usually web and desktop GUIs over some database, and tend to be written in Java, C#, VB and the like. Most people with this level of training would have trouble picking up a new language without more formal training.
Computer scientists tend to know massive amounts of theory. I suspect most computer scientists could pick up a new language simply by glancing over the documentation, and write a paper describing the theories the language implements. If you asked a computer scientist to create an application the accounting department at a big company could make use of, however, you'd probably have bad luck.
What's often missing is education and training for software engineers. Finding solutions to difficult problems requires a good grounding in theory, but actually implementing them requires a background in tools that meet real-world needs. It does appear that degrees in software engineering are starting to appear, though I know essentially nothing about the programs. Most hackers fall in to this category, though their learning tends to come from less formal sources.
You overestimate(wish fulfillment?) the prevalence of difficult problems. The vast majority of work involves problems that you classify as not doing "anything especially interesting" and written by "code-monkeys".
Vocational education programs in computer programming tend to produce code-monkeys who produce internal applications that don't do anything especially interesting. The applications are usually web and desktop GUIs over some database, and tend to be written in Java, C#, VB and the like. Most people with this level of training would have trouble picking up a new language without more formal training.
Computer scientists tend to know massive amounts of theory. I suspect most computer scientists could pick up a new language simply by glancing over the documentation, and write a paper describing the theories the language implements. If you asked a computer scientist to create an application the accounting department at a big company could make use of, however, you'd probably have bad luck.
What's often missing is education and training for software engineers. Finding solutions to difficult problems requires a good grounding in theory, but actually implementing them requires a background in tools that meet real-world needs. It does appear that degrees in software engineering are starting to appear, though I know essentially nothing about the programs. Most hackers fall in to this category, though their learning tends to come from less formal sources.