Bjarne Stroustrup, inventor of the C++ programming language, says that universities should focus less on creating new Computer Science (CS) professors and more on developing professional software engineers:
My suggestion is to define a structure of CS education based on a core plus specializations and application areas, aiming eventually at licensing of software artifacts and at least some of the CS professionals who produce them. This might go hand-in-hand with an emphasis on lifelong industry/academia involvement for technical experts.
I disagree emphatically with creating a licensed guild. But the rest I generally agree with.
I regularly meet with the Computer Science faculty of one local college, and I’m about to join the curriculum committee of a computer science department at another Utah college as well. I have strong opinions, formed in the forge of wasted money on failed software projects, on what should be taught in a computer science degree.
Stroustrup pegs it:
It would contain much of the established CS curriculum—algorithms, data structures, machine architecture, programming (principled), some math (primarily to teach proof-based and quantitative reasoning), and systems (such as operating systems and databases). To integrate that knowledge and to get an idea of how to handle larger problems, every student must complete several group projects (you could call that basic software engineering). It is essential that there is a balance between the theoretical and the practical—CS is not just principles and theorems, and it is not just hacking code.
Basically, I want it hard. And what he proposes sounds a lot like what I had in college. ESPECIALLY the more math (the hard kind) part because the quantitative reasoning it teaches seems missing from many of the graduates I hire or interview.
So what happened? Where did the rigor go? Many (most?) of them had cook book calculus as their highest math, never getting into the exotic mind benders like differential equations, or linear methods, that put quantitative hair on your chest.
Computer Science enrollment dropped 70% since I was in school in the early 80’s. Other paths (Information Systems, Microsoft Network certification for example) into the field caused part of the drop, but also a general recognition that industry would hire you _without_ a degree. So why spend the time and money?
Lately, the kind of person entering the degree has changed too. They are still “geeks” but many are “gaming geeks” focused on video games. The geeks of early CS were algorithm/logic geeks – they built puzzles, enjoyed logic, and ultimately built up languages like C++, and operating systems like Unix. As Stroustrup suggests, for many:
"programming" has become a strange combination of unprincipled hacking and invoking other people’s libraries (with only the vaguest idea of what’s going on).
When I meet with CS faculty, I say "make it hard!”, “challenge them” and make them fix other people’s code. Because if we are going to have less CS graduates, lets at least make them top notch.