Discrete math, autonoma theory, logic (truth tables, conditionals, boolean logic) that sort of stuff is more important to a good grounding in computer science than programming (all that on just a chalkboard). If the knowledge base is strong, the languages will reveal themselves as tools to solve those types of problems with. The language is just a construct for realizing the application of the theory. If the math and logic concepts aren't understood, you basically have a tool that you don't know how to use. Which is not bad. You're still better off than where you were, but now you're banging in nails with a socket wrench. Instead of learning what a bolt is, what it's for and how to tighten it, and then given a socket wrench.
On second thought, anything but Java.