There are a couple approaches to making music, just as there are a couple approaches to writing code. The classical approach is that you have a melody in your head and work backwards from there. The other approach is to improvise - more like jazz, where the musicians are playing off each other and the audience.
In code, the classical approach is akin to the waterfall method. Design it all up front. Build it with statically linked tools. Hire programmers like an orchestra, based on their ability to follow the score. The iterative approach is more like jazz. Write a little bit. Bounce it off other people. Write a little more. A conversation. Duck typed scripting languages are great for that.
And then there's interaction design. This is more like a band leader who 'gets' the audience. Or, at least, someone who the audience 'gets'. This is isn't working backwards from a tune or forwards from a set of building blocks. It's a bidirectional search.
On a more pragmatic level: it takes about 1000 hours of playing with any tool to become arbitrarily proficient. Another 1000 hours of playing with people to become arbitrarily 'good' (give or take a zero or so).
In code, the classical approach is akin to the waterfall method. Design it all up front. Build it with statically linked tools. Hire programmers like an orchestra, based on their ability to follow the score. The iterative approach is more like jazz. Write a little bit. Bounce it off other people. Write a little more. A conversation. Duck typed scripting languages are great for that.
And then there's interaction design. This is more like a band leader who 'gets' the audience. Or, at least, someone who the audience 'gets'. This is isn't working backwards from a tune or forwards from a set of building blocks. It's a bidirectional search.
On a more pragmatic level: it takes about 1000 hours of playing with any tool to become arbitrarily proficient. Another 1000 hours of playing with people to become arbitrarily 'good' (give or take a zero or so).