62

About 17 years ago I attended a top 10 UK university to study for a degree in Computer Science.

Mathematics had never been a particularly strong point for me. However I (just) had the required A-Level qualification to be accepted for the course without any issue.

After two terms I dropped out and switched to another top 10 UK University to study for an Information Technology degree. The reasons I dropped out from the former were simply because I found the Mathematical lectures unbelievably difficult. The university did not (in my opinion) provide good support to people who weren't strong in this area. However I also never understood why this level of mathematics was being taught in the first place.

I recently looked at some lecture notes provided on the former universities website for the current year. And sure enough, the level of complexity seems the same.

When I switched to doing an Information Technology degree part of my logic was that the outcome would be a more practical/useful set of skills to actually develop software, along with the logical thinking required (which in my view requires little mathematical knowledge). For me this has worked well as I've had a good career as a software developer since graduating. I've never found any of my work requires much maths, beyond that of a GCSE/A-level level of complexity.

Interestingly, looking on LinkedIn, a huge number of people at the former university went on to be software engineers or similar roles. The salaries at the organisations these people work seem commensurate to the role I am currently in.

Given this, I'm wondering what the end-goal and purpose of teaching that complex maths is on CS degrees? I understand some people will go into roles working with hardware, or even producing software where there are complex mathematical elements. But this seems to be in the minority - by a very big margin - in terms of what people actually end up doing. I have also spoken to people about careers they've gone into as opposed to just looking on LinkedIn etc.

It seems to me that CS courses are teaching skills which - whilst relevant - are not as relevant as they might once have been. If this is the case then why has nobody addressed it? It seems absurd.

My experience of this is based on two top 10 UK universities but having looked at some others (in the UK and USA) this seems to be a general case.

If people are going into roles which require that level of mathematical knowledge, what are those roles? Because I can't see a lot of evidence of this actually happening after people have graduated.

  • Comments are not for extended discussion; this conversation has been moved to chat. Comments posted below this one should request clarification from the asker only (as there is no mechanism to move future discussion comments to chat, they risk being deleted) – cag51 Oct 10 at 19:21

12 Answers 12

148

Oxford University’s overview of their CS degree says it all:

Computer Science is about understanding computer systems and networks at a deep level. Computers and the programs they run are among the most complex products ever created; designing and using them effectively presents immense challenges. Facing these challenges is the aim of Computer Science as a practical discipline, and this leads to some fundamental questions:

  1. How can we capture in a precise way what we want a computer system to do?

  2. Can we mathematically prove that a computer system does what we want it to?

  3. How can computers help us to model and investigate complex systems like the Earth’s climate, financial systems or our own bodies?

  4. What are the limits to computing? Will quantum computers extend those limits?

In other words, the language of computer science is math, not C++. If you were looking for vocational training in computers then CS Is probably an inappropriate choice.

  • 39
    The part about vocational training could be more prominent. That's what the op seems to have been looking for. – Nobody Oct 7 at 22:58
  • 28
    @BlueWizard the limits to computing can also be taken as the practical limits. If a task would take eons with traditional computers, it is beyond those limits, despite being theoretically possible. – Chieron Oct 8 at 6:24
  • 5
    "If you were looking for vocational training in computers then CS is probably an inappropriate choice" - words I wish someone had told me at the start of my attempted degree in CS. – Zibbobz Oct 8 at 12:57
  • 5
    "In other words, the language of computer science is math, not C++" I don't disagree with this, but I have yet to see a purely theoretical computer science course. Oxford's degree course teaches Scala as part of their imperative programming modules. Haskell for FP. Warwick teach Java and Haskell. These courses are not just designed for students to go on to do research, they all include some practical software engineering content alongside the theory. – Adam Williams Oct 8 at 14:51
  • 4
    @Adam Sure, and personally I find people from vocational courses have a way too strong focus on what's currently en vogue. I couldn't care less if my new employee has never seen Angular before, I want them to understand the basics. You'll have to learn a new framework/language all the time anyhow, if you understand the basics you can do that in a short time. I want them to understand concurrency, data structures, how computers work and the implications and all the other good stuff. – Voo Oct 8 at 16:47
