Лично мне повезло, что основы Java были преподаны в университете. Тогда я ещё мало что понимал и делал всё по примерам, переделывая их под себя, тем самым открывая для себя что-то новое. Ключевый было использования логики/логического мышления и умения правильно разбить задачу на подзадачи.
Книг тогда я по Java не читал, всё решала практика. Лишь после универа, устроившись на работу в крупную контору, стал читать. Но всё равно куда бОльшую роль сыграла практика и работа над своими собственными ошибками.
После работы писал небольшие программки для себя. Просто выдумывал какую-то задачу и делал. Естественно, что каждые 5 минут что-то гуглил или искал на stackoverflow.com.
Так вот собственно по теме - по моему личному опыту нужна практика, практика, практика и ещё много желания научиться и мешок усидчивости.
Желаю удачи и добра!
На javarush, к слову, задачки теперь платные. Год назад было иначе :(