I have been recently thinking about the role of a university curriculum in CS. Computer science degrees immediately offer their graduates a lucrative position in industry; this is obviously making them highly attractive to prospective students who want to get in on the action, and as a result they often care less about their foundational education (say, computational complexity, Turing machines, logic, calculus, proper algorithmic analysis), and more about getting hands-on experience.

I am leaning very strongly against this trend - I believe that at its foundation, our purpose as a faculty is to train computer scientists, not programmers. If they end up being proficient software engineers as a result, this is a bonus, not the main goal. This line of thinking has some very real implications on how courses are taught, what courses are taught and what opportunities we offer our students.

For example, we are at current flooded with requests from other faculties to offer 'low-level' courses to non-CS majors so that their students get the basic training they need in order to code in ML/AI environments. These requests can't merely be ignored.

My question is this: are other CS departments under similar pressure to produce programmers rather than computer scientists? What will be some of the long-term effects of this trend?

  • 2
    Isn't this just one facet of the age-old political fight? Usually the right hand side will argue that universities should be ruled by the free market and teach what the industry wants them to, while the left hand side will argue that there is more to life then money. It depends of course, in which country you are, but I think in most of the western world this battle has been going on since at least the seventies, with swings back and forth in both directions. So if you want to know the long term effects, just ask some of the older professors who have already been through this a few times... – mlk Nov 14 '18 at 10:39
  • I agree that this is somewhat of a meta question that was likely asked for other disciplines. That’s why I tried to carefully phrase the question towards how one deals with this in the highly application driven CS context. – Spark Nov 26 '18 at 12:52

I can only speak for the US, and I'll limit my remarks to undergraduate education there. I've been a student or faculty member at a wide range of colleges and universities from tiny (few hundred students) to massive (tens of thousands). Also a wide range of college focus, including liberal arts colleges, specialized focus colleges, and comprehensive universities. Not everything I can say is current, of course, since the participation started in the early 1960s.

Undergraduate education in the US, is normally very broad, encompassing much of the knowledge of "Western" (now broader) thought. The goal is to "produce" an "educated person generally" and one who is well placed for a lifetime of productive activity. There isn't a focus on "training for the job market", but many of the skills are useful there - thinking, writing, analyzing, debating, etc. In addition to the general education requirements, students normally have a major (possibly two) in which they focus more deeply. Computer Science has been a potential major for only about fifty years and the education has changed as the field has changed. Of course, it is still changing at a rate faster than many other fields.

The "hot job market" for CS graduates is an incredibly transient thing. The market runs both cold and hot. Students are a bit fickle about what majors they want to study based on news reports and such. Sometimes it is CS and other times it is Finance, depending on general economic conditions. Other fields don't seem to have these extreme cycles. I can't remember a "hot" market for mathematics since the early Sputnik days. I have also lived through periods in which you couldn't find CS students anywhere.

But, I don't know of very many places in which the faculty that design curricula think of their job as vocational. While most of our students do wind up working in the field, the faculty really wants to position their students for a wider range of option, primarily advanced education. If we don't make it possible for our students to enter an advanced program, we have failed. That, at least, is the perception that I notice.

Vocational education does occur in "Junior Colleges" of course, some of which have that mission (though not all do).

Also, I wonder about a perception that companies simply want colleges to teach students the latest tools and languages. I actually doubt that is true. I think they want intelligent people who can fairly quickly be productive, but who have the depth to grow with the future needs of the company. They don't really want "just programmers", though when you pin down the people who do the hiring that is what they say - since that is their job. What the company really wants is someone who can think, write, analyze, .... More important, that is what they need.

An anecdote. I once had a class of technical wonders who did essentially everything you asked of them. Mixed in was a student with somewhat modest technical skills. My prediction for her was that she would eventually wind up being the boss/manager of the whiz kids since she was the one in the class that always asked "why are we doing this? why is it important?". I still think that perspective is what leads to success. Not just "how does this work?"

| improve this answer | |
  • Thank you for your thoughts. I don't think anyone wants to think of themselves as teaching a vocation, even in a relatively applied field like CS. However, there are pressures from university officials to make classes accessible to non-CS majors, and from the students themselves (in terms of decreased enrollment, complaining that they don't see 'cutting edge stuff' if you don't use TensorFlow or whatever it is on the first lesson). How do you deal with that? How do you instill in students the sense of CS as a science? – Spark Nov 15 '18 at 11:01

I am strongly opposing this trend of making "programmers in [whatever]" in higher education. I think, one should teach concepts.