50

Well, you were in a computer science department and not in a computer engineering department. It would be a reasonable expectation that you would understand the fundamental mechanics of "computer stuff" and possibly continue your studies in research. I am not a computer scientist so examples may be limited here.

  • cryptography: Beyond understanding RSA schemes there are many interesting research areas and applications. For example elliptic curve cryptography uses serious level of mathematics or homomorphic encryption uses encryption schemes imitating a mathematical concept of morphism to process encrypted data without decryption (for example ordering numbers)
  • communications theory: Coding theory is heavily mathematical. It has some subfields that require more than a basic understanding of linear algebra. I have heard that research in error correcting codes is quite non-trivial. Their main property is to detect and correct possible errors in communication. This is, likely, extra helpful for applications where communications are more likely to have errors. Consider space, polar or deep ocean exploration. On the theoretical side of coding theory, famously, someone used algebraic geometry to show a theoretical upper bound for an invariant (don't remember its name) was as best as we could hope. (This would mean there are codes that give this exact value for the invariant as the upper bound predicts)
  • Image recognition and machine learning also uses serious levels of linear algebra. Serious in the sense that the intuition of 3 dimensional vector spaces and ability to multiply some matrices would not be sufficient as you would be comparing vector spaces of big number dimensions. I am sure a more literate person would be more helpful on this point.
  • Haskell is a programming language based on a language mathematicians call category theory. I do not know benefits of using this Haskell but some people seem to love it. I would say however that category theory is very nontrivial. I would say an average student after completing an undergraduate degree in mathematics would have a very basic understanding of it. It is highly conceptual and its origins and most of its examples are usually graduate school material. Hence it would be really helpful to have a general mathematics background in order to relate what is going on.
  • 28
    I don't understand your first sentence. Do you really think "computer engineering" degrees are likely to involve less math? That does not fit my experience nor the common use of the word "engineering". – Carl Leth Oct 7 at 22:27
  • 8
    @CarlLeth Computer Engineering is "engineering" in the 19th century sense of the word, not the 21st. – alephzero Oct 8 at 0:09
  • 28
    @alephzero: Most Computer Engineering degrees I know of spawned off of Electrical Engineering (with more programming than pure EE, often some elements of Computer Science proper), which is heavily physics based. You may not need number theory, but you need a lot of math to handle the physics aspects of an Electrical or Computer Engineering degree degree. Software Engineering may require less math (and is barely engineering in the normal sense of the word), but computer engineering would not. – ShadowRanger Oct 8 at 2:32
  • 8
    Nitpicking, but at least for my university, Computer Engineering is not Software Engineering. Echoing ShadowRanger, CE was much more hardware based – Mars Oct 8 at 5:22
  • 6
    @llama me too. I've never understood why some computer programmers like to call themselves engineers. Maybe it's to make themselves feel better about their chosen profession? Or maybe it's to make others think that computer programming is difficult and complicated? I shall continue to stubbornly refer to myself as a computer programmer, and annoy self-proclaimed "software engineers" by calling them programmers as well. – Aaron F Oct 8 at 10:11
32

I made this mistake when choosing my major in college. Computer science is not really about computers, in the same way that math classes aren't really about using calculators or pencils and paper.

Modern computers are just a tool used to make computing (the true focus of computer science) easier and faster. This gets confusing because the things we compute would be incredibly time-consuming, or at least incredibly tedious, to do manually, so we almost always fall back on programming computers to do it for us. This means that you probably will do some programming (maybe a lot) for a CS degree, but this programming won't necessarily prepare you to create and deliver high-quality software.

My degree focused far more on studying models of computation and algorithms than on how to produce software. This is still helpful in software development, as knowing efficient algorithms for various problems is good when you're constrained by time or memory capacity. However, it does mean that a CS degree will not necessarily include training for software development, as that is not the primary focus.

  • 31
    There is a famous quote in one of the greatest programming textbooks of all time, that computer science is about computers about the same as astronomy is about telescopes. (Imagine, astronomy was called "telescope science".) The analogy is even more apt than some people realize, because (just like with computers), astronomers aren't even the ones that are researching, designing, engineering, building, and studying telescopes. So, if you are interested in telescopes, astronomy is the wrong field for you to be in, and the same thing applies to computers. – Jörg W Mittag Oct 8 at 5:56
  • 8
    @JörgWMittag: Oldest source I can find is "Computer Science is not about computers in the same sense that physics is not really about particle accelerators, and biology is not about microscopes and Petri dishes" - Hal Abelson, 1986. – MSalters Oct 8 at 10:28
  • 11
    I really wish we'd make a push to rename the field to "Computing Science" instead. – orlp Oct 8 at 13:42
  • @orlp It's usually referred to as "information and computing technology" where I'm from :) Not that it really helps, since it's used for both science and engineering anyway :) – Luaan Oct 9 at 8:07
  • My degree (from Stirling University, back in 1992) WAS called "Computing Science"! Which makes total sense. I was/am only average at mathematics, but some parts have been invaluable in my software development career - e.g. understanding sets helped me immensely in becoming very good with databases. – kpollock Oct 9 at 15:12
