Reaching into the Cradle for Programmers
One of the biggest issues facing America, other than Katrina of course, is that we will lose our cometitive edge in programming, especially in the face of offshoring and the like. One of the ways in which to combat this eventuality as I have commented on earlier in my blog is to add value to our programmers. One thing to look at is what makes up a good programmer, or not good but rather an effective programmer.
Effective programmers may not be the best at all the technical tricks in programming, but they can take a set of good specs, some user feedback, or a problem and churn out a piece of software that solves that problem. The ability to do this comes not from college, or advanced courses in algorithms using C++. This ability is established at a much earlier age. Probably somewhere between ages 3 and 5. Most of the people that I consider to be good programmers started writing code at around age 10, and have a strong artistic bent. Usually around the same time as they start writing code, they begin to take things apart to see how they work, to quote a friend. These traits should be sought out in elementary school, and should be encouraged through high-school. Many would say that this takes the self-determination out of a child's path to adulthood. I would argue that it helps them find their path, many of these kids would want to be programmers, if they knew what it was to be a programmer. Most of them are strong problem solvers, even if they aren't that good in math.
For the most part, the extreme emphasis schools put on learning math to be a good programmer is ludicrous. Obviously if you are developing new encoding codecs or security algorithms you have to be good at math, but that is only one kind of software development. There are many other aspects of software problem solving that don't involve that kind of math. Also, people can continue to learn math outside of school, even though most don't.
A good way to start your child down the path is to keep them assembling blocks of logic to solve a problem. There are many games, especially video games, that enforce this type of thinking. To maintain our lead, we have to enhance our kids' creativity and their interest in software development. There is still plenty of work to be done, just look at most web sites, web applications, and operating systems. They are hardly ideal. This is why Google and Microsoft are coming under so much criticism from their recruiters. They focus mostly on the education, but that hardly makes one a good programmer and therfore are often turning their nose up at creative individuals who could make an immediate impact. Developers take many strange and divergent paths to get where they are, it takes a good recruiter to understand those paths to hire good programmers when they find them.