When I started coding some years ago I studied PHP and Actionscript I did the way I was used to study everything:
- FIRST: reading some books to understand theory and concepts
- THEN: trying to practice it
and it took a lot of time.
Recently I had to write new code with Java and Python and I was frustrated because I considered as lost the amount of time that I had put before into PHP and Actionscript. For this reason I decided to not to invest any more time than necessary in some other language since experience proved me that every language can become obsolete in a very short time, even if at a certain moment everybody hypes it.
So I just started to write code in Python without knowing anything of language syntax:
- FIRST: writing some lines in Eclipse, launch code execution, watch at console error output, search Internet for a line to be copied to perform the task I was trying to perform
- THEN: eventually reading something on the subject to go deeper.
It may seem strange but it worked so smoothly that I then did the same for Java.
So, to effectively code with a certain language I think those three element are necessary:
- object oriented programming
- design patterns / frameworks
and I think the last two of the above points are meta-language skills, I mean that they work almost the same way in every language, so once you have learned with Java then you can apply in Python too (I actually said "Java" because I think Java is crystal clear in hinting programming concepts and meta-concepts). Since OOP and using frameworks are the most important factors in coding, then you can see how knowing a language syntax is almost trivial and you can literally keep a page with online documentation open to consult continuously while you're coding.
Of course this is related to a pragmatical use of the language: I have an application to write and I want to do it in a reasonable short time. But I can say that by this approach I also have pursued a lot of understanding of all the language aspects.