22

Here in Germany, the field "Computer Science" is called "Informatik", which, according to the etymology of the term "computer science", is either a contraction of the words "information" and "automatic", or of "information" and "mathematics"...


As others have already pointed out, there are many direct connections between computer science and mathematics, on different levels:

  • Linear algebra is important for many forms of modern machine learning: Neural networks are essentially just large matrices - or conversely, a machine learning system is just a large pile of linear algebra ;-). Another (maybe obvious) field is that of 3D computer graphics: All the special effects in movies are just a bunch of triangles and the answer to the question of what happens when light hits a surface
  • Calculus is essential for complexity theory (which analyzes the running time of algorithms), numerical analysis (which is required for estimating the error of approximations), and many other topics
  • General (or "abstract") algebra is about structures and rules (or operations) within these structures. There is a strong (and in my opinion, severely underrated) connection of this to Object-oriented programming.
  • Logic is an important basis for what you might call "low-level" programming, even though the connection between knowing that you can safely turn an if (!(a || b)) into an if (!a && !b) and formal propositional logic may not be obvious. Of course, far beyond that, there are even logic-based programming languages like Prolog.
  • ...

There are many more direct connections, meaning that you come in touch with a certain branch of mathematics when you apply computer science in practice.

But there are also indirect connections: Mathematics is a language for good descriptions. Mathematics teaches a form of clarity, rigorousness, and preciseness that is necessary in order to manage the complex IT systems that we are dealing with nowadays. What may be perceived as "nitpicking" elsewhere is crucial in order to make sure that these systems operate in the way that we expect them to operate. When you have ever written something like a software specification, and missed a corner case, then you know: People will find that corner case. And they will hate you for missing it...


However, from a practical point, I totally agree: The things that most people with a degree in computer science nowadays have to do in their jobs are totally unrelated to mathematics (and also totally unrelated to programming, for that matter). And it's somehow a pity to imagine that many students frustratedly drop out of their university courses (which they might have entered with wrong expectations about the subject) due to their bad math grades. These people could otherwise have been great at what they actually had to do in their jobs.


My view here may be a bit narrow, because I only know the situation in Germany - even though I observed the developments in this area for >20 years now. But you referred to the UK, so the following may still be relevant. I read this quite a while ago, and it somehow stuck in my mind. It's a quote from an essay "On the fact that the Atlantic Ocean has two sides", by Edsger W. Dijkstra (yes, this Dijkstra) :

The first series of machines —that of the singletons— was mainly developed in the USA shortly after the World War II, while a ruined continental Europe had neither the technology, nor the money, to start building computers: the only thing we could do was thinking about them. Therefore it is not surprising that many US Departments of Computer Science are offsprings of Departments of Electrical Engineering, whereas those in Europe started (later) from Departments of Mathematics (of which they are often still a part). This different heritage still colours the departments, and could provide an acceptable explanation that in the USA Computing Science is viewed more operationally than in Europe.

