To understand a programming language, you must be able to think in that language. That means being able to read code and have some basic idea of what it does. More importantly, it means being able to see in your mind potential solutions in that language before ever writing a character of code. It should come as naturally as any other language you know.
That simply comes with practice and real-world usage.