Yeah, complexity and that we hide the carrots. Bear with me.
I still remember a point in my early teens when I decided I wanted to learn to program. I ran into a wall so hard I stopped for a good year or two.
The complexity is a considerable cliff unless you have a guiding hand (thanks dad for throwing me a copy of K&R and going off to watch startrek!), and if you didn't, you're not getting to Python around today.
First there's the "What language do I learn" search query that turns up so much confusing information. "Depends on what you want to do with it". Oh gee thanks, but I don't know what I want to do with it. I just see that other people are doing cool things with it, so I want to know how they do it.
So you dabble in Python, C, Java, whatever has install instructions you can follow, because the moment a terminal prompt pops out you're scared that you'll screw up the family magic box and get into a lot of trouble. At this point curltarmake sounds like a Polynesian dish to you. Ack.
But you never actually do something useful. Thank you helpful online tutorial, I now know how to print "Hello World" 100 times without copy and pasting it (though that'd have been faster). There's carrots for sure, but you never see them at that point. So you're like "eh, this tutorial is silly, let me try another of these 10 languages suggested".
And then later on, in high school you may have the considerable fortune to get to take a programming class that walks you through Java out of all of the things. All these OO concepts make little sense to you, but eh, you'll be tested on this. The code is still onerous and useless, but you signed up for the class. Towards the end, you'll slowly get an idea of useful things you can do with it (finally! after all these years!). Most of all, you'll develop a distaste of Java.
The wonders of childhood. I honestly believe Assembly is much more straightforward than trying to grasp the current programming ecosystem as an outsider or a kid. There's so much stuff to become acclimatized to.
So recently I've been working with a guy who wants go get into programming, did a bit of HTML&CSS&JS&Whatnot half a year ago, but he was stuck in that "I don't know where I'm going" stage. First thing I recommended him was "Automate the Boring Stuff with Python", which is a book I absolutely adore, because it first walks you through the basics (including setup), and then immediately gives you one library after another to string scripts together with.
Yes, the code may not be teaching the best conventions or habits, it never delves into OO or version control systems, but then it's interesting hubris to think beginners care about that before they got any utility out of the skill.
And he enjoyed it, learned a bunch of things, started writing his on scripts and is now getting into Django and reading through the python cookbook.
So yes, I think we're missing the mark on showing kids and newcomers how to program, in part because it's gotten more and more complex, and in part because we give them keys to doors they don't even know about, whilst withholding those to doors they care about. We've got a major sequencing problem here.