That could explain it, to some extent, at least...

  • In spanish is 'informática' , as in 'ciencias de la informatica', and just like in german, there is a clear difference too. – deags Oct 10 at 18:41
12

There are two aspects of this and one of them is usually forgotten. The usual reason is that some parts of CS are dependent on knowing mathematics and how to use it. The answer of Boaty Mcboatface mentions some of them. But not all of CS is like that and those working, say, in Human Factors or UI development probably use the math they learned much less than those studying algorithms or encryption.

But the other aspect is also important. The study of CS is enhanced from knowing the way in which mathematicians think and work - the mathematical way of thinking - not just from having facts at your fingertips. Mathematicians tend to be analytical and precise, depending on clear statements and logical demonstration. This way of looking at problems and stating solutions is of use to a computer scientist.

But there are a lot of other things that are also important in CS, so a broad education is valued, not just a math background. After all, many of us try to solve problems for people, not just for others in our own field. So, while mathematics is often useful in helping to develop the how of some solution, it is less useful in knowing why some program should or should not be developed.


Good mathematicians are also very creative, though that quality is widely shared with people of other fields. But becoming good in mathematics takes some work. Both depth and breadth are needed.

5

Computer science is the study of computers and the underlying theory. Software development is the use of computers to... develop software.

This underlying theory is largely math... so by studying it, you are essentially studying (a small subsection of) math. Thus, there is a high proportion of math involved.

To your underlying question, however, academia is an often confusing and misunderstood place.

Only recently have people started realizing that a college degree is in many cases unnecessary, and in fact may be detrimental to your career path - in many fields besides just computer science. (i.e. 4+ years of tangentially related studying vs. 4+ years of job experience)

For software development in particular, computer science is really only a tangentially related field.

If CS 201 was indeed unnecessary for CS 305, it would not be a prerequisite. If it did not contain useful knowledge, indeed it would likely be quickly cut out of the curriculum, or relegated to an elective. It is certainly absurd to think that universities would teach useless things for an extended period of time.

Math is very useful in computer science - regularly less so in software development.

  • 6
    Actually, I'd say that math is used constantly in software development; it's just math that's well-developed enough that most developers use it intuitively, rather than having to have a formal understanding of it. Most programs include at least one function, but a "function," is actually, like zero or negative numbers, a fairly sophisticated mathematical idea, not something that people have always known and understood. – Curt J. Sampson Oct 8 at 6:44
  • 1
    A "function" in the mathematical sense, and a "function" in the programming sense are only distantly related. Learning about mathematical functions really doesn't help with programming functions. – Martin Bonner supports Monica Oct 8 at 16:16
  • 2
    @MartinBonner It's not that distant. Make the function immutable (and if you're feeling adventurous, take one argument) and you're golden. For bonus points, add proper lambda calculus. The main difference is that most programmers don't really do anything with functions beyond invoking them :) – Luaan Oct 9 at 8:11
  • 1
    @MartinBonner Yes, but many software engineers will also tell you it's a really bad idea :P It's one of those things that makes software development far less reliable and far more complex than it has any need to be, for essentially no benefit - it's a massive source of accidental complexity. – Luaan Oct 9 at 10:08
  • 2
    @Martin Yes, but what is the relationship between the two? And how can we change program functions to be closer to mathematical functions? That's math. Why would we make such a change? Because we can then use more of our mathematical tools to help show (even sometimes prove) that the function does what we hope it does. And that addresses a core part of programming: how do we ensure our programs are doing what we hope they do, i.e., are correct? This is all part of a point that Dijkstra was making (not so very successfully) forty years ago. – Curt J. Sampson Oct 9 at 13:10
4

Because it's Computer SCIENCE, and pretty much all science depends on math. Sure, there are things you can do with computers that don't involve much math (if any), like (AFAIK) implementing something like StackExchange. And you're quite correct that a degree in Information Technology or something similar would probably qualify you for a lot of jobs, without the need to learn anything beyond basic arithmetic.

