Общее согласие: «Пиши больше кода», с чем я согласен, но я добавлю к этому совету, что тебе следует писать много разных видов кода. Java хороша в том, что касается языков, но вам определенно следует писать код, как вверх, так и вниз по спектру мощности. В дополнение к Java, я бы предложил сделать несколько небольших проектов на языке более низкого уровня (C - хороший вариант для этого), язык сценариев (я предпочитаю Perl, но Python также хороший выбор), функциональный язык ( lisp - это общая рекомендация, но OCaml и Haskell также являются хорошим выбором), и, по крайней мере, научиться читать на ассемблере.
Кроме того, выберите некоторые типы программ, которые вы реализуете. Посмотрите на реализацию хотя бы графического интерфейса пользователя Desktop, многофункционального веб-приложения, сетевого клиента и сервера, драйвера, утилиты сбора данных, трассировщика лучей и симуляции физики.
Все проекты должны быть относительно небольшими по объему, цель состоит не в том, чтобы иметь многофункциональную программу, а в том, чтобы получить широкий опыт в различных областях, с которыми вы можете столкнуться, чтобы изучить различные типы мышления, необходимые для каждого, и выяснить, где ваши интересы.
Как только вы это сделаете, у вас будет хорошее представление о том, какой тип программирования вам наиболее интересен, и вы можете найти или запустить проект с открытым исходным кодом, чтобы получить опыт работы с большими базами кода, работающими с перспективные проекты и работа с другими разработчиками.