Предлагаю такой путь развития:
- сам язык, интерфейсы и классы освоить совсем не трудно,
- далее, коллекции и streaming api к ним,
- пришло время подобраться к функциональным интерфейсам и лямда-функциям, упростите себе жизнь с новыми веяньеми жаба-моды,
- посвятите пару недель чистым сокетам, напишите простенький чат с консольным сервером и клиентами,
- далее, возьмитесь за чистый JDBC, прикрутите к созданному чат-серверу, чтобы хранить пользователей и последние сообщения,
- посвятите месяц "шаблонам программирования", с упором на отличия с использованием лямд-функций и функциональщины,
- вот теперь стоит взглянуть на spring и DI, и переделать чат на него
- ну а далее, допишите на основе всего этого web-интерфейс в своему чат-серверу (причем, можно и web-приложение сделать, и прикрутить какой нибудь sparkjava.com)
Вот вы и знаете яву на уровне почти мидла.
Что далее? Да выкинуть все нафиг и податься в clojure, знаний уже достаточно!