OTOH, there are a lot of jobs that do involve applying (what might from your POV be) fairly complicated math. For instance, what I'm doing these days involves applying numerical solutions to a particular class of partial differential equations (https://en.wikipedia.org/wiki/Eikonal_equation ). Probably 90% of my career has involved similar levels of math. So it's all in what you want to do.

4

Because computing science (see below), and even computer programming, is applied mathematics.

Ed Dubinsky, a mathematics educator who was once a professional programmer himself, has said:

A person's mathematical knowledge is her or his tendency to respond to certain kinds of perceived problem situations by constructing, reconstructing and organizing mental processes and objects to use in dealing with the situations.

At a slightly less general level, consider what mathematics is. You choose or create a language in which you can express certain ideas and then do symbolic manipulation according to a set of rules you've also chosen or created to come up with to create more valid statements in that language according to those rules. If you're not careful to do this correctly, you may come out with invalid statements. The results you come up with may have some sort of application in the "real world" (e.g., I can use the language and rules of "integers" to help keep track of what people owe me and I owe them) or may be just work to help you better understand how you can use the language and rules and how they can be helpful to you in further use of them.

In many parts of mathematics we use particular symbols called "numbers" and have a large library of oft-shared rules and languages related to this, but there are other areas of mathematics that don't use numbers at all (e.g., category theory), or, though they can be applied to numbers, are not really about numbers per se (group theory, algebraic structures, many more).

Even before you get into the study or use of particular algorithms and the like, writing a computer program is basically what I described above. Many of the "simplest" concepts in computer programming that we use every day, such as the idea of a function, are purely mathematical concepts.

