Disclaimer: ciò che leggi qui sono le mie idee personali e non sono necessariamente corrette o ampiamente accettate.
In breve, pratica ! e probabilmente più pratica. Se voglio parlare in dettaglio, ci sono alcune cose che mi piace sottolineare. Ero più o meno nella stessa situazione, avendo una certa esperienza in java e conoscendo c ++ in superficie.
Per padroneggiare il c ++ né i libri né le lezioni sul video sono stati di grande aiuto. Non fraintendetemi, i libri vanno bene, ma nel mio caso si trattava solo di controllare la sintassi o di conoscere il concetto in dettaglio. Quello che mi ha veramente aiutato, è stato lo sviluppo di un paio di progetti molto seri con c ++ e, mentre lo facevo, ho imparato a fondo alcuni dei concetti più importanti. Quindi, ancora, pratica, fai progetti e intanto sai cosa stai facendo. Con "sapere cosa stai facendo" intendo che dovresti sapere che cosa sta facendo esattamente il tuo codice (ad esempio, qual è la differenza tra passare per riferimento e passare per puntatore ed ecc.)
Inoltre, dovresti imparare alcuni dettagli come funzionano il compilatore e il linker, quali sono le macro e altro. Il punto è che java è un linguaggio molto carino durante lo sviluppo (opinione personale); è facile e veloce da sviluppare e non è necessario preoccuparsi di molti aspetti della programmazione. C ++ d'altra parte non è così facile. Se vuoi veramente padroneggiare la lingua, dovresti conoscere i dettagli di compilatore, linker, macro, debugger e così via.
Non voglio iniziare una battaglia sui sistemi operativi qui ma consiglio vivamente di lavorare con linux. La bella architettura di Linux ti permette di vedere veramente come funzionano le cose e strumenti come cmake (che è cross platform btw) ti permettono di capire meglio il processo di compilazione. Se non vuoi usare linux, almeno dimentica gli IDE automatizzati come ms visual studio in cui tutto avviene con un semplice clic.
Ma se voglio fare solo un suggerimento, devo ripetere ancora: PRACTICE!