In order to be a good programmer for something as complex as an operating system, years of experience with programming are generally required. One can learn the basic concepts behind programming, but this doesn't give much "real-world" experience. One tremendous benefit of free software is that every free software program instantly becomes a valuable educational tool.
One great way for programmers to learn is to look at good code from others. This is precisely the sort of advantage that free software provides. Programming students can study or even modify the internal workings of the Linux operating system as class projects, for instance. Hands-on experience with a modern operating system is a great way to learn skills.
If people are better educated, we get higher-quality software, which of course leads to increased utility—a definite win.
Another benefit here is that students can use, at no cost, a free software operating system such as Debian GNU/Linux or FreeBSD at home. This gives them the same computing environment as they get at their place of learning, with the added benefit that they can tinker with the source code to every part of the system to their heart's content.
Learning Becomes Fun
One current problem facing the United States is a shortage of skilled technical workers and programmers. 23 A great way to combat this problem is to get more people interested in computer science, electrical engineering, and related fields of study. As Stallman points out in 21, Why People Will Develop Software, programming is fun. If somebody enjoys programming, it's a great way to get him into the field. The free software concept offers ideal ways to not only get started with programming, but incentives to keep going. There's a certain feeling of satisfaction for a programmer when he makes his first patch to the Linux kernel or fixes a first bug in an e-mail client. Having the source to tinker with is an excellent opportunity to recruit people.