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?"

23 of 392 comments (clear)

  1. It realy doesn't matter by Silver+Sloth · · Score: 3, Insightful

    Whichever branch of maths you follow it encourages logical thought.

    --
    init 11 - for when you need that edge.
    1. 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!
    2. 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.

  2. computational statistics by lubricated · · Score: 3, Insightful

    Well, perhaps because it has something with what I do, but I was surprised computational statistics isn't on that list. Perhaps it's the other way around, statisticians need to learn to program. Regardless there is quite a bit of overlap. This is also one of the few areas remaining where the speed of your program actually matters.

    --
    It has been statistically shown that helmets increase the risk of head injury.
    1. Re:computational statistics by Anonymous+MadCoe · · Score: 3, Informative

      Yep I find that most CS majors I've worked with the last couple of years lack a solid understanding of statistics in general. IMHO this is a very important skill.

      The danger of not teaching it is that most guys that need it in their professional life think they are very smart, start using it and suffer from the "sourcer's apprentice syndrome".

    2. 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.

    3. 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/
    4. 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)
    5. Re:computational statistics by LizardKing · · Score: 5, Funny

      What about the other 23%?

  3. 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.
  4. Core Math for Comp Sci. by Anonymous Coward · · Score: 3, Informative

    Linear and Multilinear algebra
    Logic (Philosophy) -> Discrete Math -> Discrete Math 2
    Calculus 1 - 3

    I would probably put those as the core of any good CompSci program.

  5. 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.

  6. CompSci maths... by filthWisard · · Score: 3, Insightful

    being able to use asymtotic notation for bounds on algorithm running times, and a good basis in proofs in order to prove them once you've come up with something. Also solving recurences, and proving them is invaluable. There are some other things that are very usesfull on a day to day basis, like linear algebra (spesifically coding theroy), geometry, graph theroy, counting and probability (but thats more of an ai thing)

  7. Why do CS? by Tango42 · · Score: 3, Insightful

    I think the first question you need to answer is why you're doing a CS degree in the first place. Personally, I don't see any point in them. It's not the best way to learn to program (how can you really learn Java in a lecture theatre? It just doesn't work. Just get a good reference book, find some good code to copy the syntax from, and work it out as you go along.), if you want to know the maths side of it, do a maths degree (picking courses that are useful for the job you have in mind - you might have to pick a uni accordingly), you'll understand it far better (doing a few courses in maths is much harder than doing lots, because so many parts of maths interlink). If you want to be a Systems Administrator, or something, then I can't see why you would need a degree at all, it's experience that counts in those kinds of jobs.

    Can anyone name a job for which a CS degree is the best qualification?

    1. 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.
    2. Re:Why do CS? by J-Doggqx · · Score: 3, Insightful

      A lecture hall won't necessarily teach you how to code in Java, but having a large programming project assigned with a deadline can be a very good motivator.

      I have done a good deal of studying and coding on my own time, but when one of my CS classes (currently going for my masters) has a project that is when I find the classes really pay off. It gives me something that I can focus on that I can't give up midstream to start a new project.

      Then there are also the CS courses that don't require any programming projects: Theory of Computation, Programming Language Structures, Algorithms, and Software Engineering. These courses require almost no programming, but provide tons of good information on developing future code.

      --
      END OF LINE
  8. 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 TapeCutter · · Score: 3, Insightful

      Yep, operations research, cryptography, matrix algebra, stats, logic and some physical stuff like trig and calculus were all in my CS degree (89-91). I don't remeber much about the formulas but it has served me well to know what can and can't be done and why.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    2. 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

    3. 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.

    4. 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)

  9. 3 words... by RingDev · · Score: 3, Insightful

    Proofs. Proofs. Proofs.

    Algebra, geometry, calc, who cares. It's the Proofs that make math apply to Comp Sci. Having obscure formulas memorized means squat. But being able to look at a problem and break it down into the most simple of building blocks, that is a critical skill.

    -Rick

    --
    "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
  10. 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.