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

392 comments

  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.

    3. Re:It realy doesn't matter by Nutria · · Score: 1
      lower level languages (C++)

      Is C++ really now considered "low level"

      --
      "I don't know, therefore Aliens" Wafflebox1
    4. Re:It realy doesn't matter by 0racle · · Score: 2, Funny
      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.
      --
      "I use a Mac because I'm just better than you are."
    5. Re:It realy doesn't matter by Malc · · Score: 1

      > Passion (The love of the art of programming)

      That way the young naive inexperienced hires can be taken advantage of, and the little blighters can be abused. They won't know better because they'll be lovin' it. So what if five years or so down the road that the business will have sucked out all of their passion with the grind and made them come to hate the one thing they liked.

      Oh, am I being cynical? I keep my hobbies and interests to myself and away from work. That way I can still have fun and enjoy life.

    6. Re:It realy doesn't matter by Llywelyn · · Score: 2, Insightful

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

      --
      Integrate Keynote and LaTeX
    7. Re:It realy doesn't matter by Anonymous Coward · · Score: 2, Informative

      Let's make something clear, here: You're not hiring computer scientists. You're hiring developers. The two sets share members, but they are not one and the same thing. It should come as no surprise at all, I suppose, that /. folks never know the difference.

      Ultimately your influence (and other industry folks like you) moves the direction of undergraduate computer science departments and education in a direction that is absolutely orthogonal to where it should be going.

      "practical business applications" have zero to do with computer science.

    8. Re:It realy doesn't matter by Anonymous Coward · · Score: 0

      Yeah...Mathematical Logic defies, well, logic..so that's out.

      I'd make discrete math, graph theory, linear algebra and numerical analysis mandatory. The rest I'd leave up to the student.

    9. Re:It realy doesn't matter by exp(pi*sqrt(163)) · · Score: 2, Funny

      Hence my sig :-)

      --
      Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
    10. Re:It realy doesn't matter by Anonymous Coward · · Score: 1, Insightful
      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.
    11. Re:It realy doesn't matter by MrAnnoyanceToYou · · Score: 1

      Logic is by its very nature an abstraction of reality, so from a certain viewpoint any time you apply logic it is illogical to do so.

      Yes, I majored in Philosophy. It made me a much better programmer. This isn't saying much, but there you go.

    12. Re:It realy doesn't matter by Anonymous Coward · · Score: 0

      FYI, I don't think it's fair that you got mod'ed down. Your point was completely fair and correct.

    13. Re:It realy doesn't matter by Thusi02 · · Score: 1

      When I did my B.Sc, I found those dreaded math courses to be rather "non" useful. Specially abstract algebra and graph theory. However, once one gets into the industry and really programs live applications, it is almost mandatory to know the essential calculus, algebra and most importantly graph theory. I mean without graph theory could you really have Google give out search results within a matter of seconds? I think not. Also could the problem P = NP Complete be ever solved? (hopefully it is not solved anytime soon) Many other mission critical applications in computer science are back boned on the knowledge of mathematics. Thus, I must say the more math you take, the better your reasoning and logical arguments will be.

      Lets not take for granted that 1+1 = 2, but now can you prove why that is so?

      Cheers,
      Thusjanthan Kubendranathan

      --
      For all your coding questions? http://letstalkcoding.com
      For all your development needs! http://simtik.com
    14. Re:It realy doesn't matter by Anonymous Coward · · Score: 0

      You are making the unfortunate mistake of confusing academia with industry. While the points that you raise may be valid, they don't really help you in computational theory in academia, which is where the math stuff really matters.

    15. Re:It realy doesn't matter by SeattleGameboy · · Score: 2, 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 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.

    16. Re:It realy doesn't matter by bigdavex · · Score: 1

      Communication skills (The ability to understand and be understood, both written and verbal)

      I'd really like to correct you here by saying you meant written and oral, but apparently there's a few hundred years of precedent on your side for using the word verbal to mean oral.

      It seems like a waste of a perfectly good word to me.

      --
      -Dave
    17. Re:It realy doesn't matter by acgrissom · · Score: 1

      We have to remember that these students are supposedly studying computuer science and not "computer programming," information technology, or some other barely related field. Computer science is based on mathematics. If someone graduates wih a bachelor's degree in CS and can't write a proof by induction, he doesn't know computer science. Every computer science student should not basic calculus. It might not come up, but no one in any science, especially a mathematical one, should be ignorant of what a derivative is. Most important is discrete math or Intro. to Advanced Math/Theorem Proving. Algorithms Design and Analysis could be considered a math course. They have to know asymptotic complexity and write proofs about it, which means that they must have an understand that math behind it. Computer scientists, unlike the life science at the undergraduate level, should not be memorizing a few rules; they shoul be mathematical thinkers. If you can't write a proof of your algorithm's correctness and don't know what an NP-Complete problem is, then something is wrong. If you don't know what O(n log n) means, then buy an algorithms book right now and read it. Prob/Stat and linear algebra can be useful, but anyone who has taken the aforementioned courses should not how to think and learn on his own by the time he graduates. For those going to graduate school, they will need all of these and theory of computation. It's all about the proofs in computer science. If schools want to offer degrees in software engineering, then they can omit a lot of the math, but as long as it's computer science, the math needs to be there.

    18. Re:It realy doesn't matter by Maltheus · · Score: 1

      I went with the "as little math as possible" route. We go to school to get the degree, but if you're the type who needs to be taught how to program, then you'll likely wash out sooner or later anyway. Or you'll make it into the field and then one day decide that it's not your thing. Liberal arts courses are better for teaching a person how to think (assuming you can see past the teacher's bias). The balance is of greater benefit to techie type than any calculus course. I never understood my classmates taking differential equations, simply because it seemed like a good match for CS. College shouldn't be treated as a vocational school. If you have a choice, you should take courses far removed from your central discipline. After college, you'll have nothing but tech. And believe it or not, philosophy and history do come in handy more often than one would think.

    19. Re:It realy doesn't matter by RingDev · · Score: 1

      Let's make something clear, here: You're not hiring computer scientists. You're hiring developers.

      Which weighs in even MORE heavily on the orginal question. There are far more application/software developer employment oppertunities in the world than there are computer scientist. If you are looking to produce graduates who can work well in the vast majority of environments, you should focus more on fundamentals (proofs, proofs, and yet more proofs). If you're looking to produce graduates specializing in computer science fields associated with other science fields, then in ADDITION to fundamentals (once again: proofs, proofs, and more proofs) you sould cover the specific math courses that they are likely to encounter in the field they are working in.

      -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
    20. Re:It realy doesn't matter by h4ck7h3p14n37 · · Score: 1
      Is C++ really now considered "low level"

      Sadly, yes. Many computer science curriculums don't cover assembler anymore. I'm not sure about microcode; I assume that computer architecture courses still cover that area.

    21. Re:It realy doesn't matter by Nutria · · Score: 1
      Sadly, yes. Many computer science curriculums don't cover assembler anymore.

      I guess I'm geezer enough to remember the differences between C (high-level assembler, maps easily to PDP-6 assembly) & C++ (object-oriented abortion).

      --
      "I don't know, therefore Aliens" Wafflebox1
    22. Re:It realy doesn't matter by CastrTroy · · Score: 1

      I think that a love for programming is important because they are more likely to learn stuff on their own time. This means they have more knowledge than those who haven't bothered to learn anything in their spare time. Granted it's still possible to find good programmers, who never do it in their space time, as well as find people who love to program, yet aren't very good at it. But overall, it's a pretty good metric to use when trying to determine if someone is a good candidate for a job.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    23. Re:It realy doesn't matter by IngramJames · · Score: 1

      Potential. Hard to judge in a recent grad, but I want people who strive to accomplish more than their current position.

      I think you are confusing potential with ambition. The ambitious want (sometimes desperately) to accomplish more. The ones with potential, however, do demonstrate an ability which is beyond what you are hiring for.

      An example: You own a car wash. The guy with ambition wants to own a car wash one day, but has no clue how he'll do it. The lass with ambition says: "You just wash the cars? Couldn't you offer to vacuum inside too?" That lass is going to own a better car wash than you, one day.

      As for maths; I gave up on the A-level. Calculus was just beyond me, and I never grasped those damned curvy graphs. Today, I understand how interest rate swaps work - and how to calculate if they will be profitable. All I need is a Business Analyst who knows *her* maths to explain the business logic and give me an equation to implement. Basic alegbra and logic have served me well enough. That and a love of hex, of course ;)

      I don't need to derive the algorithms myself - just to implement them.

      --
      'No rational religion claims "supernatural" exists, that's an atheist slander.' - seen on slashdot.
    24. Re:It realy doesn't matter by __aaclcg7560 · · Score: 1

      They don't want to scare the kids by teaching them assembly language.

    25. Re:It realy doesn't matter by Malc · · Score: 1

      Ahhh, looking to avoid paying for training (either through courses or allowing for adequate time during hours contracted).

      I can see your point. I think however there's a much more fundamental quality in people that's harder to find/determine: are they self-motivated, savvy, able to understand and focus on the business needs. It's a personality trait. You can only begin to figure this out by understanding what the person likes to do in their spare time (at the risk of sounding judgemental: do they sit watching TV, or do they have a bunch of activities and interests?). What kind of holidays do they take - organized package holiday on a beach resort (baaa baaa), or do they go in search of something uniquely their own experience?

      At the end of the day, a job's a job. Making somebody else rich will stop being exciting after a while. The reality with programmer jobs is that they require a lot of meticulous attention to detail and working on some mind-numbingly tedious tasks, and being asked to do things that aren't going to be in their core area of programming excitment. Without becoming lazy and sloppy. These jobs can be a real grind. How will they handle that?

    26. Re:It realy doesn't matter by Anonymous Coward · · Score: 0

      Those criteria are because you seem to want to hire programmers, not computer scientists.

    27. Re:It realy doesn't matter by zoephile · · Score: 1

      Having a math degree has probably gotten me more jobs in CS than had I had a CS degree. If you want a "computer programming" job you should have a basic math background and focus on learning how to program, i.e. C++ Java, VB, etc. Private industry HR deps seem to like that stuff because it sounds cool and impressive. If you want to work in "computer science" or related are a good math background and solid reasoning/problem solving ability is probably more important than knowing VB, .NET or Java. Some good courses that I would recommend. Calculus (levels 1-2) Linear Algebra Abstract Algebra (essential if you want to design cryptosystems) Combinatorial Analysis Probability Theory Graph Theory "Discrete mathematics" to name a few. The latter courses are probably more important than the calculus but, a working knowledge of the Calculus and the concepts of limits, differentiation and integration are quite worthwhile.

    28. Re:It realy doesn't matter by RPGonAS400 · · Score: 1
      I agree with what you say and I think I could be a "good talent" you are looking for. My resume can be found on (in pig latin with no spaces) www dot resume dot airblay amrenhay dot com. My initials are bh if that helps. I read through your past posts and unlike one of the posters before me, it sounds like you would be great to work for. I am hoping you can contact me via theemail from my resume since I do strive to accomplish more than my current position. I am waiting until this thread is a bit older to post since by now most people have stopped paying attention to it.

      I graduated with a B.A. in Mathematics with a Computer Science minor. When I started my first job, I had never even heard of RPG or an IBM System/34. I had enough of a background programming that learning new languages were not a problem. Like you said, specific languages can be taught to the right person very quickly. I have found that my math background has been very helpful in following logic in programs, especially complicated selection processes. It also was a huge help when we were developing our own graphics package and we had to create parabolas to build "ties" and "slurs" in our home grown sheet music program that printed on a digital typesetter in the 1980's.

      I find that business skills and interpersonal skills are more important than all my programming and technical skills. If I am the greatest coder ever, it does me little good if I cannot communicate with those that I am coding for, both in a personable way and with a good degree of understanding of the business problems they want me to help them with.

    29. Re:It realy doesn't matter by Nutria · · Score: 1
      They don't want to scare the kids by teaching them assembly language.

      Wimps.

      You're not a Real Programmer if you don't know Assembly.

      --
      "I don't know, therefore Aliens" Wafflebox1
    30. Re:It realy doesn't matter by rachelprogress · · Score: 1

      C++, Java, etc., are still high-languages in my curriculum, at least. There's a core CS class here, Program and Data Representation, which through its coursework covers a great deal of Assembly as well as C. Course Offering Brief: Introduces programs and data representation at the machine level. Data structuring techniques and the representation of data structures during program execution. Operations and control structures and their representation during program execution. Representations of numbers, arithmetic operations, arrays, records, recursion, hashing, stacks, queues, trees, graphs, and related concepts.

      --
      _miss rp
  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 nelsonal · · Score: 2, Interesting

      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.

      --
      Degaussing scares the bad magnetism out of the monitor and fills it with good karma.
    6. Re:computational statistics by LizardKing · · Score: 5, Funny

      What about the other 23%?

    7. Re:computational statistics by Metasquares · · Score: 1

      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.

    8. Re:computational statistics by Gr8Apes · · Score: 1

      I had both. I've used far more calculus than statistics over the past 20 years. But what I've used most is linear algebra.

      I suppose it depends upon what you do as to what you'll need. Since what I do now is radically different than what I'd thought I'd be doing when I graduated, I'd say requiring a basic set of math skills (algebra, calculus, statistics) is appropriate.

      --
      The cesspool just got a check and balance.
    9. Re:computational statistics by dslauson · · Score: 1

      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 where you end up in your career, but having the right tools will also help steer you in a good direction in that career. And, definitely, if you want to go further in school than a bachelor's, you'll need all the math you can get. The problem at most universities is that they can only really have so many required courses and still have students graduating on time, so they leave the rest up to electives.

      While I'm on the subject, I'd recommend discrete math, linear algebra, and at least one course that teaches you the fundamentals of logic and proof writing. And, like I said, calculus and statistics.

    10. Re:computational statistics by Peter+Mork · · Score: 1

      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.

    11. Re:computational statistics by chroot_james · · Score: 1

      43% of people make statistics up!

      --
      Reality is nothing but a collective hunch.
    12. Re:computational statistics by The_Wilschon · · Score: 2, Informative

      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 naive form of statistics. A naive stat will involve necessary weaknesses which will quickly begin to be exploited by newspaper studies, just as a complete lack of statistical knowledge is exploited now.

      My own field, physics, is the same way. You can teach algebra-based physics, but it is much harder to learn than cal based physics, and you can't do nearly as much with it.

      --
      SIGSEGV caught, terminating

      wait... not that kind of sig.
    13. Re:computational statistics by Anonymous Coward · · Score: 1, Informative

      A "naive" statistics course is indeed more valuable than none at all. I took a stats course for psychology majors that replaced the calculus with lookup tables. I didn't really get the math involved until later, when I took calculus, but in the meantime, I was able to interpret statistics, understand key concepts, and tell when I was being lied to with numbers.

      That said, a "naive" stats course is more valuable to creating a good citizen than to building a foundation for success in computer science.

    14. Re:computational statistics by Anonymous Coward · · Score: 0

      They are still learning how to subtract.

    15. Re:computational statistics by Llywelyn · · Score: 1

      You think a statistics class without calculus is worth anything?

      Interesting.

      --
      Integrate Keynote and LaTeX
    16. Re:computational statistics by notthe9 · · Score: 1

      A year of Probability Theory? I simply cannot imagine needing a two semester of probability theory before a statistical analysis course. A pure probability course at a low level lacks a sense of motivation without crossing over into statistics, and a pure probability course at a higher level is unnecessary for basic statistics.

      I cannot speak to what a CS degree should encompass, precisely (My field is civil and structural engineering; I have had some, though little, experience in the programming industry," but I suspect you are quite wrong about what is needed. Certainly for other sciences, I believe you are. All that is intended is a primer on these topics. Students will eventually end up doing something specific and will at that point develop more advanced understandings of what their actual tasks are.

      Ideally all topics would be covered in-depth, but they cannot be.

    17. Re:computational statistics by CharlesEGrant · · Score: 1
      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.

      Umm... I think you'll find that a serious stat course will require a year of calculus as a prerequisite. Yes, most universities do offer something called "descriptive statistics" that doesn't require calculus, but I don't think is it would be very helpful to C. S. students. The important notions about continuous distributions and confidence intervals are taught much more easily after you've don first year calculus.
    18. Re:computational statistics by Anonymous Coward · · Score: 2, Funny

      Also, they should be taught Latin. The plural of curriculum is curricula, not curriculae.

    19. Re:computational statistics by frank_adrian314159 · · Score: 1
      I'm not quite sure how you're planning to teach statistics in any meaningful way without using calculus.

      Amen. You don't necessarily need to know formal definitions of measure and understand Borel spaces (though that doesn't hurt), but you at least need something approaching calculus. The only thing you can teach about stats without calculus is a bit of sampling theory and some formulaic definitions of terms. And even that's only over discrete spaces. As far as I know, you can't even explain the Law of Large Numbers without limits (and that's the weak law - the strong law requires at least Taylor's theorem). And, if you're looking at continuous distributions (which most of the world actually is best modeled by) you can't do *anything* without calculus. The bottom line is that stats without calculus is almost useless.

      --
      That is all.
    20. Re:computational statistics by xenocide2 · · Score: 1

      You've probably never heard them call it the first derivative because they call it "marginal rate". It's so important they came up with their own jargon to confuse people who aren't in the in-group. Most of what businessmen deal with is rates of change, ie "everything is on the margin," but the only way we know what the curve even looks like is through statistics.

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

    21. Re:computational statistics by Anonymous Coward · · Score: 0

      At Texas A&M all undergrads are required to take stats. As a Applied Mathematics Major with Computer Science option, I have to take 2 semesters of stats.

    22. Re:computational statistics by Lemmeoutada+Collecti · · Score: 1

      Of course there is also a 100% probability (50% margin of error) that you are correct within a 3 sigma range about that.

      --

      You can have it fast, accurate, or pretty. Pick any 2.
    23. Re:computational statistics by generalphilips · · Score: 1

      I agree that everyone should learn basic statistics. I think as Computer Scientists, we start to think that discrete math is all the math you'll ever need. But at least we know there are such things as continuous models. If you take away Calculus, students will never learn to make the jump from discrete to continuous. I think that is an essential tool. Even if you cannot remember how to do it years later, it is at least a known unknown.

    24. Re:computational statistics by Sage+Gaspar · · Score: 1

      Calculus is an interesting learning tool I think. Not for the standard reasons that it demonstrates your critical thinking and all that crap, but because, if taught correctly, it can be the first really rigorous exposure to approximations, when they converge, when they don't converge, etc. If you can understand calculus on a rigorous level, I think you've learned something pretty valuable. If you just know the formulae and the rules, you've learned something that's conditionally useful, but only if you can directly apply it.

      As to mathematicians using calculus, certainly not all of them do, but I don't think there are any out there that don't appreciate its power, and it's pretty fundamental to a fairly wide swathe of mathematics. Even if you do work purely with the discrete, most times there is some overlap. Embedding your discrete object into some other continuous space can provide interesting results. And there are things like generating functions, whose series expansions can give you the terms in a discrete sequence. There are also formulations of discrete derivitive...ish things.

    25. Re:computational statistics by nelsonal · · Score: 1

      I actually switched from engineering to economics, and it wasn't too long before I caught on to that linguistic difference. Unfortunatly most folks who use marginal rates don't seem to understand the relationships between a changes in the first and second derivative and changes in the function. I had the misfortune of having several far too many people who should have known better folks attempt to convince me that because the second derivative was negative that the underlying function would have to decline instantaniously or it indicated fraud, while I just shook my head in amazement.

      --
      Degaussing scares the bad magnetism out of the monitor and fills it with good karma.
    26. Re:computational statistics by pyite · · Score: 1

      In taking graph theory, I expected the use of calculus to be quite low, and in the end it was, but every now and then you have to pull out calculus to prove results. For example, the crux of the argument for proving that if a simple graph G_n on n vertices has more than (n - 1) choose 2 edges, G_n is connected, comes down to a simple maximization problem. You basically end up proving that the "worst case scenario" is when (n - 1) of those n vertices form a complete graph and another edge *has* to make the whole graph connected.

      It was sort of funny watching the professor coax along all of the 400 level math class into saying "Take the derivative, set it equal to zero."

      Bottom line: I agree with the parent; calculus is still useful despite computer science being on more of the discrete side of things.

      If you've read any of The Art of Computer Programming, or Concrete Mathematics, in fact, you'll realize that Knuth's publisher probably wishes they could charge by the integral symbol, as there are a heck of a lot of them.

      --

      "Nature doesn't care how smart you are. You can still be wrong." - Richard Feynman

    27. Re:computational statistics by arivanov · · Score: 1

      Err...

      I suspect that you are not aware of what a year of probability actually encompasses in universities that teach that. May I suggest that you go and get a decent Probability Theory textbook for Math students used in a real university. Feller's "An Introduction to Probability Theory and Its Application" v1 and v2 (each volume is a semester) is possibly the best example (one of my favourite books actually). There are a few more recent alternatives which I personally find inferior. Feller remains the best textbook out there and the only one which constitutes enjoyable reading (though rather expensive).

      Beware that in order to understand the second volume which is the one you need to understand behaviour of systems like IP networks (especially QoS), transaction systems, OS under heavy load, etc you need at least a full calculus and possibly some algebra and functional analysis to boot.

      Oh, by the way, I forgot to add QoS and QoS/Service control to the list of subjects where without knowledge of probability theory you will drawn in 10 minutes or less.

      --
      Baker's Law: Misery no longer loves company. Nowadays it insists on it
      http://www.sigsegv.cx/
    28. Re:computational statistics by IngramJames · · Score: 1

      What about the other 23%?

      I would remind the honourable gentleman that 86.543% of statistics are made up on the spot.

      --
      'No rational religion claims "supernatural" exists, that's an atheist slander.' - seen on slashdot.
    29. Re:computational statistics by vladsot · · Score: 1

      I agree, statisticis is in my expreience just the synthesis of the results given by probability. Markov chains, as far as I know, have been discredited due to what is essentially abuse by statisticians, that did not understand the underlying assumptions that allowed processes to be modeled with Markov Chains(and since these are matrices, you get linear algebra). The most important ability that should come from some math course, is the axiomatic approach to generating a model. If anyone, it is CS people that should have a good understanding of relations, equivalence classes, sets and functions. CS is made of the same basic structures and basic relations as mathematics, so a rigorous understanding is definitely helpful. Mutli-variable calculus, linear algebra, they are usefull in essentially anything modeling the real world in human-readable form (graphics, sound, forces, whatever). It is also essential for optimizing code, algorithms, etc. It is sad, however, that in this day optimization is largely neglected.

    30. Re:computational statistics by Viv · · Score: 1

      Of course, you can't *really* understand statistics and probability without calculus.

      So, no, you don't want to replace calculus. You want statistics on top of it.

    31. Re:computational statistics by notthe9 · · Score: 1

      I would not say I am completely aware of what a year of probability would accomplish, but I have read a couple pure probability texts (I cannot name them offhand, but it wasn't Feller's texts). Didn't absorb all the well, but did get a feel for what probability theory looks like. I cannot imagine how this should be prerequisite to a first computational statistics course.

      I'm not saying probability theory is not important to computer science. I'm just still wondering how two semesters of it need to be done before basic computational statistics may be taught.

  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.
    1. Re:ballpark by imbaczek · · Score: 1

      Add discrete mathematics (especially graph theory) to that list. I'm quite surprised you didn't mention it in the first place, and even more surprised that you mentioned calculus of 2 variables instead. That's a whole lot less useful than being able to think about problems in graph terms.

    2. Re:ballpark by Anonymous Coward · · Score: 0

      Object-oriented math:
      Billy has four apples. He gives one to his friend Janet. How many apples does Billy have left?

      (sorry, i couldn't resist)

    3. Re:ballpark by superwiz · · Score: 1

      I mentioned calculus of two variables for a very specific reason. You cannot understand the gaussian curve without it. "Discreet math" was covered under combinatorics which I said should be covered in probability. Graph theory (from combinatorial rather than topological point of view) would be part of an extensive linear algebra course (or series of courses). I should have made it clear that I think that rather than having the usual Calc 1,2,3 there should be Calc 1,2 and Linear Algebra 1,2,3. What I am on the fence about is whether or not abstract algebra would be too far off field. Certainly it would help to understand linear algebra on a much deeper level... but it might be too deep for anyone who wants to concretly compute network-traversal times to care.

      --
      Any guest worker system is indistinguishable from indentured servitude.
    4. Re:ballpark by mikael · · Score: 1

      Billy has 0x0000003 apples left

      --
      Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
    5. Re:ballpark by Coryoth · · Score: 1
      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.
    6. Re:ballpark by superwiz · · Score: 1

      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 thinking. I was not comparing them feature-to-feature. I was saying that thinking about concrete categories may be a useful training for thinking about classes. Thinking about categories ("at large", so to speak) may be a useful training for thinking about abstract classes.

      --
      Any guest worker system is indistinguishable from indentured servitude.
    7. Re:ballpark by Metasquares · · Score: 1

      You can understand how the normal works fairly well without needing to work its equation out, so I'm not sure it pays to take an entire multivariate calculus course for that one purpose. Besides, a reasonably intelligent person with a solid knowledge of univariate calculus should be able to figure out how to do partial derivatives (ignoring directional derivatives, gradients, etc.) and multiple integrals (again, ignoring things like line integrals) fairly easily without the need for a multivariate calculus course - well enough to work out something like the distribution function for the normal, anyway.

      Abstract algebra is useful in automata theory, so I would recommend it. It's also pretty handy if you want to do research in mathematics.

      Graph theory should be offered as a standalone CS course, IMO. At my university, it was crammed into the Algorithms II course and hardly mentioned in Discrete Math (though that was before they established a special Discrete Math course for CS majors, which goes into much greater detail on graph theory and combinatorics, at the expense of some number theory).

    8. Re:ballpark by SQLGuru · · Score: 1

      Two, but one is an Apple IIGS and pretty much worthless.

      Layne

    9. Re:ballpark by Coryoth · · Score: 1

      And yet categeory theory gets far more use in computer science in the field of functional programming. Your definition "the study of relations" is, I agree, sufficiently abstract and vague that category theory and OO both sort of qualify, but I would suggest they are far more divergent than similar - a point of intersection "they both deal with the study of relations" amongst many properties is hardly insightful. I may as well say math and poetry are pretty much the same since they both deal with the manupilation of symbols into effective structures. It is a a strange sort of reductionist thinking to dismiss category theory as "just math with objects". Why not try looking into Intuitionistic Type Theory or Institutions or Monads for examples of category theory in computer science.

    10. Re:ballpark by Aaron+Denney · · Score: 1

      There is actually quite a bit in generalizing from 1 to 2 that is not trivially obvious. Going from 2 to 3, on the other hand is fairly trivial.

      Statistics without a good course on probability can't get beyond the cookbook stage, and really applying it needs to do that in many cases.
      Statistics is very useful methodology for compactly summarizing frequency and probability distributions.

      Of course, good probability courses are quite rare. Probabilities are not merely long-term frequencies, borel sigma algebras provide no insight, etc, etc. Reading E.T. Jaynes' book _Probability Theory: the Logic of Science_ is a great introduction. Just ignore anything he says about quantum mechanics.

      Of course, people really should learn both probability and calculus before they even get to college, but expecting that might be a bit much.

    11. Re:ballpark by superwiz · · Score: 1

      I agree that it was reductionist. I myself am not an expert in the fine points of Category Theory. I view it as most working mathematicians probably do -- a language to describe the diagram chasing that we so often find outself doing. In that sense, computer scientist (or a software developer) could learn from it and adapt to thinking about problem-domain objects (vs. the mathematical objects). What you call "reductionist" I would call "abstracting". Do you not agree that to come up with an abstraction is to reduce an idea (or set of ideas) to just the pertinent details? I am guessing that you are intimately familiar with the Category Theory and what you are really objecting to is the word "just" as being too dismissive. It wasn't. Catagegory Theory, I am sure has its proper place in solving a certain class of problems (I can't think of any off hand, but again -- not an expert). But to a professional programmer the most useful part of the Category Theory is that it trains one to think about abstracting objects into abstractions relevant to the problem domain.

      --
      Any guest worker system is indistinguishable from indentured servitude.
    12. Re:ballpark by Coryoth · · Score: 1

      May I refer you to this post then, from a poster who gives an elegant description of various ways in which category theory can be effectively applied to computer science in a practical way, and as more than just a model of abstraction. As to what abstraction is I just wrote an essay on that, and my point would be that while abstraction is, indeed, to reduce an idea to the pertinent details, there is the question of which details are pertinent. I would suggest your particular abstraction is leaving out some rather important ones.

    13. Re:ballpark by cgibbard · · Score: 1

      Indeed, most of the new techniques for constructing embedded domain specific languages are being stolen from, or at least are completely explicable in terms of category theory.

      There are quite a number of completely practical techniques for structuring programs -- monads being the star player at the moment, and of course, their dual, comonads, as well as applicative functors, and Hughes' Arrows which have their foundations in category theory. One doesn't need to understand category theory in order to understand the way in which these abstractions apply to programming, but it certainly helps. I certainly don't think that even these things have been completely mined -- for instance, we only have a few ideas so far about how comonads help programming, but what's there is interesting. Essentially comonads abstract certain kinds of dataflow programming languages. There's a lot of possible interesting research for people who know both category theory and computer science.

      If you want to try some of it out and see, have a look at Haskell. :) The community around Haskell is taking these abstractions and turning them into practical libraries which basically anyone can learn to use, regardless of their background. Of course it will take more or less work to learn depending on what that background is, how old you are, etc. It's certainly no harder than learning your first imperative programming language was, and it's definitely worthwhile. With monads in particular, you'll wonder what you ever did without them.

      For the unfamiliar, monads, and even more specifically, monad transformers, basically give you really effective ways to quickly construct embedded domain-specific languages. You can very quickly create an EDSL which is the perfect language in which to solve your problem, and you get really nice maintainable code, and lots of correctness guarantees for free or almost free, and you get to borrow all the control structures which people have written for other monadic languages already.

      The toy example I like to give people of this is of constructing an EDSL for solving Sudoku puzzles (of course nothing special about Sudoku, any combinatorial constraint problem will do). With a couple of monad transformers, you get a language with state for maintaining the current state of the board, and nondeterminism, allowing you to say in your language "x is one of this list of values", and having the language try all possibilities, in the end performing a depth-first search. You can then, in about as much code as it takes to program the Sudoku constraints, restrict access to the state, so that attempting to make a move which would invalidate the solution causes backtracking to occur right away. In this EDSL, you can write a Sudoku solver like this (the rest of the code is here):

      solve = forM [(i,j) | i <- [1..9], j <- [1..9]] $ \(i,j) -> do

      v <- valAt (i,j) -- ^ for each board position
      when (v == 0) $ do -- if it's empty (we represent that with a 0)

      a <- option [1..9] -- pick a number
      place (i,j) a -- and try to put it there

      (Jeez, it's hard to post properly formatted code on slashdot. Isn't this supposed to be a site for nerds? For those interested, I ended up using blockquotes and explicit line breaks, as well as having to escape the less-than symbols.)

      That's actual code -- it's a rather naive algorithm to use, essentially equivalent to brute force search with backtracking, but more clever ones could again easily be written in the same monad. The nice thing is that whatever algorithm you use, if it manages to fill the whole board, must fill the board correctly. The 'forM' in that code is a function implementing a foreach loop which works in any monad, similarly 'when' is another such function, and 'option' is a function which works in

    14. Re:ballpark by superwiz · · Score: 1

      I don't want to be petty, but the question was what should the undergrads see to set them on their way to becoming proficient so that they can learn more later on. We are very quickly gravitating towards answering a different question. Namely, what should a computer scientist know to be on a level with his peers. These are very different questions. When first learning about a subject (assuming no prior familiarity) it helps to see it from different points of view. It doesn't help (most people) to be overwhelmed with information that is too far off field of what the topic at hand is. What is too far off field is subjective. I would argue that the post that you refer me to is interesting, but it does not "explain" anything. It only rephrases the description in a different terminology. I didn't gain any incite by reading it. All I learned is how to call the same things by different names. I disagree with the elephant analogy. Actually, I generally disagree with the whole story. It is not a story about how a man who can see sees men who cannot -- it is not a story about how men who cannot see perceive. We just don't work that way. He phrased everything in terms more comfortable to you and all of a sudden you think that's an explanation. To someone not familiar with either etymology the description that reveals the least details and provides the most information would be the most helpful to set them on their way to understanding.

      Now when it comes to trying to come up with the right abstraction, I have to say that to decided which details are pertinent you have to look at which details will be engaged in your model. But even after that you may want to split your category (or your class) into subparts to take advantage of duplicate metainformation among categories or (or classes). I read your paper. I don't think there is a need to argue. We are essentially saying the same thing when it comes to understanding what is an abstraction. This "conflict" is mostly due to personal attachment to a particular etymology. I view oop as more revealing. You view Category Theory as more revealing. You praised a person who wants to view OOP through the abstractions available in the Category Theory. And I want to do it the other way. Perhaps Category Theory when done properly is more all-encompassing, but on a level of a person just viewing the subject for the first time they are similar enough to be considered two different views on the same abstraction. To re-iterate, multiple views on the same subject is a good thing and concentrating on details that don't touch the subject matter directly under discussion while in the initial stages of introducing the subject is a bad thing.

      --
      Any guest worker system is indistinguishable from indentured servitude.
    15. Re:ballpark by Metasquares · · Score: 1

      What I meant was going from 2 (knowledge of derivatives and integrals on one variable) to 3 (doing the same with more than one variable). Trying to puzzle out calc. 2 from calc. 1 would leave a lot of holes (Taylor series, for example).

      I always thought of probability and statistics as an art. Knowing when and how to apply particular techniques is far more important than knowing the details of the techniques themselves, and the sort of judgment that makes a good statistician arises more from practice than instruction. I'm not sure if this is what you had in mind, but I agree with you regardless that there are not enough "good" probability courses.

      I think they study those subjects in the secondary education systems of Europe. You also have the AP Calc. and Stat. tests in the US, though these are considered optional courses of study and therefore tend not to be given as much attention as lower-level math courses.

    16. Re:ballpark by GileadGreene · · Score: 1

      Some people (notably Matthias Felleisen) have made a pretty good argument that functional programming has more in common with OO (or perhaps more to teach OO) than might be apparent at first glance. This presentation (warning: PPT) makes the case.

    17. Re:ballpark by Aaron+Denney · · Score: 1

      The generalizing to multiple variables is actually not as trivial as it seems, especially if you want to continue to general manifolds, rather than just R^n.

    18. Re:ballpark by Iteachmykidz · · Score: 1

      I like the list, but only if going for the Master's Degree.
      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),
      For the BS in CS, I recommend only Calculus 1-2, Linear Algebra, Discrete Math, and Statistics with possibility of Regression Analysis

  4. I liked oenology, personally by BadAnalogyGuy · · Score: 1, Insightful

    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.

    1. Re:I liked oenology, personally by cperciva · · Score: 1

      Personally, I found a great deal of education in my oenology courses. [...] The most applicable mathy CS thing I learned was covered in an hour regarding big O notation.

      Is there a connection between oenology and O(n)-ology?

    2. Re:I liked oenology, personally by LizardKing · · Score: 2, Funny

      No, but there's a strong connection between onanism and the study of Computer Science.

  5. Lambda Calculus by Anonymous Coward · · Score: 0

    Enough Said.

  6. All of them! by BrakesForElves · · Score: 1

    Seriously, what useful work ever gets done without mathematics? Maybe pushing bulk data around into and out of databases, but who other than a C-grade CS student in a third world outsource farm is interested in doing that?

    --
    About the word "if": If bullfrogs had wings, they wouldn't bounce around on their little green butts.
    1. Re:All of them! by miyako · · Score: 1

      The problem is that there seems to be a lot more work pushing data in and out of databases than doing anything interesting.

      --
      Famous Last Words: "hmm...wikipedia says it's edible"
    2. Re:All of them! by Aadain2001 · · Score: 1

      That's because there are so few CS graduates that actually can do much more than just push the data around. In my old University, the CS students took different classes than the engineering students, with focus on discrete math, statistics, and matrix math (such as methods for solving complex problems using matrices). Basically, they learned how to perform the real math that computers and programs use. Could there be more? Probably, but most higher match classes require a very good background in calculus.

      --
      Space for rent, inquire within
    3. Re:All of them! by miyako · · Score: 1

      I wonder how true that really is. I know that there are a lot of people with degrees in CS and CIS(my degree) who are worthless, but I wonder how many people are skilled enough to push data about in databases but not skilled enough to do anything else.
      I think that really a lot of it is just that moving data around is what businesses need done, and that's where the jobs are.
      Luckily, there are a lot of open source projects out there which give you the opportunity to hack on interesting things.

      --
      Famous Last Words: "hmm...wikipedia says it's edible"
    4. Re:All of them! by Coryoth · · Score: 1
      Could there be more? Probably, but most higher match classes require a very good background in calculus.

      Not really true. Sure without calculus you've closed off a vast range of possible fields, but there is still plenty left in abstract algebra, set theory, proof theory, model theory, category theory, type theory etc. For these you don't need calculus. I'm not suggesting you shouldn't take calculus - I really think you should. I'm just suggesting that if you're only taking a few math courses there are a lot of things that should be higher on the priority list for CS students than calculus.
  7. 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.

    1. Re:Core Math for Comp Sci. by Enselic · · Score: 2, Interesting

      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 lines form, etc etc).

    2. Re:Core Math for Comp Sci. by Anonymous Coward · · Score: 0

      As I completely agree with the idea of needing discrete math, linear algebra, and basic math required to perform basic physics operations. I believe there are several other types of math that could be beneficial. I do not agree in anyway that the use of Calculus 1,2, & 3 could ever benefit me or anyone in programming (unless as electives for people that are interested in game programming or robotics.) There should be a Calculus for programmers that teaches us the basics and how these basics can be mapped to a programming model rather than the use of complex multi-variate calculus in n-dimensional space. Other than game programmers I have yet to meet someone that does indeed use these types of Calculus, unless you are counting the physicists that have learned to program well, or the mathematicians/statisticians that are hired to complete these tasks.

      Just my two cents.

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

    1. Re:How far are they going in CS? by Anonymous+Brave+Guy · · Score: 2, 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 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.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    2. Re:How far are they going in CS? by Sage+Gaspar · · Score: 1

      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 I had a lot of friends at schools with two semesters, and in two semesters there's no reason you can't get to Galois theory.

    3. Re:How far are they going in CS? by mdarksbane · · Score: 1

      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.

    4. Re:How far are they going in CS? by Anonymous Coward · · Score: 0

      I would agree. For those who say "what undergraduate courses teach all that?", I studied Math(s) at Cambridge University. They teach all these subjects at undergraduate level with the possible exception of formal languages (which I taught myself whilst at Cambridge anyway - you can't beat those libraries!)

      These are my experiences of doing Math rather than CS, looking back 15 years later:

      0. Math was hard. CS looked way easier.
      1. Most of what I learned in my Math degree has come in use at one time or another (not that I would have known at the time) - Galois Theory being the exception, although I did have cause to review my Galois Theory notes just last month because I thought it might be relevant to something I was working on (it wasn't)
      2. I've picked up everything I need to know about CS since by self-teaching; I didn't know the web would take off when I studied Math but it did and now most of CS can be learned online (the rest from books)
      3. Learning graduate-level CS with a Math degree looks a lot easier than learning graduate-level Math with a CS degree

      The question for me therefore is not "how much Math should a CS student do" but "how much CS should a CS student do"? CS and Math are two sides of the same coin, but the knowledge transfer only goes one way.

      I didn't go into CS research, though. I find all this Math useful just for being a games programmer.

    5. Re:How far are they going in CS? by lubricated · · Score: 1

      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.

      --
      It has been statistically shown that helmets increase the risk of head injury.
    6. Re:How far are they going in CS? by kfg · · Score: 2, Insightful

      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

    7. Re:How far are they going in CS? by TheWizardOfCheese · · Score: 1

      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.

      That is a false dichotomy. At my alma mater (the University of Waterloo), a degree in computer science is a degree in mathematics - Computer Science is a department of the faculty of Mathematics. All of the courses you list were required and more besides (depending on what material you think belongs under which heading.)
      --

      "The good reader is a rarer swan than the good writer."
    8. Re:How far are they going in CS? by acgrissom · · Score: 1

      No kidding. I am somewhat disturbed when I hear of degrees in "computer science" without discrete mathematics.

    9. Re:How far are they going in CS? by 644bd346996 · · Score: 1

      The distinction does hold for many schools, particularly public schools. Far too often, the CS department teaches just basic computer programming, usually just Java. At my university, most of the CS grads don't even know when they can declare a method as static and only use that keyword for the main.

    10. Re:How far are they going in CS? by 644bd346996 · · Score: 1

      I would recommend group theory for most any CS major who wants to do anything beyond simple programming, if only to give them a better understanding of modulus arithmetic. I have yet to see a student use the % when they aren't told.

    11. Re:How far are they going in CS? by cperciva · · Score: 1

      For students who just want to get a job as a programmer. . .

      I'd recommend a different major.


      I'd go further than that, and suggest that they don't attend a university at all. Nevertheless, the fact remains that the vast majority of students in undergraduate "computer science" programs have no interest in computer science and merely want to get jobs as programmers.

      If there were fewer such students polluting undergraduate CS programs, it might be possible for get a good undergraduate CS education as part of a CS degree instead of a mathematics degree.
    12. Re:How far are they going in CS? by kfg · · Score: 1

      I'd go further than that, and suggest that they don't attend a university at all.

      Yeah, I left that one alone in this thread, but I haven't been shy about attacking the automatic attendance of college elsewhere/elsewhen.

      KFG

    13. Re:How far are they going in CS? by Kupek · · Score: 1

      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.

      False. I am a CS Ph.D. student. I do research in high performance systems. A math degree is not preperation for systems research. There is more - much more - to gradute CS work than theory.

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

    1. Re:CompSci maths... by tomhudson · · Score: 1

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

    2. Re:CompSci maths... by filthWisard · · Score: 1

      never. thats why I do CompSci, not english

    3. Re:CompSci maths... by SQLGuru · · Score: 1

      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

    4. Re:CompSci maths... by Coryoth · · Score: 1
      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.

      So in summary what you really need is a solid course in mathematical logic which encomapsses the subjects of Proof Theory (not just doing proofs, but analysing them as mathematical objects themselves), and Recursion Theory (aka Computability Theory). As a side bonus you'll also cover Set Theory and Model Theory both of which are remarkably useful for CS. IMHO this should be what CS students should get instead of "discrete math" and multivariate calculus. That's not to say "discrete math" and multivariate calculus aren't useful - they are worthwhile doing, but they are better served being electives for CS students and having mathematical logic be the mandatory math course.
    5. Re:CompSci maths... by tomhudson · · Score: 1

      Why not just switch to FireFox? Built-in as-you-type spell checker.

  10. I hope.... by WgT2 · · Score: 1

    I hope someone besides me tries to answer this question.

    Which courses you take absolutely matter and who cares what learning besides math has helped you; that wasn't what the dear reader is asking us.

    That which has helped me the most is Discrete Structures, which wasn't even offered as a math class, but as a CSE class.

  11. Course style - lazy students... by Anonymous Coward · · Score: 0

    This is more on the course style rather than content.

    I took EE/CS courses at Southampton Uni (UK). The staff were always trying to make the Maths courses more accessible and were very open to feedback.

    However they could never win; the years they offered structured courses, the student feedback demanded self-paced courses (i.e. less lectures.)

    Of course, those years they offered self-paced courses, many students struggled (i.e. were lazy - like me) and requested - more structure!

  12. Statistics & Basic Economics by eraserewind · · Score: 1

    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 mechanisms and tools used in business and life would come in handy.

    1. Re:Statistics & Basic Economics by Anonymous+Brave+Guy · · Score: 1

      Do you actually mean statistics, or do you mean probability, optimisation, or other related fields?

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  13. Depends on what you want to do with it by antifoidulus · · Score: 2, Insightful

    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.

    1. Re:Depends on what you want to do with it by jasmak · · Score: 1

      I am currently a CS major with a minor in business at Penn State. I feel that we are basically required to take a well rounded number of math related classes. Many of them are under the guise of CSE classes or CSE/MATH classes but were are required to take 2 Stat classes, 3 Calc classes, 2 Logic classes, 1 Algorithms class and a few others that aren't very relevant. Unless you know before you graduate a specific field of study that you want to go into great depth about, I think that the key is to be well rounded so that you have at least a general understanding of the biggest amount of things. Lets say I come to a problem about very complex statistics. Since I didnt specialize in statistics, I may not know how to work it out exactly, but when I search and find items to read up on to understand the complex statistics, they will most likely use many statistical references that I do understand. You can never really know exactly what kind of work you will be doing and what experience you will need to accomplish it until you get to that point so it is important to be well rounded and prepared for anything.

      --
      It is the mark of an educated mind to be able to entertain a thought without accepting it.
  14. Hard to decide by Raliaga · · Score: 2, Insightful

    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, and Measure Theory 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" :-) )

    1. Re:Hard to decide by Anonymous Coward · · Score: 0
      As a current student majoring in both (CS-Math), I've found useful all of my Math courses to CS.


      As a geezer in his late 30s returning to school majoring in math with a minor in CS I'd have to agree.

      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.


      Exactly. And unlike current languages, paradigms, etc math doesn't go obsolete in five years. It's all about exercising the noggin and then getting enough CS coursework in to actually do something with it.

      When I worked for the Department of Defense, all of the contract coders who were shit hot software people were almost all math or physics people. There were a few CS folks, EEs, and one "Systems Engineering" major who were skilled as well, but math and physics folks seemed to dominate.
  15. 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 Anonymous Coward · · Score: 1, Insightful

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

      CS Professor of course.

    2. Re:Why do CS? by Der+PC · · Score: 2, Insightful

      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.

      --
      This signature is DRM protected. By the DMCA, you are not allowed to counteract or oppose to it.
    3. Re:Why do CS? by DoofusOfDeath · · Score: 1
      ... 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"?
    4. Re:Why do CS? by DarthChris · · Score: 1

      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 wasn't programming anything, so the improvement is not just experience.
      I think this is the case because, as is so often pointed out, the logic behind mathematics and programming is the same. Maths forces you to learn the logic, whereas CS tends to teach you factual details on how it works etc.

      So, what maths modules should be part of a CS degree? It depends on what you want to do with your degree. I would imagine Linear Algebra, Discrete and Logic (at least Propositional, possibly Predicate) to be good in general.

      --
      Don't you just hate it when people reply to your signature?
    5. Re:Why do CS? by Manchot · · Score: 1

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

    6. 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.
    7. Re:Why do CS? by microTodd · · Score: 2, Interesting

      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 advanced software. Yes, a biologist could hack out some code to study protein folding, but if you're also a CS guru then you can make a very efficient protein folding algorithm and save zillions of computing hours.

      --
      "You cannot find out which view is the right one by science in the ordinary sense." - C.S. Lewis on Intelligent Design
    8. 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
    9. Re:Why do CS? by Secret+Agent+Man · · Score: 1

      Computer Science is not the study of how to write a computer program. Computer Science, simply put, is the study of algorithms. If you want to be just a programmer, you could probably get by without a CS degree, but if you want to heighten your chances significantly, getting a degree in Computer Science can really boost your chances, and not just in the stereotypical sitting-in-front-of-a-computer-in-a-cubicle programming job, either. Most big projects are taken care of in groups.

      My point is that coding is not the only thing you learn when obtaining a Computer Science degree. You pick it up along the way or learn it yourself as needed, but it is not the sole factor of Computer Science.

    10. Re:Why do CS? by edmicman · · Score: 1
      Can anyone name a job for which a CS degree is the best qualification?
      Um, because most programming openings list a BS in CS as a minimum requirement? It's a whole lot easier to get your foot in that interview door with a CS degree than just listing 5 years of writing little apps on your own at home. Does listing on your resume reference books that you've read work?
    11. Re:Why do CS? by poot_rootbeer · · Score: 2, Insightful

      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.

    12. Re:Why do CS? by Anonymous Coward · · Score: 0

      Bravo, well put :).

    13. Re:Why do CS? by Chandon+Seldon · · Score: 2, Insightful

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

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    14. Re:Why do CS? by Anonymous Coward · · Score: 0

      Can anyone name a job for which a CS degree is the best qualification?
       
      Um, how about "computer scientist"?

    15. Re:Why do CS? by Adam+Hazzlebank · · Score: 1
      Can anyone name a job for which a CS degree is the best qualification?
      A PhD in Computer Science?

      Seriously, most CompSci graduates come out of their degrees and start hacking code. For the most part that wasn't what a CompSci degree was trying to teach them, it was trying to teach them to be Scientists (hence the name), to do original research.

      Most people would probably be better off doing something like a Computer Engineering course. In that case teach them some Discrete maths, the majority are unlikely to need Calculus. Things like graph theory are best covered in an algorithms course, where they will practice programming at the same time.
    16. Re:Why do CS? by bzipitidoo · · Score: 2, Insightful

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

      --
      Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
    17. Re:Why do CS? by xenocide2 · · Score: 1

      Why can't we do both? Admittedly, far more people know how to explain complexity theory than teach undergraduates why x=x+5 isn't completely insane. But 4 years is a long time, especially at 5 classes a semester. There's no reason a ciricculum can't teach students how to program, and then teach them how to find a solution to a problem that runs quickly if they were to program it.

      The sad thing is that there DO exist CS programs where programming is extra-ciriculuar, and EVERYTHING is theoretical. Theory is important, vitally so at the higher levels of Computer Science research, but there's no reason to cripple the graduates in your own program because nobody on staff feels comfortable teaching C. Maybe bringing nachOS to Java is harming our graduate's abilities to work at the system level, WHEN BUILDING A SYSTEM.

      Most people disparaging theory are the "if I can get a job programming without a degree, degrees aren't that important" types who want to apply their situation 20 years ago to young people today. I don't know why they feel the need to disparage education, their experience should have done them well, and its not like graduates fresh out of college are "better" than they are.

      But they are at certain disadvantages: heavy software engineering, especially defense contractors, are moving towards proving their code is correct. This is an approach we spend three semesters educating students on, from different perspectives and intensities. At the beginning we simply try to get them to think about loop invariants, which we find is the hardest topic to grasp if they're just exposed to "programming logic 101." We then run a course that covers natural deduction, first order logic, programming logic and ends with some temporal state logic oriented towards the department's Validation and Verification research--things like Globally and Until. Finally our algorithms course covers the design of, correctness and runtime complexity of algoritms, with a proof oriented structure. Hopefully, in combination with a few math classes, they're well prepared to handle making statements and assertions about their program's pre and post conditions, if not whether the post conditions are satisfied from the preconditions.

      This is why, if your intended for CS graduates to go forth and write software, whether their title be "programmer", or "developer", or "software engineer," I suggest logic courses. Statistics is also useful, if only because so many benchmarks and other research projects use faulty statistics.

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

    18. Re:Why do CS? by Anonymous Coward · · Score: 0
      One does not get a CS degree to learn to program. Just like one does not get a degree in English to learn to read and write. We asume the CS major knows programming or learns in the freshman year. After the freshman year i would seriouly hope they don't teach programing. This does not mean the student will not be learning it. Teaching Java to CS students is like giving English majors a spelling test, a bit insulting and not worth the big $$$ they are paying to be in school


      That said maybe to many people are taking CS. If your goal is to make web sites and maintain a fleet in Windows XP boxes that is more of an IT funtion. It's kind of like the difference between the guy who fixes your car and the guy who designed the shape of the combustion chamber inside a cylinder. You don't need the CS degree to do IT work

    19. Re:Why do CS? by rHBa · · Score: 1
      And you'll have a plan how to fix it, or at the very least, you'll know where to look.


      Yeah, here
      and here
    20. Re:Why do CS? by Old+Grey+Beard · · Score: 1
      Can anyone name a job for which a CS degree is the best qualification?

      How about Professor of Computer Science?

      --
      "The urge to save humanity is almost always a false front for the urge to rule it."
      - H. L. Mencken
    21. Re:Why do CS? by Pootie+Tang · · Score: 1

      Was I completely ripped off in my CS education?

      How to make use of binary trees and how to optimize algorithms.

      I was taught this kind of thing.

      How to plan software projects and what problems to expect. How to plan, lay down and manage a network.

      Neither of these are even close to what I was taught.

      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.

      Really? Are we still talking networks? I don't do system administration any more and when I did it was fairly entry level/small business. On top of that networks weren't covered at all in any of my classes (not offered at the time). Yet it's hard for me to imagine class room instruction being the most important knowledge in diagnosing large scale network problems in the typical case.

      For myself as a software developer when something stops working the most important information is the location of the log files (not something I was taught in class obviously). Given the choice of the error/debug log or theory I learned in a class, I'll take error logs any day of the week.

      This is not to say I haven't worked with people who are very comfortable with a black box. They don't know how it works and don't feel it has any impact on how they interact with it. They know how to use it (they think so anyway) and that's enough for them. If a solution doesn't work, they'll try something else, they're bound to stumble upon it eventually. But those people are just like that, it's not because they have any less education. I'm guessing this mentality is what you might have been driving at.

      My effectiveness at my job is about 0% based on what I learned in my CS classes. It's about 80% things my parents taught me (team work, results rather than excuses) and about 20% (usually fairly specific) things I've learned on the job(s).

    22. Re:Why do CS? by inf4m0usB · · Score: 1

      I aggree with what you say. The problem lies mostly in the inflexibility of some degree programs. you can't just pick the courses you want to get that fancy hat and expensive piece of paper, some prereqs are really trivial and there isn't much you can do but show up for then on exam days. quite frankly, if youre depending on school to get you all the mathematical expertise you may need but probably wont use then you will end up very old and very broke. school should only teach you enough math to teach yourself, thats the way i see it.

    23. Re:Why do CS? by Shiny+One · · Score: 1

      As a maths/IT double degree student, I was surprised to find that not only did my IT subjects teach me to program (the "code" part was left to us, we were taught the concepts), but also my maths units taught me a lot of programming. Massive focus on large matrices and function approximation, but there was a lot of optimization, code complexity and general concepts about making efficient code that weren't covered in IT, but were covered in maths.

    24. Re:Why do CS? by julesh · · Score: 1

      Maths forces you to learn the logic, whereas CS tends to teach you factual details on how it works etc.

      I think that's only really the case for particularly poor CS curricula. I don't know what your university does, but mine really didn't concentrate on details of how anything works. Yes, there were a few courses like that in the 1st year (there was a programming course, and a couple on digital electronics, for example), but the other courses really concentrated on the logic behind it as well. Other courses in the 1st year included:

      * Discrete Maths (only an introductory level; set theory, groups, nothing particularly advanced)
      * Introduction to Statistics
      * History of Computing
      * One, whose title I've forgotten, that introduced computational linguistics (i.e. regular expressions, context-free grammars, LALR parsers, that kind of stuff).
      * A "design of algorithms" course, which was essentially about computation/complexity theory

      Subsequent years continued with a similar mix of maths and practical -- i.e., mostly maths. What practical stuff there was was stuff that tends to be difficult to pick up: parallel algorithms, formal proof of correctness, methods of working in teams, that kind of thing. I'd say a CS degree is great for anyone who aspires to be more than a code monkey -- it teaches architecture, how to think outside the box, and how to know what will work and what won't without trying it.

      The idea that a CS degree concentrates on "how to program" is rather narrow-minded, I think. It teaches how to think about how computers work.

    25. Re:Why do CS? by Eli+Gottlieb · · Score: 1

      Admittedly, far more people know how to explain complexity theory than teach undergraduates why x=x+5 isn't completely insane.

      Class, "x = x + 5;" makes perfect sense, because it's an assignment statement. Rather than defining a function or a variable, it performs a computation and afterwards assigns the computed value to a variable. I'll show you how the computer really executes it:

      Load value of x at its appropriate address in storage, and add 5 to it. We'll label this new value n. Doesn't n = x + 5 make plenty of sense?
      Store the value of n in the storage location referred to by the variable x.
      Done.

      Can I have my award/tenure now?

    26. Re:Why do CS? by pjt33 · · Score: 1
      If I compare stuff I've written recently, with stuff I did for A-level projects, I'd say this is true
      How does that comparison give you any basis for assessing the accuracy of your teacher's assertion?
    27. Re:Why do CS? by sleepingsquirrel · · Score: 1
      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.
      Infinity = Infinity + 5

      That's not so insane.

    28. Re:Why do CS? by donscarletti · · Score: 1

      Want to stump Math grad students? Toss them a dynamic programming problem. They likely won't have ever heard of dynamic programming.

      The first time I was explicitly taught dynamic programming was in discrete maths, it was in the context of calculating the Fibonacci sequence with a recursive algorithm in Maple and why it would be so damn slow.

      Anyway, dynamic programming is the sort of technique you'd be able to figure out yourself, oh, maybe I should be storing this value rather than recalculating it. And with that, the monkey grabs a bone and triumphs.

      --
      When Argumentum ad Hominem falls short, try Argumentum ad Matrem
    29. Re:Why do CS? by bzipitidoo · · Score: 1

      > dynamic programming is the sort of technique you'd be able to figure out yourself

      No way! You're repeating a common mistake. Because you understand it (or think you do) and its such a "simple" concept, it is therefore trivial. Are you so sure you understand it? Can you tell a problem that can be solved by dynamic programming from one that can't? If you're sure you understand, then you could tell someone how to solve Matrix Chain Multiplication, right? How about solving the Traveling Salesperson Problem (TSP) with dynamic programming? Understand that unlike Fibonacci, conceptually easy non dynamic programming solutions to these harder problems are not going to make it blindingly obvious that a lot is being recalculated. Even if it is fairly easy to see that a lot of recalculating is going on, it won't be easy to see how to avoid it. In TSP, the easiest approach for the programmer is brute force: try every one of the n! possible routes. No, dynamic programming is not trivial. Most people are not going to realize on their own that dynamic programming is a concept applicable to many problems. Falling into the trap of trying to do Fibonacci with a naive recursive algorithm, and solving the resulting problem by inventing on the spot the classic dynamic programming approach is a much easier leap, and many do make that one. Very very few people are going to discover the principle of dynamic programming on their own, especially if all they've faced is one example. You may be deceived by the simplicity of Fibonacci. It's a lot easier to see a dynamic programming solution in that Fibonacci problem than in the others I mentioned. But to go further and see a general concept from having done a specific solution for only one problem? No. After solving several problems, a few of the few who even found the dynamic programming solutions will start to see that the ad hoc techniques they've been applying share common features and can be generalized. Anyway. sounds like your class handed the concept to you. You didn't have to make that leap on your own. Glad to hear mathematicians are paying attention, even if they're still dismissive.

      --
      Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
    30. Re:Why do CS? by Viv · · Score: 1

      Are you saying that there's an algorithm that lets you do algebraic multiplication (FOIL style) in O(n log n) time?

      ie, (x1 + x2)(x3 + x4) = x1x3+x1x4+x2x3+x2x4

      I've been looking for just such an algorithm. What is it?

    31. Re:Why do CS? by Viv · · Score: 1

      Oh, heh. You already said: FFT.

      I suspected that the FFT might manage it; is that actually correct?

    32. Re:Why do CS? by Viv · · Score: 1

      Or are you just talking about using the FFT to multiply large numbers (which is not nearly so interesting...)

    33. Re:Why do CS? by bzipitidoo · · Score: 1

      Yes, FFT can indeed be used to multiply two numbers in O(nlogn) time, and it works on any size numbers. But the constants are large enough it's not worth using on numbers less than 10^40 or so.

      For matrix multiplication, check out Strassen's Algorithm. I have also heard of architectures (perhaps on Cray computers) that use a way to get a free addition when doing a multiplication, ie. a*b will require the same amount of computing as a*b+c. Addition is faster than multiplication, but that advantage may not be present in some situations, for instance if the clock is set to the CPU's slowest operation and the numbers are small enough to fit into a single register. I'd go with the first form, (x1 + x2)(x3 + x4). It needs fewer additions and fewer multiplications.

      --
      Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
    34. Re:Why do CS? by Opportunist · · Score: 1

      Again, knowing how to write code is a requirement, not an option. You do write a lot of programs in your time here, but you're expected to know how this is done. It's by far not "all theory".

      If we'd "waste time" by teaching you coding first, we'd have to latch on another year in which you get the basics of coding down. Or how do you want to teach someone the ins and outs of recursion (and the implications it has for the stack) if he doesn't know a thing about coding?

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    35. Re:Why do CS? by Opportunist · · Score: 1

      For that one special case of infinity. Try to broaden your horizon. :)

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    36. Re:Why do CS? by Viv · · Score: 1

      Well, I was thinking symbolic multiplication, not constant multiplication. I always suspected that the FFT could be good for constant number multiplication, but I figured that the big-Omega of symbolic would be along the lines of n^2.

      Which is why I was suprised when you mentioned the FFT being n log n -- but that doesn't seem to help me. :(

    37. Re:Why do CS? by sleepingsquirrel · · Score: 1
      For that one special case of infinity.
      • -Infinity = -Infinity + 5
      • let (+) = (*) in 0 = 0 + 5
      • etc.

      ;-)

    38. Re:Why do CS? by Tango42 · · Score: 1

      Indeed - I'm doing a maths degree at the moment, most of it will never be particularly useful in any of the jobs I'm considering (unless I become a maths lecturer, of course). However, CS seems to be a very vocational degree - if my university is anything to go by, CS students seem to do it primarily to get a job, not because they're interested in it from a purely intellectual level. (My uni may not be anything to go by, though, as the CS dept is extremely bad. It's a good uni, so it gets lots of good CS students, but for some reason, it doesn't get any good CS lecturers...)

      If you're interested in it intellectually, rather than to get a job, looking at the maths from a maths perspective, not a CS perspective will probably be more interesting, and learning programming is far more fun sitting at a computer than in a lecture theatre. (I'm not qualified to say much about the parts that aren't maths or programming, but I imagine they're similar).

    39. Re:Why do CS? by xenocide2 · · Score: 1

      Ok. Now our student with experience in VLSI asks why it doesn't result in x tending towards MAXINT. How do you quickly remedy his thought process.

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

  16. Activate PUN! by Lord+Bitman · · Score: 1

    Intelligent Design!

    PUN Complete!

    --
    -- 'The' Lord and Master Bitman On High, Master Of All
    1. Re:Activate PUN! by Opportunist · · Score: 1

      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!

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  17. Maybe I just misunderstand CS by A+beautiful+mind · · Score: 2, Interesting

    ...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 and 4 of numerical analysis.

    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?

    --
    It takes a man to suffer ignorance and smile
    Be yourself no matter what they say
    1. Re:Maybe I just misunderstand CS by drawfour · · Score: 1

      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.

    2. Re:Maybe I just misunderstand CS by Anonymous Coward · · Score: 0

      I think it's rare for CS majors in the US to get much analysis at all, although a little formal real analysis may be lumped into their last calculus course. More common is calculus, linear algebra, discrete math (combinatorics, graph theory), maybe some numerical analysis, etc.

    3. Re:Maybe I just misunderstand CS by Sage+Gaspar · · Score: 1

      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.

    4. Re:Maybe I just misunderstand CS by A+beautiful+mind · · Score: 1

      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.

      --
      It takes a man to suffer ignorance and smile
      Be yourself no matter what they say
    5. Re:Maybe I just misunderstand CS by Opportunist · · Score: 1

      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.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    6. Re:Maybe I just misunderstand CS by Teancum · · Score: 1

      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 university... go figure).

      I believe that largly due to this early emphasis on mathmatics, it has skewed the emphasis by some of those professors to more pure mathmatics concepts. While not bad by itself, I did find it boring after a fashion when one of these professors would get caught up with making a mathmatical proof of some CS theory.... particularly when you were in a class like compilers or data algorithms that had little to do with very abstract mathmatical proofs. Those younger professors who had a PhD in CS and spent time working "in the industry" tended to be much more grounded on coding fundimentals and teaching finite number theory instead.

      For myself, while I think advanced mathmatics may have usefulness for hardcore computer science, that is the study of computer algorithms and computational theory, it doesn't have much of a practical application.

      Of course I view myself as a software engineer seeking practical development of computer algorithms as opposed to a computer scientist that explores theoretical directions of computational concepts. In this regard, I consider software engineers to be very different from computer scientist.

      Or more to the point, I think there ought to be a ratio of about 1 computer scientist to about 50 software engineers. Unfortunately, it is presumed that you would get a CS degree if you want to become a computer programmer. But if your school doesn't offer a software engineering degree (very, very rare) you are trained as a computer scientist first and a software engineer maybe as a supplimentary (sometimes optional) course.

    7. Re:Maybe I just misunderstand CS by TheWizardOfCheese · · Score: 1

      Am I wrong to assume that CS education is much more maths based in the EU than in the USA?

      Yes you are, because both the US and the EU are far more diverse than can be reconciled with your simple assumption. You can safely assume, for instance, that graduates of MIT or Caltech are taught quite a lot of math. On the other hand, the more prestigious French schools take a much more abstract and mathematical approach than their counterparts in the UK - or anywhere else, really.
      --

      "The good reader is a rarer swan than the good writer."
    8. Re:Maybe I just misunderstand CS by Sage+Gaspar · · Score: 1

      Yeah, in the U.S., even getting a PhD, in undergrad and grad school combined I think most non-analysts wouldn't even take six analysis courses. Of course I'm talking in the strict sense in terms of what we usually title our courses, if you count dynamics, ODE, differential geometry, etc, you'd probably raise that count a little bit. If I successfully complete my PhD (or even if I don't, I guess, hehe), the only courses I'll have taken that I'd call analysis even in a broad sense are one semester each of undergrad analysis (advanced calc, definition of derivative, etc), undergrad dynamics, graduate analysis (measure theory mostly), graduate functional analysis, graduate ODE, undergrad differential geometry, and two courses of graduate riemannian geometry.

    9. Re:Maybe I just misunderstand CS by julesh · · Score: 1

      On the other hand, the more prestigious French schools take a much more abstract and mathematical approach than their counterparts in the UK - or anywhere else, really.

      I'm not convinced that's true. For instance, when I applied to Oxford (back in 93), they called their CS degree "Theory of Computation" to reflect the fact that they regarded it as a discipline of mathematics rather than an independent subject. I understand they've renamed it to CS since then, but I don't think the focus of the course has changed substantially.

    10. Re:Maybe I just misunderstand CS by wmspringer · · Score: 1

      My BSCS came in about 5 math classes shy of the double major. I did get the math minor, though. Unfortunately, most of it was stuff like Calculus and Differential Equations that I rarely if ever use, and not enough graph theory and other discrete math that I could use now. I'm in the process of taking classes on combinatorics and such, which are more applicable to what I'm doing (algorithms research)

  18. Personally, by cpux · · Score: 1

    In relation to computer science, I got a huge boost from linear algebra, probability & statistics, and a very discrete level of calculus material like riemann sums, taylor/maclaren series, root-finding algorithms (newton's method), etc. I also found that taking a logic course was very beneficial. It was from a philosophy standpoint, but was mathematical in nature, and boolean algebra was developed out of it after all. My uni also has a discrete math course which covered things like the fundamental theorem of arithmetic, set theory, counting laws, graph theory, and some other things useful in comp sci.

  19. Formal grammar, predicate calculus, statistics by Twylite · · Score: 2, Interesting

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

    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-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
    1. Re:Formal grammar, predicate calculus, statistics by Morphine007 · · Score: 1

      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 much. Algebra and Galois Fields tend to be the maths I use the most. GFs are especially nice for crypto since GF(2^8) and the operations that are closed over it represent everything you can do to a byte...

      Mind you, I'm mostly interested in ai and crypto. Crypto is mostly a hobby, but for ai having a rock solid understanding of lin alg helps in performing things like computer vision (lin alg for the pixel manipulations, trig ftw for the angular calculations), path planning (okay, some calc, but mostly lin alg as we're, again, approximating a continuous curve over a discrete space, so it's summations instead of integrals) motion prediction (same as last) ... etc...

      So again, I'd have to say, Algebra is the math that a CS major should be the strongest in. The formal languages, automata, graph theory, etc... is all fairly standard CS stuff. None of it is as much a cornerstone of good coding as lin alg IMHO, but they're all really really nice to have sometimes.

      As for the rest of your post, it's pretty obvious that your experience has been with parsers and compilers (or something similar), in which case, the rest of your post is 100% true. However, for my corner of the CS world (ai and robotics) lin alg and trig are t3h sh!t... followed by probs/stats (for stochastic modelling/simulations)....

      I guess a "YMMV" belongs at the end of each post in this topic as everyone needs different math tools based on what they're working with.

      This should provide a bit of an answer to both the OP and the people asking "what do you need maths for if you're going to be a sysadmin?" (You're either trolling or confused as to what CS guys actually do, so I'll give the benefit of the doubt to you and shed some more insight into what some of us do...)

    2. Re:Formal grammar, predicate calculus, statistics by Twylite · · Score: 1

      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 and linear algebra (I just apply the crypto algorithms) but have found it useful in optimisation of algorithms.

      Statistics, IMHO, is the bridge between theory and reality when it comes to performance. A constant time algorithm can really suck if the constant is large enough ;) Sometimes it is better to use a slow-but-simple algorithm (easy to develop, debug & maintain) and optimise special but common cases, rather than using a complex but higher performance algorithm. Statistics can help you to understand the performance bounds of the application, how it will scale in the real world, etc. It also helps you to understand how numbers can lie, and the difference between good sampling and bad sampling (this microbenchmarks).

      None of it is as much a cornerstone of good coding as lin alg IMHO, but they're all really really nice to have sometimes.

      ...but then CS isn't about good coding, it's about taking over the world (y'know, "science"). IMHO there is nothing better for good coding than to slow down, do a tiny thing at a time, and wonder what path execution will follow when your assumptions are wrong.

      --
      i-name =twylite [http://public.xdi.org/=twylite], see idcommons.net
    3. Re:Formal grammar, predicate calculus, statistics by Morphine007 · · Score: 1

      Yeah, I can see how those things would definitely help, and I didn't know that FIPS certification required a finite state machine. I don't deal with the hardware side, and really, the only algorithm I've studied in any great detail (read: tried to do limited cryptanalysis on) is Rijndael/AES. For my end though, graph theory is useful for understanding and modifying things like, Simple Temporal Networks, which CMU has applied towards resolving timing issues in multi-agent systems. I have to say though, I've had absolutely zero opportunity to use formal grammars since learning them 7 years ago.... given the way formal grammars actually work though, I'm not sure if I will ever explicitly use the information that I learned there, or if taking that course was enough to simply influence the way that I view/use computers. So I would concede that formal languages and automata constitutes a good choice regardless of whether or not you'll ever need to use what you learned as a "tool" since the subject kinda goes a bit deeper than that.

      Statistics is something that seems to be under-emphasized for CS students though. I never really applied myself in those courses and I kinda regret it now. It seems like every time I turn around I'm looking at a problem that has a slick solution if I view the problem as a stochastic process, solve that using statistical tools and then bring the result back into the "real world". Having taken the classes, I've got a fairly solid grounding, so I'm not too bad off... but I wish I'd put more effort into those ones.

      I have to contest one point though, the whole "cornerstone of good coding" thing. It's probably a misunderstanding (on your part, caused by me failing to actually write what I meant....) but I stick with my statement about linear algebra. In most cases, anything written in lin-alg-speak translates extremely well to pretty much any language (cept perhaps befunge and the like...) CS is about coming up with novel ways of solving problems (the science) and then implementing/validating those ideas using a computer... to me, it follows quite nicely that if your ideas are formulated using linear algebra, you're going to have that much of an easier time validating them using code.... You may not entirely agree because of what you work on, but since most of the crypto algorithms that you'd be building off of are written using linear algebraic techniques, you might... Coding is an important part of CS though. A computer scientist is a mathematician who specializes in applying math using computers. I mean, just look at your field, crypto is a mathematical endeavour... most of the algebraicists I know are very much into crypto since it's all written in their language. It's a series of mathematical operations applied to a matrix... it's designed so that you could do the operations by hand (except RSA ;-), but then it's optimized to run on a computer.... to me, crypto is CS at its finest... but at all levels and not just the hardware/software implementation level.

    4. Re:Formal grammar, predicate calculus, statistics by OutOfMyTree · · Score: 1
      This seems a key comment. Professional societies tend to be dominated by those who have succeeded under the old system, so their recommended curricula do not usually leap forward into the future lightly clad, but trudge slowly forward carrying all the defensive content that can be loaded on to them. Thirty years ago the field of computing was absorbing mathematicians at a huge rate. It is very difficult to believe that the ACM now would be biased towards producing curricula that were too light on mathematical content. However, there could be useful modern additions.

      The profile of contributors to this thread is interesting:
      • A dearth of course designers, or any senior teaching staff at all, to discuss factors influencing academic programme design.
      • No-one saying "I took CS, but have switched direction" -- hard to believe that no-one has switched, strange to think that they switched to something so different that they are not to be found on /. Were their CS courses so useless for other aspects of the field that they went a long way away from computing?
      • Nobody involved in programming sufficiently advanced topics that they admit to using an expert in the field instead of hacking algorithms together themselves. Though there appear to be a couple of posters coming from the other direction with specialist knowledge who could use a CS specialist if they could just establish effective communication.

      So, yes, it has been interesting reading the comments here, and you have given me food for thought, but I regret the people who we are not hearing from.

    5. Re:Formal grammar, predicate calculus, statistics by szobatudos · · Score: 1

      I would opt for higher order logic instead of FOL first. Programmers better appreciate this, I think. And show them a proof assistant like Isabelle.

  20. DSP (maybe I'm a bit biased) by Matt_Bennett · · Score: 1

    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 meatspace, DSP and all the prerequisites are vital.

    There are lots of electrical engineers forced into programming because the Computer Science guys just don't have the math background- and what we often end up with is pretty poorly done code because the coursework behind the engineering degree is lots of math and relatively little code. What I'd really like to see is a combination of better code and better systems to run that code.

    1. Re:DSP (maybe I'm a bit biased) by TeknoHog · · Score: 1

      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.

      --
      Escher was the first MC and Giger invented the HR department.
  21. What do you want to do with your degree? by Sage+Gaspar · · Score: 1

    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 kill you.

    I have to confess that I have limited experience in computer science myself, but I've seen a couple uses for various areas of mathematics.

    I was doing an optimization problem where I was trying to find the maximal distance apart of two points on a given surface along the surface itself. To begin with, in these kinds of optimization problems you want to know when you've found the answer and what kind of accuracy you have. To answer those questions you're going to need estimates and approximations, things that you learn in analysis. If your calculation is of critical importance, you don't want to just eyeball something, you want to know that you've got an answer with the appropriate accuracy.

    The surface was basically defined in two different pieces glued together along their boundaries. I needed to calculate lengths along these boundaries where they were joined together. To calculate these lengths explicitly was literally impossible given the types of curves, and I ended up with an integral equation I couldn't resolve. So I used a combination of approximations for the values of the integrals and something like Newton's method from calculus to get a quickly converging answer to a problem that ground Maple to a halt when I tried the naive solution of just plugging it in.

    If you're sampling data and using it to estimate the behavior of something, say a flow (like the movement of the wind or a river), you're going to want to know how accurate your data needs to be for your model to produce good results. This is a question in dynamical systems. Granted, this analysis may not be performed by the CS guy, but being able to do this sort of thing combined with having a good knowledge of computers opens a lot of exciting possibilities in science.

    Similarly, in robotics, the configuration space of things like different joints on robot arms is a multi-dimensional surface, an object that is studied in differential geometry and topology. Using methods from calculus you can find the critical points in the configuration space, which it is generally a Good Idea to avoid (like a robot with its arm extended straight out) because of the fragility of the tolerance there (again, back to dynamics).

    If you have a recursion, there are some fairly standard tricks you can try to apply to obtain a generating function, which can often lead to an easier computation or even a closed-form solution. There is a free text available on the internet, generatingfunctionology, which could be used as the basis for an independent study.

    Things like encryption algorithms have found good uses for number theory. Graph theory can model relations between data or routes over a network. Statistics and probability are very useful for all sorts of things. Straight-up algebra and logic courses are great tools to get your mind working, though admittedly a lot of topics in your standard undergrad algebra course might be of limited use unless you're planning on pursuing a graduate degree. DEs and their solutions are great for most scientific applications. Discrete Math is usually the name they give to the mathematics course that is tailored towards computer science applications, so that's almost a no-brainer.

  22. Statistics and Experimental Design by DoofusOfDeath · · Score: 2, Insightful

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

    1. Re:Statistics and Experimental Design by samotano · · Score: 1

      As a statistician working in cancer research I feel we are many years ahead. These days it's hard to publish without a statistician review your paper or having a statistician as an author. I still see a lot of bad science everyday and a lot of it is due to a lack of understanding of basic methodology. In my mind, statistics is what gets you closer to good methodology. Anyone in CS who is considering doing any research, be the most basic of it, needs an understanding of statistics and probability. An example in this field would be the numerous web-statistics many web-hosts offer (webalyzer, awstats etc.) Most of the ones I have seen are either wrong, misleading or irrelevant. It would not take much for a good CS person with a good foundation of statistics to come up with some good methodology to analyze this data in a sensible way. Let alone if you are doing simulation studies, as DoofusOfDeath suggests, or want to do some hard core modelling. When I see white papers suggesting how they found out that most people use MS OS as their web-servers, I just laugh. It only takes a few lines of reading to see what bad science or bad research is all about. UNfortunately, most people showing statistics or talking about statistics know nothing about it. Unfortunately, the opposite is also true. We statisticians need more training in CS. I had to teach myself several programming languages, database, limitations of computing environments, operating systems, etc.

  23. Re:Basic math skills ... by l33td00d42 · · Score: 1
    And learning the difference between kilometers and miles wouldn't hurt ... Earth to Mars ... oops, missed the damn planet!
    Get your facts straight. Aside from what the article mentions, the error would not have caused mission failure if either (a) they had not decided to go from 2 solar panels to 1 (which resulted in more AMDs because of unbalanced radiation pressure) or (b) they had been tracking the trajectory of the spacecraft with ground instruments rather than dedicating them to other science. (I learned about these while interning at JPL.)
  24. Re:Basic math skills ... by tomhudson · · Score: 1

    The article you quote bears me out ... it was an error in failing to do a conversion between standard and metric units.

    The conversion factor from pound-seconds to newton-seconds was buried in the original equation and not immediately identifiable, and so it was not included in the updated equation.

    Teach them not to use the good old "hogsheads to the furlong" measuring system. The excuses don't wash. Neither the "1 solar panel" nor the "not using ground tracking" were "unforseen events". They screwed up. Specifically:

    Thus, the ground software reported calculated "impulse bits" which were a factor of 4.45 too large (1 pound force = 4.45 newtons). Subsequent processing of the calculated impulse bit values from the AMD file by the navigation software underestimated the effect of the thruster firings on the spacecraft trajectory by this factor.

    This mixup was exacerbated by two factors:

    1. The lack of end-to-end testing of the AMD data flow before launch
    2. The lack of an independent navigation algorithm to cross-check the AMD-based algorithm in flight

    Note my original post, where I said that one of the problems is people not being able to recognize errors that are one or more magnitudes in size from the correct answer ...

  25. Lots by ggKimmieGal · · Score: 2, Informative

    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 a class in our CS department that is our own little private discrete class, but I'm totally planning on taking the math department's discrete. Plus, my math department has this computer programming class for math majors. It's all logic problems. I'm taking that too. Statistics. Now, this one isn't as important because if you get the basic concept then you can just look stuff up, but consider it an easy A (hopefully). I am so glad I took AP Stat in high school. I have used information from that class in almost every class I have had here in college. In short, if you can fit in a math minor (or major), go for it. My CS department has you take 3 math courses, and then you only need 4 more for a minor.

  26. Re:Basic math skills ... by orasio · · Score: 1

    And joke theory - for example, "If it takes 3 minutes to cook 1 3-minute egg, how many minutes does it take to cook 3 3-minute eggs?" If you can't see the direct relationship between this question and scheduling several activities that involve waiting on a device or service in parallel, you're in the wrong field.


    I have heard that this joke works when you are studing for obstetrician, too.
    And for eugenetics, too.
  27. 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 Anonymous Coward · · Score: 0

      This really hits the nail on the head... there's a distinction between theoretical and practical applications of every other science, and CS should be no different.

    5. Re:Some Math greater than Other Math by xiong.chiamiov · · Score: 1

      Some places do. Many also has specialized programs, such as Web Development.

    6. Re:Some Math greater than Other Math by 0xdeadbeef · · Score: 1

      "Computer science" does not mean "numerical methods for physicists".

    7. Re:Some Math greater than Other Math by CastrTroy · · Score: 2, Informative

      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 most useful, but that's just me, I'm sure others would find calculus invaluable, even though I don't think I've ever used it.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    8. Re:Some Math greater than Other Math by douthitb · · Score: 1

      For CS students, the fundamentals of discrete math and set theory are probably some of the most important.

      I agree. The single math class that I've gotten the most use out of post-college is discrete math. Abstract algebra has also been useful at times.

    9. Re:Some Math greater than Other Math by mthreat · · Score: 1

      I want to say one word to you. Just one word.

      Yes, sir.

      Are you listening?

      Yes, I am.

      Probability.

      (Reference: The Graduate - http://en.wikipedia.org/wiki/The_Graduate)

    10. Re:Some Math greater than Other Math by tritonman · · Score: 0

      Yes, and computer programming does not mean "science". What's so scientific about reading manuals and updating records in a database. Where is the experimentation? The only experimentation done in regular programming is when the programmer is too lazy to read documentation so he experiments.

    11. Re:Some Math greater than Other Math by JBHarris · · Score: 2, Interesting

      I go to a smaller college in Columbus, GA....Columbus State University...in fact early registration for Spring Semester was today. Here at CSU, they have split the CS degrees into two separate camps....The CS-Systems Track & the CS-Applied Track. They are nearly exactly what you have outlined. I am more of a systems (theory) guy, and I hope to lead a team of Applied guys (coders). This isn't about salary or power, it is about what you do best. I cannot sit behind a desk and write code for 8 hours a day, plus I am a visual thinker. I can layout advanced problems and envision solutions, but my expertise falls apart when I start coding them...I get lost in the forest. However, some people cannot see the big picture but they have incredible focus on the smaller, more intricate problems. To each his own path.

      This after nearly 6 years designing/programming full-time. I just recently decided to go back & get my degree to increase my potential value, plus after being promoted to Product Design Lead, I realized I needed to get on the ball with my degree or someone hot-shot kid straight out of college would take my job.

    12. Re:Some Math greater than Other Math by Anonymous Coward · · Score: 0
      If I were designing a Math course to tie up all the loose ends for CS undergrads, I'd call it "Numerical Recipes in C" and that would be the textbook (the issue that has 0-based array indexing, not the old clunky 1-based original like I have in my bathroom). It'd be a lab class where the students actually write programs to satisfy lab reqs... the only way to learn is by doing.


      It would be kind of a last-step math class before graduation, and it would teach the kids "Hey, even if you forget all this and don't use it for a decade, you'll always know where to look."

    13. Re:Some Math greater than Other Math by phil.bachman · · Score: 1

      Both of the possibilities you mention are just software engineering. One is less mathematical and the other more. If one wants to do the numerical development, one could just take a numerical/scientific computing course in addition to the other software engineering courses. However, the divide between theoretical and practical computer science is not one merely of what sorts of math are used. It's more of a difference between advancing what we know to be possible and how it might be done, and advancing what actually has been done.

    14. Re:Some Math greater than Other Math by nljackson · · Score: 1

      I agree, here at the Rochester Institute of Technology, all Information Technology, Computer Science, Software Engineering, and many other recent degree programs require you to take discreet mathematics. In addition to discreet, courses in Statistics and Data Analysis are also required.

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

    16. Re:Some Math greater than Other Math by Thornkin · · Score: 1

      I've often had the same thoughts myself. As someone who really enjoys programming but doesn't enjoy the math classes associated with most CS degrees, I've wondered if they are truly necessary. In real, practical work, I find that I use a lot of what I've learned in OS classes, database classes, and algorithms classes but not what I've learned in classes on algorithm analysis, discrete math, computational theory, etc. I realize that there are places those are necessary but I don't think it intersects the work of the average programmer.

      In my mind there are usually 2 kinds of CS classes: Those that require programming and those that require math. Rarely do the two meet. If you look at the classes I find I didn't use, they are all the "require math" classes. If you are touching a compiler or interpreter in the class, in my experience you are substantially less likely to have a use for that knowledge in the "real world."

      What would someone be unable to do if a program went light on the math classes? Obviously I would have a more difficult time understanding the time/space implications of new algorithms, but how often does someone really need to do that?

      I'm not advocating that these classes be no longer offered but how necessary as core classes?

    17. Re:Some Math greater than Other Math by Bob_Geldof · · Score: 1

      "Numerical Recipes in FORTRAN"

      There, fixed it for you.

      --
      887321 = 337*2633
    18. Re:Some Math greater than Other Math by rlbond86 · · Score: 1

      Numerical methods are a must for approximations to calculus operations in computer programming. Also, high-level probability courses are important for things like signal processing, although admittantly this is more of a computer engineering/electrical engineering requirement.

    19. Re:Some Math greater than Other Math by bcrowell · · Score: 1

      For CS students, the fundamentals of discrete math and set theory are probably some of the most important.
      Set theory with finite sets is trivial, which is why you learn it in grade school. A more rigorous treatment of the axiomatic theory of finite sets is something you could learn in an afternoon. A university-level course in set theory is all about the axiomatic treatment of infinite as well as finite sets. Since computers are finite, I can't imagine how this could be directly correlated with computer science. Of course, you can learn any kind of math, and it will help your intellectual development, but why single out set theory? If you want to study an axiomatic system, there are lots of other axiomatic systems out there (starting with Euclidean geometry, which we learn in high school).

    20. Re:Some Math greater than Other Math by CSfreakazoid · · Score: 1

      My degree (09) contains Calc 1-3, Stats 1-2, discrete, and either diff eq or linear algebra

    21. Re:Some Math greater than Other Math by mikemcg · · Score: 0

      Discrete math, which includes set theory, combinatorics, number theory (compression, cryptography, encoding) and graph theory, are the absolute foundations, but there are many other more advanced mathematical disciplines that are important to computing. The following were part of my computer science and engineering curriculum (UCLA ):

      Advanced Numerical Computing: "Introduction to numerical analysis and computing techniques: root finding, matrix computations for systems of linear equations, systems of nonlinear equations, numerical methods for ordinary differential equations, least squares, eigenvalue/eigenvector problem, applications to engineering problems."

      Computer System Modeling Fundamentals: "Basic tools necessary for performance evaluation and design of distributed computer systems, including such topics as combinatorics, generating functions, probability theory, transforms, Markov chains, baby queueing theory." Useful for scheduling and timing.

      Mathematical Modeling and Methods for Computer Science: "Introduction to methods for modeling and simulation using interactive computing environments. Extensive coverage of methods for numeric and symbolic computation, matrix algebra, statistics, floating point, optimization, and spectral analysis. Emphasis on applications in simulation of physical systems."

      Algorithms and Complexity: "Introduction to design and analysis of algorithms. Design techniques: divide-and-conquer, greedy method, dynamic programming; selection of prototypical algorithms; choice of data structures and representations; complexity measures: time, space, upper, lower bounds, asymptotic complexity; NP-completeness."

      Formal Languages and Automata Theory: "Grammars, automata, and languages. Finite-state languages and finite-state automata. Context-free languages and pushdown story automata. Unrestricted rewriting systems, recursively enumerable and recursive languages, and Turing machines. Closure properties, pumping lemmas, and decision algorithms. Introduction to computability"

      The fact is, most computer science courses are couched in rigorous proofing (e.g. by using relational set calculus in database courses) so it's hard to draw the line of what is and what isn't "mathematics" when it comes to computer science. The rigor and breadth of the fundamentals in computer science programs is intended to broaden one's understanding of what computer science comes from, and the surrounding ideological terrain, to enable the development of novel techniques and ideas, possibly enabling the expansion of the science of computing. This is beyond the vocational goal of teaching particular language, toolset, or practices, which is the worthy aim of trade schools or programming-oriented programs. Individuals not interested in the esoteric mathematical foundations of computer science would probably find these programs more suitable.

    22. Re:Some Math greater than Other Math by Darth_Burrito · · Score: 1

      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

      Adding to that sentiment, I've always thought that we in CS have much better ways of expressing the mathematical ideas we use than do the mathematicians. They always like to have these extremely dense unreadable expressions filled with greek symbols and arbitrary one letter variable names. It's literally greek to me. Meanwhile, in cs, we are turning this kind of expression of logical statements into a science in and of itself. If someone programmed like most mathematicians write, he would likely be universally hated amongst his coworkers. Why study graphs, set theory, or proofs in a math class when you can (and will) study it in a CS class?

    23. Re:Some Math greater than Other Math by mkiwi · · Score: 1
      This doesn't even include math heavy courses like Vector Mechanics, Chemistry, Physics, Elec. Eng., Economics, and others.

      Be thankful you don't have to take what a Physics or EE major would have to take- there are people in industry who have degrees who do not even understand how much of the math works (as I witnessed at a presentation on planar magnetics).

    24. Re:Some Math greater than Other Math by Anonymous Coward · · Score: 0
      I am more of a systems (theory) guy, and I hope to lead a team of Applied guys (coders).
      I hate this kind of attitude. I had a friend who dreamt to `lead people'. I suggested him to become a bus driver.
    25. Re:Some Math greater than Other Math by JBHarris · · Score: 1

      I'm sorry you hate those that love to lead a great team.

      I once had a friend that hated those that aspired to be leaders, he rides on a bus everywhere he goes.

  28. Basic math skills by Anonymous Coward · · Score: 0

    CS Student = Dork
    Dork + No Shower = Typical Programmer
    Typical Programmer + Fat + Slob = Slashdot Reader

  29. How about by Anonymous Coward · · Score: 0
  30. All Major Mathematics Courses Should Be Taught by avapex · · Score: 1

    I think all major mathematics courses should be taught within a computer science curriculum. There is real-world purpose for all forms of mathematics. A software developer with a strong foundation in mathematics can develop programs to efficiently analyze or simulate real-world phenomena.

    I think the most important are the following:

    Discrete mathematics, otherwise finite mathematics should be taught because it is the best way to represent a finite machine. A computer is a finite machine with many countable sets.

    Calculus is great for computer science. Students who take calculus develop strong problem solving skills. Multivariable calculus should be optionally taught to those who want to design 3D games.

    Statistics and probability theory should be taught. Statistics is used to analyze, interpret and present data. Computers are used to perform calculations on data. The combination of statistics and computers facilitate decisions in all areas of science, business and government.

  31. Math courses by ShorePiper82 · · Score: 2, Informative

    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 graphic theory needs linear algebra. OpenGL models / graphing simulations rely heavily on constructing matrices and working with them to represent 3D images in a 2D world. Another class that provides some very deep insight is Numerical Methods. This study of mathematics requires some programming knowledge to automate error analysis (particularly the big question is always: You all have an answer to a set of problems, but just how accurate is your answer and within what bounds? 10^-6 ... 8?). The class also provides insight and formulas for detecting propogation of errors. Any computer scienctist is going to deal with computational math and at some point you will goto another research or a project lead and they will ask "are your results correct?"; You will comfortable with your results, given some background to know that they are correct.

  32. Weak CS Undergrad by Dareth · · Score: 2, Informative

    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 and the Webcasts at Berkley.

    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.

    --

    I only look human.
    My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
  33. Life, not CS by cucucu · · Score: 1

    Not related to CS or Engineering, but I think that the most amazing piece of math is Cantor's diagonal argument. So simple, so beautiful, so insightfull. And such a strong conclusion: infinite comes in many sizes. It's 10 years since I been first exposed to the proof and I am still filled with joy when I contemplate the simplicity and power of its truth.

  34. Graphics Guy by WilyCoder · · Score: 1

    I've got a CS degree. When I began taking graduate courses for 3D graphics, I was quite upset that numerical analysis wasn't pushed onto me in undergrad. It would have been nice to not have to learn monte-carlo integration alongisde ray tracing. That way I could have given enough time to both to fully understand. Instead I felt rushed through both topics :\

    To contribute to the topic, here is what I took:

    Calculus 1-3 (3 was most important for me since it was about 3D analytical geometry)
    Differential Equations
    Discrete I (combinatorics), Discrete II (Finite Automata & Language Theory)

    What I wish I had taken:
    Linear algebra (matrix stuff)
    Numerical Analysis SOMETHING THAT TAUGHT QUATERNIONS!!!!

  35. All of them. by Metasquares · · Score: 1

    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.

  36. According to Ron Graham and Donald Knuth by robkill · · Score: 2, Interesting

    Ron Graham was head of Math Research at AT&T Bell Labs back in the '80's. Knuth should need no introduction.

    Concrete Mathematics

    --
    DMCA - Chilling free speech since 1998.
    1. Re:According to Ron Graham and Donald Knuth by Bright+Apollo · · Score: 2, Funny

      This is the Godwin's Law equivalent for this discussion topic. We're done here.

      -BA

    2. Re:According to Ron Graham and Donald Knuth by mjkjedi · · Score: 1

      I took one of my undergrad CS courses (intro to discrete math) from Ron Graham. Really basic class, but a great teacher. First instructor I've had who has his own Wikipedia entry...

  37. 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
    1. Re:3 words... by paenguin · · Score: 1

      Here here!!

      This ability is sadly lacking in the majority of the population.

      If you can do this and have learned basic Algebra and Accounting, you can function in most businesses.

      --
      We should start referring to processes which run in the background by their correct technical name... paenguins.
  38. The useful maths I took back in the day... by Dammital · · Score: 1

    ... 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 the class might straighten me out here.

    Bar none, the best math class I ever took was a freshman seminar with no textbook, no lecture, no assignments and no exams. You were graded 100% on class participation, and the topic was... math. The prof stood off to the side and would start the conversation: "How many integers are there?" might be a typical query. He'd sit back while we discussed the matter in Socratic fashion, sometimes nudging us in a particular direction. That semester we "invented" limits, cardinalities, discontinuous functions and other groovy things. I doubt that this particular class had much direct application in my professional life, but it was the first fun math I'd ever done in my short life.

  39. At my university... by mmortal03 · · Score: 1

    At my university, for the Computer Science students, the core math classes taught are Calculus I, Calculus II, Discrete Mathematics, Linear Algebra, and Probability and Statistics. Then, depending on the track you choose, you will either take Differential Equations and Numerical Analysis, or Theory of Numbers or Discrete Mathematics II.

    From what I have been told, multiple semesters of Numerical Analysis used to be required. I don't know why it was changed. Maybe they thought it was overkill for an undergraduate?

    I have heard good arguments for placing Linear Algebra above Calculus in importance in today's digital world, however, it looks like Calculus is still what is being required for a full year.

    I personally would like to be able to fit in some sort of Computer Statistical Analysis/Computational Statistics course before I graduate (I am a Software Engineering student, not a Computer Science major, and interested in sports statistics) but I doubt I'll be able to. There is just too much material to cover these days in an undergraduate Engineering curriculum, especially if you, like me, switched your major at some point. I hear that probability theory is a good one to take if you are interested in getting a job in some sort of prediction-based industry.

    It seems like there are never too many possibly useful math classes one can take. I'd like to know myself which ones are the most practical, by their industrial application, however.

  40. Prob and Stat by Mycroft_514 · · Score: 1

    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 think in linked lists. In one case it taught me to look at the problem from the link point of view. So the process I was on was codeable in 4n lookups, instead of n! + 3n lookups!

    Oh, and to all the doubters there. When calculating the processing power of multiple processors, don't forget to subtract off the OS on each processors. Most venders won't tell you about that little probelm when calculating the machine size.

  41. My most useful classes by greg1104 · · Score: 1

    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 logic, graph theory, proof, and other topics in the discrete math course were absolutely vital to understanding more complicated computer science constructs. I recall trying to understand how compilers were built before that time and being completely confused, but everything made perfect sense after completing that class.

    The other class was in operations research, a subject I didn't notice anyone bringing up here yet. OR really made an impression on me as it provided a bridge for how to apply several types of mathematical approaches that had seemed completely theoretical to solving the kinds of real-world problems computers are good at helping with. As the most obvious example, I feel that having a solid practical understanding of how to model a complicated queue or flow across a series of queues is wildly more useful for building software than anything related to big-O analysis will ever be, unless you're one of the rare people writing basic algorithm libraries. My experience is that you'll see dozens of messaging queue issues in business software design for every problem that requires an understanding of complexity analysis. And learning how formally construct decision trees turns into a great tool when you get far enough along that you're managing projects instead of just working on them. I considered it unfortunate that I didn't discover this class of mathematics until very late into my time at school, as I would have gladly taken more of it and benefitted from--something I can't say about statistics or linear algebra, where I felt the basic introduction gave sufficient understanding for normal programming tasks.

  42. Crypto by Halo- · · Score: 1
    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 procedures. Cryptology is especially important because it is one of those items which most computer scientists will use, but only in passing, and using it badly is often worse than not using it at all. An understanding of cryptology brings with it a lots of logic, set theory, and optimization skills.

  43. I would hope by EFGearman · · Score: 1

    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 statistics would be good, vector math/algebra, a topology course (ok I took that and oddly it helps), trigonometry if going into graphics processing/modeling, and a number of other courses I took but can't remember. The only thing I haven't used in the last year, the rest of the above I have, is some of the higher level calculus.

    --
    Atomic batteries to power! Turbines to speed!
  44. Double! by Anonymous Coward · · Score: 0

    You've already acknowledged the constraints: there are only so many math courses that one can "squeeze in". I assume you mean, "squeeze into a four year CS degree". So stop doing that: take the Math/CS double major, and take an extra year if you need it. For students coming into the university with AP, IB or dual-enrollment hours, they may even get back onto a four year schedule.

    I can't speak for the entirety of the technical industry, but I feel pretty comfortable with the following statement: anyone who considers herself a professional Computer Scientist would most likely have benefited from a double major in an appropriate field: stats, math, physics, chemistry, engineering (probably won't have time for one of these), biology, meteorology, oceanography or philosophy. I listed here the subjects with strong analytical or computational components.

    A CS degree is always better in a double major.

  45. Re:Basic math skills ... by Anonymous Coward · · Score: 0
    Teach them not to use the good old "hogsheads to the furlong" measuring system. The excuses don't wash. Neither the "1 solar panel" nor the "not using ground tracking" were "unforseen events". They screwed up. Specifically:


    So tell me Tom, how's the Canadian space program? Oops, that's right, you've got to ride shotgun with the US since you don't really have one eh?

    Right about now is when you should trot out the argument about how the US stole the Avro Arrow engineers who helped put the US on the moon. Too bad fools like you never seem to mention that they were almost all of UK extraction and immigrants to Canada after WWII and not indigenously developed. Then you can follow up with the work on the shuttle arm for an encore.
  46. Numerical Analysis by JohnWiney · · Score: 1

    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.

  47. The math courses that helped me by thewiz · · Score: 1

    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

    --
    If "disco" means "I learn" in Latin, does "discothèque" mean "I learn technology"?
  48. Problem with math courses by alexhard · · Score: 1

    Most CS students are taught math as it is and they then have to connect it themselves to their programming classes, etc..

    This, of course, is absolutely stupid: math should be taught through programming and not the other way around..most of it is useless to a good programmer anyway as they will intuitively figure out the solution to their problem without having knowledge in the specific math required.

    As for the courses...trigonometry, linear algebra, sets, blah blah blah..the list goes on and on!

    --
    Infinite time means everything that can happen, will. You being you is absolutely incidental. You do not exist.
  49. Set Theory, Logic, Proofs, Linear Algebra by Anonymous Coward · · Score: 0

    While calculus is a core course, in my exerience it hasn't contributed directly to my CS studies. The courses that offer the most benefit are set theory and logic (as previously mentioned). Any math course that focuses heavily on writing proofs is also a strong plus. Finally, from a computer graphics perspective, no math curriculum would be complete without linear algebra. Afterall, at the lowest level, compute grahpics is nothing more than applied L.A. :)

  50. OK, enough to know if your memory leaks will... by BrakesForElves · · Score: 1

    ...fill memory and cause a crash before your next performance review. That would be sufficient for many of the CIS majors I've met.

    --
    About the word "if": If bullfrogs had wings, they wouldn't bounce around on their little green butts.
    1. Re:OK, enough to know if your memory leaks will... by mrchaotica · · Score: 1
      That would be sufficient for many of the CIS majors I've met.

      Well, there's your mistake: CIS is not even slightly the same thing as CS! You're absolutely right that CIS majors don't need math, because CIS is vocational. In other words, being a CIS major has the same relationship to being a computer scientist as being an auto mechanic has to do with being a mechanical engineer.

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    2. Re:OK, enough to know if your memory leaks will... by BrakesForElves · · Score: 1

      Thanks for that! I could say it was a slip of the keyboard, but it wasn't: It was a slip of my non-CS, non-CIS, mathematician-turned-programmer brain. Thanks for educating me.

      --
      About the word "if": If bullfrogs had wings, they wouldn't bounce around on their little green butts.
  51. I took almost all of them by CounterTorque · · Score: 1

    At the university I went to, we took all of the classes you mentioned....They were all required to get a CSC degree. In fact you only need ~10 more credit hours to pick up a math major along with your CSC degree. It seems to have worked well for me.

  52. First Sentence - completely wrong premise? by Anonymous Coward · · Score: 0

    "If you're taking computer science then getting as much mathematics as you can is probably a good idea."

    Assuming (a big assumption, I know) that you are getting a degree in computer science in order to go into either programming or networking of some sort, I completely disagree with your statement. Other than some very basic statistics (averages, standard deviations), most programmers hardly ever need to use any math that was beyond trigonometry. There are some exceptions to this rule (for instance if you're writing a program like Matlab or a physics engine), but in the relative scheme of things those are a 1% niche market.

    That being said, I would think that if you're taking computer science then getting as much COMPUTER SCIENCE as you can is probably a good idea. Having a general idea about things like algorithms, operating systems, and databases will make a huge difference (you wouldn't believe the number of people who I've interviewed who can't figure out how to sort a list, what a thread is, or how to search a database).

  53. don't forget Information Theory by mikeee · · Score: 1

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

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

    1. Re:The DCT would be a really good idea. by julesh · · Score: 1

      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?

      Once you know what a DFT is, how it works, and how to do it, learning the same things about DCT is trivial.

    2. Re:The DCT would be a really good idea. by Llywelyn · · Score: 1

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

      What's your point? I have.

      Meanwhile, despite having a background in it, I've never even had to look at something in my career thusfar that has a DCT.

      --
      Integrate Keynote and LaTeX
    3. Re:The DCT would be a really good idea. by 2nd+Post! · · Score: 1

      If you learned DFT in digital imaging, you already know how to do DCT. DCT uses integral multiples of the cosine function as the basis function; DFT uses a general e function that, if you do some basic math to, becomes a cosine function.

      If you don't know how to do a DCT, I can't imagine how you managed to do a DFT or pass your graphics class.

      Image processing is a superset of lossy encoding and DCT is a subset of DFT.

    4. Re:The DCT would be a really good idea. by exp(pi*sqrt(163)) · · Score: 1
      My Digital Image Processing class spent too much time on the Discrete Fourier Transform and dismissed the DCT with some hand-waving
      You clearly didn't get the point of the DFT then, though that might not have been your fault. The DCT is nothing other than the DFT applied to even functions. Just about everything you need to know about DCTs you'll learn by studying DFTs. But DCTs are a restricted version of DFTs, DFTs are no harder than DCTs, and DFTs are incredibly useful in image processing (I've used them for fast convolution and image alignment via phase correlation), so just studying DCTs is plain stupid.
      --
      Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
    5. Re:The DCT would be a really good idea. by spaceyhackerlady · · Score: 1
      You clearly didn't get the point of the DFT then, though that might not have been your fault. The DCT is nothing other than the DFT applied to even functions. Just about everything you need to know about DCTs you'll learn by studying DFTs. But DCTs are a restricted version of DFTs, DFTs are no harder than DCTs, and DFTs are incredibly useful in image processing (I've used them for fast convolution and image alignment via phase correlation), so just studying DCTs is plain stupid.

      I see it another way: the Discrete Cosine Transform is a subclass, if you will, of a Discrete Fourier Transform. So it inherits properties of a DFT, and adds some properties of its own. The DFT then has certain properties by being a Fourier Transform, and by being a discrete transform. The discrete transform is then a special case of an integral transform. And so on. Hell, there is a whole branch of mathematics that studies things that are defined only as integral transforms.

      Then you start looking at the concepts over mathemtical constructs other than real numbers. This is where things like error control coding (algebra with Galois Fields) and elliptic curve cryptography (algebra with elliptic curves) come from.

      It all fits together. You can mix and match mathematical constructs and find out interesting things. And that generalization is, to me, what really matters.

      ...laura

    6. Re:The DCT would be a really good idea. by exp(pi*sqrt(163)) · · Score: 1

      And don't forget about doing DFTs over finite fields as used by GMP.

      --
      Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
    7. Re:The DCT would be a really good idea. by fupeg · · Score: 1
      The math that should be taught in computer science should reflect the math used in computer science.
      That sounds all well and good, but is completely false. With this kind of reasoning, nobody but mathematicians would have ever learned about imaginary numbers, and everything from electromagnetism to classical mechanics to molecular chemistry would be crippled compared to where they are today. If you only learn what is currently used, you'll never progress past that. I would surely hope that your education would at least enable you to do innovative things, even if you have no interest. It would seem dire if your education limited you instead.
    8. Re:The DCT would be a really good idea. by Anonymous Coward · · Score: 0

      Your list sounds like EE curi, not a CS curi. Why would EM, control be central to CS? What school did you go to?

    9. Re:The DCT would be a really good idea. by Viv · · Score: 1

      I agree that vector calculus should probably be dropped. It's just doing integrals multiple times, and so is really just an extension of the basic calculus series. If you need vector calculus, it is trivial to learn provided you know the stuff that typically proceeds it.

      Dropping calculus altogether is boneheaded; too many results of other higher maths that are used in the CS field rely on calculus. (Yes, I know that's not what you suggested -- but the OP did.)

      As far as dismissing the DCT is concerned, there's no reason to study it in depth once you've studied the DFT. The DCT *is* the DFT, except that it only applies to even functions. The only thing you need to know about the DCT is that it can be more efficient to do than the DFT, but it only applies to even functions. Same goes for the DST, except it only applies to odd functions. Other than that, there's nothing special you need to know beyond the DFT.

  55. Probability, Statistics, and Hardware Interfacing by Anonymous Coward · · Score: 0

    The two things almost all CS students lack is an understanding of probability, statistics, and hardware interfacing (i.e. writing and reading registers to control hardware). This restricts the number of CS grads that are able to make the transition to embedded programming and digital signal processing. The result is that most embedded programming and digital signal processing gets done by electrical engineers who learn how to program on-the-fly.

    Apparently its a lot easier to learn programming on-the-fly than it is to learn probability, statistics, and hardware interfacing on-the-fly.

  56. Diff Eq. by Zorgoth · · Score: 1

    Differential Equations.

    If one wishes to work on engineering projects and have any idea of what is going on, this is critical. Even better is taking a finite differencing and/or finite element numerical methods class. This is obviously only for a subset of programmers, but the lack of CS trained people able to convert partial differential equations into code means that engineers end up doing the programming instead...with predictable results.

    Anecdotally, I didn't get a CS degree, I'm an engineer that happens to be able to cobble together code (poorly). I keep ending up coding on projects because it takes so much effort to get the programmers up to speed as to what is desired, what it means, how to optimize it, etc. In the end my code is awful and inefficient, but functional. It would be a vast improvement if we could get some CS educated guys who at least remembered their calculus.

    --
    -------------------------------END--COMMUNICATION- --------------------------
  57. ZFC by Anonymous Coward · · Score: 0

    I think ZFC would be good.

    Since it requires 22000+ steps to prove 2 + 2 = 4, then it is sure to encourage efficient programming.

  58. Discrete and Linear Algebra by pkulak · · Score: 1

    For my degree I had to take a year of discrete and and two terms of linear algebra. I thought they were very relevant. I also had to take calc, of course, and I've never had to use it since and have forgotten it all anyway. :D

  59. Graph Theory? by interval1066 · · Score: 0

    How about geometry and graphing for graphics engineers? I found the stuff I learned in the lower division math supremely useful in game design.

    --
    Python: 'And then suddenly you have a language which says "we're all stuck with whatever the whiniest coder wants".'
  60. as a cs/math double major, here's my list by buddyglass · · Score: 1

    Definitely:

    1. Discrete Math.
    2. Number Theory.

    Optionally:

    1. Probability / Statistics.
    2. Numerical Analysis.
    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.

  61. Re:DSP (unbiased) by Sharkeys-Day · · Score: 1

    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.

  62. remember "new math" in the 70s? by peter303 · · Score: 1

    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.

  63. Combinitorial Logic by SoVeryTired · · Score: 1
    I think combinatorics would be very useful for most CS students. I took a course in it and often find it useful for data structure and/or algorithm design.

    On a different note, I think a broad mathematical education in first-year would be good for CS students. Many students are sadly lacking in a sound knowledge of mathematics. For example, the other day I overheard two final year students arguing about whether Pi is exactly 22/7.

    --
    Slashdot: news for Apple. Stuff that Apple.
  64. Additional Math Courses by Anonymous Coward · · Score: 0

    The Computer Science program at most institutions includes such classes as Discrete Mathematics and the Calculus series. In the program that I was in it also required two additional upper level mathematics courses which could include, Graph Theory, Matricing and Linear Algebra, Number/Group Theory etc. While I agree that the Calculus based option is probably not the best for the computer science discipline, it is required to be able to complete the Physics courses required over here, so I guess I had to take them for a reason.

  65. CS is not math by Ryan+Amos · · Score: 1

    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.

    1. Re:CS is not math by VinB · · Score: 0

      On the contrary, I'm currently in a CS masters program and I'm finding that so far it's almost *all* applied math. I haven't had the background that my fellow students have had so I'm doing a lot of catch up. I do agree, however, that at some point the two fields (mathematics and philosophy) converge, or at the very least give each other a friendly 'howdya do'.

    2. Re:CS is not math by Coryoth · · Score: 1
      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.

      I'm sorry that you university had an underdeveloped or overly applied math department. This is not the case everywhere however. You'll find that number theory and mathematical logic (which covers proof theory, model theory, set theory and recursion theory) are fields of pure mathematics, and are available in math departments the world over.
    3. Re:CS is not math by Sage+Gaspar · · Score: 1

      Number theory is certainly math and, to be honest with you, I haven't seen a university where number theory is the domain of philosophy. I know a couple number theorists that would be very surprised to learn they were doing philosophy and not mathematics :P

      I'm not sure what you mean by non-mathematical properties, but please reply, I am genuinely interested in what your school considered to be number theory. You might be confusing it with mathematical philosophy, which is essentially digging down deeper to find more and more fundamental axiomatic sets. For example, we intuitively know what the natural numbers are, so we essentially used them as undefineds for a long time (still today, even). About 100 years ago, when people were trying to prove the consistancy of some of the more popular axiomatic systems and maybe find an ultimate one from which everything could be derived, a couple mathematicians started working to construct the natural numbers in terms of sets. This is still mathematics, but it doesn't really give us any new information about the natural numbers, so it was sort of motivated by a philosophical purpose.

  66. Tech's Unique CS Calculus by RexSilex · · Score: 1

    I'm not an expert on what colleges offer, but I can share that here at GA Institute of Technology their Calculus III class is specialized for CS majors. We don't take the same one as everyone else, it is more geared to computer science. Also certain threads require certain math courses for that speciality within computer science. Its really a lot to explain, but its the direction that computer science will be going in the future. Check out the link: http://www.cc.gatech.edu/content/view/692/144/

  67. Curriculum assumptions by derubergeek · · Score: 1

    This topic surprised me. I had assumed that the majority of CS degrees (4 year B.S.) tended toward the same set of math requirements: calc, diff eq, linear & abstract algebra, discrete, probability & statistics, numerical & complex analysis, with optional courses like partial diff eq, tensor calc, etc. plus the traditional CS classes [programming techniques, data structures & algorithms, compiler theory, operating systems theory] and perhaps some more hardware oriented classes depending upon your focus.

    Does that tend to fall in line with other curriculums, or is CS becoming a bit more watered down these days?

    --
    Trust me. This is an inactive account. Regardless of what the /. bean counters might report.
  68. No Math by pwntang · · Score: 1

    I don't like Math. Too much brain, and not enough heart.

  69. you should teach them philosophy by Anonymous Coward · · Score: 0

    it will develop their ability to write, speak, and communicate. this is what is lacking in CS people/programs. not 'math skill'.

    it will also lead directly into formal logic, which is an attempt to 'automate' philosophy somewhat, or 'automate' thought, which is what computers are all about in the first place.

    the rest of mathematics can basically be reduced to formal logic, so, really, teaching differential equations to most CS people is kind of a waste, unless they are going into some field that needs it. but i guarantee that the ability to write clearly, communicate, and deal with logic are a lot more important for CS grads than how to memorize a bunch of differential transforms (Which is what a lot of calculus is - rote memorization)

  70. Re:balls in the park by flickwipe · · Score: 1

    Object-oriented math:
    Billy has four apples. He gives one to his friend Janet. How many apples does Billy have left?



    four apples and a nasty rash

  71. Math is KEY to CS by mattisking · · Score: 1

    Don't kid yourself... Without a strong understanding of math and it's concepts you don't stand a chance in CS. It's less about the actual math (depending on what you want to do) and more about the kinds of problem solving skills and thinking that goes with it. As a CS major I had to take Calculus I, Calculus II, Discrete Math, Linear Algebra, and a high level Statistics class. I would further recommend Calculus 3, though I didn't have to take it, I wish I had. I also took Physics (2 sections), Chemistry(2 sections), and Astronomy. It's a science major for a reason. There is a far easier route, however... take CIS instead if you can't rally hack the math. The hardest math they take is maybe Business Calc with virtually none of the Science requirements as you're getting a Business degree more so than a Science one.

    1. Re:Math is KEY to CS by Coryoth · · Score: 1

      You're hardly the only person to make this mistake, but you're the random one I'll pick out to reply to. I (the poster) am not asking what math courses I should take - I've already completed a degree in mathematics and covered all the courses you mention and more. Rather, as a mathematician who now teaches I am interested in how we can rework the math course structure to better provide for the needs of CS students. I have to deal with far to many CS students who are busy grinding their way through a calculus course yet display minimal understanding of the sorts of subjects that seem far more important to their chosen field of study. They are wasting their time taking calculus if they haven't yet gotten a solid grip on mathematical logic.

    2. Re:Math is KEY to CS by Anonymous Coward · · Score: 0

      I'm a student who's grinding their way through Calculus. I haven't a clue what the hell I'm doing, and I really don't care either. I'm 33 and I've been working in the computer field for nearly 10 years. I've worked mostly as a Unix admin, but have good (maybe great) potential as a programmer (I know a fair number of languages... usually much better than the guys I know who have CS degrees).

      I'm interested in computer science... very much so, but I can't stand the freaking Math. I mean, I'd love to know about compiler design and AI and whatever else. I don't think there's a single thing that I couldn't learn because it interests me. But frankly, I'm on the verge of dropping out because I'm sick of the Math. I don't want to completely dismiss Math's relationship to CS, but I think it is *way* over-hyped. I believe that schools have no freaking idea how to teach CS yet, and so in some lame attempt to push the academic Math agenda, they essentially make it a Math degree of sorts. In my educated opinion, there are maybe about 5% of jobs out there that a CS grad might be offered that require any real Math knowledge. CS courses should introduce Math -- essentially letting the student know what to Google for 4 years from now when they have that rare need to use Calculus. All other Math should be taught only in the context of computing (optimization of algorithms, etc)

      While I'm rambling, the problem with Math in this country isn't that people don't want to learn it. It's that teachers (including authors of books) either have no freaking idea how to teach it or they're too busy trying to sound smart to bother explaining anything well enough for a common student to learn.

    3. Re:Math is KEY to CS by Coryoth · · Score: 1

      With regard to mathematics involvement in CS - I'm afraid it is fairly integral, though I agree that calculus is of little real help for the most part. Software engineering, on the other hand, will involve somewhat less mathematics. A trade school course in programming, which is the sort of course that is actually interested in equipping you with skills for a career in IT, can skip over almost all the math. To my mind a CS student complaining that there is too much math and it isn't relevant to his programming career is rather like a physics student complaining that there is too much math and it is relevant to his career in architecture and building construction: it mounts to a fundamental misunderstanding of the aim of the subject (which is not trying to teach you a career). That is not to say that I blame the student for the misunderstanding in the case of CS - things have gotten misrepresented and so many schools have CS courses that border on career training that it is not surprising that students are confused. Or, to put it another way, the confusion based on how different schools present CS results in people like you and me talking at somewhat cross purposes because when I say CS I am thinking one thing, but you hear CS and think something completely different, and vice versa.

      On the subject of mathematics being taught poorly - I'm afraid I have to agree. For the most part mathematics is taught appallingly. Of coure how to teach math well is a rather trickier proposition. I'm currently (very slowly) working on a project to describe the research I'm currently doing in mathematics to a general audience. The downside is that becauses it requires so much mathematical scaffolding to get to the point where I can explain things that it is going to be a very long journey. So far I've just gotten started, trying to define what math is, and pointing the basic directions we'll be heading as the project progresses. You can find the first part here. Alternatively I've written a rather more "whirlwind tour" approach essay that gets to more interesting material faster, but is a little steeper to climb due to the brevity. Please feel free to add comments - feedback is most welcome.

  72. JackMax Math & English/French in the USA, EU . by OldHawk777 · · Score: 1

    A jack of many skills is always less exact then the master of one skill or a few.

    Do we want programmers that can do complex/theoretical math, or a theoretical scientist/mathematician programming? I think NFWay to both possibilities.

    Do we want programmers that can draw complex/abstract artistic representations of dimensional unknowns derived from vector interactions of a multi-dimensional place, or artistic clutter programming by a very creative artist.

    Never stretch a master out of their field, but teach/mentor all Masters/Ph.Ds how to collaborate/communicate as a community of very high performance professionals (with respect for sometimes significant personality differences).

    Being slightly paranoid/eccentric and asking for help (collaboration) are two true signs of genius. However, collaboration is far more productive, and mentally and emotionally healthy for everyone.

    --
    Unaccountable leaders are masters, and unrepresented people are slaves. How do US and EU fare?
  73. just about anything with proofs by call+-151 · · Score: 1

    There are a number of suggestions already mentioned, and to be honest, there is a huge range of courses that would be valuable. A standard weakness I see in CS grads is poor exposure to analysis of algorithms and computational complexity. CS students often struggle with those topics because of either poor preparation in discrete math or not enough exposure to mathematical proofs.

    As far as getting good experience with mathematical proofs to my mind, just about any pure math course which is interesting to the student and has some emphasis on proofs would be useful- combinatorics, algebra, analysis or even topology or logical foundations. Getting comfortable with mathematical proofs will serve CS students well, not from the particular topics covered necessarily, but from making complete (hopefully concise) arguments (proofs.) Being able to express your arguments precisely and convincingly is a very important skill. People will judge your development and coding skills through the window of your communication skills so doing as much as you can to improve your ability to communicate mathematically/precisely will work well.

    If you are looking for a valuable course from a range of possibilities, don't underestimate the "shop around" method for electives. Depending upon how your institution's registration process works, you may have the opportunity to sit in on a bunch of possible course the first week and decide which professor/subject matter appears to be most valuable. Typically, there is a great deal of variation from professor to professor, so you may find it more valuable to take a course where the topic doesn't seem immediately applicable, but which has a professor who can communicate the mathematics well and who can help students develop their abilities to prove things.

    --
    It's psychosomatic. You need a lobotomy. I'll get a saw.
  74. It depends on what what you want to do by ihandler · · Score: 1

    A lot of the latest work in OWL can be related to topos theory which is used by mathematical logic but is grounded in Grothendieck's scheme theory from algebraic geometry. This gets into very abstract stuff, on the other hand people working in embedded systems may do better with a grounding in differential equations and classical controls theory. I think that computer science has become too big to consider as a subject to be mastered, rather it (as mathematics, physics, engineering or biology) is a large umbrella over over a variety of sub-disciplines each of which has a distinct set of pre-requisites.

    --
    Ivan Handler
  75. Discrete Math by ink · · Score: 1

    I would definitely suggest teaching discrete math; its ties to algorithm design and efficiency are very strong. I use it all the time with various job-related functions.

    --
    The wheel is turning, but the hamster is dead.
  76. numerical analysis by mumrah · · Score: 1

    I think numerical analysis would be an excellent goal for a CS major. It combines math skills from linear algebra, calc 1-3, and some PDEs. Plus, you talk about computer arithmetic and actually get to implement many numerical algorithms. It's been my favorite class, math or otherwise, so far and i feel it has helped me to better understand some of what happens behind the code.

  77. DDS by gravesb · · Score: 1

    At my undergrad, we had a course called DDS, which stood for discrete dynamical systems. It was required for all students, not jus CS students. It was developed to deal with real world situations, and converting them into methods that can be solved by a computer. Its focus was on modeling in MATHCAD, but the underlying concepts are very applicable to computer science. Really, what is computer science but trying to convert real world situations into things a binary mind can understand, and then converting the results back?

    --
    http://bgcommonsense.blogspot.com
  78. Discrete Math by jafac · · Score: 1

    For my CIS degree, right now, I'm enrolled in class called "Discrete Math" - it is part of the CIS program, not part of the Math department (although it's taught by a mathematics professor). Discrete Math covers set theory, logic, truth-tables, proofs, logic circuits, venn diagrams, algorithms, functions, etc.

    For me - with a very poor math background, this is a very difficult class. I think most of the other students are having a really hard time with it too. The other classes in this program, the programming classes in particular, are like a vacation in comparison. It's not just the workload, it's the concepts. The teacher acknowleges that its one of the most difficult math subjects to teach, because of the chicken/egg nature; foundational concepts are functions and set theory, and you need to know functions to understand set theory, but you also need to understand set theory to understand functions. So the big problem is bootstrapping into that little cyclical dependency. But an even bigger problem is, for writing proofs, the student needs to have a good background in mathematical stipulated definitions and axioms. That's outside of the scope of this class, and depends on a strong background in algebra. (as in; you can't have coasted through your high-school and college algebra with c's).

    I've dabbled in programming for 14 years, and there are many programming-type tasks that I can do. But after a couple of weeks in this class, I've learned that this class presents the foundational concepts to computer programming, and equips students with essential tools to get past some of the most basic problems in computer programming, and progress to some of the really more complex issues of branching logic, and database design, etc. I don't know if I'm going to get as much out of this class as I could. I'm considering re-taking it. Not because I need a better grade - but because, after 14 years, this class, and the concepts in it, is really the main thing I need to take with me in my career as a professional programmer, out of the entire CIS program.

    --

    These are my friends, See how they glisten. See this one shine, how he smiles in the light.
  79. Too much repetition by cmpalmer · · Score: 1

    Back when I got my CS (actually CSE) degree from Auburn University (graduated in '89), we had to take Discrete Math from the math department, a discrete match course in the computer science department, and a computer logic/discrete math course from the EE department. There was about an 80% overlap between what was covered in these three courses. The terminology was different, but it was all boolean algebra and set theory.

    I had a horrible professor for linear algebra - that would have been a useful thing to have learned more about.

    We only covered graph theory in an algorithms class. I had to teach myself a lot of graph theory in my job later (while working on tracing algorithms for GIS).

    I think the biggest problem (way back when I was in school) was that, as CS majors, we could have done much more from a computational/programming point of view even in our "pure" math classes. Maybe it's better now.

    --
    -- stream of did I lock the front door consciousness
  80. Totally against that point by trendboy · · Score: 1

    I am in 3rd year computer science night time. I have worked for 10 years in IT doing everything from development to support etc... I have never had to endure such useless rubbish as the 2 years of heavy maths I have had to do. 1) It is completely useless to my daily life - it may be nice to know what DY/DX means and "rise over run" but in the real world we write programmes to make money 2) It was a waste of time - the industry moved on 2 years while we had to sit there doing nothing useful with our time which new technologies came out. 3) "Improves logical thinking"? I am unsure as to what that means - you don't need to know the statistical properties of the binomial distribution to write a beautiful sorting system in Java. 4) Universities are moving to ditch it completely from CS courses - hopefully Trinity College will get their act together and catch up! my manager at work doesn't care if I sit down all day trying to work out the probability of a case coming in on some mad adapter being related to DNA! he only cares about me doing my work and getting the job done right!! it is only now that my course has actually got useful! learning to write XML correctly, understanding assembly etc etc - useful stuff that I am able to use right away! So whatever dim-wit thought in the University World "oh yes they need maths" should actually get a job in the real world where the aim is not just chalk on a blackboard (or projector if they are somewhat able to use electricity) it's to make money and write better code. Of course that is my opinion and I totally accept that others will not agree with me - so that is why I think it should be an option in college - not a law almost! David A crap-at-maths but amazing programmer person :-) ps-perhaps Computer Science could have psychology included - that would be much more useful! then we wouldn't have so many engineers who are afraid to talk or hold conversations like math-heads!

  81. Zakon series by ArikTheRed · · Score: 1

    I learned everything I needed to know about the fundamentals of mathematics from the Zakon series: http://www.trillia.com/products.html

  82. Take a Philosophical Logic Class by Decneps · · Score: 1

    The having taken a ton of CS and Math classes, the class that helped my coding/programming the most was a predicate logic class offered by the philosophy department. Any predicate logic class worth taking will have you go over a lot Newton's and Cantor's work, having you create for yourself proofs of the foundations of calculus.

  83. SCIENCE != TECHNOLOGY by constantnormal · · Score: 1

    Computer Science is a different field, and hence requires a different curriculum from Computer Technology.

    Subjects such as Turing Machines, the Lambda Calculus and Predicate Calculus are instructive for showing three different approaches to the same ideas, and have good utility in building the conceptual frameworks necessary in Computer Science. But they have zero utility in Computer Technology (a.k.a. "Computer Programming"). Same thing with abstract algebra.

    There is a continuum to the underlying math that forms a bridge between Computer Technology and Computer Science -- set theory forms the basis for a great deal of logical thought, and pretty much the entirety of relational databases. If you're going to be doing any significant numerical analysis work (such as one might in engineering applications), then you will require the concepts in calculus, and possibly differential calculus, along with the calculus of finite differences for proper consideration of the accumulation of errors.

    Because Computer Science is less related to the application of, and more properly aimed at the understanding of ALL the concepts involved in ALL branches of computing, it requires a substantially stronger foundation in mathematical concepts. Computer programming does not need nearly so much in the way of math, especially if all one is aiming at is constructing web sites and variations on already existing applications.

  84. Statistics - Everyone should study statistics by RationalRoot · · Score: 1

    87.3234543 % of people don't really understand statistics.

    Ever tried to explain that if a penny is tossed and comes up heads, it's _NOT_ more likely to come up tails next time.

    How about relative stats.

    If a test tells you with 99% accuracy that you have X.
    But only 1 in 1,000,000 of population have X.
    What is the actual likelyhood that you really do have X.

    In fact, the test will incorrectly show 10,000 people out of every 1,000,000 as having X.
    And 99 times out of 100 it will show the one Guy with X as having it.

    If you test 1,000,000 people then of the 10,001 people who show up as having X, only 1 really has.

    See if your doctor understands this before you accept his advice based on a test.

    --
    http://davesboat.blogspot.com/
    1. Re:Statistics - Everyone should study statistics by trendboy · · Score: 1

      I think stats is useless in all ways - it is like Astrology - it gives a nice "idea" of how things could be but it is a load of crap really :-) Think of this - we were told that if you want to see how many pot-holes are on the road between Cork and Dublin you can use the Poisson Distribution. So the one input is the length of the road - the rest is based on the natural log, now that would all be lovely but I am say with a probability of 1 that the answer will be WRONG!! hehe so would everyone who drives that road and knows it is pretty bad in parts because the government doesn't spend enough money on roads :-)

    2. Re:Statistics - Everyone should study statistics by RationalRoot · · Score: 1

      But, if you have to bid on contracts to fix sections of road, and the cost of counting every single pot hole just to bid for the contract is prohibitive, then you fall back on stats. You don't need to know exactly how many, just approximately. There are a whole lot of companies makeing a whole lot of money since they understand stats better than you do. If you _REALLY_ think that stats are useless, then there's a few games of chance that I'd like to introduce you to. D

      --
      http://davesboat.blogspot.com/
    3. Re:Statistics - Everyone should study statistics by trendboy · · Score: 1

      Hehe well D computers have everything 100% there is no guessing. So if you really wanted a good guess as to how bad the road is get a local driver to tell you all about them :-) he'll give you a much better guess then. Really Im only pulling your leg, what I don't like is that stats are considered "proof" almost by people but stats can give you a very skewed version of reality. Governments do it all the time! so does the media :-) but for computer science? I don't think it should be part of it at all. What do you think?

  85. Getting by on nothing... by VinB · · Score: 0

    In my case,I have a masters degree in music and have switched over to the computer science field. I am currently enrolled in a masters program in computer science, but the last math class I took was almost 20 years ago. I have already completed courses in data structures, descrete math, algorithm analysis, and operating system design and I'm still going strong. The point is, well, honestly, I'm not sure what my point is. Sure, this would be a lot easier if I had the math background, but it is possible 'learn as you go'. On that note, back to my homework...

  86. Three things : BOE, confidence and toolkit by Peter+(Professor)+Fo · · Score: 1
    Someone who can work things out on the Back Of an Envelope will have a fluency in modelling, reliable arithmetic, and the mental toolkit of mathematical techniques ready to apply. In particular my goals would be:
    • Familiarity with the use and manipulation of abstract symbols...
    • ...so as not to be afraid of formal 'mathematical' descriptions.
    • An appreciation of the various 'mathematical' tools and what they're used for
    Of course this last item is huge. At the top of my list would be :
    • High school maths ie. a bit of everything.
    • 'Proof' as an introduction to algorithms.
    • 'Engineering' maths, probability and statistics as an introduction to modelling systems
    • 'Economics' maths as an introduction to value, costs and benefits
    • Scepticism
    • Presentation of data and argument
    • Being able to quickly pick-up and devise notation
  87. short list by Great_Jehovah · · Score: 1
    In order of importance:
    1. Number Theory
    2. Linear Algebra
    3. Probability
    4. Numerical Analysis
    I left out Discrete Math because at my school it was a CS course and required. Also didn't include Predicate Calculus because it was in the philosophy dept, or Calculus because I'm pretty sure it's required by any decent CS program.
  88. My curriculum (works) by Anonymous Coward · · Score: 1, Insightful

    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.

  89. The only math should be COMPUTER math... by nmaster64 · · Score: 1

    God, I'd like to vomit all the math I've taken as a CSC student. So much Calculus and Linear Algebra...it's so pointless! The second that final is over you forget every last bit of it.

    Computer Scientists should be taking only one type of math: "How to make a computer do math for you".

    1. Re:The only math should be COMPUTER math... by jbrandv · · Score: 1

      If you took Calculus and Linear Algebra and think it's pointless, I'll never hire you! I have never looked at anything the same way since I took Calculus (many years ago). Linear algebra is used so often in computer science you must be a fool to think it's pointless. Can you say object transformation & rotation? You need to go back and take these classes again since you must have missed the whole point.

    2. Re:The only math should be COMPUTER math... by artlogic · · Score: 1

      Linear Algebra pointless? I guess you never plan to do any graphics programming. I would stay far, far away from OpenGL if I were you.

      --
      "A Mathematician is a machine for turning coffee into theorems." ~ Paul Erdos
    3. Re:The only math should be COMPUTER math... by nmaster64 · · Score: 1

      It is pointless, although that probably has more to do with how it's taught. Despite 99% of the class being CSC majors, nothing is done to relate the class to computers. The class is entirely matrix math. And matrix math can be done on a calculator or computer. And if it can be done by a computer, teaching it by hand is pointless.

      The way it's taught now, it's simply that age old student cycle: memorize->test->forget->repeat

      What's the point of learning how to do complex math functions your computer can spit out in 5 seconds? Teach me how to write a program to do it for me, assuming it's not already done for me, but don't teach me this analog bulls**t...

  90. Linear Algebra by adlaiff6 · · Score: 0

    No contest, in my mind.

  91. Remedial Math by sakusha · · Score: 1

    I taught a course in BASIC programming back in 1980 at a small computer store, I spent the first few weeks of the course teaching the associative and distributive laws, so the students could understand how to write simple equations that parsed correctly. A couple of the students went on to take night school college courses in programming and said that my instruction in simple math was more valuable than anything taught in those classes. I don't recall just when I learned the associative and distributive laws, but it must have been when I was a sophomore in high school.
    So never underestimate the importance of teaching the absolute basics of math, and never overestimate the knowledge of students.

  92. Category Theory by exp(pi*sqrt(163)) · · Score: 1

    What better way to understand recursive data structures as fixed points of functors? What better way to understand operations on such structures than to factor them through initial objects and terminal objects in the appropriate category? What better way to understand side-effects than through monads? What better way to understand functions parameterized by type than as natural transformations? Without Category Theory you're like the proverbial blind men feeling an elephant. They'll perceive the individual parts, but they'll never see the unified whole that links the parts together. If your job is merely to feel the shape of the trunk, maybe that's good enough for you, but when you see the bigger picture you'll never be able to go back.

    --
    Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
    1. Re:Category Theory by Coryoth · · Score: 1

      Ah, thank you! Someone (one of the few) who seems to understand the point I was making - that the math available offers fields that, while not currently taught, are far more applicable to CS than calculus. Category theory has to be one of the big ones. I'm beginning to think the problem is that because everyone posting seems to have done the usual math offering of calculus and linear algebra (and maybe some discrete math) that that's what everyone should do and are simply unaware of all the other mathematics that is out there that is so much more applicable. Perhaps I was a little too ambitious in expecting a reasonable number of slashdotters to have had sufficient exposure to these subjects to have anything useful to say. Mostly it seems to be people who found calculus hard work, and so feel they need to suggest it to everyone else to fortify their sense of accomplishment for having gotten through it. What I was askign was how can we reform the math syllabus to better suit CS students. 90% of the answers have been to simply cite the existing syllabus (they even use course number like Caluclus II?!)

    2. Re:Category Theory by exp(pi*sqrt(163)) · · Score: 1
      Computing has changed over the years. Although people like Turing had seen a glimmering of what might come in the future (e.g. chess playing machines), in the early days computing was about numbers. At that time, it made perfect for computer scientists to study numerical methods and calculus, say. (And it still does for people working in certain subdomains of computing.) Today people apply computers much more widely, and well beyond just for numerical algorithms. In the old days the only data structures were floats, integers, and arrays of such. Today we have more abstract datastructures and Category Theory has lots to say about these things. In the old days we just had functions. Now we abstract over functions and separate interfaces from implementations. Again, Category Theory has plenty to say about this.

      Many people complain that mathematics isn't relevant to computing. That's because they're being taught the mathematics of old style computing, not the mathematics of modern computing.

      On the other hand, Category Theory isn't easy, and not everyone needs it. But it's astonishing how many computing concepts arise in Category Theory in a completely natural way even though it was invented for working in Algebraic Topology. It feels like it's the 'obviously correct' way to think about computation and data.

      --
      Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
    3. Re:Category Theory by Darth_Burrito · · Score: 1

      What better way to understand side-effects than through monads?

      Perhaps I'm dumb, but one of the reasons I dislike the inclusion of mathy style mathematics in CS degrees is because every word of the monad entry is damn near incomprehensible whilst every word of the CS entry just-makes-sense. I'm not even touching the wikipedia entry on F-Coalgebra. When I took advanced math in math and cs courses, I felt like half the time was spent just trying to understand all the weird terminology, tracking arbitrarily chosen single letter variables, and even more arbitrary symbols from foreign character sets.

      Monads

      "In category theory, a monad or triple is a type of functor, together with two associated natural transformations. Monads are important in the theory of pairs of adjoint functors. They can be viewed as monoid objects in a category of endofunctors (hence the name) and they generalize closure operators on posets to arbitrary categories.

      Side Effects

      "In computer science, a function is said to produce a side effect if it modifies some state other than its return value. For example, a function might modify a global or a static variable, modify one of its arguments, write data to a display or file, or read some data from other side-effecting functions. Side effects often make a program's behavior more difficult to predict."

      So anyways, to me, this monad/functor/natural transformation stuff, and the materials that deal with it, all seem incredibly less clear than the CS way of looking at things. From a practical standpoint, what would learning the mathy way of looking at these things get me?

    4. Re:Category Theory by exp(pi*sqrt(163)) · · Score: 1
      Yes, those definitions on Wikipedia are only any good to someone who has acquired all the prerequisites. Category theory is hard to acquire outside of a course. I acquired the rudiments myself, but it was really hard on my own. That's why it's a good course to study.

      What does it get you? Well it does allow you to see commonality between a lot of different things, for example shared structures between many different algorithms. This can lead to nice refactorings of your code.

      But where I think it could really help is in programming language design. A language like C++ (and though I'm not happy with C++, I'm not a rabid C++ basher either) is fairly ad hoc. Haskell is a nice well principled language, and category theory plays a big part in thinking about Haskell. Now I'm not (unlike Haskell zealots) saying we should all go off and program in Haskell. But Haskell (and its relatives) have many cool ideas that are making their way into other programming languages (including C++ and Python, say). Category Theory is a foundational kind of subject, good for suggesting overarching guiding principles, like the kind of thing you need in programming language design.

      I also think we need lots of smart people thinking about formal methods because of the big problem I see coming over the next few years - dealing with concurrency. Nobody really knows how to write reliable concurrent code. I think of all the poor programmers I know working on PS3 coding who have to corral a bunch of heterogeneous processors to work together reliably enough to work in a piece of consumer electronics. This is hard. Without concurrency you can get away without formal methods using a trial and error approach to programming. With concurremcy this doesn't work anywhere near as well because literally anything could happen at any time. Category Theory is a great tool for people who want to try to think about these things formally and maybe come up with a programming methodology that makes it impossible to make certain types of concurrency related error. (In the same way that static typing makes a whole bunch of errors impossible to happen at run time.)

      CT is also a very beautiful subject, worthy of study in its own right. CT also connects many different branches of mathematics. This means that as you learn CT you're also learning about many branches of mathematics (and computer science) at the same time without even realising it.

      On my TODO list is "write a book on category theory where each of the constructions is related to something practical rather than just left as an abstract notion".

      --
      Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
  93. Here's what I'd recommend: by Asprin · · Score: 1

    * 3 Semesters of Calculus
    * Linear Algebra
    * Discrete Math
    * Numerical Analysis
    * Statistics
    * Logic (philosophy dept, usually)

    That should pretty be the core set of classes. If you want to take operator theory, topology, real/complex analysis or group theory, by all means it will only help, but the courses I outline above include material (such as rounding error, parameterization and combinatorical counting) that is of more direct practical use to programmers.

    --
    "Lawyers are for sucks."
    - Doug McKenzie
  94. Statistics. Several versions by gte910h · · Score: 1

    Computer programmers repeatedly screw up with empirical data. The CS curriculums in most university act like logic and graph theory are the end all be all (they are important, but not THAT important), but only require a stats course because the large institution does. The "stats" course I had was 4 weeks at the end of a semester of Probability and Statistics. Statistics are extremely important because they show 1> How to test for capacity of programs 2> How to determine error sources 3> How to correctly estimate (well, stats are a requirement to do this, but not all that's required) 4> Understanding of different ideas of random and 5> Understanding how to detect causation and people who have mistaken themselves about causation. These errors cause programmer to say and do rediculous things all the time. --Michael

    --
    Want to see every step I took to start my company? http://www.rowdylabs.com/blogs/pitchtothegods
  95. No Math by Anonymous Coward · · Score: 0

    No math needed (for the most part). Been itching to use my calculus on computer science since I started but haven't found a use for it. Teach them a course on one-off-bugs (that's math for you ;) ).

  96. Discrete Signal Processing; abstract algebra by Dr.+Zowie · · Score: 1

    Admittedly I'm not a CS -- just a computer-minded astrophysicist -- but one of the two or three most useful courses I had in graduate school was discrete signal processing. Anyone who's doing original work in data mining, signal compression (video, sound, text), communications (packet routing, protocol design), or signal recognition (image interpretation, sound recognition, handwriting recognition) absolutely needs to have a good overview of basic DSP techniques. Anyone who uses those things seriously, which is pretty much anyone who reads Slashdot, ought to at least have an overview of the field.

    Abstract algebra is important because it opens up large pathways of logical thinking -- even if you're "just" monkeying around with basic SQL queries, you'll be much more effective if you have had a course in linear algebra or (preferably) abstract algebra: it will make you think differently about the data you are querying. Even if you can write elegant, fast code at a basic language-usage level, algorithmic design is also subject to a bajillion types of boneheadedness and stupidity. Knowing abstract algebra will help you write algorithms that are faster (both to write and to run) and cleaner.

    So -- at least one upper division proof-oriented math course (linear algebra, abstract algebra, advanced calculus) and at least one DSP course (Z-transforms, DSP, data vector spaces, Hanning codes, the channel capacity theorem, and compression theory) should be required!

    1. Re:Discrete Signal Processing; abstract algebra by Darby · · Score: 1

      Even if you can write elegant, fast code at a basic language-usage level, algorithmic design is also subject to a bajillion types of boneheadedness and stupidity. Knowing abstract algebra will help you write algorithms that are faster (both to write and to run) and cleaner.

      I don't disagree with you, but I'm just not clear on what about abstract algebra in particular you think will help improve your algorithms. Obviously, learning upper division/graduate level mathematics will help improve your logical and creative abilities in general.

      I have a BS in math which included a year of Abstract Algebra.
      The classes I took were "pure" math though, so we didn't deal with applications at all.

      Do you have a recommendation for a book dealing with applications of abstract algebra?

      Thanks.

    2. Re:Discrete Signal Processing; abstract algebra by Dr.+Zowie · · Score: 1

      I don't have a good recommendation for an applications book -- but both discrete and continuous group theories help develop good thinking pathways about discrete sets. Rather than wave my hands yet more, I'll give you two examples that are (slightly) more specific: having to trudge through proofs in Galois group theory will give you an unerring nose for corner cases in UI/API design; and thinking about subgroups and symmetry classes will give you a nice sense of how to generalize algorithms that you might otherwise implement with copy/paste.

      Corner cases are a big deal -- considering what happens at the extreme limits of allowed input (in an N-dimensional input space) is (IMAO) the single most neglected part of code design, and it yields fuggliness and bugs at every turn. Well-handled corner cases are a delight to encounter, code, and use, and make life good. Poorly-handled or ignored corner cases increase complexity and cause endless headaches later. Typical corner cases are things like (in language design) zero-length arrays or the scalar-vs-array-of-length-1 wart, or (in GUI window management) windows of zero or very large size or very large nesting depth, or (in analytic geometry applications) lines that happen (in 2-D) to be parallel or (in 3-D) to be coplanar.

      Generalization has to do with deeper subtleties of algorithm design, but if you are used to thinkin in terms of symmetry and generalization, you will more frequently and more readily be constructively Lazy rather than implementing specifics that must later be painstakingly hacked to accept new features or be adapted to new applications.

      So, er, think of it as "deep background" with no specific applications to particular problems -- just good training in a style of thinking that will serve you in good stead later.

    3. Re:Discrete Signal Processing; abstract algebra by Darby · · Score: 1

      Cool, thanks.

      I don't think I've used any specific thing I learned in any of my college math classes since I graduated (well, except for smooth talking girls at parties heh ;-), but I definitely consider it valuable for a lot of the reasons you gave.

  97. Analysis by macawm · · Score: 1

    Analysis helps me the most as student working on both a CS and mathematics degree. It teaches a person to examine a problem from beginning to end with complete comprehension and logic. This is best used in designing efficient algorithms that will rarely need changing or updating. My 2 cents.

  98. Discrete Math, Abstract/Linear Algebra, Analysis by rufius · · Score: 1

    At my own university, the required courses for a Computer Science major in the mathematics area include three levels of discrete mathematics (309, 511, 512) as well as at least two courses in algebra (combined linear & abstract). The ideal at this university is not to teach linear and abstract algebra as seperate topics but rather to integrate them. Since I am a double major Computer Science & Mathematics, I'll end up with plenty of mathematical exposure but it is my feeling that universities should have a strong base in discrete mathematics, analysis (at least to a Calc III level), and linear/abstract algebra. I'd allocate at least 18 credit hours in the mathematics.

  99. Moo by Chacham · · Score: 1

    What Math Courses Should We Teach CS Students?

    None. They arein CS, not math.

  100. Teach CS students enough to get at least a minor by dethl · · Score: 1

    I have taken trig, calc 1 and 2, matrix algebra (I chose the senior level although there is a similar course in the sophomore level), discrete mathematics, numerical methods and statistics for engineers/scientists (opted for it instead of probability).

    At my college this is enough to get a minor in Mathematics. If I really wanted to I could spend my last 2 semesters going for an Applied Math supplementary major as well as my CS degree but I'm burnt out on math.

    --
    "Some fight for law. Some fight for justice. What will you fight for? One day, you will see."
  101. Depends on the kind of business software by Dr.+Zowie · · Score: 1
    ...but I have yet to use n-dimensional calculus in non-cartesian space for practical business applications.


    Funny you should mention that: one of my buddies in graduate school was courted heavily by Wall Street to do exactly that. They wanted him to apply n-dimensional non-Euclidean analysis to stock market prediction to see if there was some additional arbitrage to be had that way. At a time when physics post-docs were earning ~$35k per annum they offered him something like $180k per annum with incentive bonuses on top of that.

    When I finished my own post-doc and was scouting around for a position, I was courted by several IT firms precisely because I was familiar with n-dimensional calculus and non-Euclidean spaces. So that kind of knowledge does appear to be in demand for business applications -- perhaps just not in your particular sector.

  102. the answer is: YES by deander2 · · Score: 1

    not just YES, but DEAR GOD IN HEAVEN YES, THANK YOU JESUS!
    (and coming from a non-christian, no less)

    i'm working on my phd in computer science right now. math was my undergrad, and every single course i took i'm finding of use. all that practice w/ proofs? hello, algorithms. abstract algebra? automata. graph theory? AI, baby! even probability, the series i suspected i would use the least when taking, has probably been the *most* useful. (machine learning, AI, NLP, you name it it has probabilities). and let's not forget both numerical and complex analysis... knowing the math behind the the techniques/applications you're learning in CS...i almost feel like i'm cheating it becomes so easy.

    short answer: take every math class you can get your grubby little hands on.

  103. Math courses by dokhebi · · Score: 1

    I got it all. I was a Math minor...

  104. Necessary Courses by Anonymous Coward · · Score: 0

    1. One year of Calculus. While calculus itself is not necessary for CS, calculus is necessary to understand the bulk of mathematics.
    2. One semester on Linear Algebra in finite dimensions, and group theory
    (with a focus on finite groups).
    3. One year of probability theory and applied statistics. Thats applied statistics, not theoretical statistics.
    4. One semester of discrete mathematics.
    5. One semester of numerical mathematics, with a focus on things such as error analysis, roundoff errors, propagation of errors, numerical stability, and analysis of efficiency of numerical algorithms.

    I am assuming Europeans style universities, where students have had 12+ years of math in school before they join the university. North American colleges probably need to add one year of preparatory courses.

    Topics for advanced courses:
    I. Optimization theory
    II. Numerical solution of differential equations (such as from computational fluid dynamics)
    III. (algebraic *and* algorithmic) Number Theory, especially the mathematics of large prime numbers

    Thomas

  105. Cosc Degree Best for.. by tempest69 · · Score: 1
    Compiler Writer

    software engineering and compiler writing courses

    Software QA

    formal theory classes and proofs

    Software Optimization

    knowlege of big O notation, lock-race conditions, and algorithms Software Architect

    Sometime MIS works here for buisness applications, but for math intensive work I'd still go COSC. Hybrid Degrees

    Being able to make good code for group that has a tough time doing it on their own.

    just my $.02

    Storm

  106. cs != mathematics by micromuncher · · Score: 1

    Call me flame bait...

    Computer science students should not require any math - as very little math is used in any computer science unless its a niche (graphics).

    Here is what I needed to take for my degree; linear algebra, discrete, and calculus. One year of each. (Statistics might have been useful, but I didn't need to take it.)

    There was virtually no application to any of my computer science courses. Restated, I never had to solve a series of equations, never had to apply formal proofs from discrete math to a "computing" problem, nor optimize anything via calculus. Hell I was lucky to use basic algebra.

    However, much more effort in computer science could be put in algorithms, complexity, testing, and design. I mean the "science" of them; to optmization and performance, complexity measures, code coverage, and "software engineering" and the boat load of methodologies. This is far more useful to the "science"...

    --
    /\/\icro/\/\uncher
    1. Re:cs != mathematics by artlogic · · Score: 1

      No math class is going to hurt in when you are in CS. If you are looking to only learn things that are "applicable" to CS, you should be going to a trade school, and not a university.

      That said, I think there's a correlation between the jumps in reasoning calculus requires, and the jumps in reasoning programming requires. I also can't believe that you haven't used at least some ideas from discrete... if you haven't then I'd be concerned about the quality of your education. Complexity theory (that is, big oh notation) should have been convered in discrete.

      IMHO, "Software Engineering" is something you can learn on your own if you receive a good CS education. All it comes down to is organization and experience. On the other hand, if you don't have a theoretical background, all the "Software Engineering" in the world won't help you to solve certain problems.

      --
      "A Mathematician is a machine for turning coffee into theorems." ~ Paul Erdos
    2. Re:cs != mathematics by Coryoth · · Score: 1

      Let me refer you to this post by someone with a good explanation for why, for instance, category theory makes good sense for a CS student to learn. It provides the framework upon which to hang much of CS theory allowing you to have a much better big picture understanding of the subject.

    3. Re:cs != mathematics by micromuncher · · Score: 1

      If you take science to mean accumulate knowledge through experimentation and a healthy naturalism (wikipedia); then computer science does not yield people capable of actually writing computer programs. You've put applied problem solving, analysis and design strategies, and various domain (real world/data/object) modelling solely in the hand of the technical schools. So... if this is true, there is no need for a mathematical foundation in computer science at all. You can leave it at computational theory.

      So I'd argue that math is something you can pick up on your own, when your specialization in computer science requires it.

      (Not once has any client ever asked me to formally prove an algorithm.)

      --
      /\/\icro/\/\uncher
    4. Re:cs != mathematics by ph43thon · · Score: 1

      {insert joke about importance of formal logic courses}

      {insert self-deprecating humor}

      Now.. with that out of the way. Your comment literally states (and I am logically simplifying it.. a skill I developed while earning my B.S. in Mathematics):

      Let
      STATEMENT1 := Computer science does not yield people capable of actually writing computer programs.
      STATEMENT2 := There is no need for a mathematical foundation in computer science at all.

      So, we have,
      STATEMENT1 -> STATEMENT2

      I'm going to need to see a proof of that. Maybe the contrapositive makes the faults clearer..

      !STATEMENT2 -> !STATEMENT1

      There is need for a mathematical foundation in CS implies that CS does yield people capable of writing computer programs. (This is a sloppy formulation.. the "at all" might could make it a little difficult.. maybe the not-statement is "there is some need for a mathematical foundation in CS possibly", but this is so mushy)

      These are sort of unrelated statements..

      Anyway, computer programming is trivial if you know mathematics. If you want only learn programming in school, then, yes, go to a trade school.

    5. Re:cs != mathematics by micromuncher · · Score: 1

      I know graduated mathematicians that cannot write computer programs.

      I know graduated programmers that don't know numerical analysis.

      Hell, I've interview people with computer science degrees that had absolutely no clue how to turn on a computer let alone write a program. One guy I did hire went so far as to redefine null because of an error he was getting... applied math major with a minor in computer science.

      --
      /\/\icro/\/\uncher
    6. Re:cs != mathematics by ph43thon · · Score: 1

      Like I mentioned, it should be trivial for someone with a B.S. in Mathematics to learn a programming language. That doesn't mean they'll know how to program.

      It's trivial to learn how to change a shower head, but that doesn't mean a math major will know how to do that. analogysuccess_1

      If you ever take a programming aptitude test, it just tests mathematical abilities (usually it has the sort of questions one would see on an IQ test.) Though.. I wouldn't suggest you hire a math major for a programming job fresh out of University if they haven't taught themself programming. Since it's trivial, they should have taken the time to learn.

      But, if you have two people who can program, pick the one who took the most mathematics courses. Well.. ok.. only pick that one if you need someone to develop new algorithms or something fancy. If you want to save money and just need a code monkey, pick someone else. Hell, outsource it.

      TMTOWTDI

      As for the guy who redefined null.. that's a math major for you. :p

  107. "Purpose"? by Anonymous Coward · · Score: 0

    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.

    As a mathematician, this attitude is strange to me. You do CS just for the sake of doing CS; why doesn't that bother you, too?

    I took many CS courses. Some were rather fun (Compilers and Translators, for one: I guess we mathematicians like our languages and transforms) -- but others were just mind-bogglingly dull (like Computer Graphics -- yes, really).

    Do CS courses have a "purpose"? Does physics have a "purpose"? What does that mean, and why is it important? I guess statistics may have "purpose" if you're a statistician; I've never used the stuff.

    Physics is a lot closer to mathematics than most people realize. If you don't see the purpose for a particular mathematics course, you can almost certainly find it in a higher-level physics course.

    But since CS, like mathematics, seems to fundamentally be about dealing with abstract concepts (hi Don, hi Edsger!), I wonder why the issue ever comes up. If you just want something with a "purpose", learn to weld.

    1. Re:"Purpose"? by Dareth · · Score: 1

      If you just want something with a "purpose", learn to weld.

      Funny, had a conversation with a coworker who is also in IT. He was saying, "If I had gone into welding, I would have made way more money."

      If I had wanted to be rich, I would have been a plumber!

      --

      I only look human.
      My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
  108. Just Math? by iron-kurton · · Score: 1
    My CS degree required a bunch of math courses, starting with calculus (3 courses), through linear (2) and non-linear algebra (1), discreet math and logic (4 courses - it gets heavy when they talk about different kinds of infinities). The logic and discreet math really served me well, especially with those pesky "if ( !(a && b) )" conditionals. Matrix math was dispersed throughout discreet math and non-linear algebra which came in useful in video game programming.

    However, I think physics should be part of the standard curriculum for a CS degree, but sadly (at least at my somewhat-reputable school) it was (is) not. The reason I say so is because modeling the real world would probably be impossible without using (and understanding) physics, and I found myself lacking the appropriate knowledge when it comes time to, say, program a realistic-looking bounce of a ball.

    --
    Change is inevitable, except from a vending machine -- Robert C. Gallagher
  109. So, in other words by miskatonic+alumnus · · Score: 1

    Linear Algebra --- explicitly listed in your Graphics and Compression categories.

    Engineering makes use of calculus, but the only math a computer can do is addition and multiplication, i.e. linear algebra. Fortunately this is good enough since differentiable functions (the ones of interest to engineers) are locally linear.

    Business applications also benefit from linear methods.

  110. Digital Signal Processing! by carn1fex · · Score: 1

    If CS people want to have an interface with the electrical engineering community, it usually comes in this form. I just about shot myself last year (as an EE) working on software to handle radar signal processing and was eventually monkeying with semaphores n crap. Ugh!

    --

    ---------

    No matter how thin you slice it, its still baloney.

  111. Stats by booradley_1977 · · Score: 1

    Baysian Statsics. That's the future (present in research).

  112. Non-Applied Mathematics? by natoochtoniket · · Score: 1

    As a Ph.D. in Computer Science, with an undergraduate degree in Mathematics, I have always found it amusing that the math courses that the math professors call "non-applied" are the ones that are actually useful.

    "Non-Applied" mathematics courses include: set theory, logic, abstract algebra, language & automata theory, graph theory, category theory, computability and complexity, and even combinatorics. All of these are very useful in computer science. Indeed, these subjects form the core of computer science.

    The "Applied" mathematics courses include: calculus, differential equations, etc. These are nearly useless in computer science. They are really only useful if the particular application requirement is to solve such problems.

    There are a few subjects that are useful in every field, such as Statistics. But even there, my undergrad department offered two versions of the course. An "applied statistics" course for engineering and science majors, and a "nonapplied statistics" course for math majors.

    1. Re:Non-Applied Mathematics? by Coryoth · · Score: 1

      Congratulations, you are poster #2 to actually get my point, which is that, exactly as you say, the courses that are really applicable to computer science tend to be in pure math and be things like mathematical logic, abstract algebra, and category theory. The question is which of these sorts of fields should be in thc core math courses for CS students (yes, all of them should be, but you'll never pack it all in - its a question of prioritisation). The only other poster who really seemed to get it fell heavily in favour of category theory. I'm beginning to think he had a good point.

  113. initial quick thoughts by nothingHappens · · Score: 1

    Calc I sure. Calc II maybe. Calc III and Differential Equations maybe not so much, although DiffEq does kinda jive nicely with functional programming.

    Graph theory and set theory yes. Combinatorics in general yes.

    Linear Algebra yes, for graphics programming. Likewise Numerical Analysis (approximation/interpolation stuff).

    Logic, well DUH.

    Category theory, don't know much about it... Abstract/"Modern" Algebra, wish I'd have taken it. I run across some great theoretical literature that I feel I could learn a lot from if I understood it, and which seems to use a lot of these two.

  114. a better question.... by smithcl8 · · Score: 0

    What CS courses should be required for a Mathematics major? When I was a student (about 10 years ago), we still used FORTRAN for most of our work in computational methods and numerical analysis. Is a better programming language for this task available?

    1. Re:a better question.... by su-geek · · Score: 1

      Mod Parent Up.

      When I was taking Discrete Mathematics, the professor was always trying to rope a couple of C.S. Students to work with math majors on interesting problems (competitive math...). So knowing how to program is a good thing, knowing how to do math on anything other than your Ti-** or Mathematica (rocks!). Statistics is a very important class, yet they way they teach it is boring.... I am a C.S. major, the math is fun after you finally give up hating it (a good professor that actually gives a shit helps)...

      Back to your subject, I think not only math majors should take some applied programming classes, but those who are in chemistry and biology need to model systems and knowing how to program before you have to learn on your own in the workplace would seem to be a great thing to me. (end of the run-on sentences for now)

      Peace,
      Adam

  115. Reading by wonkavader · · Score: 1

    I know this is off-topic but what most CS folks (who tend to self-select as happy in the computer world) need is classes on writing, thinking, and communicating. The math is gravy.

    Further, I've never seen such a thing, but I think a fantasti thing would be what is analogous to the above (from the humanitees world) in the math frame: a class on how to teech YOURSELF any mathematical discipline. How to read math books, apply the theories, evaluate and decide whether to pursue, etc. any given disclipline within math.

    How, as an employer, I would love people who could learn math on the fly as needed.

    1. Re:Reading by artlogic · · Score: 1

      IMHO, it sounds as if you've had to deal with a lot of CS folks who just went through the motions with their math. Just as a theoretical background in CS teaches you to teach yourself most disciplines in computing, a theoretical background in math helps you to teach yourself any mathematical discipline - that is why CS folks need to have a strong math background.

      --
      "A Mathematician is a machine for turning coffee into theorems." ~ Paul Erdos
  116. abstraction by milimetric · · Score: 1

    There are lots of algorithms that would benefit a programmer's training. Lots of math behind those algorithms. So if you're training a programmer, have them pick the area they'd like to go into (networking, graphics, etc.) and teach them the math that pertains to those algorithms.

    I don't think anyone should train programmers though, I think people should train software architects who will have to do programming early in their career. For them, teach math that deals with abstraction. Linear Algebra, automata and computability, graph theory, set theory, relational calculus. Then go into some nitty gritty stuff like differential equations (yuck!!!) just to show them that the world is not as fluffy as modeling concepts lead you to believe. But please, max 1 semester of this horrible math stuff, it rots the heart IMHO

  117. Introducing errors by Anonymous Coward · · Score: 0

    I think a class in computational methods and numerical analysis is critical. It brings together algorithmic ideas (e.g. what's the computationally efficient manner to arrive at a solution to a first order differential equation) and computer data manipulation limitations. It is unusually instructive to calculate the expected error when using Gaussian elimination to solve 10 + 100000000000x = 11. It's the sort of thing that engenders thoughtful consideration of the algorithm to balance computational efficiency against the application's tolerance for error and precision

  118. NONE!!! by Anonymous Coward · · Score: 0

    Absolutely none. Maths are boring and are not related to programming at all.

  119. Formal logic by xenocide2 · · Score: 1

    It's a tradegy of the primary and secondary education system that logic puzzles are consistantly of the form "Bob is tom's neighbor, dave's house is not green" and so on such of the form of Einstein's puzzle. In formal logic, the meaning of english sentences is lightly touched upon, but far from the focus. Instead, the focus is on things like Natural Deduction (things like, if and only if, Law of Excluded Middles, and implication), first order logic (for all x, such and such is true, or there exists an x such that blah is true). CS courses typically use those as a starting point for moving into programming logic, which is useful in proving that a does something useful, like sorting an array. Much of it you use in your daily life implicity, and most of the consequences are built into a good programmer's mind pretty much universally before they have the chance to learn about it. But it should come as no surprise that it's possible to construct a program that is difficult to be sure is correct, and formal logic is the toolset we use to fall back on in such cases.

    --
    I Browse at +4 Flamebait

    Open Source Sysadmin

  120. Doesn't Really Matter by Anonymous Coward · · Score: 0

    We'll overload the mathematical operators anyways.

  121. History of Mathematics by changos · · Score: 1

    My most beloved math class @ the university was History of Mathematics. We learned about the basics, Euclid, Newton, etc. They were the innovators, the builders of unseen worlds. If CS students, learn to think like them, a java class is no problem. Thinking is what CS is about.

  122. Yes, yes, yes, Linear Algebra. by Malkin · · Score: 2, Interesting

    SQLGuru is absolutely right. If you want to do graphics, or want to be a game programmer in general, you should absolutely study linear algebra.

    I would also like to emphasize that as much as university programs tend to be focused on theory, it would be beneficial for the students to have some inkling of what the applications of these various branches of math are. I studied linear algebra in college, but I was forced to do an aggressive review of it, later in my career, because I had retained very little of it. Had I understood how important linear algebra was to 3D graphics, back when I was studying it, I'd have been much more excited about the topic, and would have retained the information better. Unfortunately, our program provided no context, whatsoever, for what we were learning, so we never really knew why we were studying it in the first place.

    1. Re:Yes, yes, yes, Linear Algebra. by elwinc · · Score: 2, Interesting
      I second the suggestion of linear algebra. Here's how I would do it:

      1 semester of graphics. While teaching graphics, make sure to emphasize the matrices. Students will get concrete visual examples of what matrix multiplication can do: rotation, scaling, general affine transforms. Graphics is useful in itself, and becomes a stepping stone to linear algebra.

      Then 1 semester of linear algebra, with lots of practical examples. Linear algebra is the stepping stone to data mining. it also leads other important statistical techniques used in pattern recognition and machine learning.

      Delving into those statistical techniques is graduate level work, but by knowing linear algebra, a CS student has the tools to learn the basics from a book.

      Lemme put it like this: If your student wants to work for Google or similar cutting edge companies, she should be familiar with linear algebra. If she wants to spend her career translating sales records from one database format to another, she can probably skip the linear algebra.

      --
      --- Often in error; never in doubt!
  123. numerical methods by swanriversean · · Score: 1

    I switched to CS after a couple of years in a traditional engineering program.
    In the CS program we covered discrete math and statistics (everyone in science and engineering had to do first year calculus and algebra courses).
    We also had a special course in logic (we used SPARC assembly for assignments).
    But one topic that was not covered in CS, but I got in a second year engineering calculus course, was numerical methods (especially the 'gotchas' of machine math vs. real math).
    Maybe it is just the type of work I've done (structural analysis software, and compilers), but that is one topic that I really would have missed (although I probably wouldn't have known it) if I had done CS right from the beginning.

    --
    Be who you are and say what you feel, because those who mind don't matter and those who matter don't mind. - Dr. Seus
  124. What have I used? Almost nothing. by kria · · Score: 1

    That's right, I have used almost no college math in my seven years in the programming world. Heck, earlier this year, I had to do some math, but unfortunately it wasn't a kind I'd ever had: spherical geometry, preferably relating to it being on the actual Earth.

    Anyway, my college was on a three "quarters" system (don't look at me like that, that's what they called them), and as a CS major I had to have:
    Calculus I, II, III
    Differential Equations I & II
    Discrete & Combinatorial Math I & II, with III fulfilling a math elective
    Linear Algebra
    Intro to Probability (in contrast to the engineering majors Statistics class)
    And, IIRC, two more math electives. I took Fractals and Cryptography.

    And sadly, I don't think I've used any of it at work.

  125. Take every course offered, twice if you have to by pestilence669 · · Score: 1

    ALL branches of mathematics are relevant to computer science. Sure, you can get by without going as far as you possibly can, but you'll probably end up wasting a lot of effort. I've witnessed many engineers over-architect simple solutions simply because they haven't been exposed to enough math... even for problems with KNOWN solutions. Math is a critical foundation for all logical thought. If you're studying for CS and thinking about cutting back on math, then you might want to reconsider your career.

  126. What about linguistics? by Sparagmei · · Score: 1

    A little off-topic, but:

    Given the need for natural language processing in many real-world applications, not just AI and database engineering contexts, would a bit of formal linguistics be appropriate for a CS degree? I don't have such a degree, so I'm also wondering if CS departments have a way of handling these subjects under their own mantle.

  127. Errata by naejulak · · Score: 1

    The first sentence of this post is false.

  128. Several complex variables function theory by Anonymous Coward · · Score: 0

    Any CS major worth his/her salt should learn the theory of functions of several complex variables. I use it all the time.

  129. CS? OK, this is what you all were thinking... by had3l · · Score: 1

    I should have thought of applying to Counter Strike school when I had the chance, after all, my career advisor told me to focus on what I was best at...

    Anyway, anything that explains the trajectory of my Flash Granade?... ("(f^k(x)){kN}" or something?)

    *sigh*, I tried...

  130. no math required by Dretep · · Score: 1

    I didn't take any math courses, binary was taught in Comp Sci 101. Unless you plan to program for a fertilizer company, you don't need calculus. Unless you plan to program for an online casino, you don't need statistics. Heck, you don't even need to know what pie is unless you hope to work in a bakery. Math is for scientists and nerds, not computer geeks! Just say no to math!

  131. Just teach Algebra by Anonymous Coward · · Score: 0

    My schools all thought that we needed Trigonometry, Calculus, and Statistics. The truth is, in computers (or much of real life even) you won't need anything NEARLY so advanced unless you are either writing a program for a Trig, Calc, or Stat class or you are designing CPUs or other microprocessor chips. The truth is, on the fundamental levels of things like programming and such, computers use some of the most basic maths out there.

    I am an advocate of Algebra though. It teaches you to look at solving problems from different angles. Eg you don't always know the direct solution, but you can often find an indirect solution using the methods Algebra teaches. It seems like it may be a good idea to have more than just the basic Algebras given in high school, or at least require that CS students have taken a college level Algebra and demonstrated a reasonably passing grade. It's such a basic class that chances are they already are quite familiar with it -- heck, my school let me skip college level Algebra because I scored high enough in math on the placement exam to show that I already knew all it could teach me from high school. One of the many reasons I switched from CS to CIS was the fact that I just couldn't handle three levels of Calculus however. Now that I'm out here in the real world, I'm finding that for some reason not many people are demanding that I know Calculus III like the back of my hand. Go figure. Actually, some of the more advanced Algebra lessons are useless out in the real world too, but it's nice to pound in that mindset of solving problems from angles you normally wouldn't even think of. Doesn't hurt to get an early and healthy understanding of the concept of variables I suppose too, not that they are actually the same thing exactly.

  132. Fourier Series is a good choice by Anonymous Coward · · Score: 0

    I learned about fourier series in Linear Alg. but it's applications in the computer science/ engineering field are numerous. Also number theory is a good class especially for Cryptography.

  133. Graph and Discrete Maths by wikinerd · · Score: 1

    At my university we did Discrete Mathematics, Automata Theory, Graph Theory, bin/oct/hex numerical systems, statistics and probability and a whola lot of other stuff

  134. Computer "Science" is an oxymoron by Anonymous Coward · · Score: 0

    N.B. I'm talking about what passes for "Science" today in most academic CS departments. I'm *not* talking about the Turings, the von Neumans, the Knuths, or even the Rivests of the world.

    Grumpy Old Scientist

  135. All math is useful to CS by Jason1729 · · Score: 1

    What I've found most useful is Graph Theory and Formal Languages. I have a B.Math in CS and I've used just about every kind of math in my CS work.

  136. logic better than maths by Anonymous Coward · · Score: 0

    My all time favorite university course was philosophy course on logic, we did pages and pages of predicate calculus, made our own Turing Machine, and studied the WWII Enigma machine. I found this course more useful than the maths I took.

  137. A waste of your time by daliman · · Score: 1

    While I was forced to study maths as part of my degree, I still think it was a waste of my time. Talking to my Head of Department before I left, he said it was purely a method to weed out those who would be poor CS students, when they didn't have the funding to cover all students, based on the fact that good maths students often == good CS students. Basically, you don't need mathematics for most computer science subjects. It's a complete waste of your time, avoid it if you can.

  138. Math delights not me by Darth_Burrito · · Score: 1

    What a piece of work is math!
    How noble in reason!
    How infinite in faculties!
    In plots and graphing, how express and admirable!
    In Algebra, how like an angel!
    In Analysis, how like a god!
    The beauty of the world...
    The paragon of sciences...
    And yet... to me...
    What is this quintessence of arithmetic?
    Math delights not me.

  139. Re:Basic math skills ... by tomhudson · · Score: 1

    Nice strawman arguments. Of course, it totally ignores my point ... which is why you trotted out the "straw man wookie look at this hand" ...

    Basic math skills would have avoided some very costly mistakes. Of course, if the US had gone metric along with pretty much everyone else in the world, again, this mistake wouldn't have happened ...

  140. literature or law by rye · · Score: 1

    Why math? I would argue that a solid writing or law curriculum might be even more valuable. You learn a great deal about logic in the course of writing and evaluating analytic essays/studying law, and in addition you learn the art of written communication, which is often lacking in CS geeks. I was a CS major and I've been a writer all my life. I often find myself using the same skill sets, whether I'm outlining an essay by breaking it down into logical subsections, or outlining a piece of code in the same manner. Logic appears in many disciplines.

    Furthermore, whenever I get a job, I'm always told it's because I have great communication skills in addition to my standard technical background. The ability to write clear and effective documentation and comments is just as important as the ability to code, and of course those skills are linked, too. So I'd kill two birds with one stone: learn written communication, and practice the art of logic, by studying literature or law rather than loading up on math classes.

  141. calculus by sentientbrendan · · Score: 1

    First IAACSM.

    Here are the math classes that are traditionally required for CS majors in order of importance.
    1. linear algebra (if you ever want to do graphics you need this).
    2. discrete mathematics (usually 2 courses on this covering various topics, such as graph theory, proofs, etc).
    3. stats. (Honestly I haven't taken the course yet, but stats comes up enough in other courses, like AI, that I wish I had.)
    4. calc. (primarily because taking calc guarantees you can do all the little bits of arithmetic and geometry you will need. also, being able to differentiate a function is handy occasionally.)

    There are people who will argue that calc should be number one, and I'm not saying it isn't absolutely essential *for some problem spaces*, but for the core problem spaces associated with computer science, you won't need it.

    That said, all the math classes that are required for CS deps (at least the ones I've listed) are pretty handy tools to have in your box, and I don't feel like calculus was a waste of my time. It's just that if you absolutely had to scratch one of the four out of the curriculum, you'd probably pick calc.

  142. The most important math for CS is .... by jamej · · Score: 1

    Addition -- its all a freak'n CPU can do, remember?

  143. The list of courses that SHOULD be taken by pgorillaman · · Score: 1
    Freshman Year:
    • Discrete Math
    • Boolean Algebra
    • Linear Algebra
    Sophomore Year
    • Single-Variable Calculus
    • Multi-Variable Calculus
    • Diff. Equations
    Junior Year
    • Basic Statistics and Probability
    • Advanced Statistics
    • Design and Analysis of Algorithms
    Senior Year
    • Graph Theory
    • Formal Languages and Automata
    • Computational Geometry
  144. calculus, statistics/probability, descrete math by billyjoejimbob · · Score: 1

    To do any significant research in CS, one needs significant amounts of calulus, statistics, and descrete mathmatics. All were used in my graduate studies, and the foundations of this help me to this day to any type of performance analysis.

  145. why single out set theory? by Dareth · · Score: 1

    why single out set theory?

    Databases.

    --

    I only look human.
    My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
    1. Re:why single out set theory? by bcrowell · · Score: 1

      why single out set theory?
      Databases.
      ...which are finite.

  146. Math for Computer Science by Oshkoshjohn · · Score: 1

    I studied calculus in college, but the most valuable course for getting my head around computers has been a rigorous high school geometry course, taken over forty-five years ago. The formal proofs of theorems help a person discover and learn to lay out a step-by-step algorithm of traveling from point A to point B in a process, which is what using computers and programming is all about!

    --
    Goddamned kids! Get off my lawn!
  147. Sure it matters by Tack · · Score: 1
    I disagree that it doesn't matter. It depends on the areas of comp sci you want to get into. Cryptography? Signal processing? I say take as much math as you can.
    • Linear algebra and discrete math - mandatory for any computer science student IMHO.
    • Probability and statistics - my least favorite math, but important to know the basics.
    • Abstract algebra - cryptography
    • Numerical analysis - makes you see all the math you've been doing from an algorithmic perspective; I found it very enlightening.
    • Real and complex analysis - signal processing. I've been interested in video compression over the last couple of years, and I desperately wish I had paid more attention to this class (and took more of it) in school.
  148. I'll be happy to do what I'm given by gogodidi · · Score: 1

    If I'm told that it will help me, then I will take it... I used what I learned in computer science to help me do my IB HL mathematics coursework last year.

    --
    ugh...
  149. You don't want prima donnas? by jotaeleemeese · · Score: 1

    No Maria Callas for you then (or equivalent in the programming world).

    Sometimes you have to put up with prima donnas if the benefits they bring outweight the problems thay cause.

    --
    IANAL but write like a drunk one.
  150. Calculus should be considered general culture by jotaeleemeese · · Score: 1

    For anybody related to scientific or engineering fields.

    --
    IANAL but write like a drunk one.
  151. None by Andrewm1986 · · Score: 1

    None, we should teach them MathS or Mathematics, but defiantly not Math, since it doesn't exist

  152. Depends what you want to do... by milette · · Score: 1

    Computing Science programs are designed to produce 'generic' candidates with no particularly strong skills in any particular area of IT. This philosophy assumes that the person 'should' be able to learn whatever they need to know for whatever job they want to do -- but this makes most graduates effectively useless and unsuitable for any particular position.

    In my view, the key for a CS candidate is to choose and specialize in one particular area they wish to work in -- be it multimedia, cryptography, and even in the software development area -- to focus on one particular area of specialization -- business software, scientific software, graphics and visualization software, etc.

    So, if the question is what kind of math you should take -- the answer is in what you want to end up being able to do!

    In my own case, complex math has proven virtually useless -- 99.9% of what I do that is mathematically-related is cost analysis spreadsheets where the business functions I need are built-in and not particularly difficult. If you wanted to specialize in cryptography, and had the desire to understand or build new algorithms, you'd need some heavy math, but just 'using' cryptography to accomplish the business goal of connecting offices through a VPN, you'd be better to take some courses from Cisco or Microsoft. ;)

  153. As a PhD student in CS... by wmspringer · · Score: 1

    I would find a graduate-level course in graph theory to be more useful than any math class my university currently offers.

    Of course, that's probably because my research involves graphs...