<i>Functional languages, as personal experience above leads me to believe, are inherently more difficult to comprehend</i><p>I don't agree with this. They seem "weirder" and harder, but they're not intrinsically difficult. They're just less familiar.<p>Also, there are a huge number of people out there who think they "know Java" but really don't. If you don't know what volatile and synchronized are and how they work, for one example, you don't really know Java. I would say that, unless everything in <i>Java Concurrency in Practice</i> is familiar to you, you don't really know Java.<p>Java and C++ are actually complex, difficult languages. The difference is that, with "design patterns" and explicit managerial attention to differences in ability (i.e. don't give mediocre programmers hard problems) it's more possible to half-ass that knowledge.