Slashdot Mirror


What Math Courses Should We Teach CS Students?

Coryoth asks: "If you're taking computer science then getting as much mathematics as you can is probably a good idea. Ultimately, however, there are only so many math courses you an squeeze in. Given that, what areas of mathematics should we be teaching CS students for maximum benefit? Traditionally university math courses are structured around the needs of the physical sciences and engineering, which means calculus is what gets offered. While a decent calculus course can teach a certain amount of formality in reasoning, wouldn't CS students be better served with a course in mathematical logic and foundations with its greater degree of formal reasoning and obvious connections to fundamental concepts in computer science? Are courses in abstract algebra and graph theory going to be useful to CS students? Should courses in category theory (yes, it applies to computer science) be required of students going on in theoretical computer science? In short — what areas of mathematics are going to be the most useful and most applicable to computer science students? What courses were of the most value to you?"

14 of 392 comments (clear)

  1. ballpark by superwiz · · Score: 4, Informative

    probability (heavily skewed towards combinatorics), number theory, geometry (the plain euclidean one because this is really the best way to train a human brain for logic that's been found in the past few thousand years), calculus (of 1 and 2 variables... the rest is a waste of time unless you are specifically training programmers whose skills will be heavily computational in nature), linear algebra, and formal logic. Category theory (which is really just object-oriented math) could be familiarized with, but showing its applications would be more useful than going rigourously through proofs.

    --
    Any guest worker system is indistinguishable from indentured servitude.
  2. How far are they going in CS? by cperciva · · Score: 5, Informative

    (For the benefit of members of institutions with other sizes of courses: When I write "one course" below, I mean "1/40th of a standard Bachelor's degree".)

    For students who just want to get a job as a programmer, I'd say that a first year course in discrete mathematics should be enough; it won't actually teach them anything by itself, but it will increase the odds of them understanding what the smart guy on their team is talking about when he says "this is a standard graph theory problem...".

    For students who want to be that guy who tells the rest of the team how to solve problems, I'd suggest two discrete math courses, two calculus courses, a linear algebra course, and either a number theory course or a statistics course.

    For students who want to actually do research in computer science: They're in the wrong department. The best preparation for graduate work in computer science is an undergraduate degree in mathematics. If they insist on getting their undergraduate degree in computer science, I'd recommend as an absolute minimum three calculus courses, two general discrete math courses, one linear algebra course, one course in number theory, two courses in statistics, one course in real analysis, one course in complex analysis, two courses in numerical analysis, one course in linear programming, one course in formal languages and automata, one course in graph theory, and one course in combinatorics. Depending upon the student's interests, I'd also recommend courses in group theory, galois theory, and coding theory.

  3. Re:computational statistics by Peter+Mork · · Score: 4, Interesting

    I'm willing to assert something stronger. Instead of requiring undergrads to spend a year learning calculus, the requirement for all undergrads should be basic statistics. In the decade or so since I completed a math degree, I've used calculus only rarely (the intended implication being that even a mathematician might find little need for calculus). Statistics, on the other hand, are needed to correctly interpret newspaper articles.

  4. Re:computational statistics by arivanov · · Score: 5, Interesting

    In my biased opinion, that is a course that MUST NOT be taught to CS students unless they have the full one year worth of Probability Theory before that. In fact it is a course that MUST NOT be taught to any scientific student who has not taken a full probability theory course first. Unfortunately, many universities especially in the US tend to do that - teaching stats without teaching the probability theory which makes them possible.

    As far probability theory itself is concerned its knowledge is essential for nearly any task in CS starting from an OS and all the way to transaction systems especially if the system is operating under a resource constraint. The time your request traverses the system, the completion rate, etc are all described by Markov chains and there is a appallingly low percentage of CS people who actually know them and can understand how their systems behave. There is no way in hell you can optimise or even understand a complex system without this knowledge. Unfortunately most Unis now prefer to use this time to teach marketing buzzword bollocks also known as Unified Process, Agile, etc instead.

    The second most important math area for a CS student is possibly optimal control. This one is also nowdays omitted from some university curicullae which IMO is an absolute madness.

    --
    Baker's Law: Misery no longer loves company. Nowadays it insists on it
    http://www.sigsegv.cx/
  5. Re:computational statistics by jawtheshark · · Score: 4, Funny

    Indeed, 87% of all computer science majors have no clue about statistics....

    --
    Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
  6. Re:It realy doesn't matter by ObsessiveMathsFreak · · Score: 4, Funny
    Whichever branch of maths you follow it encourages logical thought.

    Except for mathematical logic. Those guys leave all semblance of logic at the door.
    --
    May the Maths Be with you!
  7. Some Math greater than Other Math by Dareth · · Score: 4, Insightful

    For CS students, the fundamentals of discrete math and set theory are probably some of the most important. More focus on these in a CS context would be helpful to people such as myself who find math more interesting when it has a purpose. I did not mind the physics and statistical math courses. I could see the point behind them clearly. But doing math just for the sake of doing math never seem to have a purpose.

    --

    I only look human.
    My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
    1. Re:Some Math greater than Other Math by SQLGuru · · Score: 4, Informative

      I would say that it depends on the focus of the student.

      Graphics programming - Linear Algebra (matrix math) would be invaluable
      Business application programming - plain old Algebra and maybe some statistics
      Engineering apps - physics / calculus, stats
      Compression programming - linear algebra, "new math"
      etc.

      When I was in college (90 to 94) at an engineering school, my CS degree required Calculus through the third one (because it was in the Engineering department) and statistics (because otherwise, noone in their right mind would ever take statistics) and an elective "math" the your advisor would point you towards based on what type of work you were interested in doing. I think this approach has worked out well for me.

      Layne

    2. Re:Some Math greater than Other Math by tritonman · · Score: 5, Interesting

      I think they need to separate CS into two branches, one that's "computer software engineering" and another that's "computer science". The first focuses more on software engineering and different languages. The second focuses on one language (probably c++) and has more intense math and physics as this is more related to science. The reasoning would be that there tend to be two types of programmers. Those who work with scientists and really need an understanding of calculus and of physics forulas and those who work on DB front-end type stuff, these require a knowledge of some things like set theory and discrete math, but they don't need to have a deep understanding of calculus or have an understanding of physics.

    3. Re:Some Math greater than Other Math by Aaron+Denney · · Score: 4, Funny

      > discreet mathematics.

      Yes, much nicer than the showy, obvious, and unrestrained mathematics.

      (The word you want is discrete)

  8. Re:Why do CS? by Opportunist · · Score: 4, Informative

    Actually, I didn't learn how to code in my CS classes. That was expected knowledge. Yes, CS doesn't teach coding here, instead they expect you to know how to write code and why x=x+5 isn't completely insane.

    What I did get taught was how to write good code. How to make use of binary trees and how to optimize algorithms. How to plan software projects and what problems to expect. How to plan, lay down and manage a network.

    As a low level SysAdmin, you certainly won't need a degree to figure out a subnet mask for a single router lan. But networks don't simply scale, they tend to get very tricky and complicated as soon as you have a few layers of routing between them. Not to mention that you won't be able to even plan such a network sensibly if you don't know the theory behind it, how to streamline it and what happens "inside". And yes, that's where the math comes in.

    A good university education will give you a heavy dose of theory. And while you won't be able to apply this directly, you will know WHY something works, not just how. And, more important, when it stops working you'll have a clue why it did. And you'll have a plan how to fix it, or at the very least, you'll know where to look.

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  9. Re:computational statistics by LizardKing · · Score: 5, Funny

    What about the other 23%?

  10. Re:It realy doesn't matter by NibbleAbit · · Score: 4, Informative

    I am VP of software development at a software company. I hire a lot of recent graduates (and am always looking for more good talent).

    What I look for as a starting point is a solid understanding of how programs work, and enough programming experience that I am not teaching the basics. Experience with both lower level languages (C++) and higher level languages (Java, VB, etc) is required just to get past HR. Also, knowledge of the context (networks, operating systems, databases) is required.

    The above just gets you to the point that HR will really read your resume, and possibly pass it on to me. Once I get a resume, I assume those skills are present. What I look for are things that are more intangible.

    • Passion (The love of the art of programming)
    • Communication skills (The ability to understand and be understood, both written and verbal)
    • flexibility (If the decision is made to accomplish something that does not agree with your idea of the best way, attack the problem as if you believe it truly is the best way. This does not mean silencing your opinion before a decision is made)
    • teamwork, cooperation, social skills. I don't want prima donnas
    • Potential. Hard to judge in a recent grad, but I want people who strive to accomplish more than their current position.
    • Business Knowledge. Since our software is designed to solve business problems, it is essential that all of our staff understands what a business is.

    The graduates that can show these traits are very likely to be hired. Those that don't, won't. Some of these characteristics can be taught in formal courses, others have more to do with personal development and maturity. Specific languages can be taught to the right person very quickly. A solid background in math is also essential (Algebra, Statistics and Calculus) but I have yet to use n-dimensional calculus in non-cartesian space for practical business applications.

  11. The DCT would be a really good idea. by emil · · Score: 4, Informative

    The Discrete Cosine Transform would be a fantastic goal. DCT is used in MP3, JPEG, and MPEG compression (amongst others). The practical applications for lossy encoding are hardly difficult to see.

    Such a discussion should probably replace vector calculus. I only used Groves/Stokes/Divergence/Gradients in a single course (EM Theory), and I've never had a practical application in my career. My Digital Image Processing class spent too much time on the Discrete Fourier Transform and dismissed the DCT with some hand-waving (and this after two years of pointless control and communication theory - when was the last time you used Vestigal Sideband Modulation?).

    The math that should be taught in computer science should reflect the math used in computer science. DCT certainly qualifies, and a lot of the current curriculum(s) do not.

    Maybe talking to the guy who maintains the PAQ compressor might also be good. That is interesting software.