# What controversies in computer science education exist today?

I remember 20 years ago (when I was doing my degree in computer science) that there were a lot of instructors who thought that the impending ("real soon now") transition from using C++ as the programming language of instruction to Java represented a loosening of standards — i.e. that Java was "too easy" and allowed students to get away with not fully mastering concepts that Java handled on its own (e.g. manually freeing memory vs relying on the garbage collector). There were some good points to this argument but it also became clear that higher-level languages like Java and C# allow students to spend more time on advanced concepts (e.g. large and complex data structures) rather than chasing down another stray pointer or memory leak. After I had my degree in hand and started writing real software, I realized that I had spent so much time chasing segmentation faults and off-by-one errors in C++ that I really did have a shaky foundation on more abstract concepts. Seeing OOP implemented right in C# was mind-blowing for me — now it finally made sense why programming to an interface was how polymorphism worked.

Are there any similar controversies today in terms of what a computer science education should consist of or how it should be delivered?

• At the danger of starting an OT discussion but I'm surprised -- .NET/C# is both a revelation (so much is handed to you on a silver platter that you needed to hand-craft in C++) and a let-down (no RAII/deterministic destruction? You cannot write serious programs in such a language). Dec 16, 2021 at 11:04
• @Peter-ReinstateMonica Define "serious programs." I've seen (and helped to write) software that supports the needs of Fortune 500 companies, written in C#, no RAII necessary (or wanted). If that's not serious, what is? Dec 16, 2021 at 16:08
• Since we gave up with Fortran, students are weak on gotos. Dec 16, 2021 at 16:59
• You have tagged your question with 'undergraduate', but one big controversy is if CS education should begin in pre-school or if waiting until kindergarten is acceptable. A bit of exaggeration, but really not much. Dec 16, 2021 at 19:30
• @Mason, nothing that essentially just changes numbers (including money) is serious. Truly serious software is the one that controls equipment, especially the one that can kill you.
– Zeus
Dec 17, 2021 at 7:04

There is a big controversy about the purpose of "Computer Science" education specifically. This controversy has become hotter the the last few decades as CS has come to the fore as an important field.

• One camp feel that "Computer Science" is akin to "programming", and should be teaching real world skills. In this view, education should be focused on what is practical, and to some degree resemble what is currently found in coding boot camps.
• The other camp feels that "Computer Science" is largely a branch of thought and mathematics, and an academic field in its own right. Under this view, students studying CS should be exposed to things like inductive proofs of code correctness, how to map problem spaces onto NP, pushdown automata, serious algorithmic analysis, etc.

I fall largely in the second camp, since computer science was a mathematical field long before programming had the impact that it now does. I would, however, love to see undergraduate "programming" majors exist. I think that, particularly among those in the second camp, that field isn't given its due -- it is far richer and complex than it is sometimes given credit for, and could easily fill a bachelor's degree (and then some!)

Such a "programming" major would overlap to some degree with "computer science" majors, though that is hardly a unique situation. There are plenty of university majors with a fair amount of overlap.

• Comments are not for extended discussion; this conversation has been moved to chat.
– Ben I.
Dec 19, 2021 at 4:51
• Undergrad: programming, grad: theory. Of course you have to start with some background info at the beginning... Dec 31, 2021 at 2:10

I just did a quick scan of the SIGCSE-MEMBERS mailing list for the past year and nothing stands out.

The language wars continue to smolder with some balkanization (Java, Python, C#, JavaScript, ...) but not with the intensity of previous days. I doubt there will be special sessions on such things in the near future.

There was a thread there on whether a variable is a "box" or a "label" with proponents of each side (Go Labels).

Most have decided that the proper "current" paradigm is OO, but with some minor defections to functional programming.

There is still, however, an iron curtain between the objects early and objects late worlds. So much so that one prominent author has two versions of his intro book, labeled as such.

I see some discussion about whether using a sophisticated IDE or the command line is preferable.

There is constant discussion, but not controversy, on inclusion in CS education.

There is discussion about including more AI and Big Data, as you would expect.

Note two things. There is more to CS than language choice and intro to programming, which is just a tool. And, the earlier controversies occurred at an inflection point when CS education moved from a primarily Structured Approach (Pascal, C,...) to an object oriented one. That paradigm shift was the cause of a lot of what then happened.

• Good point about the paradigm shift. In 2001, everything was supposed to be object-oriented or interpreted in an OOP context. Mobile phones existed but were used for calling people - nobody worth mentioning was writing "apps". We wrote in C++ on Solaris shell accounts and we loved it! Dec 15, 2021 at 21:11
• "I see some discussion about whether using a sophisticated IDE or the command line is preferable." Wow. The rest of the world decided this question definitively 30+ years ago: GUIs are just orders of magnitude better than CLIs. It's kind of sad to see so many people at the very heart of the computer industry stuck in the 1970s! Dec 16, 2021 at 16:04
• @MasonWheeler I think some people have basically an integrated development environment on the console. Maybe the emacs enthusiasts a bit more than the vi(m) faction. If you know your keystrokes you are much faster for most tasks; plus you have written the first function before your IDE accepts the first interaction after initializing. (I personally like VS because my memory is too bad for all the keystrokes but have some emacs envy.) Dec 16, 2021 at 20:15
• @MasonWheeler I think the Association of Wine-Growers has published libraries full of studies proving that wine is good for your health ;-). Also it is anecdotally evident that people who are really good with the mouse suck with the keyboard (kb/mouse are essentially two different camps on the spectrum between Web interfaces and embedded), so the study is perhaps not surprising on more than one dimension. Dec 17, 2021 at 0:30
• At the very least, this comment thread demonstrates that IDEs are a very real contention for people who use stackexchange. Dec 17, 2021 at 18:56

