-
Programming should be a basic skill. Everyone (society at large) would benefit if they had a basic understanding of programming.
-
Writing software should be part of elementary / primary education.
In the same way that the educated populace has a basic command of mathematics, but there are also mathematicians who are very skilled and can engage with harder / more complex equations, there should be a similar class of people with a basic understanding of programming.
- It's important to use a real language, not one designed for kids.
Real languages have real constraints.
Languages like Scratch are terrible: Flash is gross; using an interface to make code doesn't teach you much; you should learn a whole language, and if you need to limit the environment / interface / whatever, do it through the API and encapsulation in the objects. Scratch is like SalesForce; it's written for people who don't have any real skills.
If you write something that doesn't compile / run in a real language, and you fix it, and then it works, you've learned a valuable skill. If you write something in a mini-language (broadly speaking, an educational programming language), you might have learned something, but it's not that valuable. Certainly there's a place for these mini-languages, but I feel like languages that have been designed for kids:
- Haven't been tested with the rigors of real use (by businesses, ostensibly)
- Have a learning-life expectancy
- Are designed with limits in mind — if you learn a real language that is used by an industry, you have a skill that can get you a job!