|Think about Loose Coupling|
Most people think that native speakers of a language speak it "perfectly", that they make no mistakes, and know everything there is to know about that language.
That is simply wrong. There is no way in which anyone could speak a language "perfectly". Most people use - when speaking! - some kind of dialect local to where they live. In our times, where people can travel easily, influences from other dialects and even languages are very frequent. Grammatical constructs which in standard language may be considered wrong, are perfectly acceptable or even normal in a dialect or variant of that same language.
Additionally, there are jargons of which only people who work in the field, have a clue. Other people may hear them talking, understand the words, but still don't get the meaning of what is said. The Oxford English Dictionary list some 616'500 word forms. It is estimated that the English language has more than three million words if regional variants, scientific terms and jargon words are included. No one could possibly know all of these.
There are many more reasons like the above which show that it is impossible to speak a language perfectly.
Much the same applies to a programming language. You may be able to blindly put together a regex, but when it comes to use, say, DBI, you might be at a complete loss. And even if you know much more of a programming language than most other people, chances are that you have developed your very own way of using that language - much like you often adopt the dialect of wherever you grow up.
Learning the basics of a language - programming or other - usually involves reading, maybe going to classes, reading, exercising, and reading. Gaining proficiency in that language involves using it, exercising, exercising, and again reading. Only when you regularly use a language, can you acquire a certain routine in it. (And believe me, if you stop using it, that routine is gone much quicker than it is acquired...) And when you read your first efforts in the other language again, you will find that you could easily re-do those on a much higher level.
When you talk to someone in a foreign language, however proficient you are in that language, you will still pick up words, sayings and grammatical constructs the other person uses. Much more of what you hear and read in that foreign language will enter your passive vocabulary - stuff you don't use yourself, but which you understand when someone else uses it. Again, the same goes for programming languages.
So, in a way learning a programming language is very similar to learning a foreign language. The best thing is always, once you've acquired basic skills, go where that language is spoken, and learn from there!
Oh, yes, in my other life I'm a linguist...
There are nights when the wolves are silent and only the moon howls. - George Carlin