I learned the basics with books (Small Stakes Hold'em by Ed Miller, David Sklansky and Mason Malmuth in particular - I started as a limit player), and improved primarily through poker forums
and discussing poker with better players.
Exchanging sessions with a poker buddy (so he can review yours and you can review his and you can both discuss the reviews further) helps a lot (or similar: sweat sessions!), as does posting your trouble hands in a hand analysis thread on a forum. But above all: responding to other people's hands in hand analysis threads on a forum!!!
If you respond to others, explaining your reasoning in full, then you easily expose the strenghts and weaknesses of your play, and fellow forumers can then point those out. If you're open to critique, you'll improve a LOT this way.
And for maximum effect, you should reply to other people's hands without reading any of the other replies first (as those might cloud your judgment).