Preparing a New Generation of Developers
Recently, Microsoft unveiled their Elevate America initiative. The idea behind the site is simple - provide resources to help workers in the US gain technical skills to help their jobseeking efforts. As well as helping expand skills, including the basics, it also helps students to plan their future careers. This is a step in the right direction to creating a more substainable, knowledge-based global economy. But it's only the beginning, and we need to focus a lot on the next generation of software developers.
An interesting part of the latest Malcom Gladwell book, Outliers, explains the 10,000 hour principle: that the really successful people are those who have been able to invest a lot of time into their profession. Bill Gates, for instance, was lucky enough to attend a Seattle school that had a computer club and to live near the University of Washington, giving him access to computing equipment. He got experience, and lots of it, early - simple as that.
It got me around to thinking about education systems that exist at the moment for students. Traditionally, it's not every primary level school that has access to computers. And even when they do, the student:computer ratio is generally not sufficient to allow everyone to have adequate time. On secondary level it's probably better, but usually students are being thought the basics such as word processing and just general familiarity with the operating system. I had good access to computers in my secondary school, and had an interest in programming, so I thought myself some very basic BASIC. It still wasn't enough to prepare me for university though.
A Plan Of Action
There are two things that are required. One part is to provide more focussed classes on problem solving in primary and secondary school. Maths is an alright subject, but a lot of people fail to get excited about it. Contrary to popular opinion, being a maths wiz is not a pre-requisite for being a good software developer - especially in these days of higher level languages.
The second, and more important part, is to make software development seem more accessible to students. That's easier than it sounds thanks to a proliferation of educational-styled IDEs, programs such as Elevate America and the iPhone.
The iPhone might seem like the odd one out, but think about it for a while. Writing applications for your iPhone (or Android!) is immediately rewarding. You get your game working on your own personal device, rather than needing to use a PC to run the app. Plugins for your favourite social networking site, or even games for your XBox360 can be written from home. If students were first introduced to these possibilities, it might trigger a greater interest in software development.
On the IDE front, BlueJ has been around for a very long time. The latest version even provides support for JavaME development. I've also been talking to Wayne Beaton at Eclipse about their IDE4EDU proposal. While it's aimed at University level students, it's a great idea that can easily be extended to suit earlier stages of education. Stripping Eclipse of the complications that cause a steep learning curve. They're considering working with organisations such as CoFFEE, with their classroom teaching tool to make the offering more applicable, and appealling to educational establishments. I think this could be a great project, and it will be interesting to see where it goes.
I have no statistics to hand, and my personal experience makes we wonder if these IDEs are present in schools. But I really hope I'm wrong - that these tools are being installed in the computers in high/secondary level schools at the very least. I'm interested to hear your opinions and experiences with preparing a new generation of software developers in advance of high school.