One controversy within my department is whether it is a good idea to take time to both teach about and enforce the very basics of coding style. (Think indentation, variable naming, vertical spacing, or how often to comment.)

• One camp believes that it's vital, and that students producing "poor" code need to be redirected, even if the code meets all of the API specs. They would contend that a student arriving at their third or fourth year of CS who (just for instance) still names variables with meaningless indicators like str, data2, or num, or use unintelligible shortenings like bk, rf, t, and edp represent a failure of instruction.

• The other camp believes that it's largely a waste of time, because it is time-intensive (as it involves carefully reading and editing a LOT of poor code), and it is self-correcting over time, as students will absorb norms both from modeled teacher code and from the pain of making bad coding decisions in their early years.

(I tried hard to keep my own biases out of those explanations, though a look through my post history would make clear which camp I belong to.)

• Professional practice has moved on to "automate as much of this as possible". It's worth arguing over intelligible names, but the format of the code is a job for clang-format or whatever. Dec 16, 2021 at 9:15
• The Go community is a great example of that. 1) There is no myriad of code formatters. Since gofmt ships as part of the compiler, nobody else has felt the need to write one. 2) gofmt also has no configuration options, there is no way to choose or influence how it formats the code. 3) gofmt is automatically ran over every commit to the main Go compiler / stdlib repository. 4) The code review system automatically rejects every pull request that is not "idempotent under gofmt" – i.e. all submissions must be already formatted with gofmt. 5) The Go language team encourages everybody to … Dec 17, 2021 at 9:44
• … do the same. This has some interesting implications: there is the obvious one, which is that all Go code in the entire community is formatted the same way. There is no discussion over tabs vs. spaces, where the parentheses go, etc. Less obvious is the productivity benefit of simply not having to think about these things. But a rather surprising benefit is that this allows backwards-incompatible syntax changes and even some semantic changes without pain. You can teach gofmt to convert the old syntax / old code into the new code, and since everybody runs gofmt all the time, their code … Dec 17, 2021 at 9:46
• … is automatically updated to the new language version over time. Dec 17, 2021 at 9:47
• Both camps are right and wrong. Discuss style and why it is important, show students how to use a tool. Dec 22, 2021 at 21:38

There is debate over how to respond to students' changing mental model of files and directories (as highlighted in a recent Verge article.) This doesn't solely affect computer science education, but it is a bit of computer science affecting education as a whole.

Essentially, having grown up with cloud services and ubiquitous, reasonably effective search functions for directories, students largely don't think in terms of directories anymore. They get by fine saving their coursework and personal documents in one huge folder or in disparate default save locations from each program, then searching for it later. Later in their education they run into a command line utility and are completely stumped by the concept that programs need to execute "in" a directory and have different behavior depending on "where" they're executed, these being totally new concepts in their mental model of a computer.

