The "learn to code" movement has emphasized teaching computer programming to children, and so many parents are asking, "Which language should my child learn?" It’s easy to be overwhelmed by the myriad choices: Java, Python, Ruby, C++, Objective-C, and so on. Ten years ago, the list of languages would have been different, but the question would still have been the same. So instead of focusing on learning a particular language that is popular at the moment and wondering if it’s the "right" choice, consider that your child would benefit most from learning the fundamental concepts in computer science that are applicable across all programming languages. Understanding these foundational ideas well enables a person to problem-solve in any programming environment more effectively than knowing the rules of syntax for one particular language. It’s a lot like the craft of photography. If you’ve mastered the fundamentals — composition, lighting, exposure, etc. — then you’re in a much better position to take memorable photographs regardless of whether you’re handed a Canon, an iPhone, or a disposable camera. The same is true in computer science where computational thinking and the ability to learn are and always will be more highly valued than code manipulation. Besides, by the time your child is a working professional, it’s likely that a different set of languages, some not yet invented, will be in vogue. Wouldn’t it be better for him or her to have a timeless set of skills and abilities?
“a timeless set of skills and abilities” – couldn’t agree more with you. Having witnessed how some so-called professionals with a CS degree struggle with basic algorithmic problems and problem decomposition, I strongly recommend to teach the children problem solving skills, logic and mathematics. A computer is only a tool that can be mastered later, but these fundamental skills are the limiting factor determining the potential for later success in many fields, including programming.