Become a fan of Slashdot on Facebook

 



Forgot your password?
typodupeerror
×

What Math Courses Should We Teach CS Students? 392

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?"
This discussion has been archived. No new comments can be posted.

What Math Courses Should We Teach CS Students?

Comments Filter:
  • by Silver Sloth ( 770927 ) on Wednesday November 15, 2006 @07:25AM (#16850178)
    Whichever branch of maths you follow it encourages logical thought.
  • by lubricated ( 49106 ) <michalp.gmail@com> on Wednesday November 15, 2006 @07:26AM (#16850182)
    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.
  • by BadAnalogyGuy ( 945258 ) <BadAnalogyGuy@gmail.com> on Wednesday November 15, 2006 @07:33AM (#16850216)
    Personally, I found a great deal of education in my oenology courses. Well, they weren't really courses. Or at school. Mostly at home with friends.

    But to get back to your question, I don't find any of the math that I took applicable to any of the work I do. I don't write 3D software, music synthesizer software, or calculate missile trajectories, so all that math is lost on me. The most applicable mathy CS thing I learned was covered in an hour regarding big O notation. Along with a good course on data structures, that has been the most beneficial thing I can say I learned.

    But that is besides the point. What you do in the real world doesn't necessarily have to be relevant when choosing curriculums (curriculi? curricula?)

    Give them the works! Everything from Calc through Topo and everything in between. Not all of them are going to grow up to be rocket scientists, but so what? The more knowledge you give these kids the better. I'm not saying you need to wipe them out or flunk them out or even use the math as a weeding tool, just that what you want to do is give them the tools to look at other sciences and not be befuddled.

    There's nothing worse than a CS graduate that doesn't have a full grasp of math.
  • CompSci maths... (Score:3, Insightful)

    by filthWisard ( 1015523 ) on Wednesday November 15, 2006 @07:48AM (#16850272)
    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)
  • by antifoidulus ( 807088 ) on Wednesday November 15, 2006 @07:59AM (#16850322) Homepage Journal
    I was a math minor at Penn State, and I decided to concentrate on Stat because that is what interested me, but everyone is different. I would say that if you are interested mostly in "pure"(not pure!=better) CS, then courses like graph theory and combinatorics are probably best. If you are interested in applying your CS degree to problems in engineering and science, then differential equations and numerical analysis is your best bet. If you want to go into the business/actuarial side of things, statistics is obviously best. The most important thing is that you take a lot of math, and hopefully math that actually interests you.
  • Hard to decide (Score:2, Insightful)

    by Raliaga ( 1027504 ) on Wednesday November 15, 2006 @08:10AM (#16850374)
    As a current student majoring in both (CS-Math), I've found useful all of my Math courses to CS. I'd say that Analysis [wikipedia.org], and Measure Theory [wikipedia.org] have helped too.
    However, we should not forget that it's suposed to be a CS major, so I'd recommend as "priority" ones: Calculus (one-many variables), Linear Algebra, Probability, Statistics, Linear Optimization, Non-linear Optimization, Combinatorial Optimization, Numerical Analysis, Computational Complexity, Graph Theory and Information Theory. As subjects of further study I'd choose some Logic, Abstract Algebra, Functional Analysis, Set Theory and Category Theory.
    It is important that a CS student could get as much Math as he/she can, because it helps to provide a useful mental framework for thinking, and because helps to get chances of right use of some mathematical tools.
    As I see it, many engineering majors are as teaching a student to battle with some weapon, teach some mathematical tecniques related to the subject, and some practical things about the tecnique ("the weapon"). But learning as much as Math as you can, is like to learn how to use a swiss knife: if you know how to use it properly, sky is the limit (you can be a "science McGyver" :-) )
  • Why do CS? (Score:4, Insightful)

    by Tango42 ( 662363 ) on Wednesday November 15, 2006 @08:10AM (#16850376)
    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?
  • by Anonymous Brave Guy ( 457657 ) on Wednesday November 15, 2006 @08:22AM (#16850428)

    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.

    Wow. I do have an undergraduate degree in mathematics, and I'm not sure it covered everything you described there. You'd certainly be lucky to get things like Galois theory taught routinely at undergrad level these days, at least here in the UK.

  • Re:Why do CS? (Score:1, Insightful)

    by Anonymous Coward on Wednesday November 15, 2006 @08:43AM (#16850548)
    Can anyone name a job for which a CS degree is the best qualification?

    CS Professor of course.
  • Re:Why do CS? (Score:2, Insightful)

    by Der PC ( 1026194 ) on Wednesday November 15, 2006 @08:54AM (#16850618)
    This must be one of the dumbest answers I have seen so f... oh.. this is SlashDot... I forget. :P I don't have a B.Sc./M.Sc. in CS. Yet. I have under the hood as you so skilfully describe, a self-education in programming and system administration. And, I have been working as a systems administrator, dba and network technician for the past decade at universities and major corporations/banks. I do have experience, of that there's no doubt. A year ago I decided that a CS degree would be of benefit. All too often I had discussions with my teammates and had little or no understanding when it came to mathematical reasoning used in our work. Now, I'm finishing the first half of my second year in CS. I have so far learnt more in these 12 months ( 3 terms a year ) then I have in the past 10 years, and today I can say that I have a grasp on a helluva lot of issues that I didn't while I was actively working on them ( monkey see, monkey do - me being the monkey at that time ). A CS degree must be the one thing that truly should have some meaning for computer enthusiasts. If not to get a better salary, then for your greater mental good. And to be on topic, I've taken so far: Discrete Mathematics I. Next term I'm taking Discrete Mathematics II and Linear Algebra. Term after that comes Calculus and Algorithm Design. Of course, the mathematics CS students take should echo the usability of the mathematics within the sector.
  • by DoofusOfDeath ( 636671 ) on Wednesday November 15, 2006 @09:08AM (#16850716)
    "Statistics" (2 semesters at least) and "experimental design". "Modeling and simulation" is closely related, but is somewhat covered if you take the stats and experimental design courses.

    Here's why...

    When starting on my PhD research, I pretty naively thought I'd just write a network simulator to try out my idea and to compare its performance to other network protocols. That would be fairly acceptable in today's CS climate, but STUPID.

    People using simulators face a number of questions that they often don't ask, and therefore make their conclusions nearly meaningless. Are there specific hypotheses they're trying to test? How do they know they've performed enough simulation runs to draw conclusions at an acceptable confidence level? Exactly what is the distribution over which the inputs are randomized, and why was distribution chosen? To what extent is the model even validated (ok, this is more of a Modeling and Simulation issue than a stats issue)?

    Psych and biology majors have been forced to rigorously answer these questions for a long time. We, the supposedly "mathematically superior" CS majors, have often ignored these details as though they're irrelevant. But if left un-tackled, we can produce crap research whose conclusions have little clear connection to reality. These is even true for when we can afford to do real-world tests and thus are less at the mercy of simulation model inaccuracies. How many real-world tests do we perform before we draw our conclusions? How do we randomize the inputs?

    Much of today's network-related research sucks. Not because the ideas being generated are bad, but because the analysis of the new ideas and their comparison to the performance of pre-existing ideas is crap. Without taking stats and experimental design courses, even the reviewers of these papers don't realize that those weaknesses exist.

    If you want your network research to be meaningful, test your ideas with meaningful experiments and analysis.
  • by Dareth ( 47614 ) on Wednesday November 15, 2006 @09:32AM (#16850898)
    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.

  • by TapeCutter ( 624760 ) on Wednesday November 15, 2006 @09:57AM (#16851176) Journal
    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.
  • 3 words... (Score:4, Insightful)

    by RingDev ( 879105 ) on Wednesday November 15, 2006 @10:17AM (#16851438) Homepage Journal
    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
  • Re:Why do CS? (Score:3, Insightful)

    by J-Doggqx ( 809697 ) on Wednesday November 15, 2006 @11:26AM (#16852432)
    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.
  • by kfg ( 145172 ) on Wednesday November 15, 2006 @12:04PM (#16853002)
    For students who just want to get a job as a programmer. . .

    I'd recommend a different major.

    As with all the hard and applied sciences the undergraduate course is really just foundation building and the course of study should reflect that. CS is a life study, programming is a trade.

    Even with that it's going to take you about 10 years to become a decent programmer; and 15 to become a decent CS; there's really no way around that. Why is everyone so fixated on becoming mediocre in a hurry? Learn the shit you need to learn, in a well ordered manner, instead of trying to cram half of everything into the arbitrary four years.

    KFG
  • by Llywelyn ( 531070 ) on Wednesday November 15, 2006 @12:23PM (#16853358) Homepage
    "but I have yet to use n-dimensional calculus in non-cartesian space for practical business applications."

    Two points come to mind:

    First: I have yet to directly use complex analysis in any of my day-to-day work, I'd still consider the class extremely valuable for the experience in working with coordinate systems, transforms, and the like. I'd also consider the proofing process I had to do in that class extremely valuable. All of this is in spite of never seeing "i" in my day-to-day job.

    Second: *You* may not have need of graduates with such skills, but many people do. Some people need the ability to work with 8-dimension nonlinear ODEs that rotate between two coordinate systems. Sure, not every grad will, but the exposure gives a graduate a higher chance of actually knowing that its out there and being able to use it if the need arises.

  • Re:Why do CS? (Score:3, Insightful)

    by poot_rootbeer ( 188613 ) on Wednesday November 15, 2006 @12:43PM (#16853758)
    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.

    Why go to school at all? Just find some textbooks to read, and work it out as you go along. Oh, you'll have to work out "how to read a book" as you go along as well.

    Education's greatest strength is to prevent the student from making stupid mistakes made by others in the past. No, a lecture hall is not the best place to learn Java syntax, but it could be a very good place to learn about common object-oriented design patterns.
  • Re:Why do CS? (Score:3, Insightful)

    by Chandon Seldon ( 43083 ) on Wednesday November 15, 2006 @12:49PM (#16853880) Homepage

    Have you ever considered that a University degree isn't always about job training?

  • by Anonymous Coward on Wednesday November 15, 2006 @01:07PM (#16854286)
    I'm a Computer Science major at RIT - our math sequence is Calculus -> Discrete -> Probability and Statistics. Discrete and Probability of course being the most relevant for computing.
  • by Anonymous Coward on Wednesday November 15, 2006 @01:19PM (#16854508)
    lower level languages (C++) and higher level languages (Java, VB, etc)

    So what exactly does "higher level" mean to you? Garbage collection? Reflection? What about first class functions, closures, continuations?

    That's like comparing the extremes of visible light when you have the entire electromagnetic spectrum to work with.
  • by SeattleGameboy ( 641456 ) on Wednesday November 15, 2006 @01:48PM (#16855042) Journal
    What a crock of BS. I see why you were able to rise up to VP level, you are full of hot air.

    THERE IS NO WAY IN HELL you can deduce all those items (Passion, Communication, Teamwork,Flexibility, Teamwork, Potential, BK) in a freaking one hour interview. Are you kidding me? Best you can hope for in a one hour interview is to figure out whether or not he/she was lying about anything on their resume. Almost all research on job interviews indicate that people make up their mind on whether or not to hire within first 15 seconds.

    Even if you are some Yoda and can deduce those things from a interview, you must not be hiring much because you probably can count in one hand you the number of people you can demonstrate those abilities in an hour. I have interviewed hundreds of candidates over the years. I can honestly say, I have never met a candidate who showed abilities in all of those areas. If you are looking for a perfect candidate, no such beast exists (or at least they won't be going to interviews to get hired). In fact, some of the best developers I ever hired were guys who BOMBED their interviews (usually shy, not very outgoing, etc.), but are demons when it come to producing effecient codes.

    What a baloney. I wish you would tell us which company you work for so I know to stay away from it.

  • Re:Why do CS? (Score:3, Insightful)

    by bzipitidoo ( 647217 ) <bzipitidoo@yahoo.com> on Wednesday November 15, 2006 @01:49PM (#16855052) Journal

    > by doing just maths I'd actually end up being a better programmer

    CS continually struggles with this sort of perception problem. That statement makes it sound like CS is only math applied to computers. If that's all CS was, there'd be no need for a separate discipline. The recognition that the concept of an algorithm, and all the theory behind algorithms, does not fit anywhere in classic mathematics prompted the emergence of CS as a separate discipline. That advisor gave you misleading and biased advice. I hope you didn't unquestionably believe it, though it sounds as if you're convinced it's true. You will not be a better programmer if you took all the math but skipped the study of algorithms.

    Math does not properly teach algorithms. For example, if you take the right math course, you will learn all about Fourier and Laplace transforms, or so it seems. But you won't learn the Fast Fourier Transform (FFT) algorithm, or that the grade school multiplication algorithm is O(n^2) and that multiplication can be done in O(nlogn) and FFT is the way to do it. Want to stump Math grad students? Toss them a dynamic programming problem. They likely won't have ever heard of dynamic programming. A classic that should suck them right in because a mathematical problem provides the data, is Matrix Chain Multiplication. Even more dangerous are the Math grads who think they understand algorithms because they had a course that spent some time on big O formulations and similar material, but all from a mathematical point of view. Ever studied Turing machines? The halting problem? Automata Theory? Did you ever learn about universality in the context of programming languages? What about Complexity Theory?

    Some EE have a similar low opinion of CS-- think CS is not a "real" discipline. I had a combo EE/CS class that was a mix of digital logic and the electrical properties of transistors. The professor was a EE who conveniently "proved" his assertion that CS students and CS were 2nd rate next to EE students and EE by cutting the EEs a lot of slack on CS problems because they were "trivial" while burning the CS students on the "important" EE problems such as graphing the response curves of the inputs/outputs of transistors at all voltages. Was no surprise that of the passing grades, the EE students got mostly As and Bs, while the CS students got Bs and Cs.

Those who can, do; those who can't, write. Those who can't write work for the Bell Labs Record.

Working...