I really hate that we use so many analogies when teaching programming.
A programming language is not an instrument. Its a language that lies somewhere between logic, math, and actual spoken language.
When I was learning guitar, it wasn't filled with analogies like "A guitar is like a broom, you've got to learn to sweep across the strings consistently". They just said, learning guitar is hard, practice and you will get better.
Don't dumb it down for people learning, just say straight out. "Using an IDE will hide the low level things like compilation that you will need to know to be a good programmer".
Actually, I play guitar, and read sheet music, and this analogy is less about programming and more about an aspect of learning a subject. If you take the easy tool based route, then you're dependent on the tool you use. If you take the harder more universal less tool based route then you have more generally applicable skill.
Given the quality of most guitar education though, I wouldn't take their lack of using analogy as any kind of bonus. Guitarists are notorious for bullshit education that's basically, "No look at me do it. I can't explain how I do it. Just like this. No wrong!" If they were better at explaining and bridging concepts using existing concepts people have then they might be better at teaching it.
I actually think it depends on the analogy. For some reason, people love to compare programming to art and music. The article Dabblers and Blowhards[1] is a great response to these types of claims. A better analogy for programming is that it's like math. Once you understand how the operations work, you appreciate the value of a calculator.
Actually, that article is full of errors regarding painting, art history, and a lot of his criticisms of PG's take on art history are just plain wrong. Which is typical of painters. Many don't even know the chemical makeup of their pigments or which ones are dangerous and why. Many don't know about how projection was used to do a huge amount of art long before there were cameras.
The reason people use analogies for programming is it's not as common in the general population so we need something they can latch onto that they do no. Music and art are deeply embedded in everyone's knowledge, so they're easy analogies. Math isn't as deeply embedded so it's not as useful unless the person has a background in math.
Even then, I've taught people with solid math or engineering backgrounds that still struggled with programming concepts. Programming is just weird and hard to explain.
That still doesn't change the fact that art and music are poor analogies. I struggle with the best way to describe this, but at the end of the day, perhaps the best analogy I can give is that the purpose of art and music is to share the artist's thoughts and feelings with his audience. It's completely subjective. Programming, on the other hand, is more utilitarian. No one cares how beautiful the underlying code is, user care only if the damn thing works the way it's expected. Learning to code well is important for the inevitable maintenance, but at the end of the day, if the program doesn't work, few people will appreciate it.
Coding is more like music than math. Multiple parts work together cohesively to create something bigger. Just like music, a program or library always has a beginning, a middle, and an end.
Music and programming are creative tasks that require you to think of new ways to solve problems or express yourself. Math is a system of calculation.
Wow, I have rewritten my response more than once, but I am basically amazed at how completely wrong this response is. Coding is a system of calculation as well. Like math, the goal of programming is to solve a problem. There are beautiful, elegant, and creative solutions in both math and coding, but first you have solve the damn problem. Music is basically about self expression, it's a means unto itself, it has no problem to solve.
You're missing a step. The goal of programming is not to just solve a problem, it is to create a solution to a problem. That creating part is the most important part.
You're either being inane, dense, or you're just plain inexperienced. Coding, like math, has an element to creativity to it. If you don't think math has creativity, you don't know anything about more advanced math. However, despite how technically brilliant, how sublime your solution may be, if it doesn't actually SOLVE the problem you set out to solve, it's not very useful.
A programming language is not an instrument. Its a language that lies somewhere between logic, math, and actual spoken language.
When I was learning guitar, it wasn't filled with analogies like "A guitar is like a broom, you've got to learn to sweep across the strings consistently". They just said, learning guitar is hard, practice and you will get better.
Don't dumb it down for people learning, just say straight out. "Using an IDE will hide the low level things like compilation that you will need to know to be a good programmer".