Forgot your password?
typodupeerror

What Math Courses Should We Teach CS Students? 392

Posted by Cliff
from the too-much-or-not-enough dept.
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.
    • Whichever branch of maths you follow it encourages logical thought.

      Except for mathematical logic. Those guys leave all semblance of logic at the door.
    • 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.
      • by SQLGuru (980662) on Wednesday November 15, 2006 @11:15AM (#16852260) Journal
        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
      • by tritonman (998572) on Wednesday November 15, 2006 @11:30AM (#16852478)
        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.
        • Re: (Score:3, Informative)

          by CastrTroy (595695)
          I took software engineering at my school. There was a lot of math courses. Calculus 1 and 2, Discrete and Logic 1 and 2, Algebra 1, and Statistics. I also took Algebra 2 as an elective. This doesn't even include math heavy courses like Vector Mechanics, Chemistry, Physics, Elec. Eng., Economics, and others. I think all this math helped out a lot. Not only in math heavy computer related courses like Graphics and robotics, but also in my day-to-day programming needs. Logic and Algebra are probably the
      • by emil (695) on Wednesday November 15, 2006 @11:44AM (#16852710) Homepage

        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.

    • by NibbleAbit (528568) on Wednesday November 15, 2006 @10:20AM (#16851516) Journal

      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.

      • by Nutria (679911)
        lower level languages (C++)

        Is C++ really now considered "low level"

      • Re: (Score:3, Funny)

        by 0racle (667029)
        I have yet to use n-dimensional calculus in non-cartesian space for practical business applications
        Thats because your just a VP, management doesn't do anything for practical business purposes. Impractical maybe, but not practical.
      • Re: (Score:3, Insightful)

        by Llywelyn (531070)
        "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 no
      • Re: (Score:3, Insightful)

        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

  • 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 Anonymous MadCoe (613739) <maakiee@NoSpam.yahoo.com> on Wednesday November 15, 2006 @07:58AM (#16850320) Homepage
      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".
    • by Peter Mork (951443) <Peter.Mork@gmail.com> on Wednesday November 15, 2006 @08:04AM (#16850342) Homepage
      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.
      • Re: (Score:3, Interesting)

        by nelsonal (549144)
        I think most everyone would be improved by more exposure to statistics. Business is one degree that most needs more calculus (most of what businessmen deal with is rates of change). For example the income statement contains the first derivative of most of the balance sheet, but I've never heard the term even broadly hinted at in any business classes.
      • by dslauson (914147)
        I agree that statistic are needed. In my undergraduate CS work, though, we couldn't escape without BOTH a year of calculus AND a semester of probability and statistics.

        I've found them both very useful. Actually, in my work, there is a lot of calculation of rates of flow and such, so the calc has been more useful than the statistics. Stats, in general, though, are just as important, especially when it comes to computer learning applications.

        I think that what math will come in handy is heavily dependent on
      • Re: (Score:3, Informative)

        by The_Wilschon (782534)
        I'm not quite sure how you're planning to teach statistics in any meaningful way without using calculus.

        You're right that professional mathematicians, depending on their field of course, don't need much calculus. For instance, group theory is pretty hot now, and it doesn't involve calculus, unless you're studying some algebraic properties of something involving calculus. Graph theory doesn't involve calculus really. But statistics certainly does involve calculus, unless you're planning to teach a quite
    • by arivanov (12034) on Wednesday November 15, 2006 @08:08AM (#16850364) Homepage
      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.
      • In my university, as I suspect in many, they were combined into one class. You could also take a second probability / statistics course (which I did, but most CS majors did not) as an elective.
      • In my experience, statistics has always been combined with probability. I agree that statistics is useless without probability. I'll amend my assertion to state that instead of (a year of) calculus, undergrads should be required to have (a year of) probability and statistics.
  • ballpark (Score:5, Informative)

    by superwiz (655733) on Wednesday November 15, 2006 @07:32AM (#16850212) Journal
    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.
    • by Coryoth (254751)
      Category theory (which is really just object-oriented math)

      Either you don't know or understand category theory, or you don't know what object-oriented means. At best you could claim your statement is a ridculous simpification (on par with "Algebra (which is really just math with letters)"), at worst its a fundamental misunderstanding of categry theory due to, most likely, a lack of ever actully having dealt with it.
      • by superwiz (655733)
        I live to learn. Do tell what differences they have. I am sure if you try to write them out coherently, you will find that the differences are in details. By as an abstraction (something the removes the details to look ideas pertenant to a subject matter discussed) they are similar in that they deal with study of relations (in plain english rather than math sense of the word) between objects. Therefore, to think about either cat theory or obj oriented programming one may adapt a very similar method of t
  • by Anonymous Coward on Wednesday November 15, 2006 @07:36AM (#16850232)
    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.
    • Re: (Score:2, Interesting)

      by Enselic (933809)
      I agree with Linera Algebra, if you know linear algebra, you can pick up on 3D rendering APIs easily, and making 3D games is great fun, and you learn a lot about programming in general, like the need to structure your code (source code of 3D games without good structure is hell to modify).

      Also, a lot of geometrical problems can be solved using Linear Algebra, things that can be useful in GUI code for instance (like, which of these arbitrary line segments are closest to the cursor, what angle does these line
  • by cperciva (102828) on Wednesday November 15, 2006 @07:46AM (#16850268) Homepage
    (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.
    • Re: (Score:3, Insightful)

      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 langu

      • I have an undergraduate degree in math and I know for sure it didn't cover everything described there. However, with independent studies, summer research programs, and semesters abroad at schools with a stronger math program, I was able to shore up those weaknesses. If I had been at a school that had a decent graduate program in mathematics I could've moved onto that during my senior year.

        More advanced topics in algebra are certainly not out of reach though, my school only had one semester of algebra, but
      • by lubricated (49106)
        That would be more of a degree in computational science. I should know this was my curriculum and I don't have a computer science degree but a computational science one.
    • Huh, I always felt that my CS undergrad degree was relatively weak, and we covered almost all of that list, with a few of them being optional.
      • Weak CS Undergrad (Score:3, Informative)

        by Dareth (47614)
        I have a CS undergrad too. I had the same concerns about areas of weakness in the education I received.

        I highly recommend the MIT Open Courseware [mit.edu] and the Webcasts at Berkley [berkeley.edu].

        Each provides a quite different approach to CS education. Just remember that you did not learn everything you will ever need to know in college. Hopefully your undergrad taught you how to learn new information quickly.
    • Re: (Score:2, Insightful)

      by kfg (145172)
      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 n
  • 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 tomhudson (43916)

      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,

      ... I guess spelling isn't one of those things you find "very usesfull on a day to day basis" ...

      • by SQLGuru (980662)
        Once SlashDot enables the F7 key when I post my P.O.T. comments, my spelling will "improve".

        (For those not keyboard friendly, that would be Tools / Spelling and Grammer in your MS Word application.)

        Layne
  • Statistics is the only maths course that I wish had been treated with more care in my CS degree, and in my Software Engineering related job(s) it's the one that I have had the most use and need of. Whether it's relevant for "pure" CS I have no idea, but would suppose that proper understanding and use of statistics is relevant for all science and engineering disciplines.

    Adding to that, though it's not exactly maths or CS as such, a better understanding of economics and the practical economic or accounting me
  • 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)
    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
  • 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?
    • Re: (Score:2, Insightful)

      by Der PC (1026194)
      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
    • ... do a maths degree ...
      Just out of curiosity, why do you guys say "maths" when Americans typically say "math"? Are we just using different abbreviations for the word "mathematics"?
      • by Manchot (847225)
        "Maths" is the British version of the abbreviation of "mathematics." The logic is that "mathematics" is in the plural, so "maths" should be as well.
    • In terms of being a programmer, I agree 100%, although I can't speak for SysAdmins.

      Before I came to Uni, I was considering doing a joint honours Maths & CS degree. I was advised against it by my A-Level (UK qualification; normally taking ages 16-18) computing teacher, who said that by doing just maths I'd actually end up being a better programmer. If I compare stuff I've written recently, with stuff I did for A-level projects, I'd say this is true - and there was a good year and a half gap where I
      • Re: (Score:3, Insightful)

        by bzipitidoo (647217)

        > 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

    • Re:Why do CS? (Score:5, Informative)

      by Opportunist (166417) on Wednesday November 15, 2006 @09:36AM (#16850916)
      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.
    • Re: (Score:3, Interesting)

      by microTodd (240390)
      Operating System developer.

      Compiler developer.

      Artificial Intelligence researcher.

      Search engine algorithm developer.

      I have a Master's in CS. Yes, I agree that at the higher end CS is basically a specialized math degree. But there is that touch of applied math thrown in that separates it from a mathematician or statistician.

      Even better, if you pair up a CS degree with something applied (physics, mech engineering, chemistry) you suddenly become someone very valuable to any organization trying to build advanc
    • Re: (Score:3, Insightful)

      by J-Doggqx (809697)
      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
    • Re: (Score:3, Insightful)

      by poot_rootbeer (188613)
      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
    • Re: (Score:3, Insightful)

      by Chandon Seldon (43083)

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

  • Intelligent Design!

    PUN Complete!
    • Oh! Now I know why we're always getting asked and begged as soon as some kind of electronic appliance stops working, from toasters to VCRs.

      In their eyes, we're God!
  • by A beautiful mind (821714) on Wednesday November 15, 2006 @08:25AM (#16850436)
    ...but generally I received much more maths than I've seen mentioned in other posts in my five years of university while studying CS (not in the US).

    The biggest chunk of it all was 6 semesters of Analysis [wikipedia.org] and 4 of numerical analysis [wikipedia.org].

    I was also told that only two other professions get slightly more maths: "applied mathematicians" and physicists.

    Am I wrong to assume that CS education is much more maths based in the EU than in the USA?
    • by drawfour (791912)
      At my school (in the US), my required math courses for my CS major were enough to be a minor, but of course didn't get credit for the minor. I think I was 3 math courses shy of a double major in CS and Math, but I had enough of math by that point that it was not going to happen. I thought most of the math was useless, though I'm sure some of it rubbed off into various problem solving skills. I can't tell you how other schools are in the US, but at mine, I definitely was given a big emphasis on math.
    • I don't know if our universities synch up exactly with yours in terms of meaning, but in the U.S. at the bachelor's level, it'd be very rare for anyone to have six semesters of analysis. Maybe if you count the calculus sequence and basic ODEs, but there's very little serious analysis generally occuring in those classes.
      • The "old" system I was studying in is equivalent of a Masters, it was one five year block. Then lately they changed to the Bolognese system of 3 years batchelor and 2 years masters. As far as I know they still have 6 semesters of analysis in the first 3 years of a batchelor degree.
    • Hmm... if I (European) remember correctly, first year was 8 hours/week math, second was about the same (plus 4h MathLogic), after that it tapers off sharply if you (unlike me) don't go for the statistics branch.
    • by Teancum (67324)
      One reason why mathmatics is so heavily emphasized is because the CS departments were often appendages to the mathmatics departments, or were started in the mathmatics departments. About 30 years ago (showing my age here) when you couldn't even get a CS degree, most computer programmers had a BS degree in mathmatics. Almost all of the older CS professors usually had a PhD in Mathmatics, although one of my best CS profs had his PhD in Biology (and turned out to be the graphics algorithms teacher at my univ
  • by Twylite (234238) <twylite@crypt . c o.za> on Wednesday November 15, 2006 @08:41AM (#16850540) Homepage

    Start by making sure you understand the distinction between Computer Science and its related disciplines, and that this is a CS course. Read the overview report from the ACM Curricula Recommendations. [acm.org].

    It is apparent from the ACM's recommendations (amongst others) that a lot of mathematics traditionally covered at universities(such as calculus) is not strongly related to Computer Science. That said, there are many applications of computing that require strong skills in these areas (scientific computing and cryptography for example) so they are not a bad option.

    Important numerical and logical fundamentals that support the learning and use of undergraduate Computer Science include:

    • Basic computing theory (formal grammars and finite automata). Understanding the qualities and use of state machines and formal grammars is essential in many fields of computer science including algorithm and protocol design, modeling robust systems, and creating parsers (e.g. for domain specific languages). It is also necessary to understand the halting problem and turing theory. Most of the theory requires the use of proof by induction or construction, which (in my experience) are the most common proof techniques in CS.
    • First-order logic (predicate calculus). Also exceptionally valuable in the development of data structures and algorithms, and for communicating between domains.
    • Graph theory. Understanding complexity, efficiency and optimisation in many aspects of CS (including compilers, algorithms, networks, data structures, etc) requires an understand of graph theory.
    • Statistics. You will use it in most forms of analysis, at least to verify that a real-world realisation matches the predictions of a theory. Also valuable for performance analysis and optimisation to determine performance distribution and bounds.
    • I'd have to agree with the beginning of your post: Calculus isn't all that useful to a CS major. Don't get me wrong, calculus is useful in and of itself, but since computers can't do integrals or derivatives, it's kinda useless. Calculus combined with something like numerical methods, which teach you how to use various methods of approximation and interpolation to get a computer to understand calculus...well... that's a different story. Even then though, I don't tend to use calc or numerical methods for muc

      • by Twylite (234238)

        I have worked with parsers and compilers in the past, but most of my time now is working with crypto ;) That said, I'm an SE by practice although a CS by qualification.

        In my line of work SE and CS come together when I get to protocols and algorithms. Formal grammars are essential in describing protocols (think BNF) and modeling for robustness. As an example, getting FIPS certification for crypto hardware requires submitting a finite state model of the firmware.

        I have a poor grounding in graph theory

  • I'm not a Computer Scientist- I'm an EE- and I may be biased towards the engineering type courses, but I think some digital signal processing type courses would be incredibly useful (beyond just engineers). Of course, there are a whole bunch of prerequisites, including calculus, differential equations, signals, and probability/stochastic processes. Not every CS major is going to be working on making new OSes- there has to be some application processing going on, and if you are working on data derived from
    • by TeknoHog (164938)
      I second the idea that you need calculus for many CS applications, for example probability and DSP, but there are also less obvious reasons to take calculus. For example, understanding the Fourier transform framework (with convolution theorem etc.) is a great eye-opener in many ways, and it comes up in surprising places. For example, Shor's factorizing algorithm depends on FT.
    • I am from CS background, and I third the nomination of digital signal processing. I had to go to the EE department for the course, and managed to get through is without taking linear algebra first, but that would have made it easier I think.

      I haven't found many uses for fourier transforms, but low-pass filters and auto-correlation functions have been extremely useful in a variety of applications.

  • Depends totally on what direction you're planning on taking.

    If you want to go onto grad school, double major in math and take everything you can. Electives and even core requirements probably have heavy overlap. It tends to be one of the easiest combinations in terms of course load. Also consider testing out a fall semester grad class or two in your senior year. These will probably look a lot like math classes. If you can't hack an undergrad math degree, odds are very good that the graduate CS program will
  • 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.
  • Lots (Score:2, Informative)

    by ggKimmieGal (982958)
    The CS students who make it through a lot of math often end up being better programmers. I'm not sure if that's a true statement, but it certainly seems to be true where I go to school. Calculus Calculus Calculus! So important! At least one semester of calc is necessary, but I would say if you can squeeze in multi variable calculus, you're good. Multi variable + Linear Algebra (matrix math) is really good. I would say the matrix math is much more important though. And discrete! Now, we actually have
  • Math courses (Score:2, Informative)

    by ShorePiper82 (1027534)
    I recently graduated from NJIT with a BS in Computer Science and a minor in Applied Mathematics. The fundamental courses were 3 semesters of Calc(I/II/II). Probability & Statistics, Discrete Analysis, Differential Equations as per the engineering requirements and enforce formal thought (except maybe discrete, that is considerably more out of the box). One of the most important courses I took was Linear Algebra. Dealing with matrices is fundamental... but more to the point: anyone even considering graph
  • Every math course I've taken has in some way been useful to me as a computer scientist (this is partially because the area I'm interested in researching is applying mathematical concepts to CS topics, however). I would recommend at least minoring in math if you're going to do a CS degree.
  • by robkill (259732) on Wednesday November 15, 2006 @10:11AM (#16851342)
    Ron Graham was head of Math Research at AT&T Bell Labs back in the '80's. Knuth should need no introduction.

    Concrete Mathematics [amazon.com]
  • 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
  • ... were Boolean algebra, numerical analysis, matrices, queueing theory, and a semester of descriptive stat. I didn't find linear algebra of any use to me, nor the year of formal stat. Calculus is kinda like long division -- I don't use it much (if at all), but it's good to know it's there.

    Oh, and some of my pals recommended formal logic. I skipped that, 'cause I wasn't terribly interested in spending a semester playing word games. I don't think I've ever missed it, but someone else who actually took
  • Which was required for my degree. As a DBA today, you have to use this, as even single machines are going into parallel processors. So one has to use Prob and Stat to calculate what the machine is going to do. And while I was working on Teradatas, with as many as 150 parallel processors, I lived in that world.

    Even the micros today are going to parallel processors. Calculas? Haven't touched it in 25+ years in the business world of CS.

    The other course that was useful was data structures. Tought me to th
  • I received both a BS and an MS in computer science at Stevens Institute of Technology back in 1993. Most of the classes people are suggesting here were all required to earn the undergrad degree there; in addition to 3 semesters of Calculus, you also had to pass discrete mathematics, statistics (two semesters of that), and linear algebra as part of the standard program.

    Out of the required math classes, two stood out as being particularly helpful for my career in software development. The introductions to l
  • by Halo- (175936)
    When I was in college, I struggled with Calculus. It got to the point where I really thought I was "not good at math" because I wasn't good at calc. Then I discovered I didn't need to take Calc II/III or Differential Equations. I could substitute more "advanced" classes like Graph Theory, Number Theory, and Cryptology.

    Suddenly I was good at math. Not only that, but I got a whole lot better at computer science. The more advanced classes focus more on how to think logically, and how to operate in proce

  • That boolean algebra/logic be taught as well. You would think that would be a 'no-brainer', but that's the phrase I used to describe some code recently. And I can't tell you how many times I've had to fix someone else's program because they had a series of conditions totally messed up.

    At least one, I rewrote the whole thing, because not only did the other coder have the wrong logic in place to try and solve what he wanted to solve, it was also ordered very poorly.

    At least one class on probability and stat
  • At least an introductory course in numerical analysis should be included. I know, I know - no one does arithmetic with computers. But somehow, in my career, it has arisen time and tine again.
  • Symbolic Logic (I know this is usually a Philosophy course, but it helped me with programming)
    Trigonometry
    All the Algebra courses
    Calculus 1 and 2
  • Maybe not a full semester, but at least a couple of weeks in a discrete math class should be devoted to information theory. Even if you can't implement a state-of-the-art one, you should understand the basics of error correction, cryptography, data compression...
  • Definitely:

    1. Discrete Math [wikipedia.org].
    2. Number Theory.

    Optionally:

    1. Probability / Statistics.
    2. Numerical Analysis [wikipedia.org].
    3. Linear Algebra.

    Unless you're going to be an engineer or scientist, I don't consider Calculus and Differential Equations to be essential. Only insofar as they contain material that's prerequisite to Numerical Analysis and/or Linear Algebra.

  • I dont know if they still contnue this, but when I was in grade-school they always taught us generally useless set theory in elecmentary school arithmentic. Concepts like "associative", "communitive', "union", "intersection", etc. Ironically this stuff become more useful in CS- for structured programming, compilers, digital circuit design.
  • CS is not math. You can get by in CS having just taken algebra and geometry.

    CS does involve a lot of number theory, which falls under philosophy departments at most universities (number theory is not math; it also analyzes non-mathematical properties of numbers.) I highly encourage anyone interested in CS to take a lot of philosophical logic classes; many of the techniques for analyzing sets/possible worlds are highly applicable to data structures in CS.

Ernest asks Frank how long he has been working for the company. "Ever since they threatened to fire me."

Working...