I only have a sample of 1 (my six-year-old son, turning seven today), but he is perfectly capable of typing, understanding function definition and composition, data structures, and working with reactive I/O. He's not some super-genius. He's a regular kid who likes to swim, ride his bike, play Pokemon, and watch Netflix. But he can also make things by "real" programming. I'm sure other kids could as well.
The thing about Scratch is that it's designed to be easy for kids, and that's not a good thing but only seems to be one. In presenting Scratch to a child one makes an implicit statement along the lines of "Here is what you can do. This is your level." There's something intensely limiting about that. It's like being given toy plastic versions of Dad's power tools and told you can use them to actually make things. Kids are ignorant, but that's not the same as dumb. No one is going to fall for this, and it will earn you the enduring contempt of those on whom you try it.
Whereas when you sit a kid down in front of something like Applesoft BASIC or I guess a Ruby or Python interpreter, a Lisp or Node REPL, whatever - the implicit statement is instead along the lines of "Here is a thing that does things. Find your own level." And there's something intensely liberating about that. It's a vote of confidence, and that counts for a lot to a kid just like it counts for a lot to anyone - perhaps quite a bit more.
And by all means feel free to tell your son that some random goober on Hacker News wished him a happy birthday!