I fell in love with programming when I was 6 years old and today I am a senior developer who still loves programming. I have had almost no formal training, and I have worked with a lot of formally trained developers who couldn't program their way out of a paper bag, possibly due to starting to learn programming as an adult.
The fundamentals of programming logic don't change although individual languages change very quickly and there will be many new programming languages invented by the time a 6 year old graduates. I can read code written before I was born, and as long as I understand the language, I can follow the logic. The world is getting more technically literate, so without a little familiarity with logic, computers and smartphones are just magic devices that often work, and bizarrely misbehave.
This is not to say that all children should be expected to grow up to be programmers, nor would that be a good idea! It's the same as everyone having enough first-aid knowledge to not need to make a doctor's appointment for a scratch, and more importantly, to be able to decide when they can fix a problem themselves, and when to seek outside help.
Sticking with the doctor analogy, you want medical students to have a basic understanding before they enter university. Student programmers should have some exposure to programming before they start to see if they like it or not. I feel some people think programming is glamourous and an easy path to a high paying job, which it isn't!
Personally, if I'd had no exposure to programming until I was 18 and entered university, I doubt I'd be a professional programmer today. I found that tertiary courses are taught at the wrong level, often getting bogged down in irrelevant details that are not useful when actually programming. Not many people would think of teaching such complex details to 6 year olds. They only need to know enough to get their code working, and why it works when it does, and why it doesn't when they've introduced a mistake.
I should also point out that teaching young children how to code is not a new concept, although it's been embraced much more than ever before. The Logo "turtle" was invented to make programming appealing to children. Here's an image from 1969:
Children have to be taught something in school, with most countries having combined primary and secondary education of around 12 years. There are two basic reasons I can think of for teaching a subject:
- that subject will be useful in later life
- that subject will broaden their minds and make them more rounded people.
We teach them English (in English speaking countries and many non-English speaking countries) because in 12 years, a good knowledge of English will more likely be helpful, not useless. We teach them maths because maths is useful. We teach arts, history, and geography because they broaden the mind. We teach them computer science because CS broadens the mind, and it is becoming increasingly useful.
Mind broadening subjects are only useful if the individual works in that area, or if that area is peripheral to their work. A doctor need to know a little geography because certain infections are concentrated in certain areas, and they need to know a little history because certain diseases have been wiped out, so shouldn't be diagnosed. How plate tectonics works, or what happened during the battle of 1066 are unlikely to help a doctor treat disease.
For an average person, a little knowledge of logic can help them demystify a computer's behaviour. For example, searching for "cats and dogs" or "cats or dogs". In English "and" and "or" can sometimes be used interchangeably:
Pet owners with cats or dogs need to be careful of mosquitoes that can infect their pets with heartworm.
Pet owners with cats and dogs need to be careful of mosquitoes that can infect their pets with heartworm.
The above two sentences mean the same thing in English, but the below two pseudo code fragments mean different things in CS:
TELL be-careful-of-mosquitoes TO pet-owner-has-cat OR pet-owner-has-dog
TELL be-careful-of-mosquitoes TO pet-owner-has-cat AND pet-owner-has-dog
The first one means what you'd expect in English. The second one means that only pet owners who have both a cat and a dog need to be careful of mosquitoes.
This is unintuitive to most people not familiar with computing logic.
So teaching CS to 6 year olds helps prepare them for a world increasingly dependent on technology. I don't see a need to have a scientific paper to answer this question any more than "Are there any scientific studies that support the claim of any benefit of teaching English at a young age?"