1. 24
  1.  

  2. 8

    I’m not too convinced it has been misnamed. When referring to engineering with tools given to us by Computer Science, I’ve heard most people just say Software Engineering. Keeping “science” in the name highlights all of the (very much non-engineering) theoretical scientific parts of CS: automata theory, type theory, PLT, etc. that of course have their applications within Software Engineering (do Set Theory & Category Theory fit here? I usually throw them together with the “theoretical CS topics” I study).

    1. 3

      If anything, I think the discipline has been misnamed for the very opposite reason than what the author of the article suggests. There are of course exceptions, because that’s how language works, but I generally interpret “science” as describing a discipline that seeks to develop increasingly accurate models of empirical phenomena via experimentation. Those theoretical constructs you mention don’t require any reference to the empirical, because like any purely mathematical object, their development proceeds according to the implications and constraints of logic. Something like “computational mathematics” seems more apt as a descriptor of that line of study, and the study of how those objects inform the development of real systems of computers seems best described as “engineering,” a field of inquiry that’s clearly related but has distinct aims in terms of which kinds of investigation it prioritizes.

      I wonder if the semantic ambiguities here might be due to some latent sense among practitioners that being an “applied” discipline makes that discipline lesser, which I think is an easier fiction to maintain when even the engineered artifacts of software seem to exist without recourse to the physical world (of course they do in practice, since some hardware needs to store and run that software, but it’s easy to pretend that that’s not the case).

      1. 3

        The question of P and NP is, on its own, enough to justify the word “science”. We have only the barest idea of how to approach the problem mathematically, and most of our progress has been empirical. Quoting Aaronson:

        I like to joke that, if computer scientists had been physicists, we’d simply have declared P ≠ NP to be an observed law of Nature, analogous to the laws of thermodynamics. A Nobel Prize would even be given for the discovery of that law. (And in the unlikely event that someone later proved P = NP, a second Nobel Prize would be awarded for the law’s overthrow.)

        1. 1

          I dunno, man, that doesn’t feel very convincing. Asking earnestly: how is the question of P/NP (non-)equivalence as it stands now any different in that respect from the Poincaré conjecture before its having been proven? The latter spent a long time seeming intuitively true, bolstered by a number of exemplary spaces, but it was only by a process of deduction subject only to the constraints of logical inference that it was finally proven. It seems evident to me that, should any definitive answer concerning the relationship between P and NP ever be discovered, it will only ever be discovered in a similar way, only ever bound by logical constraints and not empirical ones. Aaronson’s position on the matter seems entirely consistent with that outlook, since I read his “joke” as precisely that: a joke. Computer scientists are clearly not physicists, and so the means by which they establish “laws” must necessarily differ. Computer “scientists,” then, are mathematicians after all, which is neither a benediction nor an indictment, just a statement of fact.

          1. 1

            The choice of algorithms and data structures for daily work, including everything we’ve ever built, would be influenced by the relationship between P and NP in ways which we haven’t yet discovered how to imagine. It’s also influenced by the relationship between P and BPP, which could alter when Monte Carlo algorithms would be useful. This is (a portion of) what makes it distinct from the other prize problems.

            I don’t have a list handy, but register allocation and concurrent scheduling are two common situations where a low-effort greedy algorithm empirically handles typical cases of NP-complete problems well. I would empirically point out that every backpack a human is carrying in the wild is an instance of a solved knapsack problem, despite all formal evidence suggesting that even average attempts to fill a backpack should be hard. This is worth investigating further.

            1. 1

              Sure, I don’t by any means reject the idea that resolving the question of P equaling NP or not would have many concrete ramifications, but my point is that I think its having many practical applications is orthogonal to the question of its epistemological nature: as a proposition, it has the possibility of being proven correct (or its negation does, depending), which is fundamentally not possible for theories that model physical phenomena.

              1. 1

                I will defer to Aaronson again for a serious survey. The takeaway I want to highlight is that computational complexity theory is interested not just in the relationships between P, NP, BPP, BQP, etc. but also in which complexity classes accurately describe which physical machines. Recall that quantum logic was created as a theory which explained why some empirical observations did not agree with classical physics; if this is science, then so is our description of the class NP in response to finding thousands of NP-complete problems in the wild. (And just like how quantum logic was required to justify the work which led to the observation of the Higgs boson, analysis of NP was required in order to formulate BQP, leading to quantum computers.)

    2. 5

      I like Hal Abelson’s argument from the beginning of SICP that really most of what one does that’s categorized as computer science is ​more like formal procedural specification.

      Structure and Interpretation of Computer Programs lesson 1 - the first couple of minutes (everything from the end of the music to the beginning of minute four) covers Abelson’s bit about the essence of the discipline.

      I do think that neglects some specifically computer (as in device) related aspects of the discipline, but Abelson overall has an excellent point. I don’t know that I’ve seen anything better in the intervening decades. He also mentions in passing that there’s an art to computer science, as well as the engineering side of the discipline. While I like Zemanek’s definition, I think it’s a bit weaker than Abelson’s.

      1. 3

        It must be so easy to use that a full professor can use it

        Is “professor” Fred Brooks’ equivalent of the way we talk about a user as “grandma”? That’s pretty interesting!

        1. 3

          In French and German it makes more sense: Informatique/Informatik. An instance of how language can shape your perception.

          1. 2

            This always seemed excessively focused on the object of the discipline (information) rather than the discipline itself. Just as I think the term “computer science” focuses on the means used by the discipline rather than the discipline itself.

            1. 1

              “Informatics”, then, perhaps?

              I kind of like that.

              1. 3

                It’s kind of already a thing - I work at a “School of Informatics”. Most university departments in anglophone countries still call themselves computer science though

                1. 1

                  It’s kind of a silly term – one of the most overloaded ones ever:

                  https://en.wikipedia.org/wiki/Informatics_(disambiguation)

                  1. 1

                    Engineering informatics (not to be confused with informatics engineering, Southern European term)

                    That made me laugh. In general though, I think it doesn’t really matter what it’s called. Computer science or Informatik here in Germany, people know what you are talking about and that is good enough.

              2. 3

                I believe that the thing called “computer science” does have its place and has the correct name. Language theory like the Chomsky grammars [1], research about computational complexity [2] and algorithm design are actually quite pure sciences that have more to do with mathematics than with programming or engineering in general. You can make significant contributions in these fields with pen and paper, no computer needed. Of course, few people actually work at this level. Your local coding bootcamp has little to do with computer science because it focuses on applied contemporary technology. Either way, science and engineering are married together, one example of that is troubleshooting a difficult bug which is a process that requires the application of the scientific method and is conceptually identical to figuring out complex processes in nature.

                [1] https://en.wikipedia.org/wiki/Chomsky_hierarchy

                [2] https://en.wikipedia.org/wiki/Computational_complexity

                1. 3

                  “Computer science” is a melange of disciplines with little in common, which fall under the same rubric for purely historical reasons. Complexity theory or formal algorithms logically belongs in the mathematics department, while systems or software engineering research logically belongs in…well, engineering.

                  1. 2

                    Agreed – I’ve long felt that the field called “Computer Science” largely consists of the weird leftover odds and ends that fell off the trucks of other fields. Much of it is engineering and math, but there are also bits of psychology (HCI), biology (bioinformatics), statistics (ML/AI), etc.

                2. 2

                  Is a constructive mathematician an engineer? It is true that our discipline is constructive, but that does not imply that we are not mathematicians.

                  1. 2

                    Just because we’re not good at it yet, doesn’t mean it’s not science. Compared to everything else, we basically started computing this morning.

                    1. 2

                      I like this paper [2010, PDF], which argues for a discipline called Computing:

                      What is the core of Computing? This paper defines the discipline of computing as centered around the notion of modeling, especially those models that are automatable and automatically manipulable. We argue that this central idea crucially connects models with languages and machines rather than focusing on and around computational artifacts, and that it admits a very broad set of fields while still distinguishing the discipline from mathematics, engineering and science. The resulting computational curriculum focuses on modeling, scales and limits, simulation, abstraction, and automation as key components of a computationalist mindset.

                      1. 1

                        The scientist builds in order to study; the engineer studies in order to build.

                        This is the most succinct way I’ve seen of summarizing this distinction. Will definitely be quoting this!

                        Another random thought: To me, one of the greatest and most fascinating things about computing is that unlike other disciplines that started with concrete, physical events and moved towards abstract systems, computing started with abstract systems and grew into the physical world. There are no binary search trees in nature (or in the circuits of a computer for that matter), but they are entities that have real impact on the world when brought to life through a computer.

                        1. 1

                          Maybe Computer Engineering.

                          About understanding and creating computers and software for them.

                          1. 1

                            This reminds me quite much of Dijkstra’s EWD 924, On a cultural gap. Dijkstra makes the same complaint about the name “Computer Science”, although his conclusion is quite different from Brooks’. He emphasizes the mathematical nature of programming and notices how far apart math and CS culture are in spite of this similarity (the so-called cultural gap).

                            Of course, Dijkstra was arguably closer to the theoretical end of the spectrum, and Brooks closer to the applied end, so both having different views hardly comes as a surprise. In the end it mainly boils down to what “computer science” refers to in a specific context.

                            1. 1

                              Maybe this quote from Knuth (1985) could add something to the discussion:

                              I suppose the name of our discipline isn’t of vital importance, since we will go on doing what we are doing no matter what it is called; after all, other disciplines like Mathematics and Chemistry are no longer related very strongly to the etymology of their names.

                              I found it closing a chapter named “What’s in a name?” in the book “The Science of Computing: Shaping a discipline” from Matti Tedre (2015), which is very interesting since it takes an historical journey on the subject.

                              Some articles from Peter Denning could be also of interest here. In fact both worked together in a more recent book (also related to this): “Computational thinking” (2019).

                              1. 1

                                My issue is that including the word “science” tends to imply that software development can be “predictable”. Unfortunately for non-trivial systems, software development remains unpredictable in terms of effort, cost, time and outcome.