Answers.Body: <p>There is a big controversy about the <em>purpose</em> of &quot;Computer Science&quot; education specifically.  This controversy has become hotter the the last few decades as CS has come to the fore as an important field.</p>
  <ul>
  <li>One camp feel that &quot;Computer Science&quot; is akin to &quot;programming&quot;, 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.</li>
  <li>The other camp feels that &quot;Computer Science&quot; 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.</li>
  </ul>
  <p>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 &quot;programming&quot; 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!)</p>
  <p>Such a &quot;programming&quot; major would overlap to some degree with &quot;computer science&quot; majors, though that is hardly a unique situation.  There are plenty of university majors with a fair amount of overlap.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-19T04:51:12.563Z
Answers.Text: Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/132445/discussion-on-answer-by-ben-i-what-controversies-in-computer-science-education).
Answers.UserDisplayName: Ben I.
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-31T02:10:59.347Z
Answers.Text: Undergrad: programming, grad: theory. Of course you have to start with some background info at the beginning...
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-15T20:43:43.783Z
Answers.LastActivityDate: 2021-12-15T20:43:43.783Z
Answers.UserDisplayName: Ben I.
Answers.Body: <p>I just did a quick scan of the SIGCSE-MEMBERS mailing list for the past year and nothing stands out.</p>
  <p>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.</p>
  <p>There was a thread there on whether a variable is a &quot;box&quot; or a &quot;label&quot; with proponents of each side (Go Labels).</p>
  <p>Most have decided that the proper &quot;current&quot; paradigm is OO, but with some minor defections to functional programming.</p>
  <p>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.</p>
  <p>I see some discussion about whether using a sophisticated IDE or the command line is preferable.</p>
  <p>There is constant discussion, but not controversy, on inclusion in CS education.</p>
  <p>There is discussion about including more AI and Big Data, as you would expect.</p>
  <p>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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-15T21:11:52.740Z
Answers.Text: 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!
Answers.UserDisplayName: Robert Columbia
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T09:04:29.447Z
Answers.Text: your answer is one-of-a-kind, you have posted a lot of "A vs B" things. That is great, because this question isn't expecting one completed answer, let alone, what kind of "controversies" they are.
  
  Pretty good you actually read the mailing list.
