Work got me Effective Java to go through, but I don't have enough basic Java knowledge to get through it (I know enough Java to be dangerous). I can program in other languages, though, especially in perl, python, JavaScript and PHP. What book should I read before Effective Java?
When I was in college, I used to program a lot in Java and read a lot of books on Java. I found most of the text lacking and boring. The only book which didn't seem to insult reader's intelligence was Core Java vol 1
Read the first 6 chapters very carefully and you will have rock solid foundation. Then skim through event handling, exceptions, streams and generic programming.
Thinking in Java[1] is a nice, thorough book geared toward people with prior programming experience trying to learn Java. It's mainly geared at C++ programmers, but knowledge of C++ is by no means a prerequisite and probably only minimally enhances what you get out of the book. The book has been thoroughly vetted by the community, so it includes few errors.
Working on a real problem that you want to solve is the best way to learn anything. Don't go through a book -- just bookmark the JDK and make sure you skim through at least String, List, Map, Set, and Iterator.
If you can, find on github some idiomatic code for whatever language you're trying to learn (and take it with a grain of salt -- Spring Framework, for example, has good code in it, but you'd never need to make your solution so complicated because your code doesn't need to be extensible by everyone and their little sister).
The O'Reilly Nutshell books are very good at teaching you just enough to get going in a new language if you have some kind of programming experience in another language.