Programmieren besteht aus vielen Aspekten, welche man ich auf verschiedene Weisen aneignen kann/muss.
Zum einen wäre da die Grammatik. Diese ist eigentlich dein Vokabular wie bei jeder Fremdsprache auch. Du lernst sie durch Anwendung. Du kannst sie jederzeit in x-beliebigen Nachschlagewerken anschauen. Je häufiger du sie verwendest, umso sicherer kannst du damit umgehen. Auch gehören ein paar Gepflogenheiten dazu, so wie man Sätze mit Groß- und Kleinschreibung und Satzzeichen verziert, wird auch Code entsprechend formuliert. Diese Gepflogenheiten mögen sich leicht bei einigen Sprachen unterscheiden. Wenn man das einmal beherrscht, sind diese Grundlagen für neue Sprachen meist total schnell auf andere Sprachen angewandt. Du findest immer wieder Gemeinsamkeiten.
Dann kommen ein paar Fortgeschrittene Techniken dazu um größere Probleme meistern zu können. Dazu gehören allgemeine Themen wie Algorithmen, Patterns und Datenstrukturen. Das ist viel Lernen und Verstehen. Du musst ihre Vor- und Nachteile kennen um sie gezielt einsetzen zu können. Sie sind unabhängig von der eigentlichen Sprache. Das musst du nicht alles sofort können. Dieser Wissensbestand wächst immerzu.
Dann kommen technische Aspekte hinzu, z.B. Datenformate (json, xml), REST API, Cryptography, Datenbanken - all das. Diese sind meist auf spezielle Aufgaben zugeschnitten. Auch hier heißt es lernen und verstehen. Eigne dir einfach nach und nach Teile an.
Der wohl am schwersten zu erlernende Aspekt ist das Vorgehen, die logische zielgerichtete und möglichst einfache Herangehensweise. Viele scheitern daran, nicht jeder kann es. Hier hilft sogar teilweise das Lösen von non-Programmier-Knobelaufgaben zum Üben. Gerade bei objektorientierten Sprachen wie Java kann ich dir nur einen Tipp geben, stelle dir Problemstellungen bildlich vor. Du musst diese Bilder dann "nur" in Code übersetzen. Ich weiß, das mag auch vielen schwer fallen, aber das ist es nicht.