Программированию учатся в основном самостоятельно. Это может быть и до ВУЗ-а, и во время обучения в ВУЗ-е, и после ВУЗ-а. Огромное значение имеет практика, опыт. Учат в детском саду и младших классах школы. В ВУЗ-е учатся. Что такое "знания универа"? Например, читают тебе лекции по какому-то языку программирования. Но из лекций ты можешь чего-то не понять, или информации может быть недостаточно даже для твоей курсовой. Ты берёшь книгу и изучаешь самостоятельно чтоб написать курсовую. Это "знания универа" или нет? В университете готовят не программистов, а специалистов более высокого уровня. Кем будет работать выпускник - это по всякому бывает.
Голова робота дело говорит, я дополню Даже если ты и пойдёшь в ВУЗ на IT специальность, то не факт, что ты будешь программировать и учиться работать на java, ты может быть будешь работать на Си, С++, 1001 фреймворк javascript, а может и вообще на Delphi заставят кодить. Выйти из ВУЗа можно и не умея кодить.
Что такое уверенное знание java? Знать язык это примерно как уметь писать и читать. Вот мы все тут пишем и читаем, но нас почему-то не издают. В универе, если не читерить, то можно научиться писать простенькие программки, которые будут запускаться и решать определенную задачу. Для серьезной разработки этого мало. Обычно компетенции разработчика складываются из нескольких областей. Касательно java это весь синтаксис, ООП, coding conventions, коллекции, jvm и проч. В универе выдадут чуть-чуть 2, 4 и побольше 1. В универе надо брать математику, алгоритмы, теорию бд, анализ данных, сети... Это даст бэкграунд. Ни кодить ни проектировать там не научат.