Don't confuse programming language complexity with user program complexity. From the student programmer's point of view, additional programming language features, eg Java templates, makes their task more complex. Most programming languages are designed for the professional programmer, not the student. A professional is assumed to know the language completely, an ideal, if somewhat optimistic, assumption.
Lower complexity languages. Some language take simplification seriously, eg Python and the older Pascal. There were several extensions to Pascal (eg, Borland's Delphi and Apple's Object Pascal) that turned it into a good professional programming language, at the expense of additional features. The Pascal standards committee rejected these extensions, and consequently Pascal has essentially died because few companies want to program in a proprietary language from one supplier. Python, as an open source project, has better prospects for survival.
Higher complexity languages. Some languages, such as C++ and Perl, have a high level of complexity. Perl even celebrates its complexity with the motto "There's always another way", meaning that there are usually several alternative language constructs to accomplish the same task. I'm fairly negative on high complexity languages, but there is one way to deal with them.
Avoidance is the process of not using (avoiding) language features that you don't understand or are not comfortable with. This is how I use Perl -- I learned a basic set of general programming constructions that allow me to do most things, and ignore the (much larger) set of other features. To the real Perl programmer my programs must look hopelessly inelegant, but they work. So what's the problem with avoidance?
Illiteracy. I can write simple Perl programs, but the truth is that I can't read most Perl programs! This is really not acceptable for a professional Perl programmer, which I hope never to be.
Java is a relatively simple language, and has many of the facilities to make your programs simple.