That programming is a talent is not a myth, and while my life is currently devoted to developing a platform to encourage more people to learn the basics of computer science, I will certainly never say "anyone can learn how to code" any more than I'd say "anyone can become a concert pianist" or "anyone can become a master painter."
Good programming is an art, and requires talent on the part of the programmer. There's nothing wrong in saying that. The issue is that there are thousands and thousands of potentially great programmers who simply never try programming, just as there are thousands and thousands of never-will-be concert pianists. But many children take piano lessons just in case. Why can't they also take coding lessons? Just to see?
> I will certainly never say "anyone can learn how to code" any more than I'd say "anyone can become a concert pianist"
I would certainly say "anyone can learn how to code" in the same way that I would say "anyone can learn how to write", or "anyone can learn to run", or "anyone can learn to play piano".
I wouldn't say "anyone can learn to become a concert pianist", in the same way that I wouldn't say "anyone can learn to become the technical lead of a software firm that revolutionizes the industry" or "anyone can learn to be an Olympic sprinter" or "anyone can learn to be professional novelist".
But programming is, IMO, a bit like writing (though certainly not as foundational) in that you don't have to be a professional programmer to get professional benefit from having some understanding of programming, just as one doesn't need to be a professional writer to get professional benefit from writing (even piano is a bit like this, though the domain in which it is beneficial is somewhat narrower and definitely centered in a different place than where programming is beneficial.)
I'd say it's all a question of bandwidth. Geniuses just have enough capacity to converge quickly. "Incapable" people are below the threshold, so everything ends up as a cache miss, lock contention, pipeline flush; progress is so slow that they're directed onto other things. Wise people can attempt to craft their learning to converge smoothly too, they have patience to focus energy and wait for data to emerge, because they went through the slow discovery before, like a longer timeout.
With time you may grow very impressively, realize that stuff eluded your senses and mind, eureka, but time is an expensive resource.
I think this is really the key here. There is surely a natural, in-born talent for writing code, as there must be for every activity a human can engage in. But I think it's possible for people arrive at the set of circumstances that takes them from okay programmer to "talented" programmer. Time and focus I think are key, as you mentioned. People that don't dedicate enough time or focus to this craft will never achieve a high enough level of productivity to be called "talented", unless they have that natural, in-born, freak capability to code. But even these people are just okay programmers on days they can't get into the flow. Anyways, I think circumstance plays a much, much bigger part than most people realize.
Yes, I don't dispute the fact that there are some innate trait, more fitting brain structure, differences in sensory sensitivity (stupid example: perfect ear) that lead to better 'performance'. But a lot of said impossible tasks are named so because of a lack of understanding and thus a difficulty in teaching.
So far music school way of teaching is by sitting you on exercises while someone verify the output. That is not teaching per se, it's a black box system that has seen somehow regular results. Kinda like making glass, there's a procedure for that, but what really happen at the molecular level is still blurry.
With time the student's body and mind change and he gets skilled at it. How does he explain it ? does he have words to communicate his feeling to a newbie ? Never seen so so far. Recently some violin teacher was praised because he discovered non-linearity (the fact that inertia in normal speed gestures is not the same, thus learning technique requires you to fake inertia by allowing acceleration at slow speed, which means exaggerated movements). Still a shallow discovery to be honest. It doesn't really describe how to create and sustain this kind of inertia between multilimb chains and how to attempt it pleasurably.
Back to code, similar issue is present when one of the most effective (and pleasurable) way to learn the art is by pair programming (with a mentor or even a same level pair). It shows that some notions are still not taught properly in schools. Maybe the system is already at peak and there's nothing to change that would lead to better progress.
Is there a belief that anyone can learn to play the piano? I can't. I struggled for many years trying to learn various instruments. I failed miserably no matter how hard I tried. I tried and I tried, I really wanted to be able to play an instrument, any instrument, but I was unable to. I'm not dumb, I am a programmer, but music was just something my brain couldn't comprehend.
Of course we also have to define what exactly is "able to play the piano" and what is "able to program"? If know how to write "hello world" does that mean I know how to program? If I play a couple cords does that mean I know how to play the piano?
I do believe that anyone can learn to play the piano, although I would admit it's harder for some than for others. A lot of it has to do with finding the right teacher though.
What exactly do you mean by you were unable to? People have different ideas of what it means to be able to play the piano.
For classically pianists, it just means you can read notes and play the corresponding notes. I imagine anyone could memorize what notes correspond to what keys and, as long as they are physically capable, be able to press down on those keys. You might not be able to play any arbitrary piece, but I think most people agree that just because you can't play Rachmaninoff Piano Concerto 3 doesn't mean you don't know how to play the piano.
I actually never tried to play the piano, just the flute and later percussion.
>For classically pianists, it just means you can read notes and play the corresponding notes
Couldn't do that. Couldn't read notes, not even very simple pieces. Reading which note was what, them and then thinking about the corresponding fingering, doing it while following along with the beat... nope, never happened. It wasn't like I didn't practice either, I did. I was so so so determined to be able to make music, it was something I wanted bad, but no matter how hard I tried I just couldn't, my mind didn't work that way. I had the mental capacity to remember how to play only a couple of notes at one time. I then went to trying to play the drums since there was no remembering which fingers go where. That, while a little easier, didn't work either. I couldn't keep up with the proper timing of the notes.
You could just say I had terrible teachers (public school) but I don't believe that. I gave up after years of trying, it wasn't like I had a mental block to learning. I practiced on my own time too.
I also was unable to ever learn my multiplication tables.
I am not stupid though. I don't have a learning disability, I got great grades in school. I write software for a living. I have a lot of intellectual hobbies. I love talking about math and probability with friends. Nobody who knows me would tell you I am stupid.
I've also seen people struggle just as bad with stuff that comes naturally to me, so I understand some people's brains are just wired differently.
>I also was unable to ever learn my multiplication tables.
>I don't have a learning disability
Maybe you don't have a learning disability, but you definitely seem like you have some sort of mental block that is preventing you from being able to learn certain things. Maybe things you consider boring, and you can't focus enough on them to get past them?
There's no reason you couldn't have a learning disability. I was one of the smartest in my class and turns out that I do indeed have ADHD. I've also never been able to learn a musical instrument, but I've only put one or two months of continuous practice into them before giving up for another year or two. Barely enough to get muscle memory working for me.
Edit: From Wikipedia: "Attention-deficit hyperactivity disorder (ADHD) is often studied in connection with learning disabilities, but it is not actually included in the standard definitions of learning disabilities. An individual with ADHD may struggle with learning, but he or she can often learn adequately once successfully treated for the ADHD." Ok, so it isn't a learning disability technically, but it's been a barrier to _me_ in learning an instrument.
Hm it sounds like because you were unable to learn the flute/drums despite not being very motivated, you don't think everyone can do it. I think this is a fair observation, but I also do wonder if you tried a different approach whether you would be able to learn. I hope that didn't offend you, you certainly sound very hard working, and I wonder if I might be able to help if you were still interested in trying to learn an instrument.
It seems like you felt overwhelmed by all the various parts of making music. But since you are just starting and having trouble, I wonder if it would make more sense to try to isolate the different things until they become easy enough that you can do them together.
Please forgive me if you already tried this, as you didn't mention whether you had a teacher and what music you were trying to play.
For example, if you had trouble with beats, you could try practicing the beats just by tapping your hand or singing or something else. I was ridiculously bad with rhythms (and still am?) so I have a lot of personal experience with this one.
Then, if you have trouble reading the notes, you can just write them down in a way that's easier for you to read. There's no shame in just writing down the note names! Alternatively, you could just try to memorize a single measure and practice that one measure. Again, I found myself doing this all the time, especially because on the piano you have two hands to read notes for. Of course, what might make even more sense is if you just picked easier music to play.
I think for fingering, the same advice kind of applies.. you can pick easier music, or just memorize small sections.
In a way I feel like you could use this same advice for programming as well. If you pick a super huge project and only gauge your progress for that whole project, you might get overwhelmed and feel like it's taking too long, which stresses you out. Alternatively, if you break the project down into manageable chunks, you feel good about your progress!
At least this seems to have worked for me! I don't know if this will help you at all and I apologize for being so stubborn but I really don't believe you are unable to learn an instrument unless you have some learning disability.
I think what happens is people try to formalize all the fun out of music because they don't know any better. They fall back on the broken rote learning they got back in grade school, and the results are predictable.
I usually write out songs in my head as changes in pitch, then work out notes and scales later in my DAW. I learned to keep time by drumming on the wheel with music when stopped in traffic. I can't remember scales for long, but I made a point of committing the notes of the keyboard keys to memory so I can quickly memorize a scale and experiment with melodies.
I've tried very hard at some things and failed miserably. I've tired hard at some things and had great results that surprised even me. Those are facts.
It is correct that I can't do things that I don't have the ability to do. There's plenty of things people can't do but that doesn't mean everything someone can't do can't be learned. I can't run a 10k but I'm sure I can if I wanted to, tried, and trained for one I could. There was a time I couldn't write a line of code but that didn't stop me from learning or trying.
I believe many people have something or another that is extremely difficult to impossible for them to learn no matter how hard they try and its different for everyone. Most people don't have an interest in trying things that don't come naturally to them so many times people don't experience that so they can't imagine someone else experiencing it.
(Apologies, I'm really replying to your post deeper in this thread -- HM isn't giving me a reply there.)
On learning music, I'm wondering if you ever tried to learn to play by ear? If someone beats out a rhythm, can you repeat it?
One of the weird thing about most music education (at least in the US and Canada) is it focuses heavily on learning to read music. But if you poke around the corners of the music world, it turns out that loads of fantastic musicians have never learned to read or write music. One of the features of written music notation is it tries to reduce musical rhythm to math, so it might make sense if both things were weak spots for you.
(What do I mean by "tries to reduce"? Consider, for instance, swing. Lots of times the ratio of duration of the lengths of the two notes in a swung pair varies pretty continuously depending on how fast the music is going.[1] There's really no good way of notating that concept in standard music notation, other than just punting and writing "Swung eighths".)
Learning a musical instrument is hard work, but yes anybody can learn to play on an intermediate level. It takes zero talent to do that, but hours and hours of practice with a metronome.
"Able to play the piano" means you can look at a lead sheet with chords on it and play basic accompaniment to a melody. That's not difficult at all once you've learned how to do it.
I would say "able to program" means you can take an arbitrary set of feature requirements and write a program that fulfills those requirements.
It's all very interesting. I believe programming is less obscure, less challenging for the senses thus easier to make progress in. In the end not everyone will be able to invent a new paradigm, or even solve hard problems in code.
I still don't understand music, but I've been through long plateau followed by big insights. Same as in programming, some ideas were out of reach for a long time.
Doing things in time is already music. What most people want is a tiny bit of complexity, overlaying melodies and rhythmic patterns to tickle our senses. But to my deepest understanding, it is mostly the state of flow where you feel locked into the invisible energy of music. Maybe it's a high sensitivity between your interactions and the actual waves caused by your instrument, and an inner knowledge of how to keep that vibration moving without choking (think taking successive perfect curves with a car).
"Hello World" is roughly equivalent to playing a random scale. If you can memorize a scale (even briefly), you can play the piano. You might not ever manage to compose a legendary piece of classical music, but you can impress your friends by jamming with a man jue or a gambhiranata.
Most of what I make is mostly or completely electronic, and I can barely listen to classical. If you think "learning the piano" and "playing piano music" are synonymous, that might be the problem. You can make a lot of interesting sounds if you hook a MIDI keyboard up to a computer.
(aside, the best investment I made was Piano Companion Pro. The scale DB is full of interesting scales from all over the world)
What is the point of stating that though? It's pretty hard to know ahead of time and talent is rarely worth more than sheer effort.
Not only that but I would say technical lead of a software team that revolutionizes the industry requires many other skills besides writing the best code. In fact, people skills probably are far more important.
That, contrary to positions that portray programming as a skill only valuable to those who would be able to use it to become the equivalent of an exceptional artist, that the number of people who could derive benefits (professional/financial -- not to consider other personal benefits that might accrue) from learning programming is quite large.
> It's pretty hard to know ahead of time and talent is rarely worth more than sheer effort.
I'm not sure that there is a clear line between talent for a particular task and the ability to maintain concentrated effort directed at it, nor do I think that it is easy to pull apart the effects of each. But, sure, I'd agree that you can't know who can benefit the most from lots of things (programming included) ahead of them trying it.
Which is another strike, IMO, against those who would dismiss efforts at universalizing exposure.
That's not the point of the article--it's not that there aren't some people with insane intrinsic talent, it's just that the majority of people fall on the below-average - average - above average distribution, and that you can create plenty of great stuff right in the middle.
The other point is that the "concert pianist" and "master painter" are damaging stereotypes for the development industry--almost no one is Mozart, and the persistent and toxic idea that every programmer needs to be Mozart prevents good people from feeling good about their work.
Additionally, he makes "good programming" a bit more nuanced. "Programming" isn't a monolith that you can either be good at or bad at--it's composed of many subcomponents that you can have various competencies in without suddenly passing a magical line from good to bad. I think the argument is quite a sane one--the stereotypes that people fall back on are just that: an attempt to reduce a complex set of conditions into a simple binary.
This is a critical subtlety to this discussion that is never mentioned as evidenced by the comments in this thread. Just like "piano player" is a continuum, so is programmer. I will never be able to work at Google because I lack the requisite skill set in the same way I'll never play Carnegie Hall because I'm not good enough. But that doesn't mean I can't provide quite a lot of value to businesses who don't require the kind of talent Google does.
I like to think of ecosystems in discussions like this. Yes, the Google/Carnegie Hall ecosystem requires the talents of rockstars. But the places I work are a totally different ecosystem and require a different type of individual.
I think the main frustration is that the required minimum level for developing software in a team really is comparable with the skills required for working in a studio orchestra - not only at google but actually for working on any system above a certain size. Maybe not world class, but certainly rather good. In both cases, some "intrinsic" talent is probably required, and it helps to have a rock star or two to really get the team/orchestra to deliver.
One other factor is that most systems and programs of a certain size are actually quite hard to work with - the "average" may not be enough, driving costs and unnecessary complexity until the system spirals into it's own collapse and eventual replacement.
One problem is that while anyone can tell if someone is any good at playing the piano, it will probably take 6 month or more to discover who is 30x more productive at developing and maintaining software, or who will in fact destroy more value than they contribute in the long run.
It's safe to say that developing software requires more than the average level of "talent" that is available in the population, and possibly also among the profession.
>> I will certainly never say "anyone can learn how to code" any more than I'd say "anyone can become a concert pianist" or "anyone can become a master painter."
So learning to code is equivalent to being a master painter or concert pianist? Which both are amongst the top 1% of their field probably.
Anyone can learn how to paint or play a piano, the level they'll achieve won't be the same everyone, but anyone can do it, just like anyone can learn how to code.
I can't speak for the painting side of things, but no, not everyone can learn how to play a piano. For one thing, left-hand / right-hand independence isn't a universal trait, and isn't something that can always be "learned" (there's a reason why chord / melody books are so popular). Finger independence is even trickier. Sight reading, relative (or even perfect) pitch -- these are _talents_ that make a good performance possible that often can't be learned by those who lack the talent.
Designing algorithms, debugging, interfacing with hardware, finding efficiency -- the myriad of things that go with programming, these things can be done by a layperson the same way a wealthy hobbyist pianist can plunk out "Music Box Dancer" on their $10,000 grand piano -- but will they be done well? Will the hobbyist pianist give a great performance? They might be happy with it, and that's fine. But will they get to Carnegie Hall? No?
I'm not saying the hobbyist pianist shouldn't try any more than I'd say anyone who wants to write a program shouldn't try -- but the article suggests there's no real benefit to "talent" and that's just silly. There _are_ rockstar programmers, and we should acknowledge them, just as there are great concert pianists. And everyone should be encouraged to try both piano and programming. But not everyone will be successful at either or both of them.
It's probably also true that not anyone can become a truly capable finish carpenter, but we don't build an elaborate mythology around why that is, and we assume that most people have a pretty good shot at it, if that's what they want to do.
Yes, probably anyone can become a master painter, but for a person with a disposition and love to painting it's easier to start and to keep going. For someone who loathes painting, it's massively, prohibitively harder.
Success in any craft (and science) in 5% talent / luck and 90% hard work. But the love to the craft / science makes exerting this effort massively more rewarding. I don't think that training oneself to be a master is not attainable for someone who does not have a burning passion for this specific mastery. For instance, a mastery of programming might be a gateway to other things, for which the passion is burning.
The number of things for which ability to code is now a gateway is growing, be it financial modeling, computational chemistry, linguistics, etc.
Also, there's mastery and there is peak achievement. Everyone (except severely mentally disabled) can be taught writing skills and write nice, clean, well-organized texts. But probably not everyone can become Hemingway or Borges or Nabokov.
Equally, everyone can be taught to write nice, clean, well-organized code. But probably not everyone can be a superstar like Knuth or Norvig or Carmack.
So I'd reserve the word "talent" for the highest achievers. Talent is not required to be a decent programmer.
I normally stay out of these debates, but as a teacher, you may be in a unique situation to appreciate this view point: How about "learn to code"=="learn to play the piano" == "learn to paint"?
I don't think that you learn to code "just in case." I learned because it let me automate some things and later, let me make my own games. It turned out I've been good enough to get paid for my level of "talent," but I'd still be happy I learned, besides the joy of the mental excercises, I've also been able to automate alot of (ussually self imposed) challenges in my life.
I also learned to play the piano in my teens. I'm a sucky digital-artist as well. It was obvious I'd never be a concert pianist or master painter or even get paid for either. It baffles me that people can go through life without being able to play an instroment or paint, but I didn't learn "just in case"; I've been making use of both for my own enjoyment and unpaid sharing with others.
I think a great many of your students who lack talent will get great use out of the ability to automate processes on a computer and maybe gain life long enjoyment, even if they don't have the presupposed talent.
I think there is a matter of degrees and a matter of return on marginal "talent" for lack of a better word. Being a concert pianist (or Lady Gaga or Floyd MayWeather) is competitive in such a way that the return on being the 1-in-a-thousand is way better than 1-in-ten. Way better.
Most things are not like that. In fact very few programmers even pursue that. Most science is not even like that. If you are a zoologist studying marsupial reproduction, you are not in a winner take all contest, you are in a 'do thew job' situation. You don't have thousands of eager marsupial reproduction researchers biting at your heels. There are plenty of marsupials to go around.
Most things are like this. Even pianists once needed to attain an achievable level of mastery in order to be pianists professionally and entertain aristocrats before the invention of the Zune. The availability of aristocrats did fluctuate and so did (I imagine) their interest in music, but it's not the same as trying to be the best pianist on earth.
The realistic version of this is that output, especially creative output varies by person. Also throughout ones life, by context (is this fun for me today?) and lots of other ways.
Some kids hat math. Some of them wouldn't if the teacher or method was different. Most can do pretty well.
Exactly this (though OP's article touches on this too). All the BS about category theory, lambdas calculus, and "logic" aside, DHH was absolutely right when he said building large software systems is much closer to writing a novel than anything science or math. Because of this inherent creative art nature, programming often depends on divine inspiration (for lack of a better term) - sometimes you sit down, and immediately see how all the workflows and data-structures, sometimes you can beat you head against a screen for months and wind up refactoring half of it.
In my opinion, the best way to tell if you are cut out to be a great programmer or not is whether you can finish and publish a project or not. Sorting algos, typing speed, functional programming, monads, es7-await, and all that jazz that interviewers like to look for can all be learned (and, comparatively, they are easy to learn), and even if you learn them, it won't make you a good programmer if you can't build extremely complex and yet detailed systems in your head.
A more accurate analogy would be "anyone can learn the piano well enough to play in a bar and entertain patrons", i.e. not in the 1% of piano players, but you are good enough to be effective at a job.
Also, I felt that the point of the article isn't that anyone can code, it's that we are discouraging people who COULD have coded.
There's a huge range of skill between "concert pianist" and "no good at piano." That's kind of the point of the speech, I think
There are hundreds of pianists with a very high degree of skill, but that are not concert pianists. Many are essentially freelancers and take gigs as they come-- choir accompanist, pit orchestra pianist, keyboardist in a band, resident organist in a church... etc.. Many of those pianists are quite skilled and talented, even if they are nowhere near skilled and talented enough to be a reknowned "concert pianist" like Murray Perahia, Emanuel Ax, Alicia de Larrocha, Mituko Uchida, etc..
The excessive focus on the idea of a "concert pianist" talent leads to this situation where the day to day programmers aren't getting the credit they deserve. For more on the under-appreciated musician analogy: watch the movie Waiting for Guffman and pay attention to the musicians. The dialog in the movie basically never acknowledges them. They're completely taken for granted by the other characters, but they are impeccable-- easily the most professional performers in the production. There's one point where one is playing the trumpet and timpani at the same time. I think that's the idea-- solid, productive programmers not being recognized for their talent, because they're compared to some incredibly high ideal.
Though there's also this dunning-kruger thing where lots of mediocre programmers think they are way more skilled than they actually are either because they're the best programmer in their little bubble, because they're a devout adherent to some specific coding religion, but haven't ever really been measured against an objective standard. Specifically because there are so many words wasted on "rock stars" and "ninjas" as well as blubbers and someone's personal experience with some horrible developer whose incompetence caused so many problems, etc...
> I will certainly never say "anyone can learn how to code" any more than I'd say "anyone can become a concert pianist" or "anyone can become a master painter."
I disagree respectfully with that statement. First you devote a lot of your time to try to teach peeps about CS and I think that's great. But I'd argue that music and coding, to your comparison are essentially languages (former is a language of rhythm and melody and wielded by a physical/electronic instrument, latter is a language of algorithm and logic and dictated by a PC) and learning them is akin to language acquisition.
So IMHO, there is an illusion of talent when you have native speakers who can speak with perfect accent, grammar and fluidity; just like there are "native" musicians who have perfect pitch, can transcribe and improvise on the fly, play with speed/style. Because they have internalized the grammar, and that language's vocabulary and phrasing are by definition the native's first nature.
But non-native speakers can learn a foreign language albeit very painfully, perhaps with an accent and pauses that they'll never get rid of. But they can still express themselves successfully. Put it simply, I believe anyone can be taught the basic's of web development/CRUD, OOP, basic flow-control just most people can be taught how to play "Chopsticks" or conversational English. The programming equivalent of writing "The Great Gatsby" or composing a sonata, I'll concede that to the real talented.
>Put it simply, I believe anyone can be taught the basic's of web development/CRUD, OOP, basic flow-control just most people can be taught how to play "Chopsticks" or conversational English.
Someone who can do web dev/CRUD is employable, someone who can only play chopsticks is not (in fact you wouldn't even listen to them for free).
Even if I agreed with everything else you wrote you brought no reason why people should be able to acquire more proficiency in programming than they can acquire in piano playing.
Also, I think learning how to program/paint/play is nothing like natural language acquisition, from an evolutionary point of view there is no reason why this should be.
I believe that, in theory, 99% of everyone can learn to code. However, some people will take prohibitively long to do so. These people may have other talents, but they will struggle in learning how to code and probably only achieve minimal success.
Of course, that's using a completely vague and arbitrary assessment of successful coding. I teach an intro coding course for non-majors at the undergraduate level. So my numbers are based on the performance assessment we use.
to be a great concert pianist it is 5% talent 95% hard hard work...
If you dont train your fingers every day and if you dont play for at least 1 hour everyday since your 10 or younger you wont become a great concert pianist...
you can say the same for coding.
it is 5% talent but the rest is coding coding coding coding...
If you have talent the start will be easier but at some point talent wont help anymore just studying and trying.
So, one of the best illustrations of how talent works is in football placekickers. To make it in the NFL, you have to be able to reliably kick a field goal at X yards. X goes up every so often. Some athletes can do it, some can't. I read a story once about a guy trying to level up his skills to NFL-level. He spent weeks out on the field practicing his kick. He could hit the goal, but not reliably. One yard closer, and every kick sailed right in.
One of his buddies, a minor league baseball pitcher, went out with him one day, asked to give it a shot. On his very first try, he kicked it right in. A pitcher.
To be great, it requires getting out on the frontier of human ability. That frontier often looks very, very weird. One seemingly small additional challenge turns you into a puddle of mush. Getting there requires hard hard work.
But excelling over everyone else who also put in that hard work requires talent, and it's generally a binary proposition. Until it isn't. Once Roger Bannister broke the 4 minute mile, floods of athletes started doing it.
Then the frontier goes somewhere else, the talent required to get there is increased. But one can only put so many hours of their day into an activity. So when you're talking about greatness, talent ultimately matters more than hard work. One should ideally find out as quickly as possible whether one has the talent to make it out to the frontier of human ability. So they don't waste lots of time doing something they can never find greatness doing. The aforementioned aspiring placekicker? Gave it up. Now he's a successful author, real estate investor and football coach.
I agree that practice is integral to being successful as a concert pianist (I am a pianist also so I didn't make the comparison casually), but to give a truly inspiring performance (and not just be a human player-piano) requires much more than just memorisation and repetition. It requires creativity and instinct as much as skill.
Programming is similar. If you were to boil programming down to simply "engineer a list of commands to make the computer do X" then sure, most people can do it, with practice and documentation. But to make the computer do X with efficiency, or to make the computer do X in a new and novel way -- or even discover that X is the wrong way to go and the computer really should be doing Y -- also requires creativity and instinct, just like giving a great performance at the piano.
"Greatness does not come from programming by rote."
The thing about "coding" is that it's simply the means, not the end. The configurations you can program a Turing complete device with proper hardware into are, for practical purposes, boundless. Being a concert pianist can intersect with many fields as well (acoustics and music theory alone can get quite deep), but ultimately the immediate direction is much more narrow.
In fact, I would argue that just "coding coding coding coding" won't get you all that far alone. There's plenty of "reading reading reading reading" so you can actually have the skills and knowledge to write what's intended, and then there's all that lesser visible knowledge out there that is just as crucial, but hidden in (relatively) obscure references or papers - unless you intend on reinventing lots of square wheels.
It's not inaccurate or offensive to say that some people are more naturally gifted in some areas than other people. It's certainly possible that with 10,000 hours of practice the average person could become competent at just about anything, but there will be outliers on both ends of that spectrum.
I disagree with this. I think natural talent is what allows you to pass the "filters" from better tutors, people which just wont train you unless "you've got it"
Good programming is an art. The same can be said for good photos, or good works or fiction, or great compositions.
The reality is that most computer programs don't need to be good. In most cases they don't even need to be efficient. They just need to work. Even then, they usually just need to work for a short time because of the ephemeral world of software development we live in.
There are some really incredible engineers out there. When I look at their code I'm often in awe. "Why didn't I think about that," is what I think to myself. Or someone is using some bizarre function or mathematics that I don't understand to achieve something with an efficiency I couldn't ever come close to in my own code.
Most people who make a living writing code are just writing the same things over and over again for different employers. There's no elegance in what they do. There's no art. I make websites, apps, and simple programs for automation. Sometimes the end result looks pretty, but if I'm being honest with myself the code is very… meh. Anyone could do it.
Living in the Bay Area I can safely say it's mostly a dog and pony show. There are a few people doing something really interesting, actually pushing the limits of technology. Most of us are not those people. Most of us (myself included) are writing garbage for silly products that people use to distract themselves. It's fun, but not really challenging. Most of the people I work with have no idea what hard work actually is.
Working in the Bay Area is the easiest thing I've ever done. Honestly, I didn't realize life could be so easy. Learn how to sell yourself, make something appear on an iPad, and people want to pay you $100k/yr. Sometimes I feel like a thief, but everyone around me is doing the same thing.
If the approach to encouragement is to require artisinal comparisons for success, then you're alienating many right out of the gate.
Most kids loathe piano lessons. But they can still be 10-100X better at it than anyone here and not need to stroke their egos by calling themselves artists.
"In a fixed mindset, people believe their basic qualities, like their intelligence or talent, are simply fixed traits. They spend their time documenting their intelligence or talent instead of developing them. They also believe that talent alone creates success—without effort. They’re wrong."
Good programming is an art, and requires talent on the part of the programmer. There's nothing wrong in saying that. The issue is that there are thousands and thousands of potentially great programmers who simply never try programming, just as there are thousands and thousands of never-will-be concert pianists. But many children take piano lessons just in case. Why can't they also take coding lessons? Just to see?