how to dodge responsibility, comp sci edition
Allow me to return for just a moment to the exciting world of computer science academia and CMU’s decision to teach only functional programming languages, offering only one optional course in the industry-standard object oriented approach. We won’t be scrutinizing the logic behind it any further because that’s already been done, so instead, I wanted to take on a comment by Nick Barnes on CMU’s post on the subject. Readers with good memories might remember my post on his column about sharing climate modeling code and his subsequent comments on it, and yes, this is the very same Nick Barnes. His comment on the subject here is just a snappy one liner, but this snappy little one liner illustrates so many problems with the mindset at many colleges and labs, that it just has to be pointed out. Just like many humanities professors declared from the pages of the Chronicle of Higher Ed, colleges don’t see training their students for jobs as their responsibility and when the issue of how CMU graduates would find a job inevitably came up, Barnes joined this choir with his blanket proclamation that it’s not the university’s job to educate programmers, but computer scientists.
One could write pages of the many things blithely overlooked and carelessly implied in this assertion. As one of my firsts posts after the grad school induced hiatus pointed out, academic jobs are few and far between, and as noted in several earlier posts, colleges are evaluated based on how easily their graduates can find jobs no matter how much the faculty may object to this metric. When a college degree is a prerequisite for an interview, much less a position, and tuition costs amount to tens of thousands of dollars, of course graduates and their parents will judge how well this education translated into careers and stable incomes. Once upon a time, higher education was an enclave for the wealthy, well read, and more interested in scholarship than any particular job since their livelihood was already guaranteed. In the intervening century or two things managed to change and most college students are going to college to kick-start their careers, not necessarily for the life of the mind. Their tuitions are frequently either financed or greatly supported by their parents who spend many years gathering the money for this exact task. Higher education is now an investment in the future, and like an investment of any kind, it’s evaluated for it’s return. And if its return is meager, it’s a bad investment.
With this in mind, we can tackle the idea that it’s not programmers that universities should be teaching, but an upcoming generation of computer scientists. Again, there are only 29,000 jobs for computer scientists now. If a group of hypothetical computer science undergraduates starts studying this fall, by the time they’ll earn their doctorates there will be about 38,000 positions for computer scientists. The overwhelming majority of them is almost certainly going to be already filled, and along the way, about 8 out of 10 would-be computer scientists elected to finish with undergraduate and graduate degrees. So how fair is it to all those students to just avoid teaching them what they should know as industry programmers and have them peruse maybe a few dozen or so positions after eight years or hard work and investing enough money to buy a small house? How is it even ethical to simply use graduate students as a pliant workforce and abandon them to look for academic jobs where there can be as many as 800 applicants for just one open spot? And please don’t tell me that if you’re a computer scientist, you can easily become an industry programmer. Industry and academic projects are very, very different beasts in scale, purpose, and what you’ll ultimately be allowed to do with your time.
Finally, there’s also a very real hint of condescending dismissal here, as if programmers don’t have to know a great deal about the same concepts as the ones with which computer scientists have to deal every day. From my personal experience, working on a business project by day and an academic project by night, or vice versa depending on your study and work patterns, leads to some very useful cross-pollination of skills. When you’re coding for industry, you’re often working with more modern tools and on much larger scales since more likely than not, you’re working on components of a large enterprise project. In an academic setting, you usually deal with novelty in applications and complexity. Combine industry programmers and computer scientists, or teach programmers how to think like computer scientists, and you’ll have a terrific combination. To separate the two into different trenches with a haughty comment about how teaching new programmers is not a valid goal for a university demonstrates a serious lack of thought on the subject by the person making such comments. So in short, what I’m trying to say is that I find Barnes’ comment to be poorly thought out, dismissive to very real and complex problems in computer science education, and personally offensive to those with an educational and professional background like my own. I’m just glad I didn’t have someone like Barnes as a professor…