Yours truly on Quora:
The thing about learning to program is that it’s a lot like learning to read or do math. We’re not asking second graders to solve quadratic equations or read James Joyce and we shouldn’t ask them to write a content management system in Java either.
As more and more of our personal, professional, social, and economic life takes place on a computer—whether it be a desktop or a mobile phone—it’s going to become increasing important that we possess a deep understanding how they work. Even if a child never plans on being a professional programmer, possessing a familiarity with computational thinking and how software works will give them a better understanding of the world we live in. We already ask our children to read great literature even if they have no ambition to be a writer and pass Pre-Calculus even if a career in mathematics isn’t in the stars for them. In addition, if we plan on staying competitive with China and India over the next century, we’re going to need to invest in our children early on.
That said, it has less to do with whether or not we should begin teaching and more to do with how we go about teaching. There are some kid-friendly programming languages (e.g. Scratch and Alice), but there is still a lot of work to do when it comes down to the pedagogy of teaching programming concepts to students.
Third or fourth grade is a fine time to start with Scratch or Alice. Most children should be able to wrap their heads around the basic mathematical concepts and read the labels on the screen. Starting in fifth or sixth grade there should be a focus in our schools on basic programming and web design.