There is one problem I have been wondering about. I have no idea whether it qualifies as an open challenge.
Mathematical
knowledge has been steadily growing with time. The
theoretical foundations, concepts, notations, and proofs have evolved
over the centuries. Mathematicians have managed aggregation without
necessarily checking its global consistency in a systematic and formal
way at any point in time (though there were attempts to do it).
We should expect programming languages and program libraries to
aggregate and evolve similarly over the time. What kind of tools could
help manage aggregation of programming results and libraries so as to
keep them consistent and effectively usable by all, as computers can
be more formal and demanding regarding consistency. Do we have to redo
the libraries for each new programming language. Why should we have to
choose a language because it has the right libraries for the intended
application rather than for its intrinsic qualities as a programming
medium?
On a different topic, you might find ideas in the following question: Are programming languages becoming more like natural languages? I realize that the idea may not appeal to many theoretical computer scientists, but it may still be useful by looking at different issues or from a different point of view. I am far from agreeing with many of the ideas that were posted, but that is what discussion is for.