Answers.UserDisplayName: FriendlyFire
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T11:01:11.360Z
Answers.Text: @VScode_fanboy Exactly. Upvoted because this is not just anecdotal or a subjective opinion.
Answers.UserDisplayName: Peter - Reinstate Monica
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T15:59:59.010Z
Answers.Text: @Peter-ReinstateMonica thanks, first comment like this.
Answers.UserDisplayName: FriendlyFire
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T16:04:44.460Z
Answers.Text: "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!
Answers.UserDisplayName: Mason Wheeler
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T17:02:25.633Z
Answers.Text: IDE better for what? Everyday programming work, of course. Understanding what happens (compilation, linkage, execution, seamless project management, ...) is another question.
Answers.UserDisplayName: Michel Billaud
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T20:15:03.380Z
Answers.Text: @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.)
Answers.UserDisplayName: Peter - Reinstate Monica
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T00:25:55.290Z
Answers.Text: @Peter-ReinstateMonica That's a common myth that empirical data suggests is *just not true,* and that's been known to be false for decades. "We’ve done a cool $50 million of R&D on the Apple Human Interface. We discovered, among other things, two pertinent facts: *Test subjects consistently report that keyboarding is faster than mousing. *The stopwatch consistently proves mousing is faster than keyboarding. This contradiction between user-experience and reality apparently forms the basis for many user/developers’ belief that the keyboard is faster." -- https://bit.ly/3yCqxt5, published in 1989
Answers.UserDisplayName: Mason Wheeler
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T00:30:23.867Z
Answers.Text: @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.
Answers.UserDisplayName: Peter - Reinstate Monica
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T11:33:38.397Z
Answers.Text: To the CLI-IDE arguers  : <tongue-in-cheek>Do show me a programmer who writes their programs with *only* a mouse. [Hint: Synonym for "write" is??] Applies more strongly for an author writing a book. And even more for a musician preparing scores</tongue-in-cheek> On a more serious note *IDE-command-line* dichotomy is really the *IDE-language* dichotomy. See [my answer](https://cseducators.stackexchange.com/a/7165/8837)
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T12:13:11.650Z
Answers.Text: @MasonWheeler: Wow, Apple compared apples to oranges 30 years ago, and declared that apples are better. Incredible! Seriously, though, depending on what you want to do, VisualStudio/Netbeans/Eclipse/Pycharm will undeniably be the best tools, but for other tasks, it will be hard to beat zsh+ssh+git+(vim or emacs)+plugins+.... Many tasks won't even be possible with just the mouse.
Answers.UserDisplayName: Eric Duminil
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T12:41:37.580Z
Answers.Text: @EricDuminil I'd say it's not so much apples vs oranges as users vs programmers that people fail to get. Let's grant that **for the user** mouse is better then KB. Further even the most wizened programmer is more user than programmer. Eg I'm **a user** of emacs, git, firefox, linux-kernel, gnome.... Not to mention gcc, python, haskell etc etc... in hundreds... The issue is how to make a user -- pretty much anyone in 21 century -- into a programmer. That's CSE by definition. For that a KB is essential. See my comment above
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T15:09:48.333Z
Answers.Text: \*rolling eyes\* Yes, obviously nothing gets done with *only* the mouse.  The point was that *on user-interface tasks specifically,* having a GUI is not only obviously more discoverable than a CLI, it's also, counterintuitively but provably, faster as well.
Answers.UserDisplayName: Mason Wheeler
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T18:56:22.177Z
Answers.Text: At the very least, this comment thread demonstrates that IDEs are a very real contention for people who use stackexchange.
Answers.UserDisplayName: Clumsy cat
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-18T13:54:22.833Z
Answers.Text: Could you tell us the name of the prominent author and the titles of the books? Just curious.
Answers.UserDisplayName: Richard Hardy
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-01T22:07:34.037Z
Answers.Text: I read once that one fourth of all animal species are beetles, so I suppose I should get over being surprised at the continuous development of new languages and the 'balkanization'. I thought that the point of Engineering was to find and formalize deep underlying realities, not to create contestants for popularity contests? But hey, we are subject to Evolution, there is no escaping it. If our peacock feathers become non-adaptive, we will perish as surely as the prior 99% of species.
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-15T20:33:10.880Z
Answers.LastActivityDate: 2021-12-15T21:03:43.950Z
Answers.LastEditDate: 2021-12-15T21:03:43.950Z
Answers.UserDisplayName: Buffy
Answers.Body: <p>One controversy within my department is whether it is a good idea to take time to both teach about and <em>enforce</em> the very basics of coding style.  (Think indentation, variable naming, vertical spacing, or how often to comment.)</p>
  <ul>
  <li><p>One camp believes that it's vital, and that students producing &quot;poor&quot; 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 <code>str</code>, <code>data2</code>, or <code>num</code>, or use unintelligible shortenings like <code>bk</code>, <code>rf</code>, <code>t</code>, and <code>edp</code> represent a failure of instruction.</p>
  </li>
  <li><p>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.</p>
  </li>
  </ul>
  <p>(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.)</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T09:15:54.877Z
Answers.Text: 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.
Answers.UserDisplayName: pjc50
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T09:44:01.657Z
Answers.Text: 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 …
Answers.UserDisplayName: Jörg W Mittag
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T09:46:52.787Z
Answers.Text: … 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 …
Answers.UserDisplayName: Jörg W Mittag
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T09:47:10.513Z
Answers.Text: … is automatically updated to the new language version over time.
Answers.UserDisplayName: Jörg W Mittag
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-18T12:55:24.803Z
Answers.Text: @JörgWMittag: That's good. This is really the most important point about formatting : as long as every team member uses the same formatting, it really doesn't matter much how it's defined. There's nothing worse than useless commits replacing spaces by tabs or vice-versa.
Answers.UserDisplayName: Eric Duminil
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-19T05:58:33.677Z
Answers.Text: I can't believe in the 2020's we're still stuck with tab vs spaces considerations. The automatic code formatter is only one keystroke away with any IDE/text editor. And using it is a valuable help while programming. Better insist on finding appropriate names for variables classes methods etc.
Answers.UserDisplayName: Michel Billaud
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-22T21:38:36.780Z
Answers.Text: Both camps are right and wrong. Discuss style and why it is important, show students how to use a tool.
Answers.UserDisplayName: sweenish
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-04-02T07:49:50.513Z
Answers.Text: "involves carefully reading" that sounds like a good thing to me!  Being able to carefully read (and understand) your own code is a key skill when first learning to program, especially as these days students tend to like cut and pasting from on-line example code.
Answers.UserDisplayName: Dikran Marsupial
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-15T19:55:07.040Z
Answers.LastActivityDate: 2021-12-15T19:55:07.040Z
Answers.UserDisplayName: Ben I.
Answers.Body: <p>There is debate over how to respond to students' changing mental model of files and directories (as highlighted in a recent <a href="https://www.theverge.com/22684730/students-file-folder-directory-structure-education-gen-z" rel="noreferrer">Verge article</a>.) This doesn't solely affect computer science education, but it is a bit of computer science affecting education as a whole.</p>
  <p>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 &quot;in&quot; a directory and have different behavior depending on &quot;where&quot; they're executed, these being totally new concepts in their mental model of a computer.</p>
  <p>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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-31T01:57:12.177Z
Answers.Text: 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?
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-31T05:54:29.717Z
Answers.Text: Try some [Douglas Adams](https://douglasadams.com/dna/19990901-00-a.html) @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
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-31T11:34:56.383Z
Answers.Text: @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.
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-31T12:02:17.053Z
Answers.Text: @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
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-01T10:23:22.033Z
Answers.Text: @Scottrowe "*Propose something better than files and folders?*" Here's some discussion https://stackoverflow.com/questions/1575155/what-is-a-database-file-system
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-01T12:52:22.367Z
Answers.Text: @Rusi your link shows a couple Answers saying that the idea never took off. Sure, add tags and a search box. But where *are* the files you're searching for? Uber means you don't have to use GPS. GPS means you don't have to use a map. Map means you don't have to know already where something is. But, it certainly IS somewhere, and thank heaven for that!
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T16:06:01.693Z
Answers.LastActivityDate: 2021-12-16T16:06:01.693Z
Answers.UserDisplayName: Willa
Answers.Body: <p>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?</p>
  <p>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.</p>
  <p>But is that my responsibility? Should I just have done what I was told? Is there a comparison with engineers designing potentially unsafe constructions?</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T17:55:38.923Z
Answers.Text: [The Social Implications of Computing](https://cs.uwaterloo.ca//current/courses/course_descriptions/cDescr/CS492) was the best course I took in my undergrad.  This type of course should be mandatory for all CS students everywhere.
Answers.UserDisplayName: colan
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-20T00:28:39.220Z
Answers.Text: But this is nothing new. Welcome to engineering!
Answers.UserDisplayName: Zeus
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-16T14:39:48.707Z
Answers.LastActivityDate: 2021-12-16T14:39:48.707Z
Answers.UserDisplayName: David Jacobsen
Answers.Body: <h1>ACM CC2013</h1>
  <p>Excerpted from chapter 5 Introductory Courses of
  <a href="https://www.acm.org/binaries/content/assets/education/cs2013_web_final.pdf" rel="noreferrer">ACM CS Curricula 2013</a>.<br />
  Emphases added to highlight lurking controversies!</p>
  <blockquote>
  <p>In considering the <strong>changing landscape</strong> of introductory courses, we
  look at the evolution of introductory courses from CC2001 to CS2013.
  CC2001 classified introductory course sequences into six general
  models:</p>
  <ul>
  <li>Imperative-first</li>
  <li>Objects-first</li>
  <li>Functional-first</li>
  <li>Breadth-first</li>
  <li>Algorithms-first</li>
  <li>Hardware-first</li>
  </ul>
  <p>While introductory courses with these characteristic features
  certainly still exist today, we believe that advances in the field
  have led to an even <strong>more diverse set of approaches</strong> in introductory
  courses than the models set out in CC2001. Moreover, the approaches
  employed in introductory courses are <strong>in a greater state of flux.</strong></p>
  <p>An <strong>important challenge</strong> for introductory courses... : Choosing what
  to cover in introductory courses results in <strong>a set of tradeoffs</strong> that
  must be considered when trying to decide what should be covered early
  in a curriculum.</p>
  <p>A defining factor for many introductory courses is...</p>
  </blockquote>
  <h1>The choice of programming paradigm</h1>
  <blockquote>
  <p>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, <strong>the past decade has only broadened the list</strong> of
  programming languages now successfully used in introductory courses.</p>
  </blockquote>
  <p><sup>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</sup></p>
  <h1>Platform</h1>
  <blockquote>
  <p>While many introductory programming courses make use of traditional
  computing platforms (e.g., desktop/laptop computers) and are, as a
  result, somewhat “hardware agnostic,”</p>
  <p>(Yet) the past few years have seen a growing diversity in the set of
  programmable devices such as (Summarizing)</p>
  <ul>
  <li>web development</li>
  <li>mobile device (e.g., smartphone, tablet) programming</li>
  <li>specialty platforms, such as robots or game consoles</li>
  <li>physically-small, feature-restricted e.g. raspberry-pi</li>
  </ul>
  <p>In any of these cases, the use of a particular platform brings with it
  <strong>attendant choices for programming paradigms,</strong> component libraries,
  APIs, and security. Working within the software/hardware constraints
  of a given platform is a useful software-engineering skill, but also
  <strong>comes at the cost</strong> that the topics covered in the course may likewise
  be limited by the choice of platform.</p>
  </blockquote>
  <h1>The IDE-Language divide</h1>
  <p>Its 20 years since Oliver Steele noted the <a href="https://blog.osteele.com/2004/11/ides" rel="noreferrer">IDE-Language divide</a></p>
  <p>That the issue remains current can be seen <a href="https://cseducators.stackexchange.com/questions/7154/what-controversies-in-computer-science-education-exist-today/7164#comment18530_7158">right here!!</a></p>
  <p>Closely related to the obvious ease + non-obvious disadvantages of using <a href="http://www.paulgraham.com/avg.html" rel="noreferrer">Blub Programming Languages</a> in CS-education.</p>
  <p><sup>Note: When Paul Graham wrote that 20 years ago, the archetypal blub language was Java. Today I'd say it's python.</sup></p>
  <h1>CS: Algorithms? Or Data?</h1>
  <p>ACM curriculum 89 boldly stated</p>
  <blockquote>
  <p>The discipline of computing is the systematic study of algorithmic processes</p>
  </blockquote>
  <p>Consider how far we have come from that to today's world of machine learning: in short:</p>
  <p><strong>CS: Algorithms?? Or Data???</strong></p>
  <p>To be fair in the 90s Peter Naur tried to rename <em>computer science</em> to <em>datalogy</em>. Evidently he was not very successful then...</p>
  <p>Here is a more recent one: <a href="https://www.cs.cmu.edu/%7Erwh/papers/secp/secp.pdf" rel="noreferrer">A notable CMU prof</a> tentatively suggests that:</p>
  <blockquote>
  <p>Everyone knows that algorithms as we learned them at school are irrelevant to practice</p>
  </blockquote>
  <p><sup>Note the transition: 1990: CS = algorithms. 2001: algorithmic is one out of six contenders. 2014: Are algorithms relevant to CS?</sup></p>
  <h1>Does IT matter??</h1>
  <p>At the broadest level: In the 21 century <a href="https://hbr.org/2003/05/it-doesnt-matter" rel="noreferrer">does IT really matter?</a></p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-31T01:47:29.490Z
Answers.Text: 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?
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-31T02:32:50.300Z
Answers.Text: 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?
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-31T11:16:00.887Z
Answers.Text: @Scottrowe You're describing an intelligent "full-stack developer" -- a term which Graham didn't have. Re [Lisp equiv](https://docs.racket-lang.org/db/index.html).
  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](https://quotepark.com/quotes/1893866-alan-kay-i-fear-as-far-as-i-can-tell-that-most-undergradu) applies to python equally today
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-11T11:11:09.767Z
Answers.Text: 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?
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-11T21:43:57.627Z
Answers.Text: @ScottRowe "hon"?
Answers.UserDisplayName: Victor Eijkhout
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T05:18:59.377Z
Answers.Text: @ScottRowe: «Strident ⇒ Doesn't matter» Fine so far.
  But then beyond that...
  Ok lets try an experiment: Take your five favorite Genesis-created ops: "fetch/store/arithmetic/test/jump" Pls open up some machine nearby and show them to me. While I'll open up a dictionary (you can make the choice of dict to obviate any possible accusation that I'm slanting the experiment) and I'll show them to you. My points: (a) What you consider fundamental, most of us see as linguistic happenstance.
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T05:32:19.237Z
Answers.Text: (b) Everyone can only ever have language-mediated experience. (See [Wittgen](https://slate.com/human-interest/2015/09/take-a-wittgenstein-class-he-explains-the-problems-of-translating-language-computer-science-and-artificial-intelligence.html) or [Whorf](https://en.wikipedia.org/wiki/Linguistic_relativity)) The diff between machine-folks (mf) and language-folks (lf) is that while the mfs are blissfully unaware of their languages' unconsious mediations, we lfs collect multiple languages precisely to mitigate this inexorable limitation of human cognition. I invite you to choose your camp
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T13:24:29.067Z
Answers.Text: Mmm, most of human experience has nothing to do with language. Most arts, crafts, activities... have no language component. In one of my books I said: "*The point has been made that after the development of paper, writing and math, much of the world's activity has revolved around linear, visual and symbolic reasoning. That is such a small subset of our capacity as to be absurd.*" Language is just not that important. Our egos *think* it is. We should doubt every single thing that they say.
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T13:47:47.140Z
Answers.Text: Sit for a meditation retreat with a competent adept @ScottRowe. And you will see how we **label every single thing**.  When one stops doing it and just stays with the sensation its a wonderfully liberating experience.  But that's a rare state.  You make out that that is the norm. It may be... for cats or dolphins. It may even be that in some sense they're  better off than us. **But they're not us!!!**.
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T13:54:04.447Z
Answers.Text: Ive spoken of the normal lower levels (words, thoughts) and the higher-than language levels (insight, transcendence) https://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
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T14:32:56.683Z
Answers.Text: It is interesting, your post seems to say that the things we think matter, do not. So... What does matter? Only Insight, in my opinion. And, "You can't teach insight", to paraphrase the famous basketball coach. Your link to Dijkstra said he thought that in 1972. So what is CS teaching? What is any teaching that is not apprenticeship and imitation? I am actually asking, not being snarky. When I was teaching a few years ago, I talked with my more experienced co-instructor about this a lot.
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T14:47:32.040Z
Answers.Text: @ScottRowe Continue on [chat](https://chat.stackexchange.com/transcript/59174/2022/2/12)
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-17T10:16:25.077Z
Answers.LastActivityDate: 2021-12-17T14:58:41.137Z
Answers.LastEditDate: 2021-12-17T14:58:41.137Z
Answers.UserDisplayName: Rushi
Answers.Body: <p>One thing I haven't seen from any other answer: How much and what kind of math should be taught?</p>
  <p>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.</p>
  <p>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...</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T05:40:39.947Z
Answers.Text: +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*
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-12T14:42:21.113Z
Answers.Text: 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)
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-14T10:35:41.453Z
Answers.Text: 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.
Answers.UserDisplayName: Max
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-14T10:42:33.903Z
Answers.Text: 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.
Answers.UserDisplayName: Max
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-15T15:04:00.403Z
Answers.Text: The relation between math & CS **is always** fraught. How old is the word "compute"?  "Variable"? Etc What is their "provenance"?  **UNTIL TURING** a comput-er was a mathematician doing a computation. Turing's contrib was to home into the mechanizable aspects. So CS= math is an error but minor compared to CS= hw engineering
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-15T15:11:57.263Z
Answers.Text: 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
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-15T16:51:59.103Z
Answers.Text: @Rusi It seems that we each worship a different Goddess.
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-15T17:08:48.027Z
Answers.Text: @ScottRowe I'd sure love to have her phone number!
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-16T07:47:06.073Z
Answers.Text: @Rusi, Not a notification I was expecteing on a post in CSE ;)
Answers.UserDisplayName: Max
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-16T13:00:20.103Z
Answers.Text:  Continuing on chat https://chat.stackexchange.com/rooms/59174/the-classroom. Pls join if you like
Answers.UserDisplayName: Rushi
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-02-11T14:12:56.643Z
Answers.LastActivityDate: 2022-02-11T14:12:56.643Z
Answers.UserDisplayName: Max
Body: <p>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 (&quot;real soon now&quot;) transition from using C++ as the programming language of instruction to Java represented a loosening of standards — i.e. that Java was &quot;too easy&quot; 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 <em>right</em> in C# was mind-blowing for me — now it finally <em>made sense</em> why programming to an interface was how polymorphism worked.</p>
  <p>Are there any similar controversies <em>today</em> in terms of what a computer science education should consist of or how it should be delivered?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-16T11:04:50.720Z
Comments.Text: 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).
Comments.UserDisplayName: Peter - Reinstate Monica
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-16T13:41:04.157Z
Comments.Text: My experience, also roughly 20 years ago, was I taught OOP and abstract interfaces in C++ just fine; then Java was switched to purely since it was so hot; then (I believe) 5 years later we found out students were weak on pointers. The controversy was "why don't we teach in the language our students will probably use?"
Comments.UserDisplayName: Owen Reynolds
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-16T16:08:44.980Z
Comments.Text: @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?
Comments.UserDisplayName: Mason Wheeler
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-16T16:59:57.797Z
Comments.Text: Since we gave up with Fortran, students are weak on gotos.
Comments.UserDisplayName: Michel Billaud
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-16T19:30:35.917Z
Comments.Text: 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.
Comments.UserDisplayName: user3067860
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-17T07:04:11.807Z
Comments.Text: @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.
Comments.UserDisplayName: Zeus
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-17T19:00:07.023Z
Comments.Text: @MichelBillaud commerce may have given up on Fortran. Physics is still thinks it's hot stuff. Actually, just last week I had to remember how to load an F77 compiler on the university cluster.
Comments.UserDisplayName: Clumsy cat
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-17T22:26:33.473Z
Comments.Text: @MichelBillaud I sincerely hope that's a joke. Gotos are a bad idea in any language. And Fortran continues to evolve. It's now up to the 2018 standard, after 2003/8, after 90/95.
Comments.UserDisplayName: Victor Eijkhout
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-18T10:55:16.207Z
Comments.Text: Not sure how much this is controversial vs. just almost-unanimously-disagreed with; but there is an argument by Andrew Luxton-Reilly, published with the provocative title [*Learning to Program is Easy*](https://dl.acm.org/doi/abs/10.1145/2899415.2899432), that the reason so many students fail introductory programming courses is simply because the standards are too high, and therefore we should lower our expectations of what students will be capable of after an introductory course.
Comments.UserDisplayName: kaya3
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-12-19T05:44:51.270Z
Comments.Text: @VictorEijkout the point is, within a limited number of hours, if you teach more subject A, you'll teach less B. And some people will complain students have more difficulties with the very important definitely fundamental subject B taught for decades.
Comments.UserDisplayName: Michel Billaud
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-02-11T13:42:31.883Z
Comments.Text: @MasonWheeler lets not act like Fortune500 companies are the benchmark here ;) Half the banking and insurance industry is still running on COBOL code from the 70s or so.
Comments.UserDisplayName: Max
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-02-12T04:18:17.720Z
Comments.Text: Not sure what point you're trying to drive @Max...? Its arguable Java, Cobol are in roughly a similar obsolescence category. The other extreme of bleeding-edge-or-bust runs thusly https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f. Better?
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-04-02T07:42:45.193Z
Comments.Text: On the other hand, I teach Java in year one and C/C++ in year two.  Many students have difficulty with pointers in C/C++, which suggests they were using references in Java without really understanding what they were doing, despite discussing what references were for, with lots of examples, in year one and explaining in detail the differences and similarities between Java references and C/C++ pointers (and later C++ references) in year two.  I suspect some students form a mental model of programming very early and have difficulty understanding different models when introduced  later.
Comments.UserDisplayName: Dikran Marsupial
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-04-02T07:44:33.230Z
Comments.Text: @MichelBillaud even worse, since giving up on Intercal students have become weak on come froms!
Comments.UserDisplayName: Dikran Marsupial
Tags: <curriculum-design><undergraduate>
Title: What controversies in computer science education exist today?
ThreadText: # What controversies in computer science education exist today?
  
  (Asked by: username_0 on 2021-12-15)
  
  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?
  
  **Tags:** curriculum-design, undergraduate
  
  > **Comments:**
  > **username_1**: 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).  
  > **username_2**: My experience, also roughly 20 years ago, was I taught OOP and abstract interfaces in C++ just fine; then Java was switched to purely since it was so hot; then (I believe) 5 years later we found out students were weak on pointers. The controversy was "why don't we teach in the language our students will probably use?"  
  > **username_3**: @username_1-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?  
  > **username_4**: Since we gave up with Fortran, students are weak on gotos.  
  > **username_5**: 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.  
  > **username_6**: @username_3, 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.  
  > **username_7**: @username_4 commerce may have given up on Fortran. Physics is still thinks it's hot stuff. Actually, just last week I had to remember how to load an F77 compiler on the university cluster.  
  > **username_8**: @username_4 I sincerely hope that's a joke. Gotos are a bad idea in any language. And Fortran continues to evolve. It's now up to the 2018 standard, after 2003/8, after 90/95.  
  > **username_9**: Not sure how much this is controversial vs. just almost-unanimously-disagreed with; but there is an argument by Andrew Luxton-Reilly, published with the provocative title [*Learning to Program is Easy*](https://dl.acm.org/doi/abs/10.1145/2899415.2899432), that the reason so many students fail introductory programming courses is simply because the standards are too high, and therefore we should lower our expectations of what students will be capable of after an introductory course.  
  > **username_4**: @VictorEijkout the point is, within a limited number of hours, if you teach more subject A, you'll teach less B. And some people will complain students have more difficulties with the very important definitely fundamental subject B taught for decades.  
  > **username_10**: @username_3 lets not act like Fortune500 companies are the benchmark here ;) Half the banking and insurance industry is still running on COBOL code from the 70s or so.  
  > **username_11**: Not sure what point you're trying to drive @username_10...? Its arguable Java, Cobol are in roughly a similar obsolescence category. The other extreme of bleeding-edge-or-bust runs thusly https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f. Better?  
  > **username_12**: On the other hand, I teach Java in year one and C/C++ in year two.  Many students have difficulty with pointers in C/C++, which suggests they were using references in Java without really understanding what they were doing, despite discussing what references were for, with lots of examples, in year one and explaining in detail the differences and similarities between Java references and C/C++ pointers (and later C++ references) in year two.  I suspect some students form a mental model of programming very early and have difficulty understanding different models when introduced  later.  
  > **username_12**: @username_4 even worse, since giving up on Intercal students have become weak on come froms!  
  
  ---
  
  ## 7 answers
  
  ### Answer by username_13 on 2021-12-15. Score: 55
  
  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:**
  > **username_13**: Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/132445/discussion-on-answer-by-ben-i-what-controversies-in-computer-science-education).  
  > **username_14**: Undergrad: programming, grad: theory. Of course you have to start with some background info at the beginning...  
  
  ---
  
  ### Answer by username_15 on 2021-12-15. Score: 27
  
  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.
  
  > **Comments:**
  > **username_0**: 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!  
  > **username_16**: your answer is one-of-a-kind, you have posted a lot of "A vs B" things. That is great, because this question isn't expecting one completed answer, let alone, what kind of "controversies" they are.  Pretty good you actually read the mailing list.  
  > **username_1**: @VScode_fanboy Exactly. Upvoted because this is not just anecdotal or a subjective opinion.  
  > **username_16**: @username_1-ReinstateMonica thanks, first comment like this.  
  > **username_3**: "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!  
  > **username_4**: IDE better for what? Everyday programming work, of course. Understanding what happens (compilation, linkage, execution, seamless project management, ...) is another question.  
  > **username_1**: @username_3 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.)  
  > **username_3**: @username_1-ReinstateMonica That's a common myth that empirical data suggests is *just not true,* and that's been known to be false for decades. "We’ve done a cool $50 million of R&D on the Apple Human Interface. We discovered, among other things, two pertinent facts: *Test subjects consistently report that keyboarding is faster than mousing. *The stopwatch consistently proves mousing is faster than keyboarding. This contradiction between user-experience and reality apparently forms the basis for many user/developers’ belief that the keyboard is faster." -- https://bit.ly/3yCqxt5, published in 1989  
  > **username_1**: @username_3 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.  
  > **username_11**: To the CLI-IDE arguers  : <tongue-in-cheek>Do show me a programmer who writes their programs with *only* a mouse. [Hint: Synonym for "write" is??] Applies more strongly for an author writing a book. And even more for a musician preparing scores</tongue-in-cheek> On a more serious note *IDE-command-line* dichotomy is really the *IDE-language* dichotomy. See [my answer](https://cseducators.stackexchange.com/a/7165/8837)  
  > **username_17**: @username_3: Wow, Apple compared apples to oranges 30 years ago, and declared that apples are better. Incredible! Seriously, though, depending on what you want to do, VisualStudio/Netbeans/Eclipse/Pycharm will undeniably be the best tools, but for other tasks, it will be hard to beat zsh+ssh+git+(vim or emacs)+plugins+.... Many tasks won't even be possible with just the mouse.  
  > **username_11**: @username_17 I'd say it's not so much apples vs oranges as users vs programmers that people fail to get. Let's grant that **for the user** mouse is better then KB. Further even the most wizened programmer is more user than programmer. Eg I'm **a user** of emacs, git, firefox, linux-kernel, gnome.... Not to mention gcc, python, haskell etc etc... in hundreds... The issue is how to make a user -- pretty much anyone in 21 century -- into a programmer. That's CSE by definition. For that a KB is essential. See my comment above  
  > **username_3**: \*rolling eyes\* Yes, obviously nothing gets done with *only* the mouse.  The point was that *on user-interface tasks specifically,* having a GUI is not only obviously more discoverable than a CLI, it's also, counterintuitively but provably, faster as well.  
  > **username_7**: At the very least, this comment thread demonstrates that IDEs are a very real contention for people who use stackexchange.  
  > **username_18**: Could you tell us the name of the prominent author and the titles of the books? Just curious.  
  > **username_14**: I read once that one fourth of all animal species are beetles, so I suppose I should get over being surprised at the continuous development of new languages and the 'balkanization'. I thought that the point of Engineering was to find and formalize deep underlying realities, not to create contestants for popularity contests? But hey, we are subject to Evolution, there is no escaping it. If our peacock feathers become non-adaptive, we will perish as surely as the prior 99% of species.  
  
  ---
  
  ### Answer by username_13 on 2021-12-15. Score: 19
  
  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.)
  
  > **Comments:**
  > **username_19**: 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.  
  > **username_20**: 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 …  
  > **username_20**: … 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 …  
  > **username_20**: … is automatically updated to the new language version over time.  
  > **username_17**: @username_20: That's good. This is really the most important point about formatting : as long as every team member uses the same formatting, it really doesn't matter much how it's defined. There's nothing worse than useless commits replacing spaces by tabs or vice-versa.  
  > **username_4**: I can't believe in the 2020's we're still stuck with tab vs spaces considerations. The automatic code formatter is only one keystroke away with any IDE/text editor. And using it is a valuable help while programming. Better insist on finding appropriate names for variables classes methods etc.  
  > **username_21**: Both camps are right and wrong. Discuss style and why it is important, show students how to use a tool.  
  > **username_12**: "involves carefully reading" that sounds like a good thing to me!  Being able to carefully read (and understand) your own code is a key skill when first learning to program, especially as these days students tend to like cut and pasting from on-line example code.  
  
  ---
  
  ### Answer by username_22 on 2021-12-16. Score: 16
  
  There is debate over how to respond to students' changing mental model of files and directories (as highlighted in a recent [Verge article](https://www.theverge.com/22684730/students-file-folder-directory-structure-education-gen-z).) 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.
  
  > **Comments:**
  > **username_14**: 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?  
  > **username_11**: Try some [Douglas Adams](https://douglasadams.com/dna/19990901-00-a.html) @username_14 -- 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  
  > **username_14**: @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.  
  > **username_11**: @username_14 *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  
  > **username_11**: @Scottrowe "*Propose something better than files and folders?*" Here's some discussion https://stackoverflow.com/questions/1575155/what-is-a-database-file-system  
  > **username_14**: @Rusi your link shows a couple Answers saying that the idea never took off. Sure, add tags and a search box. But where *are* the files you're searching for? Uber means you don't have to use GPS. GPS means you don't have to use a map. Map means you don't have to know already where something is. But, it certainly IS somewhere, and thank heaven for that!  
  
  ---
  
  ### Answer by username_23 on 2021-12-16. Score: 7
  
  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?
  
  > **Comments:**
  > **username_24**: [The Social Implications of Computing](https://cs.uwaterloo.ca//current/courses/course_descriptions/cDescr/CS492) was the best course I took in my undergrad.  This type of course should be mandatory for all CS students everywhere.  
  > **username_6**: But this is nothing new. Welcome to engineering!  
  
  ---
  
  ### Answer by username_11 on 2021-12-17. Score: 7
  
  # ACM CC2013
  
  Excerpted from chapter 5 Introductory Courses of
  [ACM CS Curricula 2013](https://www.acm.org/binaries/content/assets/education/cs2013_web_final.pdf).  
  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
  > * Breadth-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](https://blog.osteele.com/2004/11/ides)
  
  That the issue remains current can be seen [right here!!](https://cseducators.stackexchange.com/questions/7154/what-controversies-in-computer-science-education-exist-today/7164#comment18530_7158)
  
  Closely related to the obvious ease + non-obvious disadvantages of using [Blub Programming Languages](http://www.paulgraham.com/avg.html) 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 username_1 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](https://www.cs.cmu.edu/%7Erwh/papers/secp/secp.pdf) 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?](https://hbr.org/2003/05/it-doesnt-matter)
  
  > **Comments:**
  > **username_14**: 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?  
  > **username_14**: 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?  
  > **username_11**: @Scottrowe You're describing an intelligent "full-stack developer" -- a term which Graham didn't have. Re [Lisp equiv](https://docs.racket-lang.org/db/index.html). 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](https://quotepark.com/quotes/1893866-alan-kay-i-fear-as-far-as-i-can-tell-that-most-undergradu) applies to python equally today  
  > **username_14**: 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?  
  > **username_8**: @username_14 "hon"?  
  > **username_11**: @username_14: «Strident ⇒ Doesn't matter» Fine so far. But then beyond that... Ok lets try an experiment: Take your five favorite Genesis-created ops: "fetch/store/arithmetic/test/jump" Pls open up some machine nearby and show them to me. While I'll open up a dictionary (you can make the choice of dict to obviate any possible accusation that I'm slanting the experiment) and I'll show them to you. My points: (a) What you consider fundamental, most of us see as linguistic happenstance.  
  > **username_11**: (b) Everyone can only ever have language-mediated experience. (See [Wittgen](https://slate.com/human-interest/2015/09/take-a-wittgenstein-class-he-explains-the-problems-of-translating-language-computer-science-and-artificial-intelligence.html) or [Whorf](https://en.wikipedia.org/wiki/Linguistic_relativity)) The diff between machine-folks (mf) and language-folks (lf) is that while the mfs are blissfully unaware of their languages' unconsious mediations, we lfs collect multiple languages precisely to mitigate this inexorable limitation of human cognition. I invite you to choose your camp  
  > **username_14**: Mmm, most of human experience has nothing to do with language. Most arts, crafts, activities... have no language component. In one of my books I said: "*The point has been made that after the development of paper, writing and math, much of the world's activity has revolved around linear, visual and symbolic reasoning. That is such a small subset of our capacity as to be absurd.*" Language is just not that important. Our egos *think* it is. We should doubt every single thing that they say.  
  > **username_11**: Sit for a meditation retreat with a competent adept @username_14. And you will see how we **label every single thing**.  When one stops doing it and just stays with the sensation its a wonderfully liberating experience.  But that's a rare state.  You make out that that is the norm. It may be... for cats or dolphins. It may even be that in some sense they're  better off than us. **But they're not us!!!**.  
  > **username_11**: Ive spoken of the normal lower levels (words, thoughts) and the higher-than language levels (insight, transcendence) https://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  
  > **username_14**: It is interesting, your post seems to say that the things we think matter, do not. So... What does matter? Only Insight, in my opinion. And, "You can't teach insight", to paraphrase the famous basketball coach. Your link to Dijkstra said he thought that in 1972. So what is CS teaching? What is any teaching that is not apprenticeship and imitation? I am actually asking, not being snarky. When I was teaching a few years ago, I talked with my more experienced co-instructor about this a lot.  
  > **username_11**: @username_14 Continue on [chat](https://chat.stackexchange.com/transcript/59174/2022/2/12)  
  
  ---
  
  ### Answer by username_10 on 2022-02-11. Score: 6
  
  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...
  
  > **Comments:**
  > **username_11**: +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*  
  > **username_14**: 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)  
  > **username_10**: 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.  
  > **username_10**: 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.  
  > **username_11**: The relation between math & CS **is always** fraught. How old is the word "compute"?  "Variable"? Etc What is their "provenance"?  **UNTIL TURING** a comput-er was a mathematician doing a computation. Turing's contrib was to home into the mechanizable aspects. So CS= math is an error but minor compared to CS= hw engineering  
  > **username_11**: 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  
  > **username_14**: @Rusi It seems that we each worship a different Goddess.  
  > **username_11**: @username_14 I'd sure love to have her phone number!  
  > **username_10**: @Rusi, Not a notification I was expecteing on a post in CSE ;)  
  > **username_11**:  Continuing on chat https://chat.stackexchange.com/rooms/59174/the-classroom. Pls join if you like  
  
  ---
  
  