Wednesday, September 2, 2009

A Software Development School Idea

People who have talked to me (including late-night, heated discussions at Agile2009) know that I'm not a huge fan of the current training system, neither the computer science degree nor the way that new developers are brought into our industry. If you've been following me or spoken with me, then you've most likely heard how I prefer the mentor/apprenticeship model of training. I've had a lot of conversations with people along the way about apprenticeships, including some recorded ones. Ken Auer greatly impressed me with his sincerity and passion about the idea, and Jon Kern (video coming soon) also brought come concrete ideas to the forefront for me. These and others have convinced me that there could be a viable model for a hands-on, apprenticeship-style school for learning software development.

The basic structure would be a workshop doing custom software development for small businesses. The primary emphasis would be on the training of apprentices, much like a dental school. You know how you can go to a dental school and get your teeth cleaned for a less money than you would pay if you went to an experienced, graduated dentist. You are still going to get your teeth cleaned, although it might be a bit slower, perhaps a slightly lower quality (not always, though), but, in the end, you are going to have clean teeth.

I'd like to digress for a second to address the 'slightly lower quality' comment. I like JB Rainsberger's definition of quality: the marginal cost of adding features. This isn't about bugs or lack of functionality, this is more akin to the difference in quality between a Sam Adams Lager and a La Fin Du Monde; they are both good beers, but the La Fin Du Monde is a higher quality (in my opinion). Bugs are more like buying a beer and finding a mouse in it; unless you are Bob and Doug McKenzie, this is not a recipe for hilarity and success.

While the emphasis will be on hands-on development of real projects, there will also be a goal of making sure the apprentices learn the history of our industry, the names and contributions of those who have come before us. After all, it is hard to stand on the shoulders of giants, when you don't know who they are.

The main goal of the school would be have 2-year apprenticeship programs, where people can come and learn under the tutelage of experienced software developers while building real products for real clients. After they leave, companies that would hire them will know a certain something about their skills and experience. I emphasize that they will not leave as experts, more as developers with a solid understanding of certain development techniques.

There is more to the idea, and it is constantly evolving, as I meet and discuss this with more people, getting different perspectives and opinions. But, I wanted to put this up to share with everyone the thoughts, as well as perhaps get a bit of larger-scale discussion started.

I will be writing more about this as time goes on, but I wanted to get the ideas out there.