Now as you've seen, it's perfectly possible to attack real-world problems with these mathematical tools in a non-rigorous way and get useful results. Typically the results will not be truly correct (i.e., your programs will have bugs), but they will be "correct enough" to do the job. (For a well written program in industry, you may never even encounter the situations that would demonstrate that it's incorrect.) That's what the discipline of engineering is: getting results that work well enough in the real world at acceptable cost.

But even when you're doing engineering, much of what you do works well only because someone has gone and done enough mathematical heavy lifting to give you concepts and tools that you can use to do this. You may not have a really good understanding of what a function or a relation is, but your programming language or database system works because somebody did figure those out.

And the people who did that work are the computing scientists.

All this has been known and seriously contemplated for a long time. I think it's particularly well demonstrated by a comment in Peter Landin's classic 1966 paper ["The Next 700 Programming Languages"][landin66]:

The most important contribution of LISP was not in list processing or storage allocation or notation, but in the logical properties lying behind the notation. here ISWIM makes little improvement because, except for a few minor details, LISP left none to make. There are two equivalant ways of stating these properties.

(a) LISP simplified the equivalence relations that determine the extent to which pieces of a program can be interchanged without affecting the outcome.

(b) LISP brought the class of entities that are denoted by expressions a programmer can write nearer to those that arise in models of physical systems and in mathematical and logical systems.

If you understand this (which probably requires some at least intuitive understanding of the of the lambda calculus or similar), you probably realize that a lot of the problems we deal with today are still the same basically mathematical problems that were being investigated back in the '60s when we were first seriously investigating what a "programming language" really is and means.

On Working Programs

One can also look at this from the more narrow viewpoint of, "I just want to write a program and make sure it works." Even here this becomes math if you take as a constraint "I really do want to, as best I can, make sure it works." Dijkstra's EWD303, "On the Reliability of Programs," makes this argument in detail. His summary:

Reliability concerns force us to restrict ourselves to intellectually manageable programs. This faces us with the questions "But how do we manage complex structure intellectually? What mental aids do we have, what patterns of thought are efficient? What are the intrinsic limitations of the human mind that we had better respect?" Without knowledge and experience, such questions would be very hard to answer, but luckily enough, our culture harbours with a tradition of centuries an intellectual discipline whose main purpose it is to apply efficient structuring to otherwise intellectually unmanageable complexity. This discipline is called "Mathematics". If we take the existence of the impressive body of Mathematics as the experimental evidence for the opinion that for the human mind the mathematical method is, indeed, the most effective way to come to grips with complexity, we have no choice any longer: we should reshape our field of programming in such a way that their methods of understanding become equally applicable, for there are no other means.

On "Computing Science" versus "Computer Science"

Some amongst us, including the University of Alberta, find the more common name of the discipline slightly misleading and instead prefer to call it Computing Science. As Keith Smillie said in "Computing Science at the University of Alberta, 1957 - 1993":

The choice of the name "computing science" instead of the more common "computer science" was deliberate in order to indicate that computing rather than computers was to be the foundation of the discipline.

Thinking about what we are wrangling with as "computing" rather than "computers" way may help you remember that all the software running the world today is much more dependent on the mathematical tools we use to be able to effectively and accurately model our problems and the world than on the hardware on which it runs.

  • 2
    And to add to the terminology fun, we have the professional society for researchers and practitioners that calls itself the Association for Computing Machinery. (Despite its title, I believe most of its members are actually human beings.) – jeffB Oct 8 at 16:05
  • @jeffB The main difference between computing machines and humans is that humans are more complex and therefore more easily distracted. – GreySage Oct 10 at 20:18
2

Here in Poland there is a lot of math specialist, but very little IT specialists available at universities (due to horrid salary difference I guess). So you end up having way too many mathematicians who need something to do - and bam, you just over-burden the IT studies with math, raw, unprocessed math, without showing you connections and uses in computer sciences. And after 5 years of university you get students who had 5 years of analysis, 2 semesters of geometry, another semesters of statistics and can barely program in c++, Ada and some java or python if they were lucky.

  • 2
    I don't see the problem really. The skillsets of computer scientist and C++ programmers overlap to a degree, but they're far from identical. It appears that Poland is lacking vocational training in IT. You don't exactly need a PhD in CompSci to use C++. – MSalters Oct 8 at 16:28
  • 3
    @MSalters More importantly, a PhD in CompSci probably doesn't help you use C++ all that much (beyond perhaps getting the sensible idea of running away from C++, fast :D ). You get plenty of benefits from advanced courses in algorithmisation and all sorts of math, but they apply to all programming languages equally - they happen at a different level of abstraction. – Luaan Oct 9 at 8:14
2

I think the key thing that is missing here is the broader point. In the majority of cases, University degrees do not provide training, they provide education. Thus a university degree teaches, in general, not how to do a particular job, but how to think, analyse and assess knowledge.

The vast majority of all students who study for a degree will not go on to a job that directly uses the knowledge taught in a degree. Students with one of our degrees might be more employable as a side benefit, but it is not the primary goal of most degrees. (there are exceptions to this like medicine or law).

1

All of these answers fail to describe something essential:

Most jobs with writing code are doing the equivalent of fabrication, not engineering, and certainly not science.

If this doesn’t make immediate sense, it may help to understand the equivalent when working with classical materials. A scientists would study metallurgy and how to make new alloys. In engineering, one would evaluate how large of a girder can be made from the material, or the limits of wear and tear in scenarios. Fabricators would receive the material in the form of pipes, which they assemble to fit the means of things like a kitchen, a bathroom, or maybe a whole house.

A technician, like someone that works HVAC or automotive, would take pre-constructed subsystems and fit them together with a bit of adjustment using fabrication.

Most careers that involve code are doing fabrication, or technician work. Increasingly, software jobs are technician roles. The jobs require continual awareness of new libraries and frameworks, and how to ensure their ease of assembly and configuration.

But that’s not what computer science schools are out there to teach. You don’t go to oxford, or any other Ivy League university to learn how to be a fabricator. If you went to a school like that, and learned you don’t have the appetite or ability for science..... that’s the dice.

The same thing goes for Fine Arts schools with concept studio core curricula.

It doesn’t mean that programs teaching legitimate science should do less of that.

0

Computer science involves efficient problem-solving process, which can be attained through applied mathematics courses. At least, that's what employers and recruiters look for. Most of the time, the algorithm frameworks are based on math logic. If you don't plan to use the CS degree as a designer, an engineer, or other application-approach, you don't need to employ as much math.

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