Like everyone else who’s ever wanted money at any point in their lives (i.e. like everyone else on the planet), I’ve put a little thought into just what I’d do if I ever go so obscenely rich I could stop worrying about money. Now, since definitions are important, I’ll define obscenely rich as making so much money a year, your immediate reaction is to utter an obscenity.
One of the things on that list is starting an open source foundation at my old college. This would be a setup designed to have students create or maintain open source projects that are released to the real world. The idea here is to give students an easily-accessible option that gives them all kinds of crazy useful real world experience other than “get a real-world full-time programming job.” Part of this was inspired by Steven Hicks Steven Hicks’ [ed. Fixed my grammar] post on Computer Science classes he’d like to take.
First and foremost, they’d be writing real-world code. Not just simple, contrived projects designed to deal illustrate 1 little thing they’ve been lectured to about for days, but an actual, full-scale application designed to solve some problem for users. You know, like real software developers do. Since this is an open source foundation, all their work is publicly available for them to show off to potential employers. While this isn’t as good as real life work experience, being able to demonstrate code you’ve worked on, and being able to show it to employers at an interview, is a leg up and any kid who’s just had class and the odd college job when they were in school.
Secondly, they’d be doing all the supporting stuff that happens with real-world development projects. I’m talking about version control, merging, task management, task assignment, peer reviewing, testing, diffing commits to see just what someone changed that may be breaking their stuff. You know, all those things you don’t ever do in class because you’re never working on something that makes such an effort worthwhile? Sure it’s not that hard to learn to deal with all this stuff on the job, but that’s not an excuse to put off getting in the habit of doing things right.
Third, it’s a good opportunity for students to learn about setting up different kinds of development environments where designed for learning and giving people help. In the workplace, your “professor” is typically “Dr. Google”, and the hope that maybe some of co-workers have have run into something like that once and remember what to do. On the other hand, colleges are chock-full of real-life professors. Not only that, but colleges have incentive (and if there’s any justice to higher education, the resources) to support a wide variety of development environments. After all, the kiddies have to learn about them somehow. But the most important part of all of this, at least from the perspective of my imaginary open-source software foundation at my alma mater, is that students experience the agony and the ecstasy of setting up and configuring their work environments firsthand, a lot. When these kids hit the real world, they’re going to have to set up development environments at every job, for every version of the software they work on. The more practice they have doing this sort of thing, the less time they’ll spend held up getting things set up, and the more time they’ll spend making something awesome.
Fourth, variety is the spice of software much as it is in life. Given some time, and an open source foundation could write programs that handle a variety of issues over the years, based on student involvement and interests. That’s on top of any pre-existing projects they decide to contribute to. A wide variety of projects gives these kids a wide variety of experience, the kind most developers take years to get. It’s like getting a multi-year jump start on your resume. It also finally solves the whole paradox of all employers wanting a couple of years’ worth of experience but nobody hiring so kids can get those years worth of experience. Not to mention this will give the kids a great opportunity to learn what they like and don’t like about the software development process, information that will serve them incredibly well when they start figuring where they want to work when they graduate.
Fifth, maintenance work is good for the soul (not to mention a huge part of software development, both in time and budget). When these kids start working, they’re going to be spending a lot more time working with existing software than they are writing something brand new, never seen before, from scratch. Even if they are writing some new feature to something, they still have to fit it in to existing software and architecture. Just because this is a college foundation or open source doesn’t excuse the kids from having to deal with that reality. The more practice they get at learning to read and analyze software written by others, the better they’ll do in their careers.
Sixth, since this foundation will comprise of students who are in the process of learning to do things correctly, the software released by this foundation will be documented. Specifically, it will be documented well. Tthese are college students doing this for a course, they won’t be able to complete it without thoroughly documenting their work, both the API and code comments. This won’t be too hard to drill into them after doing some of the maintenance work listed above. This will also be a great opportunity for them to get into the habit of maintaining comments as they’re maintaining code. Not only that, having to maintain code will teach these kids the importance of commenting their code, if for no other reason than not wanting to spend time trying to remember just what the code is supposed to be doing later.
Seventh, having to maintain and deal with software worked on by other people exposes students to other programmer’s bad habits. This is where they learn just why their professors keep being so pushy about following things like coding standards and best practices. It’s also (hopefully) where they commit to not doing any of these things themselves. They’ll have to deal with little to no documentation in other projects, poor naming conventions, people using old deprecated methods, refusing to utilize white space to make code readable, etc. Nothing drives home all those lectures on how you’re supposed to write good code like dealing with people that don’t follow those instructions. Hopefully, after having to deal with real-life examples of what not to do, they’ll graduate with good habits born of cleaning up other people’s messes.
Lastly, but most importantly, they’ll be shipping software. I’ll say this one again, because like I said, it is the most important part, they’ll be ****ing shipping software. Not, they turned software in to a professor, but they put something out there that you can go download and use right freaking now. If you want to ask about their work, they can tell you about a bug they fixed or feature they added, cite the release notes, and give you a demo of the software they’ve contributed to, and they can do this from the very first phone screen. These kids will have solved real-world problems, dealt with real-world bug reports and customer requests, and you can see the quality of their work, along with the quality of the code they wrote to produce it. They will probably have had to self-teach themselves something that never came up in lectures, because it wasn’t basic computer science but was still something users would need. Hell, they’ll have had users that they were supporting. They’ll have had to make decisions about what features will and will not be supported to make a deadline, and they’ll have shipped software.
There’s a lot of great classes that you can possibly take at a college, but nothing beats real-world experience. Setting up an open source software foundation at a college and opening it up to students for course credit gives them invaluable experience and opportunities, and creates graduating classes of software developers used to contributing to open source projects who quite possibly could continue to do so once they’ve left school. You also have graduating classes of software developers who can list actual, real-world software products they’ve contributed to on their resumes, and you can actually go view not only the product itself, but the code they wrote as well. For a fresh-faced college graduate, this kind of thing could be the best leg up to getting a job that they could possibly get, and I for one would like to encourage all of the obscenely rich people out there to give towards launching such a foundation at the schools of your choice today.