A recent IBM developerWorks article looks at taking CS as a major and ultimately as a career. It’s pretty insightful and worth reading, but I would draw your attention to one passage in particular:

The way computer science was traditionally taught, you were assigned individual projects, you worked on them alone, and that became your view of the working world. I believe if the education better matched the real, team-based experience, where skills are applied to solving real-world problems, it would have more appeal. As an industry, we need to do more to get that message out. (Emphasis mine.)

So getting more specific, how can we make the classroom more like the industry? Well, first we should identify what the classroom looks like. It’s been my experience that most instructors ultimately end up producing teams that consist of one or two really driven individuals that do about 80% of the work, another batch of folks who trot along and coast right through the task at hand, and then at least one person who is completely lost and ends up partially redeeming themselves by formatting the report, making copies, picking up coffee, etc.

Sound familiar to anyone? On more than one occasion I’ve heard instructors say that they actually plan teams this way to “distribute the brain power.” Sure, not every team ends up being designed like this — but most of them sure do. At least that’s been my experience.

Getting on with it, I’ve found that out in the industry, the landscape changes drastically, and the reason gets right back to the age old idea of incentive. Recall that the industry has one primary end in mind: to be as profitable as possible. Successful companies usually accomplish this purpose by finding folks who would essentially form that ideal team back in the classroom that classroom instructors never managed to connect together. Likewise, those folks who coasted or were clueless back in school normally don’t manage to even make it to the front lines of the core industry — probably because they can’t do the work, or at least do it as well as their peers can, despite their degree that says that they should be able to shoot par for the course.

So what’s my suggestion for how we can improve the classroom? It’s simple: don’t distribute the brain power, and keep the standards high. Build teams so that everyone in the team is on equal footing and tailor projects accordingly. That means put the smartest kids together and put the not-so-smartest kids together. For some, that idea will immediately seem unfair and cruel, but think about it. If you faithfully apply this approach throughout an academic career, it should ultimately allow the smart kids to excel far beyond what they could otherwise do in a mediocre team, while forcing everyone else to get with the program, or get out of the program (literally). But in most cases, I really do think that everyone ends up learning more, and for me, that’s a big a win-win for everyone. More productivity. More education. Less waste. And less folks end up making it through with a degree that maybe they shouldn’t have made it through with (the coasters and clueless.)

Please feel free to comment on your exceptionally good, bad, or mediocre classroom experience and how it has related to your success or lack thereof in the industry. What are your suggestions for making the classroom more like the industry (whatever the industry)?