It helps if you are a programmer/engineer simply because engineers usually treat language like a tool. Just as a carpenter knows how to build a house, read blueprints, etc...; he/she will choose the right tool to get the job done most efficiently. A software engineer well-versed with algorithms and communication models (synchronous vs asynchronous) looks at the features of the language and determines how best to write an algorithm.
Case in point, I coded a quickie socket communication algorithm in about 2 hours the other night for full asynchronous communication and event reporting. My first time through this 2 years ago, I spent 10X that amount of time learning the ProntoScript Object model and figuring out how to apply my algorithm to the language/object model.
So, as Rusty points out, there is a learning curve. However, if you do this enough, methodologies will be ingrained into your psyche and therefore you will spend much less time doing same thing next time.