The main debate is whether or not to spend time teaching students to think about directories, and if so how many of them. This concerns how important we feel knowledge of directories is to operate the tools of various fields. It also concerns how fundamental we feel the concept of directories is to computing (ultimately, they are higher-level constructs, the physical media doesn't organize data that way and we made the choice to impose a directory structure) and how much we would object if the next generation of software implementers erodes the directory model in their tools.

• No one wonders if Architects still need to know about arches and load bearing. What is up with CS that we seem to want to kill all our children like a jealous Cronos or something? Why can't we see what is fundamental about the task of computing? Dec 31, 2021 at 1:57
• Try some Douglas Adams @ScottRowe -- about 3 paras down. It's therapeutic. Ppl in my (I guess same as your) generation would be unable to use a computer without files/directories. Doesn't mean they're made by God. Heck even the original (cardboard) files which metaphorize into macine fles are not
– Rusi
Dec 31, 2021 at 5:54
• @Rusi that Douglas Adams? Interesting. It was a while ago. Anyway, we should not create systems that entirely hide what we are doing from ourselves. If you are in the kitchen and you put something away in the wrong cabinet, that is still stupid and you still have to learn to organize yourself, no matter how much technology your kitchen has. Stuff is stuff and using things is using things. Virtual things doubly so. Propose something better than files and folders? Really. What would it be? Hierarchy is part of existence. Dec 31, 2021 at 11:34
• @ScottRowe Leave the clutter be; let desktop search do the work The kids are already doing it that way if the verge article is to be believed. IOW hierarchy may be part of *your life; its evidently less and less part of theirs. Windows/Apple tried to go that way circ 2004; in MSworld it was called longhorn/WinFS, in apple it was spotify. That it didnt stick is another matter... The verge article basically amounts to this that google has succeeded in doing what MS/Apple/Linux failed to do
– Rusi
Dec 31, 2021 at 12:02
• @Scottrowe "Propose something better than files and folders?" Here's some discussion stackoverflow.com/questions/1575155/…
– Rusi
Jan 1 at 10:23

There is some controversy over the Ethics of computer science. This is much more relevant to programmers than people studying the mathematical side of computer science, but is it the programmers job to refuse to code in unsafe ways?

I was recently tasked with adding an update to our website which would have exposed our clients to a potential malicious actor through exploiting the clients trust on our website. I pushed back and suggested an alternative that protected the clients but limited how flexible the update was for our purposes.

But is that my responsibility? Should I just have done what I was told? Is there a comparison with engineers designing potentially unsafe constructions?

• The Social Implications of Computing was the best course I took in my undergrad. This type of course should be mandatory for all CS students everywhere. Dec 16, 2021 at 17:55
• But this is nothing new. Welcome to engineering!
– Zeus
Dec 20, 2021 at 0:28

# ACM CC2013

Excerpted from chapter 5 Introductory Courses of ACM CS Curricula 2013.
Emphases added to highlight lurking controversies!

In considering the changing landscape of introductory courses, we look at the evolution of introductory courses from CC2001 to CS2013. CC2001 classified introductory course sequences into six general models:

• Imperative-first
• Objects-first
• Functional-first
• Algorithms-first
• Hardware-first

While introductory courses with these characteristic features certainly still exist today, we believe that advances in the field have led to an even more diverse set of approaches in introductory courses than the models set out in CC2001. Moreover, the approaches employed in introductory courses are in a greater state of flux.

An important challenge for introductory courses... : Choosing what to cover in introductory courses results in a set of tradeoffs that must be considered when trying to decide what should be covered early in a curriculum.

A defining factor for many introductory courses is...

# The choice of programming paradigm

The choice of programming paradigm which then drives the choice of programming language. Indeed, half of the six introductory course models listed in CC2001 were described by programming paradigm (Imperative-first, Objects-first, Functional-first). Such paradigm-based introductory courses still exist and their relative merits continue to be debated. We note that rather than a particular paradigm or language coming to be favored over time, the past decade has only broadened the list of programming languages now successfully used in introductory courses.

My comments: So language/paradigm choice at CS101 level remain as contentious as ever. It's just that C++ vs Lisp is now Haskell vs Python

# Platform

While many introductory programming courses make use of traditional computing platforms (e.g., desktop/laptop computers) and are, as a result, somewhat “hardware agnostic,”

(Yet) the past few years have seen a growing diversity in the set of programmable devices such as (Summarizing)

• web development
• mobile device (e.g., smartphone, tablet) programming
• specialty platforms, such as robots or game consoles
• physically-small, feature-restricted e.g. raspberry-pi

In any of these cases, the use of a particular platform brings with it attendant choices for programming paradigms, component libraries, APIs, and security. Working within the software/hardware constraints of a given platform is a useful software-engineering skill, but also comes at the cost that the topics covered in the course may likewise be limited by the choice of platform.

# The IDE-Language divide

Its 20 years since Oliver Steele noted the IDE-Language divide

That the issue remains current can be seen right here!!

Closely related to the obvious ease + non-obvious disadvantages of using Blub Programming Languages in CS-education.

Note: When Paul Graham wrote that 20 years ago, the archetypal blub language was Java. Today I'd say it's python.

# CS: Algorithms? Or Data?

ACM curriculum 89 boldly stated

The discipline of computing is the systematic study of algorithmic processes

Consider how far we have come from that to today's world of machine learning: in short:

CS: Algorithms?? Or Data???

To be fair in the 90s Peter Naur tried to rename computer science to datalogy. Evidently he was not very successful then...

Here is a more recent one: A notable CMU prof tentatively suggests that:

Everyone knows that algorithms as we learned them at school are irrelevant to practice

Note the transition: 1990: CS = algorithms. 2001: algorithmic is one out of six contenders. 2014: Are algorithms relevant to CS?

# Does IT matter??

At the broadest level: In the 21 century does IT really matter?

• Pretty soon we will no more be writing programs than we saddle horses or hoist sails. Just driving a car is about to drop off. Of course, I am able to do those things, and build radio equipment and use a darkroom, but who really does? Dec 31, 2021 at 1:47
• The Blub idea is interesting but perhaps dated. I create simple web apps that use data accessed with SQL. So... 'Language' = HTML with ASP tags + CSS + code behind (C# or VB.Net) + SQL and perhaps other things. I do what is easiest and most maintainable with each one. This isn't even including any OO stuff, which is unnecessary for these types of apps. Could Lisp replace all these usages, and if so, how? Dec 31, 2021 at 2:32
• @Scottrowe You're describing an intelligent "full-stack developer" -- a term which Graham didn't have. Re Lisp equiv. Doesn't mean I recommend lisp today. AFAIC scheme & python are the "same" language modulo syntax. For your kind of work it's usually less pain to stay within mainstream. Teaching is another matter entirely: educating with {Java, python,etc} produces oodles of blub : Alan Kay's Stanford=Java certification applies to python equally today
– Rusi
Dec 31, 2021 at 11:16
• Not to keep kicking the anthill hon, but, a heuristic I so often use is that the more contentious and strident people are about some distinction, like choice of CS language or paradigm, the less it actually matters. Because people tend to see the surface features and symbology, not the underlying reality. Yes! Even the Experts! Especially the experts get so wrapped up in the decades they have sunk into developing their theories about reality, that they are lost from reality. That bothers me, as you know. Why do people see symbols instead of what is? Can't they have an unmediated experience? Feb 11 at 11:11
• Ive spoken of the normal lower levels (words, thoughts) and the higher-than language levels (insight, transcendence) yogainternational.com/article/view/4-degrees-of-human-speech. Yes its a lofty goal to try going beyond the lower 2 to(wards) the upper two. The difficulty with you is you talk as though its easy, trivial. Somewhat like writing to some ashram, or spiritual center and saying: Ive got three days in your city. Can you make me Buddha?. (Im ready to pay!) [Its of course true "Most human experience has nothing to do with language" Its even more true we live nth hand from such
– Rusi
Feb 12 at 13:54

One thing I haven't seen from any other answer: How much and what kind of math should be taught?

I studied at a University where the CS is a small sidekick to the Math department. Basically all discussions about the CS curriculum revolved around the theme of what kind of math do CS student need. The mathematicians obviously (and in my opinion oblivious to real application) argued for more and more formal math. The CS people (with some backup from physicists chipping in) argued for a more streamlined, less formal, more application specific math classes.

The math department usually came out on top and so I had to take classes in analysis, linear algebra, numerical analysis, statistics and formal logic with regular math students. A few years late in the advanced CS or engineering classes the profs complained that we couldn't actually use any of the math we learned. No mathematician will actually show you HOW to solve differential equations, do FFT or Laplace transforms. They just prove that it is solvable...

• +1 To be unbalanced is one feature of being human 😇. But CS has it worse than elsewhere because no one agrees on a core/canon of the subject. Note: «How much math?» And «What kind of math?» are v v different questions. V V often mixed up. Your unfortunate experience is from the "More is Better" camp with no one stopping to ask "More of what?" Here's a striking quote I recently found on Math-SE to illustrate: Geometry is to encourage thinking; Algebra is to avoid thinking
– Rusi
Feb 12 at 5:40
• I think people learn to program by programming, and all the math hoo-ha is people with too much time on their hands caught up in world-building. "But the real work is being done outside, by someone digging in the ground." (Rumi) Feb 12 at 14:42
• Well, to be fair, the whole program was devised as a "we need programmers for the math department". Didn't work out so well... 20 years later and the math department still won't acknowledge that the needs might have shifted and still holds on to the "if you are going to learn maths, you need to do it the proper way". Which again, is a fair point, IF all your graduates are going to be working on numerical simulations or computer algebra systems or whatever. But basically no one did.
– Max
Feb 14 at 10:35
• Also "what kind" might be a bit misleading. I didn't mean Algebra vs. Geometry or anything like that. But rather "how". The strictly mathematical method of: definition - theorem - proof - (corollary/lemma/proposition) vs. a more application specific "here is how you solve a PDE and this is how you calculate a coordinate transformations matrix.
– Max
Feb 14 at 10:42
• As for the theorem-lemma-proof style it's probably much more culture dependent than ppl realize. Ramanujan did almost none of it. He's one of the all time great mathematicians. And as far as he was concerned the supreme Goddess was dictating the results in his dreams. What does that mean? How do we replicate that?? No idea! But one thing is absolutely clear: He was not following the standard math-paradigm. Which inexorably means that the standard paradigm is only contingently but not necessarily related to actual math
– Rusi
Feb 15 at 15:11