By Duncan Buell
I write this having just finished grading another set of programs. (Or is it that I am more or less always grading sets of programs, so that no matter when I blog I have always just finished grading?)
An employer survey has just been released by Hart Research Associates about what it is that employers want in their new employees. First of all, more education is desired. High school graduates, holders of associate degrees, and holders of bachelor’s degrees will be de-emphasized in that order and emphasized in the opposite order. The larger the company, the more there is an emphasis on hiring people with at least a bachelor’s degree.
Another conclusion from this survey is that employers want more than just specific knowledge of a skill set; 59% want new employees to be broadly educated.
But perhaps most notable are the top six desiderata (listed in order):
* the ability to communicate effectively;
* critical thinking and analytical reasoning skills;
* the ability to apply knowledge to real-world settings;
* the ability to analyze and solve complex problems;
* the ability to connect choices and actions to ethical decisions;
* teamwork and collaboration skills.
These dovetail almost perfectly with what students ought to be learning from a course in problem solving, algorithmic design, and programming. Certainly, there is nothing so unforgiving of fuzzy thinking than a compiler. We joke about DWIM (do what I mean) programming, but we know it’s a joke, and that the real test of whether a problem has been carefully analyzed is whether one can lay out a program to solve it. And unlike problems in pure mathematics, problems in computing usually come from real-world problems, and real-world problems don’t usually have the fixed set of rules of a mathematics problem. A use-case analysis, for example, is really just an analysis of what might be the best set of rules to apply in the current situation.
Clearly, then, our (good) students should be nailing three of the top six. I would argue that communication and teamwork come just as naturally. A program does “something”, and it doesn’t do “something else” (because it wasn’t written to do that), and it accomplishes the “something” purpose in an operational way by doing specific things. If a student can write that down clearly, and if a student can explain it to the others on the team, then it is not only known to the student but becomes part of the general knowledge that is usable by others.
This brings us to the last of the six topic choices, the one about ethical decisions. When we created our university course in professional issues, I commented to the chair of the philosophy department that the ethics part would be easy to teach. He shot back that ethics was in fact hard to teach. I had to explain that it was not that the ethics per se would be easy, but that in computing perhaps more than any other field, the examples of ethics issues jump off the pages of the newspaper (ok, off the screen of the Kindle), and they are issues that students in fact do care about. Internet censorship, file sharing, intellectual property, data privacy–all this comes to us as case studies on a daily basis, and we can analyze the choices that could be made or could have been made against the choices that were made.
Oh, and what about the “broadly educated” part? Well, Bjarne Stroustrup of C++ fame has just written in CACM his opinion that computer science students need to be urged or required to get some second area in depth. Computing can be done anywhere in any area, and a CS student ought to be learning something else besides the purely technical.
It seems to me, then, that it is easy to make the case for computer science. All the analytical thinking can be learned by trying to solve problems, and there’s no wiggle room in the end game if what has to be created is a computer program. The communication and teamwork skills come from and augment the analytical thinking and the need to explain to others what is done by this invisible thing that is a program. And the ethics questions are everywhere, because software is everywhere.
Duncan Buell
CSTA Board of Directors