A short trip to a CS brick-and-mortar library (if you still have this section there at all) shatters any illusion that a technology in CS can be somewhat long-living. Almost any 10 years old book on practical programming is pretty much useless now. Most 5 year old books on the same subject are like this, too.

One can impossibly hope that teaching a practical subject to someone would help them last their career long. We don't have that many COBOL jobs out there, you know.

Of course, it's impossible to teach only concepts. We need some kind of a practical application to practice them. But right now, my students learn Haskell. And the concepts from my lecture would make them better programmers, irrelevant to what they'd program in their later life: C++ or Kotlin or (gasp) JS.

| improve this answer | |

My question is this: are other CS departments under similar pressure to produce programmers rather than computer scientists? What will be some of the long-term effects of this trend?

With respect to the first part of this question, I think the answer is undoubtedly yes. As discussed on the SIGCSE mailing list over the last year or so, the field is presently in a "capacity crisis" (a good summary here). Every practically institution with a strong reputation in the field has seem explosive growth in enrollments. Even at lesser-known colleges and SLACs, it's common to hear of doubling or tripling demand. Accompanying this is increased demand from non-majors. For example, the biology department at my college would like most of their students to take a computing course.

As to the long-term trends, opinions differ. Roberts (of the article I linked to above) points out that this is not a new phenomena. The current expansion is preceded by one in the 80's, and another in the 90's. Both of those ended when CS departments began to impose strict admissions criteria, and greatly scaled back their teaching loads. By taking only the most experienced and/or gifted students, it became easy to teach in a more rigorous or foundational way again.

It's not clear what will happen this time around, but ultimately there are only two possible options: supply will expand to meet demand, or demand will shrink to meet supply. The former seems likely to lead to the hiring of many more instructional positions, "Professors of Practice", and other roles with a focus on practical skills. The latter seems likely if there's a tech crash again, and could plausibly lead to CS education's demand looking more like mathematical education again.

| improve this answer | |

You appear to have framed this as a spectrum between vocational and "academic" emphasis in undergraduate studies. I think it is an interesting exposition that can shake loose the failings of each extreme but I have to reject this premise of your question.

First, taking it as true, I have to argue that a vocational focus should be preferred. We live in a market-driven economy which is just as forceful with human skills as it is for competition between Apple and Samsung. Students choose to SPEND 4 years of their lives pursuing various branches of knowledge -- the choice of which should not be made absent an understanding of this fact. There may be a benefit to society in having academics pursue purely theoretical works (not the least of which is the potential that that research might get swept up into something with practical benefits) but this cannot be the focus of every, or even most, students.

Now rejecting this premise, I have to say that the two go hand in hand with one another. Taking Turing machines as an example; there is a wealth of practical knowledge that share a common framework with Turing machines (e.g. regular expressions). You can teach Turing machines until the cows come home -- so long as you are also teaching regular expressions and compiler theory, you can serve both objectives. What I found in my undergraduate studies, was that the intuitive basis of Turing machines (regular expressions) was omitted to give the course the air of intense academic theory; the approach was dishonest.

This was consistent with what I found in a lot of courses after first year undergrad; professors stop teaching from first principles and expect students to absorb the subject matter from a conglomeration of theoretical rhetoric. For instance, neural networks was taught as a complex modelling of the brain when in reality its simplest exposition is in optimization of simple functions.

If one were to "leanvery strongly" against the vocational trend, I fear that the result would be this "Emperor's New Clothes" scenario I've described above. It takes its seat in the same ego-driven nonsense that allows for Star Wars fictions being published in scientific journals.

| improve this answer | |
  • This is a rant, not an answer. (And if regular expressions are your intuitive basis for Turing machines, you have very strange intuition about either regular expressions or Turing machines.) – JeffE Nov 26 '18 at 11:59
  • You asked what the long term trends of a vocational focus in academics was while stating a preference against it. I rejected the premise of your question. – Jordan McBain Nov 26 '18 at 15:08
  • You can either do a google search or a pub search with keywords "turing machine and regular expressionand you will be able to see for yourself the link between the two. – Jordan McBain Nov 26 '18 at 15:11
  • 1) It was the premise of your question. if you are in computer science faculty, I shouldn't have to explain what that means to you. 2) If you did it for a living, you would be working in industry. – Jordan McBain Nov 26 '18 at 16:42
  • You reduced the discussion to an almost ad hominem attack when you attempted to justify the validity of your question based on "doing this for a living." As with your original question, the premise of your argument was flawed. – Jordan McBain Nov 26 '18 at 17:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.