A lot of this depends upon what you wish to learn.
I agree that learning different languages is actually a good way to here, especially a language that is primarily functional based as it helps provide you a different thought paradigm, so learning Scala or Clojure is actually a good thing for many Java programmers who simply wish to be better programmers (IMO). For instance, I learnt a great deal from
http://www.artima.com/shop/programming_in_scala_2ed Even though I am not a great fan of the Scala language, the treatment of programming practices in the book was very informative and I was very happy with the time invested in it. Many of the examples are based upon Scala updates or variations on examples from:
http://www.amazon.com/gp/product/0262011530 Structure and Interpretation of Computer Programs.
There is always
the art of computer programming: "these books were named among the best twelve physical-science monographs of the century by American Scientist". But, beware, that those books are by a genius for geniuses.
For a list of books on various topics, you can see:
http://programming-motherfucker.com/become.html (pardon the domain name please..). I haven't read most of those books, but on a review of the topics and titles, I would suggest most of them are at least decent texts on the given topics they address.
You may wish to consider some Coursera courses such as:
https://www.coursera.org/course/algs4partI and
https://www.coursera.org/course/algs4partII. Those kind of courses allow you get exposure to an Ivy League level of course instruction on fundamental basics of simple to advanced computer algorithms. Or look up some Coursera or Udacity courses on topics like AI, robotics or neural networks.
For meat on the table kind of work in enterprise computing Oracle's JEE7's tutorials are really good
https://docs.oracle.com/javaee/7/tutorial/, though you may want to replace some of the UI/JSF stuff in there with study of other UI technology such as
Angular and Single Page Applications. I don't have a direct reference for an Angular 2 book, but a search might reveal something for you. Be aware that JEE7 servers are migrating towards hybrid systems such as
WildFly Swarm
http://wildfly-swarm.io. Similarly, you could study Spring Boot (again search for books on the subject)
http://projects.spring.io/spring-boot/, if you prefer an alternative, though similar system to
JEE. For software stacks which are not like traditional Java EE type stacks (and hence you might learn more new things from), you could try looking into
https://www.lightbend.com/community/projects or
http://rubyonrails.org.
A really great resource I can recommend is the DevOps 2.0 Toolkit:
https://leanpub.com/the-devops-2-toolkit This is not a programming book, but demonstrates how to structure and deploy applications to modern container based cloud deployment engines such as Amazon Container Services or Google Cloud Compute Engine. Very good coverage of topics and skills in high demand today and into the medium term future.
Take a look at the TopCoder site
https://www.topcoder.com and try some of the challenges and competitions there. Start with the algorithm competitions as they are easier to begin with and have a very low threshold for beginning problems which can be solved in a few lines of code. The problems in the higher divisions can quickly get very tricky, such that only very good programmers and extremely smart people can solve them. TopCoder also has analysis and design competitions, you can take those challenges or review solutions others have provided, which might help teach you some things.
You might want to follow
Peter Norvig's advice on programming in 21 days.