Slashdot Mirror


Which Math For Programmers?

An anonymous reader writes "It is no news that the greatest computer scientists and programmers are/were mathematicians. As a kid 'hacking' if-else programs, I was not aware of the importance of math in programming, but few years later, when I read Engines of Logic by Martin Davis I started becoming increasingly more convinced of this. Unfortunately, math doesn't return my love, and prefers me to struggle with it. Now, as the end of the semester approaches, I am faced with a dilemma: What math subject to choose next? I have two choices: 'Discreet structures with graph theory' (discrete math; proofs, sets, algorithms and graphs) on one side, and 'Selected math chapters' (math analysis; vectors, euclidean space, differentials) on the other. I'm scared of the second one because it's said to be harder. But contrary to my own opinion, one assistant told me that it would be more useful for a programmer compared to the first subject. Then again, he's not a programmer. That's why I turn to you for help, fellow slashdotters — any advice?"

466 comments

  1. Physicists? by jeffblevins · · Score: 5, Insightful

    I don't disagree that mathematicians make great software engineers, but I think most of the great software engineers in the past were physicists and electrical engineers.

    1. Re:Physicists? by Zarrot · · Score: 1

      We'll until the early to late 90's Computer Science/Computer Engineering really wasn't it's own field. It was generally a specialty of the EE curriculum.

    2. Re:Physicists? by arethuza · · Score: 3, Informative

      I don't know about that - the CS degree I did (starting in '83) was in a Computer Science department that was opened in '67. While I think that was one of the first in the UK I don't think it was that exceptional.

    3. Re:Physicists? by bazaarsoft · · Score: 1

      Not really - I started on a CS degree in 1984 - granted, it was run out of the Mathematics and Computer Science Department - it was at a smaller school. I had many choices for a real CS degree from several other larger schools. Perhaps they were part of an engineering or mathematics department, but just because there was no specific "Computer Science" department doesn't mean it wasn't it's own field.

    4. Re:Physicists? by John+Betonschaar · · Score: 3, Informative

      Dude, if there's three kinds of people on earth that make terrible software engineers, they're mathematicians, physicists and electrical engineers.

      While they may write incredibly smart and efficient computer programs that solve incredibly difficult problems, that doesn't make them good software engineers. The libraries and API's I've used that have the worst documentation, the worst programmning interfaces and the most convoluted and non-extendable architecture are invariably libraries and API's written by (and often for) mathematicians, physicists and electrical engineers. Common 'good software engineering practices' don't appear to apply to people from these fields, which isn't bad if they'd stick with solving the problem and prototyping a solution, then hand over their work to skilled software engineers that are qualified to turn it into good software. Using stuff like LAPACK, BLAS, CSparse, Matlab-type code etc is pure masochism for software engineers like myself.

      Ontopic for the submitter:

      Both sound useful to me, but many of the topics from the 'selected math chapters' are probably only interesting to get a basic understanding of what is what, and improve abstract thinking. If you're ever going to have to write software that does differential calculations or linear algebra all depends on the kind of problems you will work on. There's lots of stuff you don't need to know anything about applied mathematics like that for. Graph theory, data structures and algorithms on the other hand, are almost a fundamental part of any CS or software engineering education. While you can write quality software without any knowledge of linear algebra, I really doubt you'll be able to write quality software without knowledge of algorithms, complexity theory, graph algorithms and advanced data structures. They're the cornerstone of software that doesn't suck.

    5. Re:Physicists? by rrhal · · Score: 4, Insightful

      In the US many (if not most) CS departments were affiliated with the Math department. There was a movement after I graduated (1982) to move CS departments to the engineering schools because there was more government funding for engineering. Math intersects programming in two ways: both programs and proofs benefit from a certain logical approach that can be learned in classes like abstract algebra and advanced calculus; numerical methods for solving integrals, differential equations, and linear algebra. The first helps with logically setting out a program. Minds are lazy; we all tend to believe "hand waving" rather than work out all the nitty gritty details. Learning mathematical proofs will help you recognize when you are hand waving and when you have really nailed things down. The second is a specialty for the sciences. There are a lot of good things to know about the pitfalls of numerical calculations on computers.

      --
      All generalizations are false, including this one. Mark Twain
    6. Re:Physicists? by hazem · · Score: 1

      You also saw Computer Science coming out of math departments as well. Where I was going to school in the 70s, Computer Science was under math, but Computer Engineering was being built in the Engineering department. There was certainly some overlap. My guess is you saw it coming out of whichever department had the most clout and desire to have it.

    7. Re:Physicists? by dr_leviathan · · Score: 2, Informative

      As a physicist turned software engineer I think you should take both math classes. Alternatively, take physics classes instead -- if you go far enough you will have to learn and apply almost all of those maths, plus others (linear algebra, series decomposition, approximation methods, and derivation skills, and general problem solving).

      --
      Religion is poison to rationality, and we lose sight of that at our own peril. -- Lurker2288
    8. Re:Physicists? by cayenne8 · · Score: 2, Insightful
      I can't think really of any math much higher than addition and subtraction that I've really ever had to use in my IT career so far.

      At least for coding and database work...never really have had to use much math, at least not any higher math.

      --
      Light travels faster than sound. This is why some people appear bright until you hear them speak.........
    9. Re:Physicists? by SupplyMission · · Score: 1, Insightful

      You're not qualified to answer the question. Information technology is not computer science. They are called different things for a good reason.

      There is little or no similarity between computer science and IT because they are completely different fields. In IT, you use programs and systems that real computer scientists created, and write scripts and Visual Basic things to glue them together, in order to get something that does what you want. IT is about integrating systems. Computer science is about math, scientific analysis, designing optimal algorithms, and so on. Therefore your lack of need for math in your IT work has no connection to the question being asked.

    10. Re:Physicists? by yttrstein · · Score: 1

      "but I think most of the great software engineers in the past were physicists and electrical engineers." --- which is, like good computer science, simply applied mathematics.

    11. Re:Physicists? by Anonymous Coward · · Score: 0

      I hope you are right. I'm an electrical engineer trying to transition into software development. Also going back to school for a masters in CS.

    12. Re:Physicists? by The+End+Of+Days · · Score: 1

      IT is not computer science. Computer science is not programming. Software engineering is not engineering.

      Nothing is what it seems.

    13. Re:Physicists? by COMON$ · · Score: 5, Insightful
      I know you are trolling but I call BS here (pun intended). I have a CS degree and am a Network Admin in an IT department. Now while I am not spending my time doing research (what you are referring to). I am using CS theories and applications every day. Tools are tools, whether I am using someones algorithm for optimizing data at a low level or high level either way I am doing data optimization. Given there are a LOT of IT folk out there, A LOT, that dont think of the profession properly. (See parent post, they may just not know that they are using high level math or may not be that good of an IT person) There are plenty of us CS grads who do. I have fun with numbers all the time, figuring out the rate of change in our systems over the last 5 years or calculating projected resource needs in 3 years.When I am looking for a solution to a problem I am not thinking vendors, I am thinking, what are my parameters and how do I fit them? I use my knowledge of big Oh for figuring out which methods to use for intrusion detection, or for designing routes on networks. I use my knowledge of numerical analysis to figure out how close is good enough when determining efficiency.

      We could go all day on this but tools are tools, objects are objects, it doesn't matter if they are arrays or VB scripts. Either way we are standing on someone else's shoulders and using computational analysis to find a solution to a given scenario. Do I really need to whip out the XKCD reference here?

      --
      CS: It is all sink or swim...oh and did I mention there are sharks in that water?
    14. Re:Physicists? by Anonymous Coward · · Score: 0

      yes, but would you say you are a "great software engineer"?

    15. Re:Physicists? by COMON$ · · Score: 1

      and Physicisans aren't biologists...EEs arent Physicists, Pharmacists arent Chemists...

      --
      CS: It is all sink or swim...oh and did I mention there are sharks in that water?
    16. Re:Physicists? by Ouchie · · Score: 1
      Someone smarter than me said, "Necessity is the mother of invention." I became a programer out of necessity not intent as I assume most of those great programers you speak of.

      I agree with the person above that taking a class that focuses on the application of math over the pure science of it is more important at this point. Physics, Chemistry and Engineering will require you to learn the math as it applies to the problems you encounter and this will build your general problem solving ability.

      I think if you pursue this course you will find math easier when you are focus on the application.

      --
      "Of all the things I've lost, I miss my mind the most." ~Ozzy Osborne
    17. Re:Physicists? by Anonymous Coward · · Score: 1, Insightful

      If you believe that the relational model on any RDMS has nothing to do with mathematics is a good way that in fact you don't really know much about math. Yet, just because you aren't even aware that you are using mathematical concepts everyday it doesn't mean that you don't have to use much math. In other words, ignorance is bliss.

    18. Re:Physicists? by jc42 · · Score: 3, Insightful

      I can't think really of any math much higher than addition and subtraction that I've really ever had to use in my IT career so far.

      I can. Most of it is called "logic". Of course, this won't mean much to people who think that addition and subtraction are "mathematics". But mathematical logic is a well-recognized field among mathematicians. The main way it comes into programming derives from the fact that debugging (especially debugging other people's code) is primarily an exercise in logic.

      The software field suffers a lot from the constant lack of logic.

      And yes, I have occasionally written out proofs of code, or rather, of the algorithm inside the code. But this has serious limitations, as the proof is always based on assumptions about the behavior of the underlying "system" including the OS, libraries, etc. This behavior is rarely totally knowable in practice, although in any true digital system, it is knowable in theory. Except in the case of a proprietary system, in which the underlying axioms are carefully hidden from the programmers. Some people even consider "information hiding" to be a Good Thing. ;-)

      --
      Those who do study history are doomed to stand helplessly by while everyone else repeats it.
    19. Re:Physicists? by bughunter · · Score: 4, Interesting

      I think you're confusing the art of programming with the engineering of software systems. The minds that are good at one are generally not good at the other, and training for one often comes at the expense of the other. Very few are good at both, though I have worked with such people. The former requires an intimate understanding of the science and mathematics underlying problems to be solved, whether they are actuarial algorithms for life insurance or physical engines for FPS video games. Physics and math are the foundation upon which the necessary intuitive, creative leaps can be made to solve problems in a robust, elegant manner. Turning the crank on an existing process isn't good enough. The latter is fundamentally systems engineering: identifying and quantifying assumptions, risks, and resource limits; chunking problems and deriving requirements; and lots and lots of bookkeeping and documentation. The bookkeeping and documentation parts are the kinds of things that many physicists and electrical engineers have to be cajoled and browbeaten into. Software engineering can seem very, very tedious to a creative mind. Now, which did the GP mean? I think the former. But I think you are talking about the latter, and you are both correct.

      --
      I can see the fnords!
    20. Re:Physicists? by Anonymous Coward · · Score: 0

      I don't see how parent is a troll at all. He is drawing a fair and clear distinction.

    21. Re:Physicists? by Anonymous Coward · · Score: 0

      That would be correct. Most current RDMS's use SQL to manipulate and query data. SQL is founded on calculus set theory. As such, you are likely using calculus ideas every day while working with a RDMS, although it isn't described as such. Knowing calculus set theory can definately help you, but you don't really need to know it to get by.

    22. Re:Physicists? by treeves · · Score: 4, Informative

      Pharmacists arent Chemists

      In the UK they are called that.

      --
      ...the future crusty old bastards are already drinking the Kool-Aid.
    23. Re:Physicists? by khallow · · Score: 1, Insightful

      Using stuff like LAPACK, BLAS, CSparse, Matlab-type code etc is pure masochism for software engineers like myself.

      Then cover it with a friendly API layer. A lot of that stuff predates modern object oriented programming. So there's no reason to expect it to look pretty, no matter who wrote it.

    24. Re:Physicists? by recharged95 · · Score: 2, Insightful

      You're right.

      Famous software engineers were either former Applied Physicists, or Electrical Engineers. Again, to the rest of the CS audience: that's software engineering. That means making things work, proving concepts in hardware and software. The "how" part.

      I've find Mathematicians excel in the [pure] Software Development part (i.e. Computer Science), in other words, the "why". Pure by means of: interested in writing a new language?

      This is likely directly related to your interests: In s/w development, it's all about syntax, and doing it in the theoretically correct way (thinking like a mathematician). In s/w engineering, it's fitting a solution around the problem and working with unchangeable h/w constraints (thinking like an engineer)

      Deep down there is a difference. Note that most Physicists hate math (or lazy at it ;) )and vice versa.... As for math classes, if you want to be a software engineer: PDE, Math Analysis, vectors, euclidean space are beneficial IMO. For hard core software development, discrete math and graph analysis are better. And this is from a former physicist's POV.

    25. Re:Physicists? by COMON$ · · Score: 1
      Considering how many times this has been discussed and the ongoing war CS != IT, it is a troll. Check the definition of troll here http://en.wikipedia.org/wiki/Troll_(Internet)

      Coming from someone here who lives the "distinction" IT is a subset of CS and CS is just as applicable here as in research, just in a different manner. It is akin to assembly level programmers saying C programmers arent really programmers because they are just using the 'real' programmer's constructs to take shortcuts. No more a fair and clear distinction than was made by the OP.

      --
      CS: It is all sink or swim...oh and did I mention there are sharks in that water?
    26. Re:Physicists? by dkf · · Score: 2, Insightful

      Pharmacists arent Chemists

      In the UK they are called that.

      Only by laymen who don't know better.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    27. Re:Physicists? by SQLGuru · · Score: 1

      Linear Algebra is a great choice for anyone interested in the graphics / games (among many other uses, but graphics is a heavy user). It's basically matrix math (I know, it's more but for those not in the know, it's a large part of it). I took it during my college career (90 to 94) and even pull it out occassionally in my business app world.

    28. Re:Physicists? by Anonymous Coward · · Score: 0

      Some of the earliest programmers they looked for were music majors, b/c music like computers is a real life application of math.

      While we may not think of them as mathematicians they really are

    29. Re:Physicists? by Anonymous Coward · · Score: 0

      ...and yet they do about as much chemistry as a footballer kicks people in the balls.

    30. Re:Physicists? by Etrigoth · · Score: 3, Funny

      Pharmacists arent Chemists

      In the UK they are called that.

      I believe they call them Alchemists around this part of England ...

      Mind you, they still point at planes here ;)

      --
      When we remember we are all mad, the mysteries disappear and life stands explained.
    31. Re:Physicists? by AlgorithMan · · Score: 1

      so you never gave a course in programming and hat mathematicians in it... I did and I can tell you, that mathematicians write horrible ugly spaghetti code and jumping code without meaningful variable names! The stuff might work, but its unreadable, mostly some border cases don't work and don't get me started on running times!

      --
      The MAFIAA is a bunch of mindless jerks who will be the first up against the wall when the revolution comes
    32. Re:Physicists? by Hork_Monkey · · Score: 1

      Discrete math can be applied to algorithm/query optimization, and is often taught as that application.

      It's really more of a school of thought that uses different areas and disciplines from all over the "math arena".

      If you've ever stepped through loops and tried to optimize conditional statements, you've done "Discrete structures with graph theory" (In a simplified fashion).

    33. Re:Physicists? by geekoid · · Score: 1

      They should be called alchemists. Just look at all the magic you can buy there. Magic ear candle, homeopathy cures, at so on.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    34. Re:Physicists? by david.emery · · Score: 2, Insightful

      Well, there are IT programmers, and then there are people who have been called 'architects', 'lead programmers', 'software engineers', etc. Anyone who has to reason about correct behavior of a distributed system, as one example, should have a background in both discrete math and in probability, as essential tools to try to reason about correctness, or at least stable/unstable behavior, in his system.

      I believe that there is more to IT than hacking code. Even there, when I was a gen-u-ine programmer and the first maintenance programmer on my project (I rewrote a major component twice, once for time because it was taking too long and the second time for space, because it used too much memory. The savings from the latter on this project by reducing memory requirements in the workstation was literally $1m...), I used both CS and discrete mathematics to reason about the code I was trying to rewrite.

      So I reject the position taking by "SupplyMission". We have -way too many hackers- and not enough people with both formal reasoning skills and with the specific academic tools, including discrete mathematics, in this business. Nothing is a better illustration of this than the -abomination- of a time reporting/expense reporting system my company bought from an "industry leader." Some of the worst-designed software I've used in -years-!!! (Name provided upon request.)

    35. Re:Physicists? by Anonymous Coward · · Score: 0

      Also in Australia

    36. Re:Physicists? by Jahava · · Score: 4, Insightful
      While you are trained in Computer Science and are actively applying Computer Science to your job, you are not working as a Computer Scientist.

      You are working as a network administrator. Like any field, network administration benefits from knowledge of other fields. In your case, you are using your knowledge and training in Computer Science, Mathematics, and (I'm sure) other fields to your current problem, and it's better off for it. You are practically applying scientific fields.

      Most of the work I did while working on my Computer Science degree was on textbook and paper. Computers were occasionally used for mock-ups and proofs of concept, but most of the lessons that I learned were pure theory. Think about that ... you don't need computers to practice Computer Science (and, indeed, the early forefathers of the field didn't even have them).

      Sadly, the majority of CS majors end up getting jobs in IT, network administration, etc. This because there are way more jobs building things than there are researching them. CS people are often sought out for those jobs because their CS training is very applicable to the work (as you so clearly demonstrated). However, don't fool yourself. Even if your job title reads "Computer Scientist", most corporations see that as analogous to "guy who knows how to use a computer". Computer Science is all about the theory.

      If you're reading this as some sort of elitism, you're reading it incorrectly. It's an important technical distinction, and one that is becoming more apparent as the field matures and Computer Science ascends towards the HTW just as Information Technology drifts towards Engineering.

    37. Re:Physicists? by Anonymous Coward · · Score: 0

      I know you are trolling but I call BS here (pun intended).

      Do I really need to whip out the XKCD reference here?

      I really don't understand what pun you are trying to make or what xkcd you are trying to reference. Similarly, the post you are replying to is not trolling in the traditional sense, he's making a real distinction in a somewhat elitist way.

    38. Re:Physicists? by geezer+nerd · · Score: 1

      Computers were first used to solve heavy-duty computational problems which arose from the mathematics of ballistics and nuclear physics and such. The people who accomplished the work were those who madly wanted the *answers* to their problems. Pretty much everything I know about computing I taught myself while in graduate school studying quantum chemistry. My graduate dissertation depended entirely on presenting and analyzing a series of computed numbers, each of which required ~8 hours of solid computation. I had to learn about computing and programming because my results depended on it! In particular, I was interested in how to make the computing go faster -- and for that, some mathematics played a big role, particularly the theory of symmetrical groups (but that was more about the physics, not the computing). Subsequently I went on to a 38-year career in mainly software design and development.

      As I recall, one of the great gods of computing in the 60s & 70s was F J Corbato, of Multics fame, who was first a quantum chemist. There were others in that vein, notably from U of Illinois. At my own alma mater, U Texas Austin, the first computer on campus was brought in by the quantum chemist professor (my advisor) in his younger days.

    39. Re:Physicists? by Anonymous Coward · · Score: 0

      There's something very, very wrong with that.

      A pharmacist makes sure they put the right number of pills in a bottle. A chemist works in the field of chemistry.

    40. Re:Physicists? by bill_mcgonigle · · Score: 1

      They should be called alchemists. Just look at all the magic you can buy there. Magic ear candle, homeopathy cures, at so on.

      They've figured out how to turn water and junk petroleum wax into gold. What's the problem here?

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
    41. Re:Physicists? by Anonymous Coward · · Score: 0

      In my career as a developer I've used a LOT of vector math, matrices, and trigonometric identities, having worked first for a gaming company (3D graphics) and then as a developer for visualization controls, which use projections, intersections in 3D space. I haven't used discrete math, set theory, or anything like that, since university. I would say the second course looks much more applicable, although it's hard to tell what the course material actually covers (e.g. 'algorithms').

    42. Re:Physicists? by Anonymous Coward · · Score: 0

      Discrete Mathematics (once known as Finite Mathematics) is very important for a programmer, as it deals with Boolean Algebra, Sets and Set Theory, (Binary) Logic, etc. I also found Discrete Mathematics to be quite enjoyable, as opposed to most other mathematics.

    43. Re:Physicists? by Anonymous Coward · · Score: 0

      Are you kidding me? Seriously... discreet structures teaches some very sound concepts that may help you in your ability to think out programming solutions.

    44. Re:Physicists? by Anonymous Coward · · Score: 0

      Yeah, just look at the code produced by Matlab users :)

      If your heading to the embedded arena don't you just need and,or,and not?

      Derek

    45. Re:Physicists? by COMON$ · · Score: 1
      Well said good sir, well said.

      I got my CS degree intending to go into network administration. I have always enjoyed the practical side of sciences. I was taught old school CS as well. They didn't really use any specific language, and we were supposed to write out our algorithms on paper, we were graded accordingly. Now while I wouldn't recommend the CS route for everyone, it is quite spectacular and very challenging when you get a real program. It is as close to a pure logic degree as I know of.

      --
      CS: It is all sink or swim...oh and did I mention there are sharks in that water?
    46. Re:Physicists? by COMON$ · · Score: 1
      BS degree, Bullshit on the post.

      XKCD Purity comic.

      OP was making a distinction that there is little similarity between IT and CS. This is incorrect. As a BSCS, Network Admin, and having worked in several IT departments I would say I am qualified to make the distinction. IT is a subset of CS, but so are many other occupations, it is just a practical application of it. These elitists that say you have to be a researcher or use low level tools are just that, elitists that don't get what CS is.

      --
      CS: It is all sink or swim...oh and did I mention there are sharks in that water?
    47. Re:Physicists? by DrVomact · · Score: 2, Insightful

      ...Math intersects programming in two ways: both programs and proofs benefit from a certain logical approach that can be learned in classes like abstract algebra and advanced calculus; numerical methods for solving integrals, differential equations, and linear algebra. The first helps with logically setting out a program. Minds are lazy; we all tend to believe "hand waving" rather than work out all the nitty gritty details. Learning mathematical proofs will help you recognize when you are hand waving and when you have really nailed things down.

      I think what you're saying is that disciplined thinking is important to programming, and that successfully studying mathematics will help to discipline your thinking. I agree, and would add only that the study of mathematics is not the only path to mental discipline, nor to acquiring the kind of basic "intellectual toolkit" that is needed for this type of job. As I mentioned in another posting, I have a Ph.D. in Philosophy. (I don't usually go around telling people this, but I think it's germane to the point.) One of the reasons that moved me to get this degree was the realization that I was, indeed, lazy when it came to thinking. I realized the need to train myself in rigor, and in learning how to work at thinking. (That, and I just wanted to see if I could do it.)

      I think that the disrepute into which "non-scientific" academic disciplines such as Philosophy have fallen is not a good thing. Yes, we need lots of smart people who have been trained in maths...but we need logicians too. I'm not speaking here only or even primarily of the formal symbolic logics that are sometimes mistakenly taken to be the entirety of "Logic", but in general of disciplined thought, manifested in arguments, of manipulating words to analyze problems or propose insightful solutions. Correct training in analytical philosophy can be an excellent preparation for many fields—including programming. Moreover, I think that this kind of study produces a different kind of thinker than mathematical training, and that diversity is, at least in this case, a good thing.

      So perhaps the original interlocutor ought to have cast his net more widely than to ask only which kind of mathematics he should study.

      --
      Great men are almost always bad men--Lord Acton's Corollary
    48. Re:Physicists? by ImprovOmega · · Score: 1

      If you want to write optimal code you really need to understand the mathematics behind it. Further, any more than the tiniest steps into the sea of network design will have you absolutely ass-deep in graph theory (which is usually a sophomore-junior level undergrad math course). Boolean algebra plays heavily even on the coding end, you're familiar with it even if you didn't know it was called that. Math is everywhere in coding (and even DB work generally) - even if you don't recognize it as such it is under-girding everything you're doing.

    49. Re:Physicists? by COMON$ · · Score: 1

      Wow that was an ignorant statement. All you see is them counting pills, but you dont see them mixing up IV bags in hospitals, compounding, doing research..etc. Yes Pharmacists are quite the chemists.

      --
      CS: It is all sink or swim...oh and did I mention there are sharks in that water?
    50. Re:Physicists? by COMON$ · · Score: 1

      must be the same idiot as above. the $12/hr tech does the counting, actually machines do the counting at most places in the US. Pharmacists are the ones mixing your IV bags and compounding. Also checking drug interactions to make sure you don't die. There is a reason my buddy makes $130K a year working for walmart, and my wife will probably be closing in on 6 figures here soon.

      --
      CS: It is all sink or swim...oh and did I mention there are sharks in that water?
  2. The Second, If Not Both by eldavojohn · · Score: 5, Insightful

    It is no news that the greatest computer scientists and programmers are/were mathematicians.

    I caution you that there are many other science professions which require math to varying degrees. The above statement could also be true of phycisists, chemists and maybe even biologists. The vectors, proof and algorithms that math provides a foundation to (or is) can be compared to the statistics that a biologist relies on or more generally processing empirical data in any science. We teach our kids basic math so they understand home loans and taxation later in life. Similarly, your best x in any science related field will likely have strong math skills to take what gets thrown at them.

    I have two choices: 'Discreet structures with graph theory' (discrete math; proofs, sets, algorithms and graphs) on one side, and 'Selected math chapters' (math analysis; vectors, euclidean space, differentials) on the other. I'm scared of the second one because it's said to be harder. But contrary to my own opinion, one assistant told me that it would be more useful for a programmer compared to the first subject. Then again, he's not a programmer.

    But he's definitely correct. The second is going to give you practical skills in programming -- a wide array of practical skills. The first is most likely going to give you some automata theory for computers but unless you're going into theoretical research, the second is the obvious answer. Graphics and games are all vectors, the web is becoming even more so with new browser rendering technologies. Rendering is all euclidean space transposed onto a two dimensional plane (screen) using points (pixels). Differentials are huge in the vision and image processing world and again, in graphics. This is your obvious selection although I challenge you to take both. Also, look for courses on classes that blur the lines between stats/math and computer science. Like courses on error correcting codes or computer language design and theory.

    I don't know about you but I would rather take a seriously difficult course and learn a lot with a grade of C+ than take a seriously easy course and learn little with a grade of A+.

    Unfortunately, math doesn't return my love, and prefers me to struggle with it.

    As a brief aside, it's entirely possible you simply were never exposed to fun math or been exposed to a really influential teacher. It will not give you the joy that primary school math league gave me nor will it be a perfect substitute but Martin Gardner has some really fun math. While this won't get you excited about graph theory and linear equations, it might spark something in you to devour math regardless of how dry it is. Talking about quadratic sieves in regards to finding primes is really boring stuff when it's a paper full of symbols. But if you know what kind of power this holds in regards to cryptography, one can get really zealous about it. Remember to help your kids with this should you decide to procreate.

    Also if you haven't read Godel, Escher, Bach, it might be time. Copies of those sell for cheap used online.

    --
    My work here is dung.
    1. Re:The Second, If Not Both by VAXcat · · Score: 5, Insightful

      I took years and years of vector & euclidean math, differential euqations and the like. Mow after working as a programmer for a very long time, I've used data structures, graphs, algorithms and the like on a daily basis. I've used the other, "Buck Rogers" math...once. I realize this is anecdotal, but I can't see how most programmers would have more use for the advanced analysis style math over the discrete stuff. Gradients, divergences, curls, triple integrals and partial differential equations are a lot of fun, but they just don't come up that often unless you're a physicist or a games developer.

      --
      There is no God, and Dirac is his prophet.
    2. Re:The Second, If Not Both by DeadDecoy · · Score: 5, Interesting

      As a programmer, I've found statistics to be another useful branch of mathematics. It can be more functional when collaborating with others to do number crunching and can having varying degrees of difficulty from drop-dead-easy to omgwtfbbq. Also, probability and statistics in general, are often incorporated in machine learning to make the computer handle non-deterministic problems; good for programming AIs and such. Personally, I always liked learning the 'harder' thing as that might expose my brain to concepts or ways of thinking that I wasn't already familiar with. But regardless, math isn't too bad if you take the time and effort to understand it.

    3. Re:The Second, If Not Both by Cyberax · · Score: 2, Insightful

      Don't forget numerical algorithms for calculus problems (integration, solving of differential equations, etc.). Their implementation them can give you a lot of practical skills.

    4. Re:The Second, If Not Both by erikscott · · Score: 2, Informative
      A couple of thoughts -

      The former will be really useful if you decide to work on database-related things. Not just "using SQL to get my work done" but actually crafting the internals of a database. Similarly useful for compilers - both of them have optimizers, and that's just one big graph traversal. Too big to do in a useful amount of time, so all kinds of heuristics are used for graph pruning. Go for it.

      The latter is a good foundation for numerical analysis, a field occupied by a lot of engineers and fairly few CS type people. It's a nice differentiator (pardon the absurdly weak pun). You'd much, much rather try to find simulation work than, say, writing yet another inventory management application these days.

    5. Re:The Second, If Not Both by dintech · · Score: 1

      Or you plan to work in finance IT.

    6. Re:The Second, If Not Both by rochberg · · Score: 5, Interesting

      [...] The second is going to give you practical skills in programming -- a wide array of practical skills. The first is most likely going to give you some automata theory for computers but unless you're going into theoretical research, the second is the obvious answer. Graphics and games are all vectors, the web is becoming even more so with new browser rendering technologies. Rendering is all euclidean space transposed onto a two dimensional plane (screen) using points (pixels). Differentials are huge in the vision and image processing world and again, in graphics. This is your obvious selection[...]

      I couldn't disagree more. There is no "obvious selection," because the OP didn't mention what type of programming interests him. If you're going to specialize in graphics or scientific computing, yes, the analysis course would be helpful. However, I find that branch of mathematics completely useless for the programming work that I do.

      In more systems-oriented programming (e.g., OS, compilers, networking, databases), a strong background in algorithms, data structures, and graph theory is absolutely essential. If you start moving into security and cryptography, you need to understand modern algreba topics like number theory and group theory; having a solid foundation in set theory is a prerequisite for any of those topics.

      [...] although I challenge you to take both [emph. added]. Also, look for courses on classes that blur the lines between stats/math and computer science. Like courses on error correcting codes or computer language design and theory.

      On this point, we agree.

    7. Re:The Second, If Not Both by samkass · · Score: 5, Insightful

      If you're going to choose and not do both, then it largely depends on what kind of "programming" you're going to do. Note that "Programming" is a very different profession from Computer Science or Software Engineering. If you're interested in 3D, games, physics, etc., you're going to need a solid foundation in linear algebra and calculus. If you're going to be dealing in large datasets, distributed systems, client-server communications, etc., then discrete math and set theory will probably be very useful. If you're going to go into AI, classifiers, robotics, etc., then you'll probably want both, plus statistics.

      If you're just going to bang out code to someone else's careful spec, then you may not need all that much math.

      --
      E pluribus unum
    8. Re:The Second, If Not Both by Anonymous Coward · · Score: 1, Insightful

      I'm far more of a mathematician than a programmer, but it's worth pointing out the following. Even if you want to work in graphics or games and find yourself needing to know how to work with vector calculus in three dimensions, or use quaternions to represent rotations in 3-space, it might be very valuable for you to be comfortable with graph theory. If you glance at some books or papers by Knuth, Dijkstra, etc., you'll notice (perhaps surprisingly) that many of the more important algorithms *of practical use for programmers* were developed and implemented in the language of graph theory. This is not a coincidence: graph theory is simply a nice, loose, abstract language in which to phrase combinatorial (i.e., counting) problems. A computer, fundamentally, is not much more than a very good adding machine, and a lot of the art of programming is recognizing the combinatorial structure of the task you hope to accomplish, perhaps by abstracting it into a graph theory problem, and then solving the resulting combinatorial problem efficiently using an appropriate algorithm. This perspective, I think, argues in facor of the "Discrete math" class rather than the "Vector calculus" class.

      The counterargument is that the harder class will certainly be better training at abstract thought and sound reasoning, both of fundamental importance in programming or any other quantitative science (or any other intellectual endeavor, for that matter, from art history to anthropology).

    9. Re:The Second, If Not Both by ShatteredArm · · Score: 2, Insightful

      Even if you do work in finance IT, what are the chances that you get to actually develop new financial formulas on your own?

    10. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      Hmmm... I just went to download this book from Rapidshare and despite changing my up several times they still have no free download slots. Now folks, you know changing ip when just finishing a 200mb part lets you re-connect straightwaway with a different addy for the next file. So my thesis is that they also implement individual file bandwidth management, too.

      In other words, they've been slashdotted already for this book... pretty good thesis huh?

      Thanks folks...

      WbR. You know who I am!

    11. Re:The Second, If Not Both by delt0r · · Score: 2, Insightful

      I have used general calculus (ode, integration, vectors and vector spaces, linear algebra) a lot. For GIS systems, and GPS software even some Tensor math was very useful. Clearly some simulation software a company I was working with needed quite a bit of physics too. Solving simulations equations has come up a lot (some spline curves use that!) so basic linear algebra and matrix math is probably very useful too.

      I am asuming you want some job flexibility rather that being stuck doing nothing but business/web logic type code.

      --
      If information wants to be free, why does my internet connection cost so much?
    12. Re:The Second, If Not Both by Bakkster · · Score: 5, Insightful

      Agreed. Discrete math is vital groundwork for a lot of what is expected from a programmer, while the second course seems more focused but less generally applicable. Basically, if you take discrete you will learn how to find your own solutions to an array of problems through logic, set theory, combinatorics, and algorithms; while the second course will basically teach you a few concepts used in 3D graphics and physics modeling. Unless you absolutely know you want to work in a field that would heavily use the second course, take discrete. However, even if you take the 'selected chapters' course, I think you would have difficulties doing much useful with vector math or calculus without knowing discrete math to turn it into an effective and efficient algorithm.

      To be truly successful, though, you should take both, even if you take one pass/fail or not for credit. The information is just too important not to have.

      --
      Write your representatives! Repeal the 2nd Law of Thermodynamics!
    13. Re:The Second, If Not Both by Monkeedude1212 · · Score: 2, Insightful

      As a brief aside, it's entirely possible you simply were never exposed to fun math or been exposed to a really influential teacher.

      While the entire post is very insightful, and every word as true as 1, this one had a special reflection on me. Honestly, a fun Stats teacher and a silly Linear Algebra in my Polytechnic courses made the difference between snore and cries for more.

      Also, learning about Vectors, Matrixes, and their transformations was single handedly the most useful math I've ever learned in my life, in regards to programming. It has endless applications. Like you said, Rendering, Cryptography, I even use it in complex organization schemes and game theory.

      should you decide to procreate.

      I know thats probably the best way you could have said it, but it still sounds funny, no matter what way you say it.

    14. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      Also, look for courses on classes that blur the lines between stats/math and computer science. Like courses on error correcting codes or computer language design and theory.

      Error correcting codes was the first time I actually felt challenged in college. It was frikken hard for me, and the sad part is that what I had trouble with was simple arithmetic (binary and modulo a polynomial). Never before had something as simple as adding and multiplying been so hard, and long division of two polynomials was just terrible for me (that god they were binary, so most terms canceled out, otherwise I would probably still be writing them out).

    15. Re:The Second, If Not Both by xtracto · · Score: 1

      caution you that there are many other science professions which require math to varying degrees. The above statement could also be true of phycisists, chemists and maybe even biologists.

      Or as someone has pictured it better...
      obligatory.

      --
      Ubuntu is an African word meaning 'I can't configure Debian'
    16. Re:The Second, If Not Both by beelsebob · · Score: 5, Informative

      I 100% disagree with this post.

      Almost *any* complex algorithmic task (programming) comes in the end, down to solving *some* graph theory problem. The first one most definitely sounds more useful to a programmer. This has applications in coming up with algorithms, understanding type systems, proving to some degree that your program works, understanding the logic involved in your program. Sets and graphs are about the most important structures you will ever come across in programming.

      The latter is pretty much only useful for people building 3D tools, to which the former is also applicable.

    17. Re:The Second, If Not Both by oldhack · · Score: 1

      It's true that discrete math is more applicable to programming, but analysis/calculus/geometry is a general math with wide applicability, and lower level versions of both types of maths are basic building blocks of most decent science/engineering programs.

      You'd be short-changing yourself of college engineering education if you skip either. Take both unless you are pegging yourself to be a code monkey.

      Either way, the most important thing is to stay in college as long as you can - make them kick you out.

      --
      Fuck systemd. Fuck Redhat. Fuck Soylent, too. Wait, scratch the last one.
    18. Re:The Second, If Not Both by BlueTrin · · Score: 4, Insightful

      Even if you work in Finance IT, having a math background allows you to move into much more lucrative jobs where you will implement fairly complex methodologies. You can look for quantitative developers job specs, they will require you to have a fairly above average math background compared to your average IT dude.

      --
      Don't you know it is now both immoral and criminal to think beyond the next quarterly report?
    19. Re:The Second, If Not Both by Bakkster · · Score: 1

      The algorithms are less important than understanding the inherent issues with numeric computing. If you know why to avoid floating point subtraction, division, and compounding then the algorithms follow pretty naturally (or can be researched). On the other hand, knowing several algorithms is less useful and doesn't guarantee you learn anything that would transfer to more general skills.

      --
      Write your representatives! Repeal the 2nd Law of Thermodynamics!
    20. Re:The Second, If Not Both by bheilig · · Score: 1

      They also come up in digital signal processing. You might be able to code a video compression algorithm without the math, but you won't be able to understand the code (somewhat overrated) and you won't be able to come up with new DSP algorithms. I used the gradient to look for the peak in a two dimensional signal search algorithm I designed. I also used partial differential equations to solve for the solution to a set of non-linear equations for a GPS application. I think if you can add them to your toolbox, you will not regret it unless you go into web development or something.

    21. Re:The Second, If Not Both by infamous_blah · · Score: 1

      But he's definitely correct. The second is going to give you practical skills in programming -- a wide array of practical skills. The first is most likely going to give you some automata theory for computers but unless you're going into theoretical research, the second is the obvious answer. Graphics and games are all vectors, the web is becoming even more so with new browser rendering technologies. Rendering is all euclidean space transposed onto a two dimensional plane (screen) using points (pixels). Differentials are huge in the vision and image processing world and again, in graphics.

      I strongly disagree with your suggested order. Algorithms are the heart of Computer Science and our representations are discrete. The first course is absolutely essential and has a lot more practical application; you must be able to understand the complexity of an algorithm and choose appropriate structures to write efficient code.

      If OP is going into graphics, physics simulation or the like, then the second course is also necessary, but not in lieu of the first. The mathematical equation at hand may be continuous, but the computer model is discrete (e.g. pixels are discrete points).

      However, as you said, taking both is really the best option.

    22. Re:The Second, If Not Both by TheRaven64 · · Score: 4, Insightful
      Absolutely agreed. Discrete maths is fundamental to computer science. Between graph theory, set theory, and game theory, you've got 90% of computer science.

      The other stuff will be useful in some situations, but it's domain-specific knowledge, not foundational knowledge. It's useful, but so are other domain-specific skills. If you want to understand computer science, you need the discrete maths. If you want to be useful, you need to understand computer science and some other stuff. This may include vector and matrix mathematics, but it may not. I've very rarely used the calculus or matrix stuff that I know, but I use the graph theory almost every day.

      --
      I am TheRaven on Soylent News
    23. Re:The Second, If Not Both by drachenstern · · Score: 1

      Not so much to the parent, but to the original asker:

      I agree with eldavojohn here, TAKE BOTH.

      I've a major in CS and a full minor in Applied Mathematics. I wish I had gone for dual-major, but I've always liked tinkering so did a double-minor (Appl Math and Electrical Engineering).

      My point is, the math has been more important, if for no other reason than for understanding the myriad ways that complex problems devolve into simple ones (think how the profs ask you to solve a problem using a particular method even tho another method would be faster/simpler).

      Understanding the fundamentals of problems (like for instance the relationship between velocity speed and acceleration) helps in other areas (and may have you kicking yourself why you didn't take higher order maths before physics).

      So, for real-world application:
      My first "real job" post Uni, one of the first in-person questions they asked about my schooling was if I had a math-centric degree program. While the problems haven't been math-centric so far, the ability to approach a problem and to know why a particular solution has been helpful, especially as I watch coworkers write voodoo code that I have to detangle for them.

      Now, in relation to the parent's post: Having a good teacher that can show you that it really is interesting, fun and neat, that's what's most important to LEARNING math.

      Last point of advice before I quit sharing my $0.05:
      If one of the prof's is known for "two exam" classes, don't take that class. Or at least, that's my experience. Those prof's always seemed to be out to screw students, and usually didn't care. My bad luck? Maybe.

      --
      2^3 * 31 * 647
    24. Re:The Second, If Not Both by Calindae · · Score: 2, Funny

      Mow after working as a programmer...

      Did you just say "mow"?

    25. Re:The Second, If Not Both by Toze · · Score: 1

      This. I work with sales data, and even a basic handle on statistics allows you to make some basic statements that are informative for business users. It's not necessarily predictive, but being able to present summaries of top-selling and bottom-selling products, combinations, and seasonal fluctuations? Gold.

      --
      No OS on the planet can protect itself from a user with the admin password. - Yvan256
    26. Re:The Second, If Not Both by Timothy+Brownawell · · Score: 1

      The second is going to give you practical skills in programming -- a wide array of practical skills. The first is most likely going to give you some automata theory for computers but unless you're going into theoretical research, the second is the obvious answer. Graphics and games are all vectors, the web is becoming even more so with new browser rendering technologies. Rendering is all euclidean space transposed onto a two dimensional plane (screen) using points (pixels). Differentials are huge in the vision and image processing world and again, in graphics. This is your obvious selection although I challenge you to take both.

      No.

      The second one sounds like it would only be useful if he's planning on working in a particular field that uses that kind of math (graphics, simulations, maybe low-level sensor/control stuff; but it would probably be very useful if he knows he's going into one of these fields). Discrete math and algorithms are important any time you have a non-trivial amount of data, and help in getting a good understanding of how the computer actually works. Some knowledge of proofs is also good, since it can help you make sure that your code will do what you want it to.

      I know when I went to university, there were classes on data structures, algorithms, and discrete math that were required for Computer Science and Computer Engineering. In contrast, the linear algebra and multivariable-diff-eq classes I took were electives to get enough math credits.

    27. Re:The Second, If Not Both by domulys · · Score: 1

      The first is most likely going to give you some automata theory for computers but unless you're going into theoretical research, the second is the obvious answer.

      Wow, this is about as far from the truth as I can imagine. Although someone in another comment mentions the travelling salesman problem, there are at least dozens of other incredibly important problems in graph theory and combinatorics that are worth millions of dollars to companies you may have heard of (e.g., Google, IBM, etc.). Hypergraph partitioning (for VLSI placement and boolean satisfiability) is one; constraint-based reasoning is another.

      Vectors and differentials are likely to come up in graphics, so I won't purport that they are less important than discrete math. But, to assert that one of these is hands-down more useful than the other is nonsense.

    28. Re:The Second, If Not Both by wedge3d · · Score: 1

      Excellent response. May I only add that there is a good overview of the types of math used by many programmers in the MIT Open Course "Mathematics for Computer Science"
      http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-042JSpring-2005/LectureNotes/index.htm

    29. Re:The Second, If Not Both by paxcoder · · Score: 1

      Whoever I ask about this, everyone says "games", and "rendering" - that's why you need it. But what if I'm not interested in gamedev and 3D stuff? What if I like trees and system programming instead (let's call it low level algorithms)? Wouldn't I be better of with graphs and stuff?

    30. Re:The Second, If Not Both by Nethemas+the+Great · · Score: 3, Insightful

      Whether one field of math comes up or not depends upon what you plan on doing as a programmer/software engineer. There are certainly easy paths through which you can run your career, but there are plenty of the opposite as well. Anecdotally I've found those that choose to take the hard path find their jobs far more satisfying.

      One of the biggest advantages of taking advanced math courses isn't that they will necessarily be directly applicable. But what a satisfying feeling when it does and you can solve the problem. Rather, much like those who choose to get off the couch to exercise and strengthen their physical body so too the math workout strengthens your mind. You'll learn new ways to look at problems and their solutions and gain the raw mental horse-power necessary to do the heavy lifting.

      One word of caution though. Watch the grades. Getting a C in Advanced Calc II needs to be buffered against a whole bunch of B+ and A grades in the rest of your classes. Your GPA is regrettably inversely proportional to the degree of difficulty you will have landing your first job out of college. If your GPA is lackluster you won't get a chance to explain how unlike your peers you took the road less traveled, kicked a** and chewed bubble gum.

      --
      Two of my imaginary friends reproduced once ... with negative results.
    31. Re:The Second, If Not Both by CodeBuster · · Score: 2, Insightful

      I also agree with the parents; the discrete math course with graphs, sets, algorithms and proofs has much greater applicability in a larger number of real world software jobs than the second course in math analysis, vectors, euclidean space and differentials. Unless you plan to go into physics, game programming or defense, your future jobs are likely to involve more of the former and less of the later. Also, I would advise taking the teaching assistants' advice with a grain of salt. The teaching assistants are typically graduate students in CS working towards their PhDs and they generally intend to pursue careers as academic computer scientists or researchers rather than software developers. So unless you plan to follow in their footsteps, what they deem to be "useful" or "important" may not be the same as what we who have worked as software developers have found to be useful (or at least more useful) or important in our real world jobs. I like the parents other suggestion too: take the discrete math course and the "selected math topics" course as pass/fail if and only if you have time (I wouldn't delay my graduation to take it in other words).

    32. Re:The Second, If Not Both by Stregano · · Score: 2, Funny

      Listen here Mow: does it look like he said Mow. Is he drinking milk out of a saucer boy?

      --
      The world is how you make it
    33. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      Very well put.

    34. Re:The Second, If Not Both by chico_the_chihuahua · · Score: 1

      Not often or even never, but you still have to understand the maths, even if you're not the one originating it.

      I work as a desk-aligned quant developer, and although I'm not a mathematician, I still have the gist of what the models are capable of pricing and why. Even back-office aligned IT staff who look after the databases and infrastructure should at least be aware of what concepts like delta, vega, rho, etc., are - just to know what data to check might have be wrong/changed when a support request floats your way. You'd be surprised how often someone inputs a percentage field a factor of 100 out...

    35. Re:The Second, If Not Both by hazem · · Score: 2, Informative

      I'd also recommend taking a look at Ars Digita University's old Computer Science materials at http://aduni.org/.

      The discrete math course has nice videos of the lectures, so it could be a nice way to augment whatever course someone takes live. Plus there are additional problems (some with answers). And the book for the course, being 10 years old, can be picked up for under $10.

      http://www.aduni.org/courses/discrete/

    36. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      I 100% disagree with this post.

      You don't think he should take both then?

      The first one most definitely sounds more useful to a programmer. This has applications in coming up with algorithms, understanding type systems, proving to some degree that your program works

      Tell me honestly, how often to you prove that your program works (and I do not use that word lightly)?

    37. Re:The Second, If Not Both by Buzz_Litebeer · · Score: 2, Informative

      I took both discrete structures and vector calculus classes.

      I have used the discrete structures, graphs, algorithms far more than I ever use calculus. The only time I would have had a need to use 3d space mapped to a map (IE doing a map) there were plenty of examples for the specific task on the internet.

      That isnt, in of itself, an excuse but for the rarity of the need it was useful.

      I avoided video game programming because I realized that it is not a lot of "fun" it is mostly managing vectors and such, which is nice for those that want to do it, and I passed the classes required for it, but it simply was not for me.

      --
      If you don't vote, you don't matter, so don't waste your time telling me your opinion
    38. Re:The Second, If Not Both by beelsebob · · Score: 1

      I reasonably often make at least informal proofs of my program's correctness, at least in some aspect. But then, I work with functional languages daily, and proving useful properties of your programs is a lot easier in that setting.

      Either way, algorithms, graph theory, set theory are *extremely* useful tools to any programmer, whether they are trying to prove their program correct or not. They're simply vital to thinking clearly about algorithms.

      I do agree about taking both, but the poster rather suggests he can't do that, or doesn't want to.

    39. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      Or learn it at gunpoint (I'm in the process of watching The Wire, and there is cool scene where Wallace is asked by one of his kids about some addition and subtraction math problem that the kid can't understand. Wallace puts the example in terms of selling drugs and the kid gives an instant answer. When Wallace asks why she could solve that one, but not the first version, she answers: "'cause if you make a mistake, they fuck you up"., So, there)

    40. Re:The Second, If Not Both by SchrodingersCT · · Score: 1

      I agree, I'm studying CS at Bellarmine University (it's small school), and I really enjoyed the discrete course. There definitely are practical applications for the topics, even just the logic alone is very important to programming.

    41. Re:The Second, If Not Both by Anonymous Coward · · Score: 1, Informative

      Well, if he takes calculus and vectors he'll also learn how to find his own solutions to an array of problems, just different ones. The thing is that the kinds of problems that you can solve with one of them are invariable either impossible or intractable with the other. The questions he should ask himself are things like "what do I want to do with my life - games or crypto?" and "what is easier for me to do on the side later in professional life if it turns out I needed it after all?" and "can I do them both?" and "do I really need either of them?" Most programmers don't touch maths any more these days. Most programming is either monkey work where someone else did the maths for you or design work where you build complex systems out of pre-existant parts that already contain all the algorithms you'll ever need and probably more efficient than you could ever hope to implement them yourself.
      P.S. Good courses dealing with vector calculus targeted at programmers will deal with tractability, precision, performance, data storage and other issues, and will learn you many a great lesson on doing for example matrix math efficiently, including the most important one: there are good matrix maths libraries out there, use them - people have devoted large chunks of time to small parts of them and you can't hope to outdo them. Avoid doing such low-level things yourself unless you genuinely have special needs.

    42. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      One must distinguish between the content and the methods of a branch of mathematics. For what it's worth, I do not think it's the content that matters so much as the problem solving skills one develops in math which helps in programming. Math is ruthlessly logical (garbage in, garbage out) and the logic (first order propositional calculus) that is useful in math seems to be related to the logic that is useful in programming. Also, the practice one gets conceptualizing a problem and abstracting, or generalizing, in solving math problems seems to be helpful in the development of software.

      In terms of content, it probably also matters what sort of programming you want to do. For scientific programming (including simulation) and generally for algorithm development, I have found that a background in statistics and probability theory, linear algebra and various branches of analysis, is very useful.

    43. Re:The Second, If Not Both by pjt33 · · Score: 2, Insightful

      Gradients, divergences, curls, triple integrals and partial differential equations are a lot of fun, but they just don't come up that often unless you're a physicist or a games developer.

      Speaking as a games developer, I consider graph theory fundamental too. Basic to intermediate vector calculus is required for physics, and graph theory is required for things like AI pathfinding. The graph theory course has the advantage that it will probably include some stuff on algorithms, algorithmic complexity, etc.

    44. Re:The Second, If Not Both by mpfife · · Score: 1
      Great idea!

      The Formula that Destroyed Wallstreet
      http://www.wired.com/techbiz/it/magazine/17-03/wp_quant

    45. Re:The Second, If Not Both by navyjeff · · Score: 3, Insightful

      That formula didn't destroy Wall Street -- greed and ignoring the well-documented limitations of the formula was their undoing.

    46. Re:The Second, If Not Both by Creepy · · Score: 1

      But when was the last time you had to write a proof? The last time I did was in a class called partial multivariable differential equations, and I've only used partial multivariable differential equations once and never written a proof again - on a voluntary project (open source) to write a fluid dynamics simulation (which was a patent nightmare - it eventually was abandoned because all the obvious methods were patented, though the software version of two of those expire this year... yes, there are patents for graphical hardware versions of those exact methods, and yes, plural - it seems the patent office is clueless that they have multiple versions of the same thing).

          My vectors and matrices class - similar to the second one - essentially covered Euclidian space, Euler angles and Gimbal lock, matrix analysis and breakdown (reduction), determinants, inverse matrices, eigenvalues (scale, rotation, and shear matrices used in computer graphics), and brushed on quaternions. These are all very important in the computer graphics world, but not terribly important otherwise. I personally got a lot out of it, as I like to toy with 3D engines, but YMWV.

    47. Re:The Second, If Not Both by Bakkster · · Score: 1

      Well, if he takes calculus and vectors he'll also learn how to find his own solutions to an array of problems, just different ones. The thing is that the kinds of problems that you can solve with one of them are invariable either impossible or intractable with the other. The questions he should ask himself are things like "what do I want to do with my life - games or crypto?" and "what is easier for me to do on the side later in professional life if it turns out I needed it after all?" and "can I do them both?" and "do I really need either of them?" Most programmers don't touch maths any more these days. Most programming is either monkey work where someone else did the maths for you or design work where you build complex systems out of pre-existant parts that already contain all the algorithms you'll ever need and probably more efficient than you could ever hope to implement them yourself. P.S. Good courses dealing with vector calculus targeted at programmers will deal with tractability, precision, performance, data storage and other issues, and will learn you many a great lesson on doing for example matrix math efficiently, including the most important one: there are good matrix maths libraries out there, use them - people have devoted large chunks of time to small parts of them and you can't hope to outdo them. Avoid doing such low-level things yourself unless you genuinely have special needs.

      First, the problems solved by calculus don't make you a good programmer without the fundamentals of discrete to back them up. If you can only write specialized functions, you will be quickly replaced by someone more versitile than you (especially if you are self-described 'bad at math').

      Also, if the goal is to take the class that is useful to only about 1% of programmers, he'd better be sure he's better than 99% of other programmers at those tasks, otherwise he's hosed. But, as you said, most of the math functions are built into libraries, making the calculus slightly redundant. However, discrete is more about logic and actually programming, rather than math. Discrete is necessary to know how to make many programs work, and it can't be imported as a library.

      --
      Write your representatives! Repeal the 2nd Law of Thermodynamics!
    48. Re:The Second, If Not Both by duanes1967 · · Score: 1

      I was once told that every advanced math course or science course you take will add at least $1000 per year to your base pay. After 30 years, I think that number needs to be inflation adjusted... so, multiply by 3. If you can make $35K as an entry level code pounder - take a few advanced classes and you are at $50K. Get an Engineering degree (another half dozen courses) and you are at $65. A master's degree in Engineering will easily push $100K. Once you start working, you can earn about triple the base pay over time. My personal favorites are Discrete Math, Data Structures, Diff Eq., and Partial Diff. Eq., plus some thermodynamics. Interestingly, math and physics classes all look the same after a certain point. Programmers are easy to come by.... Math and Science geeks that can write decent code are much, much more difficult to find. - And are paid accordingly!

    49. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      Math as it relates to programming has been WAYYYY overplayed. Beyond most basic math, very little math is necessary for greater than 90% of the programming out there. One of the reasons is that 90% of the programming jobs are DATABASE programming jobs. Requiring huge amounts of math for programming is as silly as requiring Olympic Running medals for a secretary position. Its a way for most math departments to ensure they have students in their mostly useless advanced math courses.
      Just as most programmers are not advanced mathematicians, I have yet to meet a math whiz that even wants to do programming. The head of our math department has a masters in math and computer science. He does math and only math, does not know modern programming, only took it because it was part of his degree in math and told me he has no interest in learning modern programming either. I'm not saying none of them want to do programming, but as a general rule they like to stick to math and programmers like to stick to programming.
      In all my years of teaching college programming in 7 different languages the most I have ever used of advanced math is some simple trigonometric functions.
      Years of advanced math just for a INfo SYS degree is a complete waste of the students time and taxpayer dollars.

    50. Re:The Second, If Not Both by PGOER · · Score: 0

      I took progamming classes in engineering and math classes in engineernig, and I liked both. I actually took a math programming class to progam integrals, derivatives, and other complex formulas into C+, and that course sucked. I work as an electrical engineer now and to all my calculating on a $10 micronta calculator. This has nothing to do with this artical but I'm sure people that are adept at mathematics are logical thinkers that can apply themselves to things like programming.

      --
      I am not a nerd, I just play one in real life. My avatar thinks I'm a total loser.
    51. Re:The Second, If Not Both by Machtyn · · Score: 0

      Two things to your last paragraph, to which I regrettably agree with.

      1. That's what internships are for. Also, get involved with open source projects. If your grades or lower than what you'd like, at least you have the skills and examples of those skills to show you can do the work over the brain that has no skills.

      2. Don't expect to spend more than 3-5 years at your first job, unless you find something that is really great where the employer shows their appreciation abundantly.

    52. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      Agreed -- you should take the first course before you attempt the second. I ended up doing it in the opposite order myself, and it meant I actually had to learn both at the same time, and then re-learn it all the correct way in the discrete course.

    53. Re:The Second, If Not Both by cjonslashdot · · Score: 1

      I agree that "real mathematics" is more useful for application programming that discrete math.

      And I also agree with the statement that most scientific professions require lots of math. I was a physics major for undergrad, and my first master's degree was in engineering, and I once estimated that I had had in effect no fewer than 20-odd math courses, because each course required lots of mathematics.

      But I think that the answer to this person's question depends. It depends if the goal is to be able to do application programming, or to build reliable large scale or mission critical systems. For the latter, the lack of training in discrete mathematics has really hurt the software engineering profession. Have you noticed how the news is filled with spectacular failures of software? Often these manifest as security breaches. Sometimes they are airplane crashes. Or then we have the multitudinous reports of bugs in critical systems such as operating systems.

      The root cause of the high incidence of these problems is that reliable techniques are not used to design and build most mission critical software. That is because the people designing it do not have the training to be aware of the techniques, many of which are based on discrete mathematics and proofs.

      Interestingly, Erlang, a language developed to build reliable telecommunications systems that can never be turned off, was designed by electrical engineers. However, there is a mathematical basis for the language.

      Yes, discrete math is extremely important for designing reliable systems. It is less so for departmental business applications that have small numbers of users.

    54. Re:The Second, If Not Both by LaughingCoder · · Score: 1

      I can't mow after working as a programmer because it's too dark out. I mow on weekends.

      --
      The more you regulate a company, the worse its products become.
    55. Re:The Second, If Not Both by Anonymous Coward · · Score: 0

      As someone who just had an interview with Google today, I disagree with the above opinion. I was given a question in discrete mathematics; I've never been given anything regarding differentials or vectors. Discrete math is required curriculum for many CS programs. I would suggest taking discrete over the others any day, as it's much more practical.

    56. Re:The Second, If Not Both by Eli+Gottlieb · · Score: 1

      Between graph theory, set theory, and game theory, you've got 90% of computer science.

      Add in automata theory and type theory and you've got yourself a deal!

    57. Re:The Second, If Not Both by Cyberax · · Score: 1

      Yes, I meant the first-hand knowledge of quirks of floating point math and importance of numeric stability.

  3. Take Both by Fantom42 · · Score: 2, Insightful

    Take Both. Make time for it.

    1. Re:Take Both by Maxo-Texas · · Score: 1

      I had to take both for my degree.

      The first helps with thinking certain ways. The second helps with technology of solutions.

      Sort of like college vs trade school.

      I ended up in business and the heavy math & physics were never used.

      I did a lot of set theory type things for SQL.

      These days, I'm a team supervisor and mainly use it for tasks similar to natural language processing with awk and perl for data analysis.

      --
      She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
    2. Re:Take both by xZgf6xHx2uhoAj9D · · Score: 1

      To follow up on my own post, the big practical advantage to the first course is graph theory. Graph theory is a huge field and I have yet to come across any discipline of computer science that does not reduce to graph theory.

    3. Re:Take both by xtracto · · Score: 1

      I concur that it is a good idea to take both.

      During my Software Engineering major I had both types of math. Nowadays, I have forgot all of it, except whatever I am using. But at least, I know what to look for (and where to look for it...e.g. those big and expensive text books) if I need it.

      University (bachellors degree) is meant to show it the breadth of your field. The more you know exists, the better for you.

      Now, the submitter does not specify what degree is he/she studying... if it is CS I would incline more for the 'Selected math chapters' option, whereas if he is in Software Engineering (or the like) I would go for 'Discreet structures with graph theory'.

      --
      Ubuntu is an African word meaning 'I can't configure Debian'
    4. Re:Take both by Anonymous Coward · · Score: 0

      If the choice is truly limited to one or the other, you actually need a crystal ball to tell you what job you might have in the future. Good luck.

      Mathematics is the language by which science describes its models of the observable world. Computer software is the tool that allows a great number of the models to be evaluated. The point is that, it is all worthwhile but your opportunities in the future will be shaped by the areas of mathematics that you can work with.

      (Almost all physics that people know and teach is quantitative, i.e. related to a numerical description. There is a small amount that is what is called qualitative for which the computer is only secondarily useful. But the language for qualitative is still mathematics.)

    5. Re:Take Both by OldSoldier · · Score: 1

      Both are good, no question about it. Both have uses that may or may not overlap with what you intend to do with the CS degree. HOWEVER, I STRONGLY RECOMMEND YOU TAKING WHAT YOU LIKE THE BEST. Your problem with math may be that you're uncomfortable with it and taking any course that makes you comfortable may bleed over into other related areas.

      So, given a choice between the 'vector' class, where you may struggle and hate it but 'learn it' and the 'graph' course where you may have fun with it, go for the fun one first and always keep in the back of your mind that you should perhaps take the 'vector' class too.

      Actually I have a course outline for you.
      a) the 'graph' class
      b) then a full on linear algebra class... it will introduce you to vectors albeit in an abstract way similar to the 'graph' class above (proofs and also vectors in more than just 3 dimensions)
      c) then the 'vector' class, at least the vector part of that should be a breeze for you. Though the differential part will still be as hard as it was before taking class "b" above.

      Finally, ALL math is good. (So I'd let your passion decide.) I remember a math professor of mine commenting on a task he was working on for the forestry department of the university. The task was to compute the area of an arbitrary polygonal shape. The forestry dept first went to the CS department where they tried the normal triangularization trick but ran into trouble because that trick encounters difficulty when dealing with concave polygons. The math professor used Green's Theorem which also results is a much much cleaner algorithm.

    6. Re:Take Both by DoktorFaust · · Score: 1

      That's a really annoying answer, but completely correct.

      The math classes aren't just about learning the topics, but learning how to approach a problem. I think your goal should be to have strong enough fundamentals in mathematics that when you encounter a math problem in a topic you haven't seen before, you are comfortable pulling out a book and figuring out how to solve it. It sounds like you're not very comfortable with mathematics, so a good solution is to take enough classes that you do become comfortable.

      --

      Die Menschen verhoehnen was sie nicht verstehen. -- Goethe.
    7. Re:Take Both by St.Creed · · Score: 1

      Finally, ALL math is good. (So I'd let your passion decide.) I remember a math professor of mine commenting on a task he was working on for the forestry department of the university. The task was to compute the area of an arbitrary polygonal shape. The forestry dept first went to the CS department where they tried the normal triangularization trick but ran into trouble because that trick encounters difficulty when dealing with concave polygons. The math professor used Green's Theorem which also results is a much much cleaner algorithm.

      Take both, discrete maths first. Every time you are reading in a file with a complex spec, you are basically using a finite state machine. After that, do linear algebra because you will need it to understand other complex issues in computer science.

      As for the CS department above: I cringed. Ofcourse, I graduated under two people who are quite well-known for their geometric algorithms, but even a 2nd year student should be able to do better than triangulation. Triangulation is the bruteforce approach any software engineer could use. A computer scientist should have opened his books and used mathematics.

      --
      Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
    8. Re:Take Both by muridae · · Score: 1

      Parent is right, take both. They both have features that will apply to future computer science topics that you will reach in your degree. Get a minor in math, if you can and have the time for it.

      That said, if you really do not want to take both, then you need to think about which class will teach you more, and which one is applicable to what you want to do with your degree. Discrete math is programing: it is a great way to think in binary (truth tables), and if you have taken or will take a microprocessor course (assembly of some sort, and circuit design) then it is a good complement to the stuff you will learn there. Differentials and vectors show up in the real world, outside of computers. So if you plan on simulating anything, from AI to ray-tracing to path-finding, you need this information. What I am unsettled by, is the 'selected chapters' course. For me, vector math was an entire term. Only a credit or two for the course, but it built on Calculus 2 and ran parallel to multi-variable calc. Differentials was an entire course. Discrete math, though, covered just about everything that yours seems to, and is a pre-req for the more detailed graphs or proofs course. The reason I am unsettled, is that if those are the highest math courses you are required to take, you are getting ripped off. Take a proofs course, take first-order differential equations, take a full course on vectors geometry and graphs. If these two options are just second year courses to help you get interested, then take them both.

  4. Study what you enjoy by Jah-Wren+Ryel · · Score: 4, Insightful

    Programming is a HUGE field. There is plenty of work that doesn't require significant math.
    Go with what interests you and let the details work themselves out.

    --
    When information is power, privacy is freedom.
    1. Re:Study what you enjoy by boner · · Score: 4, Insightful

      I second that, study what you enjoy and see where your interest takes you. I struggled with statistics when I studied for my masters, but my current job is steep in statistics and I am much better at it. Funny how that goes.... It's a lot easier to learn a Math subject when there is a real need to understand it present, otherwise it can remain abstract and obtuse.

      The other piece of advice: do your homework, everyday, and don't give up. Seriously, I was a B+ student until my math teacher started checking my homework - I told him that there were other students more deserving of his attention. Within a few weeks I was an A-student...

      As for making a choice, I would do both, but take the easier one first.

    2. Re:Study what you enjoy by Carewolf · · Score: 5, Informative

      True not all fields require math, but just to answer the question. Yes, choose what you like:

      If you want to do algorithms and language theory, you need discrete math, graph theory, etc.
      If you want to do graphics and signal processing, you need calculus (also called math analysis), geometry and differential.
      If you want to do human computer interface, you don't need math (or a brain).

      If you want to kick ass, you need all the introductory math you put your hands on (advanced university level math is too theoretical though and only useful for quantum physics and math majors).

    3. Re:Study what you enjoy by Anonymous Coward · · Score: 0

      I have to strongly second the parents recommendation to go with what interests you. The hardest course I ever took was a CS course recommended by everyone else as an easy option - the combination of a change of a lecturer and the fact that I wasn't interested were fatal. I also did several supposedly hard maths courses without the prerequisites because I was seriously interested and studied up on the background at the same time - I ended up with a PhD in that field.

      As far as the two subjects go, I think I would find the discreet structures most useful to the programming that I do, but then I don't have a lot of interest in graphics. I also think that either course would be good for developing the kind of thinking that I find quite useful for programming.

    4. Re:Study what you enjoy by TheRaven64 · · Score: 5, Insightful

      If you want to do human computer interface, you don't need math (or a brain).

      Absolutely untrue. You need statistics, graph theory, game theory, and a little calculus. At an absolute minimum.

      Attitudes like yours are why so many user interfaces are terrible.

      --
      I am TheRaven on Soylent News
    5. Re:Study what you enjoy by TheLink · · Score: 2, Insightful

      > If you want to do human computer interface, you don't need math (or a brain).

      If you want to do HCI well, you need a decent brain with understanding of the various sorts of humans that might be using the interface. And often a fair bit of creativity.

      It's not easy to do well. So many GUI designers end up doing stuff like "add more themes", flashy stuff and wobbly windows, instead of actually improving things.

      Just look at how UIs have changed over the years to see what have been real improvements and what have been "meh".

      --
    6. Re:Study what you enjoy by jitterman · · Score: 1

      No points today to give out, but a +1 insightful is owed you for this.

      How many times have you said (or heard someone say), "what idiot designed this input screen (or other interface object)?" Clearly, a brain is required to do the job well.

      --
      For conscience is the wound, and there's naught to staunch it
    7. Re:Study what you enjoy by Anonymous Coward · · Score: 0

      I second to that. Backend programming is easy compared to UI creation. To me it's more difficult to build an intuitive UI than to build a sound architecture for any program.

    8. Re:Study what you enjoy by Xest · · Score: 1

      "If you want to kick ass, you need all the introductory math you put your hands on (advanced university level math is too theoretical though and only useful for quantum physics and math majors)."

      I disagree completely, it's the advanced level stuff I found most applicable. High end computability theory and combinatorics is why I've been able to create configurator software for the products the firm I work for sells that no other competitor in the industry has, it's let us take 60% global marketshare in our field.

      So in my experience it's quite the contrary, the high end stuff is what really lets you change the game. Most companies will have people who can do the low level stuff- the bare minimum to do a good job, much fewer have people capable of writing software and doing the high end math so that's truly what will let you stand out.

      Even if you're not solving problems yourself you may come across papers explaining theoretical concepts that could solve the problem you need to solve, but good luck taking them from theory to practice if you don't even understand the papers if they do use high end math which can often be the case for many problems which no example implementation already exists.

    9. Re:Study what you enjoy by GasparGMSwordsman · · Score: 1

      If you want to do human computer interface, you don't need math (or a brain).

      I strongly disagree with this statement. Like all tasks anyone CAN do it, but few can do it well. Anyone can throw together an interface but it takes effort and a bit of understanding psychology, anatomy and the business practice at hand to design an interface that works WITH the user.
       

    10. Re:Study what you enjoy by Anonymous Coward · · Score: 0

      I agree that most user interfaces are terrible, but what is an advanced understanding of math going to do to solve this problem? I can see no use for any of the math disciplines that you listed in the majority of user interfaces...just curious is all.

    11. Re:Study what you enjoy by D+Ninja · · Score: 2, Informative

      Second this.

      User interfaces are terrible because of attitudes like the GP has because, at the surface, they *seem* simple so many people ignore them thinking that they'll just "slap on an interface" at the end. However, if you ever try doing some user interface design, it is a nightmare of a problem. To add to the list of courses needed, I would also throw in (non-math) courses on psychology - specifically cognitive, social, and visual psychology.

    12. Re:Study what you enjoy by D+Ninja · · Score: 2, Interesting

      I can see no use for any of the math disciplines that you listed in the majority of user interfaces...just curious is all.

      I personally have used statistics heavily when it comes to testing user interfaces - particularly with live users (as in, 'How intuitive is the interface?') It is good to have a solid understanding of what goes into statistics to make sense of the data you get from such tests to help further improve your interface.

      I can't speak to the other ones (and am having difficulty coming up with a use for calculus). I personally feel that psychology plays a stronger role in UI design. That is from my own experience, however. YMMV.

    13. Re:Study what you enjoy by scruffy · · Score: 1

      Programming is a HUGE field. There is plenty of work that doesn't require significant math. Go with what interests you and let the details work themselves out.

      I agree, except about the "significant math" part.

      You should do what you enjoy (if it pays enough :). The next best alternative is to do what you are good at. If you already have difficulty with calculus, then maybe more of the same is not the way to go. To be sure, if you take the second course and *understand* it, it will be a great help to you, but if it's just a grind to be forgotten the day after the final, it won't do you much good.

      As for "significant math", all programming is applied math. Good programmers know how to analyze problems into logical steps using a variety of pieces of math. A discrete math course will introduce you to where most of those pieces come from.

    14. Re:Study what you enjoy by Anonymous Coward · · Score: 0

      You need statistics, graph theory, game theory, and a little calculus. At an absolute minimum.

      Attitudes like yours are why so many user interfaces are terrible.

      Strong statements like that require strong proof. You've given none.

    15. Re:Study what you enjoy by TheRaven64 · · Score: 1

      Statistics are important because HCI involves a lot of user studies and it's possible to draw deeply wrong conclusions if you incorrectly apply statistical methods to the results. I've seen this done on several occasions.

      Graph theory is important to all aspects of computer science, but it's very important to modelling flow through an interface. You need to map the sequence of actions and apply things like Djikstra's algorithm to find effective paths through the interface (and, importantly, tell whether they exist).

      Game theory is important because it helps you understand what the user will do when presented with choices and what they should do. You also need some psychology, but the game theory allows you to build models. You use the adversary model a lot in user interface design to model how a stupid user (i.e. someone who doesn't think like the designer, i.e. everyone who will actually use the interface) will behave. This lets you work out the least efficient way to use your interface. You can then apply some graph theory to try to make this better or to make it more difficult to use an interface badly (anyone can design an interface that it's possible to use well. It's much harder to design one that is easier to use well than use badly).

      Calculus is important when you start using anything marginally more complicated that Fitts' Law for working out the cost (in time and effort) of the user performing actions.

      As the other poster pointed out, psychology is also very important, but psychology just provides you with the input for the model. Mathematics allows you to build and use the model effectively.

      --
      I am TheRaven on Soylent News
    16. Re:Study what you enjoy by Blakey+Rat · · Score: 1

      If you want to do human computer interface, you don't need math (or a brain).

      At the very least, math-wise you need Statistics, for the user surveys and interviews you'll conduct. (Assuming you're good at your job.) You also need a good dose of Psychology to set up testing, and learn all the established knowledge you'll save time not re-testing.

      On another note, I hope to God you never write an application with any sort of UI, if that is your attitude. Christ.

    17. Re:Study what you enjoy by jpmorgan · · Score: 1

      Hell, you need statistics for everything. If I had my way you wouldn't be able to graduate high school without a good dollop of statistics.

    18. Re:Study what you enjoy by steelfood · · Score: 1

      Psychology can be described with game theory and statistics. Though admittedly, most UI designers probably are more intuitive than calculating.

      --
      "If a nation expects to be ignorant and free in a state of civilization, it expects what never was and never will be."
    19. Re:Study what you enjoy by Anonymous Coward · · Score: 0

      Absolutely untrue. You need statistics, graph theory, game theory, and a little calculus. At an absolute minimum.

      Bah. The only part about it that is "absolutely untrue" is that you *do* need a brain. You absolutely DO NOT need math for most GUI design work. I've worked professionally on the engineering side of computer graphics for 10 years. My success has been not because of the "math" that I've known but in the "engineering" skills that I've picked up. For the typical software engineer, you're re-using somebody elses framework or SDK, and you just need to know how to intelligently use the capabilities that already exist.

      Attitudes like yours are why so many user interfaces are terrible.

      More "Bah".

      I would argue that most of the user-interfaces that I use work just fine... some suck, yeah, but definitely not "most", and probably not exceptionally more than the normal amount of suckage for any field or product.

      I think some of the big factors that contribute to making terrible interfaces are:
      1) Trying to re-invent how someone interacts with an interface, when there is no need to
      2) Building user-interfaces using clunky SDKs that make it HARD to implement the right kind of UI
      3) Not paying adequate attention to the various classes of users (e.g. casual user may just want click-n-go, whereas a power user wants (and needs) keyboard shortcuts, etc.)
      4) Just plain not thinking about it.

      I don't think any of those require "statistics, graph theory, game theory, and a little calculus".

    20. Re:Study what you enjoy by recharged95 · · Score: 1

      From that statement, I have come to the conclusion all interfaces are terrible for me. From a no-brainer google.com to a PhD researched and developed Squeak UI. They all suck.


      Well, except the [Buy Now] button UI on Amazon.

    21. Re:Study what you enjoy by leenks · · Score: 1

      Understanding the business processes of your users has a bigger role than all of those IMO. This either means being very good at people and business analysis, or you have to be an expert in the domain you are building software in.

      Unless you understand the workflows of your users you are never going to be able to build a user interface that supports them in their day to day work, and you are likely to hide the one function/option they need to perform 00's of times a day behind a 20 stage process.

    22. Re:Study what you enjoy by geekoid · · Score: 1

      I have found the attitudes like his is because of so many terrible interfaces.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    23. Re:Study what you enjoy by Carewolf · · Score: 1

      You may call that advanced math, but it is not what I meant by advanced math courses. I am talking about later courses for a math major, at least where I studied our later courses was way beyond anything you mentioned. All computability theory and combinatorics are introductory math, or at best advanced applied math, but they don't teach applied math at the math department.

    24. Re:Study what you enjoy by Carewolf · · Score: 1

      At the very least, math-wise you need Statistics, for the user surveys and interviews you'll conduct. (Assuming you're good at your job.) You also need a good dose of Psychology to set up testing, and learn all the established knowledge you'll save time not re-testing.

      Sorry, I was talking from a university point of view. None of the math there is relevant. Yes you need statistics, but not statistic theory (you are not researching new distributions). A yes you need a brain to create a good interface, HCI is very hard to actually do. You don't need a brain to learn it though, the theory is still vague and there few difficult facts or abstractions like in other parts of CS. And yes I was exaggerating because making fun of HCI is part of my CS culture.

    25. Re:Study what you enjoy by Anonymous Coward · · Score: 0

      Absolutely untrue. You need statistics, graph theory, game theory, and a little calculus. At an absolute minimum.

      Attitudes like yours are why so many user interfaces are terrible.

      This is ridiculous. Designing a good interfaces isn't easy, and involves approaching things from different angles. But graph theory, game theory and calculus? C'mon. Please do provide an example of a bad interface because someones maths was poor

    26. Re:Study what you enjoy by Blakey+Rat · · Score: 1

      Sorry, I was talking from a university point of view.

      Considering how bad the average application is UI-wise, universities *should* be teaching this.

      You don't need a brain to learn it though, the theory is still vague and there few difficult facts or abstractions like in other parts of CS.

      Bullshit. There's over 30 years of work out there on the field. Shit, even the Mythical Man-Month has some UI learnings in it, that's 40 years.

      If by "difficult facts" you mean "counter-intuitive", then HCI has gobs of those. As far as abstractions, well, HCI has gobs of those too... of course you obviously know precisely dick about the field, so I don't even know why you bothered to type that.

      Look, it's great that you can pigeonhole computer science into this tiny little itty bitty box, but maybe you should open your eyes and get out into the world. What's your goal in studying computers? Is it to come up with a MPEG compression algorithm that's 0.05% more efficient? Fine, then do what you're doing... but still don't be an asshole to people with different opinions.

      But wouldn't it be a much nobler goal to open up the power of computers to the average person? For your sister or grandpa to be able to automate tasks on their computer as easily as Slashdottes do? To make computer UIs invisible, so easy to use that people don't even realize they're using one?

      Now THAT, that is worthwhile. That's HCI.

      And yes I was exaggerating because making fun of HCI is part of my CS culture.

      Then your CS culture sucks. fucking. ass.

      HCI is the single most important factor in creating a useful computer application. The most important part. Nobody, and I mean nobody, in real life gives half a shit if your application is written in C or in super-experimental-college-language. Nobody in real life gives a third of a shit what algorithm you're using (as long as the application has good response time, but that's under HCI!). Nobody gives a shit if you've written proofs that your application is correct.

      What people do care about is whether your application auto-selects a value if there's only one reasonable choice. If your program doesn't draw UI elements off-screen. If your program lets you use the scroll wheel in every window/pane that has a scrollbar. Whether your program pisses them off, or if they use it happily with no interruptions.

      Goddamn, man. Your university's priorities could not be more backwards.

    27. Re:Study what you enjoy by electrosoccertux · · Score: 1

      While the psych recommendation sounds insightful, having just taken a survey of it I'm puzzled as to which concepts in particular would apply to UI design.

    28. Re:Study what you enjoy by Xest · · Score: 1

      It sounds like the real issue is that you don't really know much about math at all as otherwise you wouldn't make such a silly statement as calling combinatorics and computability theory introductory.

      I suppose if all you've done is introductory course you might make that mistake, but these topics go well beyond graduate level. In fact, many important unsolved problems are in these fields and they are the focus of much modern mathematical research. Really, if you think you can solve P=NP with only introductory computability theory then please, go and try.

      Please, at least have an understanding about the topics you post about before posting. Just because you don't know the subject well enough to be able to make use of it doesn't mean it's not useful, and just because you do not know a topic beyond a certain point does not mean there is no further knowledge to be gained beyond that point. Even if you were correct that combinatorics and computability theory were vastly smaller subjects than they really are and did not extend past an introductory stage then you're still completely wrong in general, number theory extends again to the edge of human knowledge, it's a subject that starts off easy but expands to be one of the highest end mathematical topics out there and yet it's still entirely applicable to cryptography and so forth in computing.

      Put simply, you're wrong, high end math matters, and if you want to be a programmer that can make a difference and break new ground with their software then you absolutely do need it.

  5. Don't ask universities by VGPowerlord · · Score: 1

    If you ask a university's Comp Sci. program, they'll most likely say either suggest some combination of 4-5 Calculus classes (Calculus I-IV and Multi-variable Calculus).

    --
    GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
  6. My pick by Anonymous Coward · · Score: 0

    As a MS in programming (BS too) and a video game software engineer I recommend the Discrete Structures and Graph Theory (was also one of my favorite undergrad classes)

  7. That depends on you... by geminidomino · · Score: 5, Interesting

    If you're just worried about the programming (coding and maybe some design) side of things, then the math you need is going to be the math that applies to what you're coding (calculus for physics engines, algebra for accounting packages, statistics for reporting ,etc...).

    On the other hand, if you think it will benefit you to know more about what underlies the code (it does me, but we may think in different ways), then I would say absolutely that you should take the Discrete. Computer Science is 95% applied Discrete Mathematics. Computer Science is also a lot of theory which, truth be told, tends to be very specialized in usage to developers unless they're going to the very low levels. After taking DM for my degree, I found that my code has improved, but I also admit that it is anecdotal.

    1. Re:That depends on you... by pturley · · Score: 1

      /agree

  8. If the economy has taught me by BigSlowTarget · · Score: 3, Insightful

    anything its to take business math. It has to take some amazing math to turn - X billion in profits into +xx million in bonuses.

    1. Re:If the economy has taught me by bill_mcgonigle · · Score: 1

      anything its to take business math. It has to take some amazing math to turn - X billion in profits into +xx million in bonuses.

      You took a wrong turn past the Economics Department and wound up at Political Science.

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
  9. Discrete structures by MxTxL · · Score: 2, Informative

    This is the fundamental math for computer science. The other is useful for other subjects, some of which will need software... but if you want powerful fundamentals, it's in discrete structures.

    1. Re:Discrete structures by woboyle · · Score: 2, Interesting

      I would tend to agree that discrete structures is most useful for general purpose programming. However, if you plan on getting into the lucrative field of high-preformance investment programming (financial derivitives, real-time trading algorithms, etc) then the second would be a good choice. So, take the first one first, and if you can, take the second one later. Both will stand you in good stead.

      FWIW, I used to write risk-analysis software for the options trading industry. We used a lot of calculus and differential equations in computing the theoretical pricing and risk factors of derivatives. However, before that I did about 20 years developing real-time manufacturing systems software and knowledge of discrete structures, formal logic, and proofs (to detect race conditions in complex systems) was most useful there.

      --
      Sometimes, real fast is almost as good as real-time.
    2. Re:Discrete structures by fermion · · Score: 1
      I agree in that algorithms and graph theory is a big thing in computing right now. We are once again hearing 'connect the dots' on the news, so we can see that there will be work for those that do such work.

      OTOH, I have done a lot of work with analysis, vectors, and euclidian spaces, all without a deep knowledge of sets.

      Some courses are harder, and less useful, due to the students they are directed towards. It could be the discrete math is meant for maths majors, and therefore assume that level of dedication. A selected topics course can be more appropriate for a student who wants to learn math, but does not want to do math. There is value in listening to professors and peers. In college we all knew the classes where we learned, and those we did not, and it was not always about how much of a hard ass the professor was. Often it was about content. If it were me I would tempted to listen to advice and take the later.

      --
      "She's a scientist and a lesbian. She's not going to let it slide." Orphan Black
    3. Re:Discrete structures by clone53421 · · Score: 1

      I personally disagree. Not with what you said, so much, but what you implied by it: “take discrete structures”.

      I had been programming for fun the better part of a decade before I took either Discrete Structures or the more traditional maths in college (vectors, matrices, calculus, etc.). Yes, discrete math, proofs, sets, algorithms and graph theory are more useful to a programmer. However, if you’re a programmer, they’ll be ridiculously easy, because you’re basically already using them.

      My Discrete Structures class had four exams. I got perfect scores on all of them. You’ll see interesting problems, to be sure, but no challenging ones. For example:

      How many ways are there to choose a valid password on a computer system? What is the probability of winning a lottery? Is there a link between two computers in a network? What is the shortest path between two cities using a transportation system? How many steps are required to sort a set of numbers?

      If you could come up with a formula or algorithm to determine any/all of those, Discrete Structures will bore you. The other maths, on the other hand, will certainly be harder, but you’ll at least be actually learning something new.

      Then again, maybe you want the easy class.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
  10. Look into my eyes and it's easy to see by Anonymous Coward · · Score: 0

    One and one make two, two and one make three

  11. Be a Man, Take Both by Skewray · · Score: 1

    Or be a woman and take take both; whichever suits you.

    1. Re:Be a Man, Take Both by Anonymous Coward · · Score: 0

      or take take take both

  12. Discreet! by Anonymous Coward · · Score: 0

    This Discreet structures with graph theory. Unless you know you will be programming math applications, get the discreet structure knowledge. You will use it forever. Forever.

    - AZ

  13. set theory by Anonymous Coward · · Score: 0

    I've taken 5 semesters of calculus, and the most useful math I've ever learned for programming is set theory. Tremendously useful in the database world, it'll make CJ Date's "Introduction" make much more sense.

  14. Take the More Difficult One by Anonymous Coward · · Score: 0

    you will learn more.

  15. Discreet? by ari_j · · Score: 0, Offtopic

    Is the one class actually called Discreet structures with graph theory as you put in quotes? If so, then it's got my vote as having the best name.

    Seriously, I only clicked on this story to make the joke that you should take "the discreet math classes" because that way the ladies won't have to know, but then I read the rest of the summary and you did most of the heavy lifting on the joke for me. Thanks!

    1. Re:Discreet? by camperdave · · Score: 0, Offtopic

      Seriously, I only clicked on this story to make the joke that you should take "the discreet math classes" because that way the ladies won't have to know, but then I read the rest of the summary and you did most of the heavy lifting on the joke for me. Thanks!

      In other words, "Sigh! So much for my +5 Funny"

      --
      When our name is on the back of your car, we're behind you all the way!
  16. Discrete Structures for sure.... by ibm1130 · · Score: 1

    You can never have too much math so you should, if possible, take both. Having said that the option that maps most directly onto your space is the "Discrete Structures" course.

  17. Set Theory by hightower_40 · · Score: 2, Insightful

    I believe that my courses on Set Theory (aside from the obvious basic maths like Calculus and Differential Equations) have been the most useful to me as a programmer. It looks like 'Discrete Structures with Graph Theory' may be the way to go, but I recommend taking as much math as you can. Like an earlier comment stated, "Make time for it".

  18. Anonymous Coward by Anonymous Coward · · Score: 0

    Discrete structures. Its more useful on a day-to-day basis than the other class.

  19. one million seconds by Anonymous Coward · · Score: 0

    sometimes also called "about eleven and a half days"

  20. I was a math major, work as software engineer now by jockeys · · Score: 5, Informative

    and pretty much the only math I use on a daily basis (when writing code and designing software) is the discrete math. (I did take both classes when I was in school, and lots more besides) so, in my experience the first course would be much more useful.

    --

    In Soviet Russia jokes are formulaic and decidedly non-humorous.
  21. Discrete Math, For Sure by MarkPNeyer · · Score: 1

    The first course will be far more useful to you than the second course. You need a solid background in discrete math to prove algorithms are correct and to prove things about their running times. The second course would be more useful to someone who will need advanced math for modeling things. Even if you eventually go on to take the second course, the first will definitely prove useful to you.

    --

    My blog
  22. Takje the algorithms course. by argent · · Score: 1

    I would take the algorithms course first. I'd suggest taking both of them, since it sounds like you're not doing nearly enough math, but graphs and algorithms are central to so much computer science that it will definitely help to take that one first.

  23. Set Theory / Boolean Logic by Gothmolly · · Score: 5, Insightful

    Venn Diagrams. Intersection. Union. AND/OR/NAND/NOR

    I constantly run into people screwing stuff up because they get lost in the logic of stuff like "if this is part of that group but not contained in this set".

    --
    I want to delete my account but Slashdot doesn't allow it.
    1. Re:Set Theory / Boolean Logic by Anonymous Coward · · Score: 0

      Venn Diagrams. Intersection. Union. AND/OR/NAND/NOR

      I constantly run into people screwing stuff up because they get lost in the logic of stuff like "if this is part of that group but not contained in this set".

      People screwing ... group sets.. Are you talking about an orgy here?

    2. Re:Set Theory / Boolean Logic by bill_mcgonigle · · Score: 1

      I constantly run into people screwing stuff up because they get lost in the logic of stuff like "if this is part of that group but not contained in this set".

      BTDT. Practice is probably important too. I once needed to write a 'like google' search parser, and the first one wasn't at all right. Then I stopped to think about it properly and it wasn't really all that hard.

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
    3. Re:Set Theory / Boolean Logic by Anonymous Coward · · Score: 0

      I agree completely with this post.
      My college had a class called "Math for Computer Science" - Logic and Set Theory, along with basic arithmetic - order of operations, etc.

      For what I do, it's the logic and set theory that I use on a daily basis, but then I'm mostly writing SQL and PL/SQL, so not a 'programmer' per se. It really depends on what you are going to be doing!

    4. Re:Set Theory / Boolean Logic by electrosoccertux · · Score: 1

      Venn Diagrams. Intersection. Union. AND/OR/NAND/NOR

      I constantly run into people screwing stuff up because they get lost in the logic of stuff like "if this is part of that group but not contained in this set".

      This is simple stuff and can be learned on wikipedia. Any brain worth its fluids can figure these out for themselves on wikipedia....

  24. If you select the non-euclidian option by Rix · · Score: 2, Funny

    Don't rent the attic room in that really old house. No matter how cheap it is.

    1. Re:If you select the non-euclidian option by Anonymous Coward · · Score: 0

      Don't rent the attic room in that really old house. No matter how cheap it is.

      Thanks for the advice Mr. Gilman.

    2. Re:If you select the non-euclidian option by Anonymous Coward · · Score: 0

      Now that's funny. Someone else reads Lovecraft.

  25. Either or Both by vitaflo · · Score: 1

    First, any math class can be useful to programmers. I went full double major CS and Mathematics and found all my classes useful. Set Theory perhaps is the most closely related to CS, but all of them can have value depending on what you get into after your studies. Also, whether one is "harder" should not make a difference. If anything it should make you want to take it more. Exercise your brain in all different ways, it will benefit you in the end regardless.

  26. Take the easier course by Locke2005 · · Score: 3, Insightful

    If you struggle with math, I would definitely take the discrete structures class, not the second class. 3D Vector Calculus (e.g. Maxwell's equations) was one of the toughest subjects I've ever taken, and guess what -- I've never used it since! Set theory, on the other hand, is used constantly in CS; in fact, boolean algebra is just a subset of set theory, and I believe Relational Databases are built on top of set theory.

    --
    I've abandoned my search for truth; now I'm just looking for some useful delusions.
    1. Re:Take the easier course by Anonymous Coward · · Score: 0

      Take the easier one and turn up to the harder one too, if in your real courses gets too hard then stop turning up to the harder one, if not take notes and learn the materials in your spare time. This will be almost as good as taking the course (hell if your university isn't strict you can turn up to everything except tutorials and even get your work marked), plus you can't fail it.

    2. Re:Take the easier course by mattpalmer1086 · · Score: 1

      Well, relational databases were *supposed* to be built on set theory. But they ended up including NULLs, which aren't compatible with sets. Try reading "Database in Depth" by C. J. Date for some amusingly acerbic and useful analysis of relational theory:

      http://www.amazon.co.uk/Database-Depth-Relational-Theory-Practitioners/dp/0596100124

      He worked with E. Codd on the original relational model.

    3. Re:Take the easier course by nomadic · · Score: 1

      boolean algebra is just a subset of set theory

      Bah-dum-dum.

  27. English first by Anonymous Coward · · Score: 0

    If I were you, based on your submission, I'd work on my English first. All the math in the world won't make you a better programmer in the field if your written communication is that poor.

  28. Discrete underpins everything. by Anonymous Coward · · Score: 0

    Discrete math and graph theory underpin Computing Science (notice computing, not computer). This will give you the background for algorithm theory, computability and complexity, and automata modelling.

    The vectors and differentials will be usefully applied to some specific solutions you develop, especially graphics, but discrete/graph math underpins development itself.

  29. IMO by scubamage · · Score: 1

    I'd go with algorithms and logic if you can only choose one of the two. While the other stuff is doubtlessly useful, nothing will serve you better in programming than a firm understanding of algorithms, and logic which can be used to know when to employ them and how to create them. Just my $0.02, YMMV.

  30. Discrete FTW by jdkramar · · Score: 1

    I am a CS student, and out of all 7 of my advanced math classes, the ONLY one I have ever found useful with programming is Discrete.

    --
    "One can not truly appreciate Shakespeare until you have heard it in it's original Klingon" -Star Trek
  31. Discreet structures with graph theory by dstrupl · · Score: 1

    is the one that you will find usefull for actual software development. The second one will just give you math "background" (which might not be that bad but probably not what you ask for).

  32. embrace the pain by bl8n8r · · Score: 3, Informative

    if you don't have a good understanding of algebra and geometry, computer graphics coding is going to suck for you. You will not only find the work daunting, but your coworkers will be very frustrated with the duct tape work-arounds you will need to employ in order to compensate. My advice would be to work your butt off to grok both classes. It will only make your quality of work life more enjoyable later on. Trust me, math hated me as much as I hated it and I've had to go back and do it over.

    --
    boycott slashdot February 10th - 17th check out: altSlashdot.org
    1. Re:embrace the pain by v1 · · Score: 2, Informative

      if you don't have a good understanding of algebra and geometry, computer graphics coding is going to suck for you.

      I decided to write a primitive FPS, and the 3d rendering was an amazing retro back to the days of geometry... it would be totally impossible without a good background in geometry.

      Here's a simple one to wrap your mind around: lets say we're in a 2.5-D world. (there's a vertical element to view, but all walls extend from floor to ceiling, so it's basically 2D rendered in 3D) To draw the walls in the player's view you can take two approaches, depending on your language's graphics speed. (1) draw only the parts of the walls you have to, or (2) draw all the walls in view, from farthest to nearest, so the nearer walls draw over the farther ones. For the language I used, it was (2).

      So, what order to draw them in? Easy to determine really, but it relies on calculating intercept points. Given walls A and B, that have endpoints AX1,AY1 AX2,AY2 BX1,BY1 BX2,BY2, and the player's point PX,PY, you need to see if A blocks your view of B (one or both of its endpoints, or entirely) or vice versa or not at all. Then just draw the wall that is blocked first. Now start thinking about the math involved in doing that. iirc there were 28 distinct ways the two lines could be oriented relative to the observer, and I had an 18 page if-then-else ratsnest that ended up being a nightmare to debug but ran nice and fast.

      Required mostly being able to calculate x and y intercepts as well as whether intercepts were on the line, or on the line segment. The math of drawing the walls themselves was trivial by comparison with the math to figure out the order of drawing. I can't imagine the headache of a true 3D world with three-dimensional space and polygons.

      --
      I work for the Department of Redundancy Department.
  33. Take the First by Mr.+Sketch · · Score: 1

    The first set of topics will give you a solid foundation that you can apply to many areas of programming. I think Discreet Math, sets, algorithms, and graph theory can be used in a wide variety of fields to solve many types of problems.

    The second set of topics will help you in some very specific programming tasks related primarily to games, AI, and graphics programming, which comprise a small fraction of total programming jobs. Also, you don't typically need to be intimately familiar with vectors and euclidean spaces, beyond what a simple google search will tell you about them, in order to use them effectively.

    1. Re:Take the First by Anonymous Coward · · Score: 0

      I agree 100%. Take any and all math you can get your hands on. Those things like geometry that are applicable to the real world in a very direct way are a great place to start. You will also need the highly conceptual side of math for the optimizations that will make your code efficient.

  34. Carl by Anonymous Coward · · Score: 0

    Take Discreet structures with graph theory. I was a CSCI major, and I think from a programming perspective, that class was one of the best math classes I have ever taken.e

  35. SECOND THAT by Anonymous Coward · · Score: 0

    For example the latter course sounds like something if you're inclined to graphics programming, but might be largely useless with desktop applications. Graph theory on the otherhand is an important, but pretty specific field. I.e. I don't think I've ever had to implement a graph or A* after the college course.

    What I would recommend is a (math) course in logic and complexity theory (i.e. understanding the difference of O(n log(n)) and O(n^2) and O(2^n)). Those are always relevant.

  36. Only need algebra for most grunt programming work by Anonymous Coward · · Score: 0

    For most business related programming you really only need a good grasp of algebra and some set theory (for SQL), the basics covered in high school will suffice. If you want to get into some serious Wall Street level quant programmer jobs and bill more than $250/hr (yes, for real) then you need an advanced degree in Maths. Not sure what you need for 3D game programming. Bottom line however, if you just want to crank out business apps then algebra is all you really need.

  37. both of those! by Anonymous Coward · · Score: 0

    I do computational biology. Both of those would be useful.

  38. take Discreet by trybywrench · · Score: 4, Insightful

    Set theory and graph theory come in handing when programming.

    Some variation of the "traveling salesman" problem, a graphing problem, shows up in every industry out there so it would be a good idea to be familiar with its nuances and the various approaches to getting it mostly right (i don't think it has been solved).

    Set theory is a good place to start thinking about just about anything. You'll probably also cover combinatorics, formal logic, and predicate calculas along with set theory which are also great tools to have when programming.

    --
    I came to the datacenter drunk with a fake ID, don't you want to be just like me?
    1. Re:take Discreet by TapeCutter · · Score: 1

      Most of those topics come under the heading of operations research, and yes the TSP is thought to be an NP-Hard" problem but nobody has proven it.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    2. Re:take Discreet by Anonymous Coward · · Score: 0

      Some variation of the "traveling salesman" problem, a graphing problem, shows up in every industry out there so it would be a good idea to be familiar with its nuances and the various approaches to getting it mostly right (i don't think it has been solved).

      Bull, TSP has been solved for years, you just check every single possible path and ... oh, you mean solved in polynomial time? No, then it hasn't, there is a hack that allows you to get A solution (that is at worst twice as bad as optimal) in poly-time, but that is the state of the art.

      Or you could map it into SAT and throw a SAT solver at it, they have gotten pretty good at solving NP problems quickly, most of the time.

    3. Re:take Discreet by noidentity · · Score: 1

      How should I go about being discreet about this math, though? Should I avoid writing it on paper, ever? I bet discreet math would be valuable to the various intelligence agencies, because they need to do everything discreetly.

    4. Re:take Discreet by pjt33 · · Score: 1

      Apart from Karp, who proved it NP-complete in 1972.

    5. Re:take Discreet by clone53421 · · Score: 1

      Honestly? As someone who took both?

      The set and graph theory are reasonably interesting, and so easy to grasp if you’re coming from a computing background, that you’d probably be able to learn as much in a few afternoons on Wikipedia as you would by taking that class. You’ll probably start the class already knowing 80% of the material, and learning a few new applications of it. (I’m sort of assuming a certain level of proficiency when it comes to logic and planning algorithms, since the submitter said he’d been “hacking” programs since he was a kid.)

      Take Discrete Structures if you want a super-easy class that will basically be a waste of time and money. Yes, it’ll look nice on your transcript and help your GPA, so perhaps not a complete waste.

      Take the other math offering if you want to actually learn something.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
    6. Re:take Discreet by clone53421 · · Score: 1

      That’s the beauty of it. If anyone finds one of your papers, with all its dots and curvy lines between them, you can claim it’s some kind of abstract art.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
    7. Re:take Discreet by Anonymous Coward · · Score: 0

      Be very quiet when you are doing the math.

    8. Re:take Discreet by TapeCutter · · Score: 1

      Ah stupid me, at first I thought I recalled it was proven but when I checked my recollection I misread the reference. It's been a couple of decades since I last set foot in a maths class.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
  39. I'd say it depends what you want to program by sab39 · · Score: 3, Informative

    I'm not directly familiar with either course (and the one-word summaries are a bit limited for providing informed advice!) but it sounds to me like the first one would be generally useful and you should take it regardless of what programming you intend to do - it sounds like it covers sort of the "mathematical fundamentals of programming". The second sounds more like it's useful for certain *types* of programming - perhaps 3d or game programming. Unlikely to be terribly useful for writing database-backed web applications, for example.

    1. Re:I'd say it depends what you want to program by Anonymous Coward · · Score: 0

      I'm curious as to how this was modded insightful...Then again...I'm not directly familiar with the modding system, but it sounds to me like a mod of insightful is handed out to anyone who posts here.

      The site should have some kind of mod that allows people to say a poster actually seems knowledgeable about the subject, and can add something useful to the discussion. Perhaps those post will start with "I AM directly familiar with..."

  40. Neither by biggerboy · · Score: 1

    Take other classes, like Econ 101. Get a broad education, and with real life applicability.

    Plus the chicks are hotter.

    1. Re:Neither by hazem · · Score: 1

      Take other classes, like Econ 101. Get a broad education, and with real life applicability.

      Plus the chicks are hotter

      If you want the hottest chicks, you really need to take classes in the education department, like theory of development. If you take elementary ed classes, you'll actually get college credit for finger painting and making paper mache masks. And be in classes with hot girls.

  41. Discrete, NA, then PDE by Dr_Art · · Score: 5, Interesting

    Take the Discrete Math stuff first since you are just beginning to learn Computer Science and it will fit better with those courses. You should then take Numerical Analysis to totally break your concepts that computers are precise. Finally, take the classical Calculus & Differential Equations track just so you can take Partial Differential Equations, at which point the math will start becoming useful for real world Engineering problems.

  42. Depending on what kind of programmer by Anonymous Coward · · Score: 0

    It all depends on what kind of programmer you wish to become. All coders require basic algebra... isolate variables, some basic math skills. Obviously, boolean math is important. Some very basic math functions understanding is also necessary.

    Then, 3D requires proper matrix knowledge, financial requires solving knowledge, sounds and music requires linear algebra, and so on.

    I cannot say one is better than the other, since I don't know what makes your heart beat and where you want to go later on. If you are unsure, I'd go with something that basically covers the widest range of topics, while not being an expert on any of these, you'll be able to pick up what you're missing as you go in your programming career.

    For example, if you wish to do 3D, you'll do tesselation algorithms once and then you'll know how it works, but beforehand, you only need to know the technique exists. Then, if you are expected to better up what you did before, you'll be able to dwelve in arcane books and publications, and improve on the algorithm.

  43. Re:I was a math major, work as software engineer n by PmanAce · · Score: 1, Insightful

    Same as me, well almost. I was a math major and before that I was a computer science major, so I have both. Unless you are working on a latest game engine in a video game company, chances are you will be using set/group theory more from your first class. I speak of experience, I actually work in one of the top 3 video game companies in the world and yet I am using more "math" from the discrete branch than the calculus branch. But yea, do both as someone else said, I am glad I did.

    --
    Tired of my customary (Score:1)
  44. My $.02 - graph theory and discrete math! by david.emery · · Score: 3, Insightful

    I'd strongly recommend going with choice #1. There's a huge amount of application of graph theory, etc. in both computer science and in practical programming.

    My undergrad degree is in Math, and I have -never- used anything I learned in the classical mathematic topics past linear algebra. The courses in statistics and probability, and the 2 Operations Research courses (I was very lucky to get both of them) have been the really useful items. Unfortunately I was unable to take the graph theory course, but I bought the book anyway.

    In conversations with my Alma Mater, they have substantially changed their curriculum, moving away from the classical analysis topics and more into discrete math.

  45. Depends what programming you want to do by dkleinsc · · Score: 1

    For most programming, discrete is very useful, as well as being one of the more fun math courses you can take. It definitely helps in understanding CS theory, and a lot of the more interesting CS problems out there are graph theory questions (e.g. vertex coloring). If you're looking at, say, attacking the whole P vs NP-complete question, that's the way to go.

    However, if you're expecting to do game or scientific programming, then the vectors, calculus, and statistical work of the other course will probably serve you better.

    The absolute last standard I'd use for picking courses is which one is easier/harder (which the assistant might also be doing, just pushing you in the other direction). It depends a lot on who's teaching what, for starters. Plus, in college, your goal should be to learn something, not just to take the "easy" classes and get out of there with a good GPA.

    --
    I am officially gone from /. Long live http://www.soylentnews.com/
    1. Re:Depends what programming you want to do by bstamour · · Score: 1

      Interesting thing, since you mentioned the P = NP problem. One area of mathematics that is making heavy progress on that problem is (for some reason) Algebraic Geometry. It seems that Mathematicians are as interested in the P = NP problem as we Computer Scientists are. I wonder who will eventually solve it, and whether they'll get a Field Medal or a Turing Award ;)

    2. Re:Depends what programming you want to do by St.Creed · · Score: 1

      Interesting thing, since you mentioned the P = NP problem. One area of mathematics that is making heavy progress on that problem is (for some reason) Algebraic Geometry. It seems that Mathematicians are as interested in the P = NP problem as we Computer Scientists are. I wonder who will eventually solve it, and whether they'll get a Field Medal or a Turing Award ;)

      If you solve it, you're certainly up for the Turing award, but most likely for both.

      --
      Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
  46. Agebra... by RingDev · · Score: 5, Interesting

    Proofs, proofs, then more proofs.

    Programming is all about isolating the smallest part of a problem and simplifying it out. Doing proofs is effectively the basis for programming.

    Understanding trig and calc is handy for specific projects, but for every single program we write we have to be able to see the problem, to isolate components of the problem, and to simplify them.

    -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:Agebra... by michael_cain · · Score: 1

      Spot on. I was a double major, math and comp sci, and believe strongly that the mental processes involved in constructing proofs are very similar to the processes involved in debugging. At any given point in the code, what conditions should be satisfied? In the case of an erroneous result, what conditions would lead to this particular error state? Pushing the concepts far enough leads you to invariants and provably correct code.

    2. Re:Agebra... by imbaczek · · Score: 1

      that's completely, totally, absolutely, 100% right. go for discrete maths, it helps in every kind of programming you may end up in.

    3. Re:Agebra... by aGuyNamedJoe · · Score: 1

      I agree. Many of the questions and answers surrounding "which math course" seem to be thinking about the question wrong.

      In 35 years of programming I probably never used Calculus directly in developing a program or wrote a program to solve a problem that required calculus. Would I argue against including Calculus in a Comp. Sci. curriculum then? Absolutely NOT.

      When I look at what I do every day as a software designer / developer and I ask where did I learn to do that, the answer is often "in Calculus class". Why? "Limits"! -- not Limits themselves, but I think the concept of Limits as used in calc was the first real abstraction I had to grapple with.

      If you ask me what High School class was most useful in preparing to be a programmer, I'd say "Geometry". Why? Proofs!

      When did you ever need to know some factoid you picked up in a history class? Should you not take history?

      The important aspect of most classes is NOT the facts or fomulae you might learn, but the ways of thinking you learn.

      Geometry / Proofs in general teach you logical thinking and step by step progression. Constructing a proof and constructing a program are quite similar. That should make it clear that is important that you actually do the proofs, not just read someone else's proof -- you won't learn to program by reading about someone else writing a program.

      I agree with the "take 'em both" school of thought -- not only are the thinking processes different, but the concepts in both subjects are also useful to you.

      I'm a big fan of automata theory and formal languages, too. You'd be surprised how often you can set out to solve the Halting Problem without recognizing it -- and if you don't know what it is and why it's not worth trying to solve ... It's also useful to know the limitations of regular expressions and how to write problem oriented languages that are easy to parse...

      But the most important aspect of both courses is how they stretch your mind if you can get your head around the proofs. You learn to spot weaknesses / holes in proofs and it's amazing what sorts of problems you can spot in requirements. And debugging proofs is good practice for debugging programs.

    4. Re:Agebra... by hitnrunrambler · · Score: 1

      Proofs, proofs, then more proofs.

      Programming is all about isolating the smallest part of a problem and simplifying it out. Doing proofs is effectively the basis for programming.

      Understanding trig and calc is handy for specific projects, but for every single program we write we have to be able to see the problem, to isolate components of the problem, and to simplify them.

      -Rick

      I have to agree with the conceptual crossovers between programming and algebra. In my personal experience I didn't do so well with my high school Algebra 1 class (looking back I can see it was the teaching method being used.... which is irrelevant but I want to say it :-). Before my next significant algebra class came along I began to learn programming, and suddenly it made perfect sense.
      Programming concepts I had learned made the algebra understandable, and I'm sure if I had gained a strong math foundation first it would have benefited my programming education in the same way.

      p.s. What's an AgeBra? Is that like the "bro" from Seinfeld?

    5. Re:Agebra... by Anonymous Coward · · Score: 0

      I couldn't agree more.

    6. Re:Agebra... by electrosoccertux · · Score: 1

      Proofs, proofs, then more proofs.

      Programming is all about isolating the smallest part of a problem and simplifying it out. Doing proofs is effectively the basis for programming.

      Understanding trig and calc is handy for specific projects, but for every single program we write we have to be able to see the problem, to isolate components of the problem, and to simplify them.

      -Rick

      Only if you have a good proofs teacher.
      We covered proofs but never had the toolset to prove anything. In programming (I loved Java for this-- wonderful documentation was available online), I have all the tools laid about before me and I can pick and choose the one I need for the job.

  47. Discrete by jacksinn · · Score: 1

    I had to take a symbolic logic and set theory class in undergrad that had a book written by our professor. Though initially tough it has proved invaluable to my thinking patterns and knowledge of computer science.

    --
    Life==Jeopardy. All the answers are right in front us - the hard part is coming up with the correct question.
    1. Re:Discrete by sensei+moreh · · Score: 1

      1. Proofs, proofs, proofs. The specific area of math is less important. 2. Don't take a class by the author of the text, take it from another professor if you possibly can. Taking the class from somebody other than the textbook author gives you a second perspective on the topic.

      --
      Geology - it's not rocket science; it's rock science
    2. Re:Discrete by jacksinn · · Score: 1

      I wholeheartedly agree. We were not happy that we basically didn't have a second perspective on the material presented when we went home to try to process it. My favorite CS class in undergrad was where we wrote proofs, languages/alphabets, big 0, etc. I feel that if you 'get' that stuff than you can be a good, language agnostic engineer. Of course there is much to be said for those who have worked in a single language and understand its nuances.

      --
      Life==Jeopardy. All the answers are right in front us - the hard part is coming up with the correct question.
  48. Finite Mathematics FIRST by omb · · Score: 2, Insightful

    Do the Algebra/Logic first, it is more directly applicable to computing and will allow you to understand undecidability (Goedel) computability (Turing) and of course graphs, groups and algebras. Also modern approaches to what people call Calculus, ie diferentialability etc are much more algebraic in the arena mathematicians call Analysis. Read Don Knuth's Fundamental Algorithms in parallel

  49. Discrete math by Dennis+Sheil · · Score: 1
    For my Computer Science degree, both of those courses were required.

    If you are only going to take one, I would recommend discrete math. It is more programmer oriented - algorithms, solving problems with discrete math, doing proofs for equations and so on. This is the stuff that comes up in programming again and again and again.

    As far as the other math subject you mention, differential calculus and so on, that also comes up in programming, and it is good thing to know it.

    But if one or the other, discrete mathematics is more important to understand in order to do programming.

  50. Graph Theory by bstamour · · Score: 1

    If I had to choose one of the two listed, I would go with the first. As a student currently finishing his CS Undergrad I can tell you that discrete maths like Combinatorics and Graph Theory will help you much more than Continuous maths like analysis and calculus. I'm not saying Calculus isn't important -- it is to an extent when you're working with the design and analysis of algorithms, but Graph Theory is something that you should not miss out on.
    Graph Theory is used all over CS: it can be used to model network flow, it can be used in AI to represent search spaces, and don't forget that the majority of cool data structures fall directly from Graph Theory. If you're looking for more practical uses, think of the flow of a computer program. You can use vertices to represent states of your program such as assignments, branches, and so on. Connecting these states with edges determines the flow of your program.
    Plus, overall Graph Theory is fun to do! The proofs are rigorous, but everything is very easy to visualize. If you're having trouble with a concept, in most cases it's easy to draw up a graph and see for yourself that some theorem holds. All in all, it's quite an experience, and as a Computer guy you'll definitely get more practical uses out of it.

  51. What? Math for programmers? by thered2001 · · Score: 1

    I always thought it all boils down to simple arithmetic. Add, subtract, bit shifts...etc.

    --

    If your only tool is a hammer, every problem becomes a nail.

    1. Re:What? Math for programmers? by Anonymous Coward · · Score: 1, Informative

      Then you've never sat down and thought about what it takes to make a 3D environment and get perspectives right.

    2. Re:What? Math for programmers? by jacksinn · · Score: 1

      I would argue that is the case for basic business programming but once you have to develop for an academic purpose or structure/create complex algorithms, a healthy knowledge of logic and set theory is immensely invaluable. A lot of the programmers I work with here have degrees in areas other than CS (Business, Accounting, Culinary Arts to name a few) and can "program" -- make a website functional and navigable-- but these are also the same people who come to us engineers for advice beyond what amounts to be understanding if/else and some basic looping. So it depends on what type of 'programmer' you want to be. Web Developer or Engineer? Script kiddie or Analyst? Und so weiter.

      --
      Life==Jeopardy. All the answers are right in front us - the hard part is coming up with the correct question.
    3. Re:What? Math for programmers? by jpmorgan · · Score: 1

      Yes, it does. The trick is knowing HOW to boil it down to simple arithmetic.

      An itemized breakdown of a $10,000 programming contract:
      $1 for the simple arithmetic. $9,999 for knowing how to solve it using simple arithmetic.

    4. Re:What? Math for programmers? by geekoid · · Score: 1

      computers only add, they don't subtract..well they do but they do it by adding.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    5. Re:What? Math for programmers? by taucross · · Score: 1

      But I have... and I can tell you it's nothing but simple arithmetic involving two operations. Add... compare... then compare.. and add.. or was that compare?

      --
      "In the absence of the ability to establish the attribute of truth they tried to establish the noble attributes."
  52. He's an idiot. by bluefoxlucid · · Score: 3, Interesting

    Discrete maths are more useful because you can prove the operation of your program. The other crap is useful for you to write scientific applications, physics simulators, and clones of Quake-- in which case, you need to be able to understand your own complex logic flow to make sure your program is executing those complex mathematical computations correctly, on the correct data, with the correct output.

  53. Take both by xZgf6xHx2uhoAj9D · · Score: 2, Insightful

    You could take an entire math degree and still not have enough math to be a decent computer scientist (being a programmer is another matter, I suppose). Discrete math (or at least I hope you meant to say "discrete". "Discreet" math would be much less useful) is extremely useful for all areas of computer science. Analysis is extremely useful for a lot of areas of computer science, but I don't think as comprehensively as discrete math.

  54. Take both now! It'll pay off. by Anonymous Coward · · Score: 0

    Take both for sure!
    The first will strengthen you comprehension of logical constructs and help facilitate those times when you must create an algorithm to solve a tough problem as well as making it easier to understand the working nature of algorithms you apply every day, like searches and sorts, and the second will allow you to open the wide world of graphics and 3D computer modeling. I took both and constantly find discrete math concepts help me to structure my design and logical flow as well as helping understand others work, when approached as a system of logical functions, and i find vector, matrix and spatial math is immensely valuable any time i design a simulation, usually motion, in 2D/3D and of course in any instance where i want create a graphical application in 3D.
    And, really, you're better off suffering both now instead of finding yourself in your professional career and needing to teach yourself a complex subject - i wish i had studied higher level maths as i find i have to teach myself if i want to learn them now...and as we all know, that takes lots of self discipline and time, two things i don't always have extra of.

  55. It's all about algorithms by Tharsis · · Score: 2, Insightful

    Programming is about algorithms. Proving them, or better yet, deriving them (you may find deriving is a lot easier than proving, I did). Graphs may come into play, but that depends on your particular interest, they do give a great insight into complexity though. Knowledge of sets is extremely useful.
    To me the first looks absolutely essential for a computer scientist. The second is nice if your interest lies in that direction, but it doesn't have anything to do with programming in general (it does seem essential for a mathematician though).

    My advice: Learn Logic rather than math. It is far more useful.

    1. Re:It's all about algorithms by Youngbull · · Score: 1

      My advice: Learn Logic rather than math. It is far more useful.

      I totally disagree on skipping math for logic. Not that logic isn't important but Discrete math is very important for general problem solving involving countable sets. It's essential, so you got to at least take that course. And when it comes to "selected math chapters"; a firm understanding of those topics, is really useful, but if you want to take more math later, a course on Real Analysis and a course on Linear Algebra should cover those topics that were provided, and a lot of other useful stuff, and it might give you a better understanding.

    2. Re:It's all about algorithms by AlphaBit · · Score: 1

      +100 to tharsis

      I'm actually surprised you have a choice. The CS programs at 3 different schools I know of all require discrete math but nothing else. Discrete math is about modeling (analysing) discrete objects. This will tie in directly to not only algorithms but also data-structures.

      Any other math you learn will be field dependent. Discrete math is the math of the CS field itself.

      Also, please ignore the people who are saying that you don't need math at all. As a parallel example, paramedics and registered nurses are capable of dealing with a large number of medical conditions without the level of education and training that M.D.'s go through, but I'd never go to one for surgery or long-term treatment of a chronic or terminal illness.

  56. Depends... by Slash.Poop · · Score: 1

    I know personally I am a JAVA programmer...JDBC, GUI, logic...and I SUCK at math. I never understood why everyone always told me I "you need math if you are going to program".

    Well I am here to tell them "No you don't!"

    My career is doing quite well and I have been able to program anything that has been put in front of me.

    1. Re:Depends... by bstamour · · Score: 1

      If you don't mind me asking: which field do you work in? I.e. do you write mostly "business" apps or do you do any neat stuff? :P
      Not meaning to offend, of course. It's just that for me personally, the fun areas of programming have all required a lot more math.

    2. Re:Depends... by Slash.Poop · · Score: 1

      Business.

      I have done some "neat" stuff on my own. However it all depends on what you consider "neat". Do I do space visualization? No. You would need math for that silly ;)

      But everyday real world projects I have been able to do no problem.

    3. Re:Depends... by Slash.Poop · · Score: 1

      I should also mention that I am in insurance. (We can debate whether I am evil or not later)

      Because of this I do have to use ALLOT of math. I am not math free. However nothing beyond the norm.

  57. The class you want is called 'Numerical Analysis' by shawnap · · Score: 1

    Start by not taking anything called 'Selected Math Chapters'.
    Analysis, multivariate calc, and differential equations are fundamental subjects. If you want a background in math then you need more than just the first third of each.

  58. Depends on the Problem by hardburn · · Score: 2, Interesting

    It ultimately depends on the kinds of problems you're going to end up working on. Any sort of graphics programming is going to require a solid understanding of geometry. Designing games requires probability/statistics, where the actual math could often be understood by a bright junior high student, but gets combined in complicated ways.

    Calculus is overrated for anyone not going into Physics or Engineering. I wish schools would put more emphasis on statistics instead, since that's useful for anyone who picks up a news report and sees that there's a 2% spread of support for a pair of political candidates.

    More importantly than any of that, IMHO, is being able to see how the program fits together on an abstract level. This can be described as a form of math, but it's well outside of what most people think of as math. Which is fine, because what most people think of as math has nothing to do with what mathematicians do all day. Just the same, it's not necessarily anything that gets taught by formal math courses, either, at least not directly. Rather, more advanced math leads to better abstract thought in general. So just take more math, whatever it is, and you'll be indirectly learning how to be a good programmer.

    --
    Not a typewriter
    1. Re:Depends on the Problem by asc99c · · Score: 1

      Some programmers can be handed a problem, and will give back a well designed solution. Others, that just won't happen - you have to outline a solution and then they'll fill in the dots. Almost universally, the people in the first category seem to have a good understanding of maths.

      I'm not sure why. I hope I'm one of the programmers you can give a raw problem to, and I don't feel like I use much maths over the course of a normal day. There is a correlation though.

    2. Re:Depends on the Problem by khallow · · Score: 1

      Calculus is overrated for anyone not going into Physics or Engineering. I wish schools would put more emphasis on statistics instead, since that's useful for anyone who picks up a news report and sees that there's a 2% spread of support for a pair of political candidates.

      Calculus is also necessary for anyone picking up statistics. You can get by without it for basic probability and combinatorics. But when you get to statistics proper, things like distributions, expected values, generating functions, etc. Those things require calculus.

    3. Re:Depends on the Problem by hardburn · · Score: 1

      Taking a purely practical bent, you can get pretty far without Calculus. We're talking about enough knowledge to understand the statistics you commonly encounter in news articles, or to analyze the probability in dice and card games.

      For instance, take a look at the Soccer Power Index Nate Silver made for ESPN. The math there is very simple, but it's derived from careful observations to figure out which of the available statistics give you the best predictive power.

      --
      Not a typewriter
    4. Re:Depends on the Problem by khallow · · Score: 1

      No offense to Nate Silver, but you probably could do better by throwing all those statistics into a giant matrix, do a singular value decomposition (SVD) on the matrix, throw away all but the few highest sigular values, and then look at the columns of the new approximate matrix corresponding to wins/losses. This process is called "principle component analysis". The structure he's imposing on the data (for example, constructing offensive and defensive ratings) actually weakens its predictive value. Given that his model is published in ESPN's website, it was probably worth constructing, but for its entertainment value not for its predictive value. The SVD method isn't a calculus method (it's a linear algebra method), but it does demonstrate how a careful, somewhat rational approach to statistics can sometimes be trumped by knowing a better tool.

      The parts of statistics that depend on calculus can be avoided, but there's useful tools there for the budding programmer.

  59. Linear Algebra by RockClimbingFool · · Score: 1

    Linear algebra is how every single difficult problem is ultimately solved on a computer.

    Ordinary Differential Equations (ODEs), Partial Differential Equations (PDEs), Vector graphics manipulations, etc. are always reduced to a system of linear equations to produce an approximate solution.

    Learn linear algebra first, how to program its solutions, then move on from there.

    1. Re:Linear Algebra by Anonymous Coward · · Score: 0

      I agree Linear Algebra is foundations on which you can build. Homology, algebraic geometry, algebraic statistics ( used in genomics) ; you name it and they are based on linearizing the problem. Utmost important in statistical data analysis, ubiquitous computing, remote sensing, etc..

    2. Re:Linear Algebra by Anonymous Coward · · Score: 0

      Or just use Matlab.

  60. Graph Theory for non-programmer communication by wagr · · Score: 1

    I'm no longer working on engineering systems, I deal with more common users on business management software. I have to interact with clients and executives with no clue what a developer actually does.

    Constantly, my thorough (that was a painful class) grounding in boolean logic helps me to write concise code.

    Often, I use my discreet structures knowledge to split up a my work in to manageable chunks.

    Sometimes, my understanding of graph theory to helps me explain concepts to non-programmers.

    Rarely, I use concepts from vectors when designing code or describing a concept to another high-end programmer.

    I haven't used any basic math above algebra (ex. trig or calculus) since 1990.

  61. Depends what kind of programming interests you by Anonymous Coward · · Score: 0

    'Discreet structures with graph theory' will be more helpful for most programming. The methods of reasoning you will be exposed to in discrete math will help you reason about programs, and make you a better programmer.

            If you plan to write software that requires simulating physical systems or 3D rendering, 'Selected math chapters' is definitely worth taking. However, if you can't take both, the discreet math class should take priority.

            I assume you are a college student. Do not be afraid to take classes that you think are too hard. If you have no hope of getting a good grade, consider auditing the class. You get two things out of collage:

    1) An education.
    2) A degree with a GPA.

    When I was in school I feared hard classes because I would have a lower GPA. I knew the education was valuable. However, I thought that because the degree and GPA were measurable to employers, they were more important. This is true for your first job out of school, but becomes less important over time. Ten years out of school, an employer will care what you achieved at your last job more than your grades in school. You should try to get good grades, but you are hurting your education more than helping your GPA if you get good grades by avoiding hard, important classes.

    1. Re:Depends what kind of programming interests you by Nadaka · · Score: 1

      Discreet has more practical application to designing software and understanding compilers themselves. Practical applications of graph theory apply to the design of state machines and numerous other programming topics. However, if you have the time, do both. You can never have to many maths.

  62. Pick the best professor - Choose linear algebra by yoghurt · · Score: 1

    An engaging professor is worth a lot. A good professor can make a dull subject come alive. A boring one can do the opposite.

    Also, there are many flavors of math so you might want to sample to see what suits you. I would suggest a course in "linear algebra". Linear algebra has very low prerequisites - basically arithmetic - there are no "limits" to be taken. It is very useful for almost everything technical and it offers exposure to theorem and proofs. Plus you can use Octave (or Matlab) to try out programming with vectors and matrices and get some hands-on experience with the concepts.

    --
    Yoghurt
  63. The only math you need is by 140Mandak262Jamuna · · Score: 1
    arithmatic. Billing rate times billed hours. Remember, if your job actually requires that high level of math, most likely the pay will be very poor. The real money is in writing SQL queries to data bases for finance software.

    Basically the logic goes like this. Jobs requiring high level of math are managed by people with high level of math knowledge. They tend to be hard nosed and quite stringy with money and difficult to bullshit with and get a phat pay check. Financial managers, on the other hand, are often clueless and they overpay, they can be hoodwinked into believing the job is much harder than it really is.

    --
    sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
  64. If you don't take both, you suck. by Anonymous Coward · · Score: 0

    Seriously, if you applied for a job but the interviewer told you some people said it was hard, would it stop you? My guess is that you would ask slashdot again. How about some background information about your interests? What kind of decent computer science program doesn't require both? My advice: Don't ever tell anyone that you had to ask slashdot to decide what classes to take!

  65. Depends on what you like/want by Zen-Mind · · Score: 1

    I'm a software engineer so I had both, plus some more, plus physics classes so I've been doing "math stuff" a lot. IMO, discrete mathematics is probably the best "generic" choice as it is mostly geared toward logic. However, if you want to do 3D work or work with algorithms, you should take "analysis" because the match concepts will be more advanced. In the end, I think the math class that was the most useful in every day work is neither, it's statistics, but that is another story :).

  66. Take both, but graphing first. by Anonymous Coward · · Score: 0

    As a former CS instructor, I'd take the graphing before the vectors. It has wider immediate application to your coursework. Then, I'd take the vector course - especially if you are interested in graphics or physics modeling.

  67. As much as possible, but consider others by FreelanceWizard · · Score: 1

    Optimally, you'll want to get as much math as you can, especially in the realm of proofs, number theory, and combinatorics. They're particularly useful because they directly map to computer science in computational complexity and computability. Knowledge of complexity and the ability to establish the best, average, and worst case performance of an algorithm is quite helpful in ensuring your programs run quickly -- especially if they have slow parts outside of your control (GC, I/O, etc.) or if you're working on large data sets where the difference between O(log n) and O(n log n) can be substantial. On that basis, I'd recommend taking discrete structures with graph theory. Personally, I don't see where the advantage of the selected math chapters course is for a software developer, unless you're planning on coding for domains such as engineering or quantitative finance; however, as I said, the more math you get, the easier certain topics will be for you (e.g., functional programming).

    That said, you might also want to consider taking a course in computational linguistics if one's available; they're often offered out of your local psychology department. Computational linguistics deals with large to enormous data sets and will teach you how to work with techniques such as dynamic programming, caching, lambda expressions, tree traversal, and probabilistic models. It's a great fusion of math, linguistics, and computer science that I feel is an excellent capstone course. If you can't find such a course, I'd still take the general principle here and look for a course that will require you to integrate your computer science and programming experience with some other field. The more connections you can find between your pure computational knowledge and the real world, the better the developer you'll be.

    --
    The Freelance Wizard
  68. Discrete Math by Anonymous Coward · · Score: 0

    If you can only take one, definitely take Discrete Math.

    It should not be an easy class if Math does not like you, but the algorithm and graphing portion are very large programming topics. Sets certainly are too, but proofs are more of an academic game.

    The other stuff, vector algebra, etc, are useful topics, but not nearly as useful as understanding algorithms and graphing (if you understand graph theory, then it helps a great deal with understanding a lot of very important programming paradigms).

  69. definitely discrete by Surt · · Score: 1

    I use concepts from my discrete class on a daily basis, and have at my game software job, my enterprise software job, my cable tv software job, and my gps software job.

    I've also taken the other kind of class, but I've never used:
    math analysis; euclidean space, differentials in 15 years of work.

    I have used vectors on occasion, but that is really not hard to pick up.

    --
    "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    1. Re:definitely discrete by Anonymous Coward · · Score: 0

      I call bullshit on this.
      If you do game programming and gps, you'll have used a lot more than "some" vectors. And do you even know what euclidean space is? You know... that thing you're working in. The other two areas both have important applications in things such as financial modelling, climate modelling, and pretty much any kind of physical problem you can think of modelling with a computer, including game programming.

    2. Re:definitely discrete by Surt · · Score: 1

      My high school level geometry course gave me all the vectors and euclidean space I've ever needed. The college level super geometry course was entirely a waste. Same for college level vectors and college level differential eq.

      Now linear algebra is valuable, but that wasn't one of the listed courses.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
  70. take discrete by Anonymous Coward · · Score: 0

    While math certainly is not required for most programming jobs it certainly helps. I double majored in math and CS in college and the math always comes back in strange ways to help me solve problems. Also doing mathematics trains your mind for solving problems. Even if you don't use all of the stuff you learned directly the mathematical maturity you gained by dealing with all the abstractions will help you be a better problem solver.

    I'm a math nerd so I would say take both classes if you can. If you had to choose one, discreet math and graph theory is defiantly more readily applicable to computer science. Many programming problems involve graphs somehow. Discrete math techniques commonly come up when analyzing algorithms.

  71. LOGIC is needed. not mathematics per se. by unity100 · · Score: 1

    programming is about logic. causes and effects. about interactions in between created, derived logic sets.

    mathematics is a much more bigger procedural set which bases all its procedures and operations and practices on the framework of logic. its, therefore, a derived set.

    what you need to know good is logic. if you are able to utilize logic good, you will be able to do good programming. being a mathematician would help only because you would sharpen your logic skills while working on mathematical problems. if you already have a good logic skill, or you have other ways to develop your logic skills, you dont need to take on mathematics.

    after all, the basis of all thought is logic. the keenness about understanding base interactions and cause effect relationships in between concepts. anything else is derived.

    1. Re:LOGIC is needed. not mathematics per se. by Anonymous Coward · · Score: 0

      s/logic/rationality/

      I am sure you are not referring to classical logic, which a smart person can understand about in 15 minutes. If you are referring to modal logic with possible axiomatic systems you must be kidding. These further studies of logic tends to screw up thinking without any gain.

  72. Useful Math by orclevegam · · Score: 1

    The problem with the relationship between math and programming is that math is of absolutely no use to a programmer, except when it is. That's a rather obtuse way of saying that all the math in the world won't make you a better programmer if you don't already have the foundations of programming, but if you've already mastered most facets of programming knowing more math will help you. Depending on exactly what you're doing, and with what languages you're doing it, you'll get more or less use out of different math fields and theories, but exactly what you'll find useful is going to vary wildly from project to project and language to language. Of course your basics like algebra will never steer you wrong, and to a lesser extent calculus can be useful. Beyond that a light sprinkling of statistics, basic boolean logic theory, and the odd bits and pieces from set theory are all you'll really need unless you're using something specific for the project at hand in which case you'll probably need to brush up on whatever it is anyway. Since your in school now you might as well expose yourself to as wide a range of maths as possible in case something should happen to prove useful down the line, but I wouldn't be too terribly worried about it if you struggle with anything specific as you probably won't need it anyway, and if you do you can worry about it then. The most important thing to take away from it all is a basic understanding of what's out there available to you so you know what to go looking for in the future.

    --
    Curiosity was framed, Ignorance killed the cat.
  73. Can slashdot get rid of "Ask Slashdot?" by Anonymous Coward · · Score: 1, Insightful

    Or at least remove it from RSS? I swear, it feels like half the "news" that comes through the RSS are these banal, you should have asked them on a forum, questions. I pay attention to slashdot for the news, for the things that you see here first, not this banal "gee, I have a question that I really should have asked on a niche message board" chatter. At the very least, would it be possible to simply do an RSS feed WITHOUT the ask slashdot waste of time so that my RSS reader isn't constantly warning me of "news" that is simply a waste of time?

    1. Re:Can slashdot get rid of "Ask Slashdot?" by Anonymous Coward · · Score: 0

      I share your opinion. All those "how to teach my kid BASIC" are totally boring. However, this question was really important to me.
      Still, the feature to opt out from 'ask slashdot' would be cool.

  74. Check your curriculum by Sheepless · · Score: 1

    I took both (2 semesters of discrete math, in fact; 3 semesters of traditional math). In my work, primarily in integration and web apps, I find the set theory and discrete math (logic) a lot more useful. However, if you do other things, you might find the "traditional" math more useful. But I wanted to share that in my own curriculum, I was required to take an Algorithms and Data Structures class that covered almost exactly the discrete math topics. I took them at the same time. The A&DS class was (in theory) more practical, but much of the theory was the same. Learning proofs will make your brain hurt (in the "no pain, no gain" sense), but I doubt you need both A&DS and discrete math unless, as others have pointed out, you plan to go for a PhD and go into research.

    --
    Social media and technology thoughts: http://jasonkinner.wordpress.com
  75. Know your Algebra by Anonymous Coward · · Score: 0

    I am not a programmer by trade but have written lots of small programs over the years. I first majored in electrical engineering and later switched and graduated as a math major. One thing I know from experience, the study of math continually sharpens your analytical abilities.

    I cannot speak to the latter course you mentioned, but the Discreet class that I took was one of my favorites because of it's practical application of logic to several different areas of Math.

    I contend that the most important field of math for programmers is algebra. I worked in a computer lab while attending college and most of the questions arose out of a lack of understanding of algebra.

  76. Another vote for Discrete by SocialEngineer · · Score: 1

    The bulk of what you learn in that class you will end up using in some practical sense, especially algorithms, if you have no prior study of such. Plus, discrete math (to me) was a more enjoyable subject.

    --
    "Better to be vulgar than non-existent" -Bev Henson
  77. Practically speaking by nodrogluap · · Score: 1

    Discrete if you plan on developing algorithms or data structures

    Vectors etc. if you plan on doing 3D graphics or physical process simulations.

    During my programming career, I have used every math and stats I've ever learned in a course. So like tohers say, take both. By the way, discrete was my worst mark, but also where I learned the most.

  78. Take BOTH courses, in the order you listed them. by Slipped_Disk · · Score: 2, Insightful

    You should probably take both of these courses: requirements aside, both are important for a truly solid CS education.

    Take Discrete Structures first, especially since it has graph theory rolled into it. This will be more directly applicable to your CS coursework as discrete math and graph theory pop up EVERYWHERE, and when you get out into the real world you'll benefit from a solid understanding of these concepts.
    Math Analysis will be useful too, as will the linear algebra components that seem to be buried in that class somewhere.

    As others have said, make sure you get a good professor. Sit in on a lecture if they'll let you. A dull, droning, Ben Stein type teaching either of those courses will cure your insomnia, but your GPA will suffer.

    Final word of wisdom: Do not take the advice of a random (non-CS) teaching assistant, "general" academic advisor, or (ESPECIALLY) Slashdot. They're idiots (even me). Talk to other students, professors in your department or your major advisor for course order recommendations.

    --
    /~mikeg
  79. 90% of "real" business programming is not math by fuzzylollipop · · Score: 1

    it is string manipulation at its most basic. unless you are doing math and programming is a end not the means, then math != programming for the most part.

  80. topology by neuromountain · · Score: 1

    If you are dealing with higher dimensional data and metric spaces, I think topology and related disciplines may be of value. Understanding the structure of your data will allow for the design and development of unique tools with which to handle it, an example being new dissimilarity metrics. As an aside, some of the best programmers I have known were musicians and linguists, with little understanding of the math behind the problem, but an intuitive and often very different instinct for unique solutions.

  81. No no no by Anonymous Coward · · Score: 0

    No no no! This is a classic wrong answer to the question. The kind of euclidean stuff and analysis stuff used in games and visual processing is mostly, if not entirely, elementary-level. Knowing why differentiation is robust is no help here. If you already know the derivative of a polynomial, and you can do dot products and cross products and matrix multiplication, you're good for everything except developing highly advanced algorithms of your own, which is a speciality rarely found outside of academia. Everything else you need will be in books, and you can happily forget it afterwards.

    To become a better programmer (which was the main raison d'etre) you need to learn to use maths to understand the function and structure of computer programs. Choice #1 is therefore the only useful choice. You will then, through life, proceed to learn more and more of this type of stuff. This is the kind of level of knowledge you need to, for instance, properly architect massively multi-core programs.

    You will find #1 easier because it's more relevant. Much of #2 will be to do with solving the heat equation in closed form and other such stuff which is made fundamentally archaic by the very existence of computers.

    The other must-have is a proper numerical analysis course, unless you don't ever intend to use the float or double datatypes.

    As for error-correcting codes, that's part of discreet maths so will be in course #1. ECCs are usually covered in the first few group theory courses.

    As for Godel-Escher-Bach, I don't recommend that either :)

    Finally, if you have a problem with understanding a piece of maths, try to find an application for it in computing, and you'll probably find an article online somewhere which explains the maths you can't understand. Maths isn't hard, but maths textbooks are fucking awful.

    1. Re:No no no by teh_commodore · · Score: 1
      Absolutely go with number one. I'm not sure what everyone else's background is, but I was surprised to see so many people supporting the second option over the first.

      If you haven't had discrete, you WILL need it as a programmer.

      Set theory is useful for more than just DB theory, as suggested by some here. Set theory is what your brain goes through when you create complex if-else statements, case-switch statements, etc.

      --
      --"insert clever quote here"
  82. Both? by Dogbertius · · Score: 1

    Is taken both an option? I did a double major in computer engineering and biomedical engineering for my bachelors, and the computer engineering alone require 3-4 courses in discrete math and calculus/vector-calculus EACH, not to mention statistics and matrix algebra (and all the chemistry, physics, and engineering courses to top it off). I find the discrete stuff is key to understanding abstract data types and you will likely use it all the time no matter what kind of application you are working on. I work in medical research and require a very thorough knowledge of complex number spaces and transformations, and vector-calculus is about as common to this stuff as kids math is to algebra. So in my case, both are essential. IF (WANT_TO_JUST_PROGRAM) DO(discrete); IF (WANT_TO_PROGRAM_ADVANCED_STUFF) DO(both); ELSE DO(change degree);

  83. It depends by Mycroft_514 · · Score: 1

    Vector and such math is good if you want to go graphics and the like.

    Algorithms and Automata theory is good if you want to go the Database administration route.

    You pays your money and makes your choice.

    As for Mathmaticians making the best programmers - sounds like a mathmatician talking to me. It ain't neccessarily so.

    I chose the automata route myself, and I employed as a DBA for a fortune 10 company. However, with todays DBMSes, you might want to get some statistics under your belt.

  84. Well I feel inadequate/confused by clickclickdrone · · Score: 1

    I've got an O'level grade B in maths (For non Brits, that's what you do when you're 15/16 years old and 2 levels below a degree i.e. worthless) and that's it. I've been programming for 30+ years and I don't think I've needed any maths beyond the basics. Given that most of this has been writing stuff for banks, you'd kind of think maths would be used all the time but nope, just the simple stuff. The only maths orientated programmers I've met were in the market analysis/tracking/predicting area and they used Excel and Mathamatica mainly rather than coding per se.

    --
    I want a list of atrocities done in your name - Recoil
  85. First or Niether by pavon · · Score: 1

    The second class sounds like a crammed together sampling of different topics that will leave you without enough knowledge in any one of them to do anything useful. If you want to do some sort of computational physics in the future then you will need many more classes than that one, so you might as well start at the beginning and take them all individually. It will be less overwhelming, and you will have a much better understanding of the subject.

    If you don't want to do computational physics, then all that continuous math is worthless. I took Calculus 1-3, ODEs, PDEs, Vectors, Complex Analysis, and like VAXcat have never once used them in my job as a programmer (still working on getting a masters so I can get a job where I will use that info). Discrete math *is* useful, especially if the focus is on algorithm analysis and graphs.

    In either case Numerical Methods is a very good class to have - depending on the level it is taught at, this may be a good time to do so, or you may want to wait till after you've had at least Linear Algebra and possibly Differential Equations.

  86. Both, and a good essay class by abulafia · · Score: 1

    You don't say what you want to do, long term. If you want to do interesting things in programming, then certainly, pile up the math, and don't shy from hard courses - you want to be pushed here.

    Something to keep in mind, however, is that coding isn't all about 'l33t algorithm skills. Rather a lot of it is using other people's APIs, and if you're good, creating the same. This, fundamentally, is a communications problem, not a coding problem. It has been my experience that the best coders are also very solid communicators, and I don't believe this is coincidental. Even if you think you write well now, learn to be better at it. This is also future-proofing; even after the Singularity, metahumans will still communicate, and in the mean-time, you may find that you don't want to code for the rest of your life. People mock English majors a lot, but working your writing skills is something that is very, very broadly applicable.

    --
    I forget what 8 was for.
  87. A No-Brainer by irexe · · Score: 1

    Pick the Discrete Math course. Really.

    Consider this: first of all. there is plenty of software engineering to be done that doesn't require mathematics at all (web development, administrative systems, etc.). Second, for the jobs that require math from your second category (i.e., calculus and linear algebra), you almost always require the first category as well, lest you want to become one of those scientists who write unmaintainable scientist-code :-) Third, the jobs where that category of math is required are rare (game development: linear algebra, signal processing: linear algebra, calculus and function theory), and if you don't like math, you should probably not try get into those fields at all.

    Background: I have an MSc in Computer Science (we don't have a major/minor system in The Netherlands) and I've always had a strong interest in mathematics, so I'm not afraid of either topic. I currently develop software for scientific applications in various application areas, where both these fields of mathematics are very important. My job is relatively rare compared to what most of my former uni-mates are doing. Most people I know have jobs which require algorithmic knowledge, but not calculus or linear algebra.

  88. Pianos have keys too by ClogHammer · · Score: 0

    You should have been a music major if you want to program.

  89. All math is good... depends on type of programming by jonscilz · · Score: 1

    As an engineer who graduated with a BS in Biomedical Engineering and now does programming for the federal government any type of mathematics will help you with your programming skills. Math analysis; vectors, euclidean space differentials are definitely more practical particularly if you are going to deal with any form of physics, mechanics or statistics logic/formula in your programs. Discreet math is also a very valuable course as well however after algebra, geometry and calc 1, the absolute most important advanced mathematics course you can take with regards to programming is LINEAR ALGEBRA which deals with solving multi-dimentional problems through vectors and matrix. This becomes invaluable when visualizing complex variables in programming (eg. arrays). Trust me.

  90. Take Both by Anonymous Coward · · Score: 0

    At my school, both math courses are required. Graph theory is becoming ever more important these days, especially as the web (and more specifically, social networking) grows. The first course helps form the foundation for a solid understanding of algorithms. Sure, you don't need it to be a solid programmer. But many, many programmers just *apply* algorithms (such as Dijkstras) without actually understanding the theory behind it, which is important to be a top programmer. The reason the best programmers have a solid math background isn't because they're good at math, but because they have that extra level of understanding of the theory.

    The second course is also crucial in order to work in an area that is graphics dependent, 2D or 3D. Again, it's not *absolutely* necessary (I did a fair bit of work in real-time 3D before taking any formal linear algebra courses), but the understanding it provides will really help improve efficiency.

    The question you need to ask yourself is, do you want to be a developer, or a code monkey? One can adapt, extend, and create. The other implements. Not to say one is better than the other, but both require different skill sets and a different level of theoretical and practical knowledge.

    As an aside, I currently work as an intern for the BC Cancer Research Center, where I'm helping to develop imaging techniques for automated breast cancer screening. I use math that both courses cover on a daily basis.

    Best of luck!

    Ps. Take a stats course too ;)

  91. geometric algebra by Pictish+Prince · · Score: 1

    As an alternative (or prelude) to the second group of subjects mentioned, you should take a look at geometric or Clifford algebra. It's far simpler and more intuitive. If you're going to do 3D graphics, study the ins & outs of quaternions. Using quaternion algebra, it's easy to do sophisticated operations with a bare minimum of computation.

    --
    Only his tendency toward a dazed stupor prevented him from screaming aloud.
  92. Quick lesson in business math by ShatteredArm · · Score: 4, Informative

    This is actually quite simple. The trick is to recognize gains as soon as possible, while waiting as long as possible to write off losses. This is the motivation behind FASB's rule change at the beginning of April 2009 (at the kind...er, suggestion...of the large banks) that allowed any asset marked as "held to maturity" to be valued at whatever they want (so long as it doesn't exceed the maturity value). That means that if 50% of your loan portfolio is delinquent and has no chance of ever accruing, you can put a label on it that says you'll hold it to maturity, and you don't have to recognize a 50% loss in your loan portfolio until 30 years down the road (so long as you don't foreclose on the debtors, of course). By simply waiting on the foreclosures, you can make billions off of free money from the Fed discount window (heck, you can even borrow that money from the Fed at 0%, and loan it right back to the federal government at 3%!), and rake in billions in "profits" (and bonus payouts). And then when your bills come rolling in, it doesn't matter that you have no income and all your assets are worth less than a Pontiac Silverdome... you've already cashed in your stock options. As they say, patience is a virtue!

    1. Re:Quick lesson in business math by BlueTrin · · Score: 1

      It is not exactly 0%, but we get your point.

      http://www.frbdiscountwindow.org/

      --
      Don't you know it is now both immoral and criminal to think beyond the next quarterly report?
    2. Re:Quick lesson in business math by steelfood · · Score: 1

      And here I was wondering exactly how Goldman Sachs could be posting "record profits" every quarter for the last year. This explains everything.

      --
      "If a nation expects to be ignorant and free in a state of civilization, it expects what never was and never will be."
    3. Re:Quick lesson in business math by Anonymous Coward · · Score: 0

      Not entirely true. You simply don't have the other extreme which is marking things down to 20 cents on the dollar because a market is frozen, even though you're still getting cashflows from that asset that are equivalent to 80% non-delinquent. There's far to much opportunity in a frozen market to have predatory bidding (ie: lower) on assets while simultaneously shorting the stock of those holding it. They're forced to mark their assets down to "market" (artificially distorted lower), killing their bottom line, and ruining their stock while a competitor (probably Goldman) profits. All-the-while, the assets are still kicking off an amount of cash higher than what the market values them at, just because everyone is pissing their pants and credit is locked up.

    4. Re:Quick lesson in business math by ShatteredArm · · Score: 1

      Mr. Paulson, is that you?

      Seriously, "20 cents on the dollar" is a major understatement. Due to arbitrage, those assets are never going to go lower than any reasonable estimate of what their real maturity value is. They will only get bid lower if there are real expectations that there will be more delinquencies.

      The other reason they MUST make banks recognize assets at market value is because of leverage and deposits. Leverage, because their creditors need to have the right to force a margin call as per the contract terms that guarantee a certain profit (the large banks who pushed for the rule change had no problems issuing margin calls on smaller lenders and mortgage companies!). Deposits, because those banks have deposits guaranteed by the U.S. taxpayer that are backed by these securities. Why do you think the loss ratios have been so insanely high on many of the banks that have been seized by the FDIC this year? In other words, how is the FDIC supposed to know when a bank is insolvent if its assets aren't marked to market? In some cases, insolvent banks had overvalued their assets by as much as 30%. This has completely depleted the DIF, and our country is almost bankrupt now (it would have already defaulted if it hadn't raised the debt limit two weeks ago!), making it more difficult to guarantee deposits.

      No, this nonsense about the credit markets is just what the banks sold you. Some of those banks were leveraged so far that a 5-10% decline in asset value would (and did) make them insolvent. And considering delinquency rates are far above 10% in some cases, it's not surprising that fair value on those assets would ruin them.

    5. Re:Quick lesson in business math by electrosoccertux · · Score: 1

      The discount window is for overnight loans...the Fed does not let you borrow money from them consistently simply to buy Tbonds...

    6. Re:Quick lesson in business math by ShatteredArm · · Score: 1

      I shouldn't have said the Fed discount window; I meant the Federal Funds Rate, which is the rate at which banks lend out their reserves at the Fed to other banks (I believe the rate for the discount window right now is 1%). At a rate near 0%, it's very easy to buy long term liabilities and just keep rolling the short term debt. I suspect the ubiquity of this practice is what prompted the Fed today to issue their word of caution about interest rate risk.

  93. Man Up by Anonymous Coward · · Score: 0

    I am curious what school does not require you to take both of those?

    To me (not that anyone cares) a serious interest in computers results/goes hand and hand with a significant interest in Mathematics, Physics and even Chemistry. All of which were requirements for my degree in computer engineering. I never understood people who say things like "I am a software guy, I hate dealing with hardware". Similarly I have trouble comprehending someone who enjoys programming but doesn't enjoy math.

    Advice:
    Take both classes and any other math class that you have time for. Get a minor or a second major in Mathematics if possible.

  94. Discreet structures with graph theory by Anonymous Coward · · Score: 0

    Discreet structures with graph theory. It is less mathey. I hated Trig and Calc but I rember enjoying Discreet Structures because I just got it. It was pretty easy to get through and what math I learned helped me in the 400 level courses way more than Trig or Calc (the real mathey class)

    Mathey (pronounces "math-e" )
    def. A course that requires more addition, subtraction, multiplication, and divison and less math theory.
    usage. Algebra is more mathey than Geometery because my Algebra problems take half a page to find for X and in Geometry I get to draw circles and triangles.

    Hope this helps

  95. Easy by pvera · · Score: 1

    I can confidently tell you this after two decades of programming: learn as much math as you can possibly handle. The more the merrier. Algebra, calculus, differential equations, numerical analysis, the works.

    Of all of courses I took for my bachelors, the one I remember the most vividly, that was both fun and hard as hell, was numerical analysis because it was the first time after 2+ years of being miserable with my calculus courses that I took a math course with immediate, real world application.

    If you can also get some logic for programmers, even better. My school's philosophy department had logic courses aimed specifically at engineering majors instead of forcing us to take the general (what we called poets') version.

    It is knowledge that is general and very portable, you can apply it to almost everything that you will ever do as a programmer. You simply can't go wrong.

    --
    Pedro
    ----
    The Insomniac Coder
    1. Re:Easy by joebok · · Score: 1

      Absolutely correct - either is great but taking both is better! Then take more. You learn how to solve hard problems logically in math classes - a skill that works everywhere and especially well with programming.

  96. Door number 3: Abstract Algebra by Anonymous Coward · · Score: 1, Insightful

    The course I took was a senior-level course but any high school student who did well in high school algebra and who has the brains to do well in Calculus can understand it.

    My course in a nutshell:

    Integer math with wrap-around. Think clocks, where the minutes start at 0, go to 59, and wrap around to 0 again. 30+30=0, 2-10=52, 5*12=0. You learned what a field and a ring are.

    I wish I'd had this in high school or as an underclassman.

    I doubt your college will let you substitute this, but if they do, go for it.

    As for the two options you have:
    For logic-type programming in any application that doesn't deal in continuous or analog-like data, 'Discreet structures with graph theory' will do you better. If you will be spending your life handling "analog"-like data, 'Selected math chapters' will do you better. If you were going to be a math major or enjoyed math, I would say take both.

  97. great article by jacobstree · · Score: 1

    great article ... www.pressalive.com

    --
    http://www.pressalive.com
  98. Anonymous Coward by Anonymous Coward · · Score: 0

    I am a mathematician (set theory and topology) and a programmer. 'Discreet structures with graph theory' (discrete math; proofs, sets, algorithms and graphs) is more applicable to programming, but there's a catch. At the undergraduate level, "sets" probably mean "naive set theory". (In naive set theory, the statement "x is an element of y" means that "y is a set".) Naive set theory is not mathematics. What you need as a programmer is Constructable Set Theory, which is mathematics, but is usually not taught at the undergraduate level. (In Constructable Set Theory, the statement "x is an element of y" means "x is a set". y may only be a class. Knowing the difference between a set and a class is important.) So, my advice is to take as many math courses as you can (it's just programming in disguise) and sort out the fine points later.

  99. Which tool do I need? by Idarubicin · · Score: 1

    I have two choices: 'Discreet structures with graph theory' (discrete math; proofs, sets, algorithms and graphs) on one side, and 'Selected math chapters' (math analysis; vectors, euclidean space, differentials) on the other.

    I would like to do woodworking in the future. I am going to the hardware store, and among the tools I have two choices: a 'hammer' on the one side, and a 'screwdriver' on the other.

    What you choose to put in the toolbox depends on what you want to build. As others have already observed, there are some fundamental bits and pieces and that you really won't want to do without.

    And ten years from now, when you decide you'd like to hand-carve a canoe paddle, you're going to have to go out and buy a spokeshave anyway.

    --
    ~Idarubicin
  100. Both by nedlohs · · Score: 1

    You want a stats course in there too.

    Then again I had enough credits for my mathematics major before I started 3rd year CS.

    And I also found my mathematics courses harder than all my others (CS is a walk in the park in comparison)...

  101. It's a broad brush... by doc6502 · · Score: 1

    Years ago, I met the guy who ran the company who made most of the wheels for Rollerblade. He's not a chemist, or an engineer. He's a former helicopter pilot who flew soldiers in and out of the jungles of Vietnam and later became a contract helicopter bush pilot, doing firespotting and transport for the US Forest Service. When he realized he was getting sick of risking his life for not much pay and very little thanks, he started looking for something else to do. Through a friend, he heard that IBM was looking for someone to assist them with an issue with rubber compounds-- they needed a specific rubber formulation for parts that wouldn't degrade even under the worst conditions. He didn't know a thing about rubber, but figured it couldn't hurt to give it a crack. Six months of studying, phone calls, etc, he got a line on it and contacted a friend who worked at a rubber company to produce a prototype. They did, and he presented it to IBM and won a contract, which grew into a business, etc. The point I'm making is that an open mind is substanitally more important than the chunks of knowledge that you're going to get from a degree. The best programmers I've met had college degrees or no college degrees. One had a master's in Speech Pathology (he ended up designing and implementing lease accounting systems). Another flunked out of college and traded his drum kit for a computer so he could play games (and ended up learning the system from the ground up). Another was driving a forklift in a warehouse and realized the picker routes the ordering system was generating were wrong or hugely inefficent (and ended up redesigning and eventually rewriting the picker system). In each case, they learned the skills they needed along the way. Having said that, the kind of maths you're looking at are good to have "in the toolkit", not so much for a specific skill, but because they give you a different way of looking at data, problems, solutions, testing, and implementation.

  102. The first is the math for programmers by Anonymous Coward · · Score: 0

    I took the "both" route. In my career, I have used the "discrete math; proofs, sets, algorithms and graphs" route far, far more often. It's easy to explain when I think about it. That set of knowledge gives me the ability to understand the relative merits and deficiencies of all those little tools our CS or CE program has armed us with. For instance, recall the plethora of algorithms you were taught to consider when faced with sorting a list? They all have problems and there is a best choice each time you face the issue. What if the list you will sort is backward, or nearly so, or even often nearly so? A bad choice, in that case, would be quicksort, which is the common sort routine in 'C' runtime libraries and most folks default. Learning why that is so has been invaluable for me and learning how to rank your options when faced with a programming problem can mean the difference between flailing and success.

    The other route will give you a good, broad, understanding of the math fundamentals for many domain specific engineering and science fields. It won't give you what you need, in general, in order to implement efficient algorithms solving the problems in those fields, though.

    If what you want is to be a good programmer, with the ability to work on most any kind of project, go for the discrete math sequence. If you have a specific subdomain you will be working in for the rest of your programming career, the other route may be a better choice.

  103. Take neither. Learn more OOAD. by Anonymous Coward · · Score: 0

    I've worked in startups, small companies and am currently a principal eng for one of the top 3 largest software companies in the world. I've worked on, designed, coded business apps and tech platform apps. I've built apps that require linear and non-linear optimization, data mining, (mathy-things) but have no formal academic math training at all. From my perspective the deficit in engineering isn't math, it's analysis skills- being able to come up with a sound, maintainable, robust design from top to bottom. There are a number engineers under me who have graduate degrees from MIT, Stanford, etc who are math geniuses but seem completely unable to think in a way that takes advantage of what OO has to offer. Their code is a tight knot of a thousand lines of loops and conditional statements which demonstrate their genius but ultimately is brittle, un-extensible and inaccessible to most people.

  104. If you struggle with Math... by tjwhaynes · · Score: 2, Insightful

    ... you have will have to break through that wall at some point.

    Maths is not a memory-based subject - you have to build the manipulation skills that Math requires. The only way to acquire that ability is to keep doing the maths problems until they start to click. You need to build a set of tricks to change problems from ones you don't recognize into ones you do. Be prepared to grind it out. Find a set of problems that increase in difficulty and hack at them until they make complete sense. Don't rush and don't attempt to do them all at once.

    You also need to find some Math tasks that are fun or interest you. If you are learning about complex numbers, go look up some fractals and look at the formulas. Picks some starting values and play with the numbers. Get a sense of how the numbers move around and a firm underpinning about what is going on. If you are doing calculus, play with the equations of motion and work out what a canon ball does under constant acceleration. Try modelling a N-body system of planets moving around in 2D on a computer. All the time, you will be building an internal model about the way that all this hangs together.

    Maths can be extremely rewarding once you grok it. But if you don't get past the struggle phase, it will never give you any pleasure and you'll miss out.

    Cheers,
    Toby Haynes

    --
    Anything I post is strictly my own thoughts and doesn't necessarily have anything to do with the opinions of IBM.
  105. Anonymous Coward by Anonymous Coward · · Score: 0

    don't forget to take a foreign language and design

  106. Math theory by chrysrobyn · · Score: 1

    As an electrical engineer, I often choose to automate my tasks through Perl hacking (previously Cadence SKILL). I have never wished I had spent more time in differential equations or euclidean space, but I have often wished my training included far more graph theory.

    Graph theory has proven interesting, for example, when it is necessary to hand wire a net. Sure, one wire is easy to do, but dozens are tougher. Sometimes vendor provided tools are not sophisticated enough to understand all the constraints that an engineer or even a technician understand, but I have often thought that a graph theory centered automatic scoring approach could take into account all the tradeoffs I consciously make.

    That said, every college graduate should be required to take at least two classes from the college of business or management. Time value of money, specifically, should be taught in high school and again in college. It's just that important. If half of America understood something about interest rates and risks, we'd all be better off. Except rent-to-own and payday loan places.

  107. As a Math Major with a CS Minor... by Anonymous Coward · · Score: 0

    My school requires us to take the second course you described only if you're considering a graphical track as opposed to a systems track. But it really depends where you feel you need the strength. From my own experience, if you've taken Calc 1,2 and Differential Equations already, the second course should be easy. In general (unless you only have one semester left) I would suggest taking both (but then again I'm a math major). If you feel your logic skills need reinforcement, take Discrete Math.

    As a math major, both of these courses were really interesting and as a CS minor I understood the applications and implications of both on computer science. I can't exactly list them unless you were to give me a specific problem or example.

  108. you need a mix of both by mzs · · Score: 1

    Things that will be useful from math for the practical programmer:

    combinatorics
    linear algebra
    analysis and differential equations

    Get as much of those as you can, if they get too hard stop.

    Some times statistics courses are best for the combinatorics stuff. You will run into problems that are shuffling things around efficiently, that is where that is useful. Some of the graph theory stuff though may not come from the lower numbered statistics courses though, but you should get enough of that from CS courses. The statistics will give you background for things such as RMSE that come-up in practical coding.

    The linear algebra and differential equations often come from math courses targeted towards engineering and physics students. Basically any hard problem that is solved by approximation comes down to an algorithm that is essentially a bunch of linear algebra. Then in many practical areas you need knowledge of things like FFT, PID, etc and the analysis as apposed to discrete math helps there. For a lot of these things if you just have enough knowledge so that you can understand some article, papers, and docs, then it is much easier to use libraries that others have written. That is why you should not fret if too much if the math gets too hard.

    Other than that you should get enough abstract algebra and other discrete math from your CS courses. Along the same lines, you should stay away from geometry, it tends to be abstract algebra in disguise, and algorithms courses will have what you may have wanted presented in a way that is useful for programming. Logic is another area that is not very applicable to the practical programmer. You should get enough in some CS courses and some proofs that use applicable techniques there as well as in the combinatorics.

    That said if you want to pursue CS, then all the above is VERY poor advice. Then you need as much logic and math as possible. You should love it too.

  109. The first, at least by Anonymous Coward · · Score: 0

    I'm a mathematician who develops methods for partial differential eqns, and who spends a hell of a lot of time programming. While the second course would be a great class for you to take (and you ought to if you can manage it at some point), the first will be *far* more valuable to a programmer/computer scientist. That's been my own personal experience.

  110. What's the rest of your curriculum? by qcontinuum · · Score: 1

    It really depends on what the rest of your curriculum looks like. If you're in a Computer Science program it is likely that you already have a required Algorithms course, usually with some sort of discrete math prerequisite. In that class you'll have the most important math concepts for computer science hammered into your brain. In that case, I'd take the vectors course because it covers math which, while very useful for a large number of fields, usually doesn't get covered in a CS curriculum.
    If, on the other hand, you're in some other discipline and are looking to improve your programming skills either for work or for your own enlightenment, take the discrete course. It'll do a much better job at improving your programming skills, and will expose you to some very interesting parts of math that most primary- and secondary- school curricula ignore.

  111. My experience by FalstaffsMind · · Score: 1

    is that if you aren't involved in low level programming requiring true applied mathematics, that you can almost always google whatever math algorithm you might need. Today's mapping applications often require some sophisticated geospatial mathematics, but you can almost always google up what ever you need.

  112. both if you can by kenshin33 · · Score: 1

    if you can't Discreet math is more suitable for programming. Differentials ans stuff like that is more for Electrical Eng ...

  113. It's changed. Get more number-crunching. by Animats · · Score: 2, Interesting

    I have a MSCS from Stanford (1985), and the field has changed since then. Back then, it was all about discrite math - number theory, combinatorics, mathematical logic, computability, and proofs. There was no number-crunching at all in the curriculum. Of course, back then, an FPU was an extra-cost option on a PC. I've actually done automated program verification work. But outside of IC design (where formal methods are routinely used), there's not much of that going on now. Now, number-crunching has come to the fore.

    In the 1990s, I spent several years on what turned into ragdoll physics for games. That's all about differential equations and number-crunching. I had a hard time switching over. But I finally got used to deterministic number-crunching. I have no mathematical intuition for it, though; I took it up too late in life.

    Now, the leading edge of computer science is probabilistic number-crunching. Take a look at Stanford's CS229 - Machine Learning class. That's the technology that's driving AI now, and it's working across a broad range of domains. The logicians are out, and the statisticians are in.

  114. Nuts to the second choice... by Anonymous Coward · · Score: 0

    Discrete math is 90% or more of programming. Von Neumann architecture digital computers (er.. what we all use) are inherently discrete entities. You'll use the first course every day of your programming career, whether you are aware of it or not. If you are only going to take one, then it has to be the first choice.

    You should do both though: know the math 'cause you'll run into it somewhere and its a b**** learning on the fly. If you go into robotics or control systems then the second choice will be useful, although a little FFT knowledge goes a long ways.

    eh, have fun!

  115. Discrete + Statisitcs by garytencents · · Score: 1

    Discrete is so useful for DB work and logic of programming flow but what I missed most and had to teach myself was statistics and finance. It's hard when you are in a meeting with a bunch of finance guys who couldn't lick your boots in a diff calculus class but think you're a moron for not being familiar with variance or amortization.

    1. Re:Discrete + Statisitcs by boristdog · · Score: 1

      I agree. Especially with the statistics.

      I have a minor in marketing which is pretty much all statistics (marketing, not advertising) and every freakin' day I see people misusing and bamboozling people with "statistics" which are totally invalid.

      If nothing else, knowing how statistics really work will help you analyze things (and I mean ALL things) much more accurately.

  116. Some suggestions based on personal experience by ebegoli · · Score: 1
    I will try to address your question with three personal views - one of an IT professional, one of a PhD CS student and one of an admirer of Math:

    As an IT professional with 15 years of IT experience I say that you do not need any Math beyond most rudimentary arithmetic and some statistics used in spreadsheets and reports. If you need to calculate something and to figure out formulas you will likely use Google or a mailing list. Even logic as programming logic is pretty basic and far away from predicate calculus that one studies in school. One may say that this may change but for millions of COBOL, VB and Java programmers nothing has changed about this in the past thirty years, except that you may only need less math now.

    As a PhD student in CS who *has* to be good at Math both for theoretical work and for the craft, so I have few advices to offer gathered from personal experience, learning and exploration:

    Most math ever required to be decent at Computer Science is concentrated in the (hybrid) field of mathematics called Discrete Mathematics. If your skills are strong enough to know this field well then you are set. In addition, you should probably be good at series and limits as they are fundamental to asymptotic analysis and at linear algebra.

    As an admirer of Math I can tell you that the most fundamental skill for Computer Science is Mathematics. True, fundamental Computer and Computational Science is Mathematics. To be really good at CS you need to be strong at Set and Number Theory, Probability and Statistics, Calculus through Differential Equations, Graph Theory and Linear Algebra.

    Regards,
    Edmon
    My blog entries on math and science are here.

  117. Take the easiest course by tarlss · · Score: 1

    Which is discrete math. Vector math is highly specialized. If you're not good with math by now, you're never really truely going to excel at it. This isn't a terrible thing, just have no illusions of becoming a John Nash. The fact is if you plan on going into Vector programming you're going to be using math ALL THE DAMN TIME. The fact that you even asked this question tells me that you probably don't want to do calculus for the rest of your life. That's fine. Be a happy person and take discrete math only and get on with your life. You probably won't be programming the latest and greatest 3d Engine vectoring programs ever, but programming basic graphics and the like and the fundamentals of programming will always be within your reach. In terms of game programming, you might not be contributing directly to the graphic/arts department, but you will have a solid shot at overall game logic, dialogue trees, game mechanics and pretty much everything else that isn't 3d modeling. Quite frankly 3d modeling is all done by artists with fancy packages these days, Vector programming is mostly useful for writing those packages, rendering apps, and hardware stuff. Very niche, probably not something that's too exciting unless you were into it at an early age.

  118. Fun... by OrugTor · · Score: 1

    I agree with the other posts that discrete math and graph theory come up more often in programming but the decider should be which will you enjoy. Any math will be helpful because of the rigor and problem-solving aspects. I took a graph theory course as part of a math major and rated it the most stimulating of all the courses.

  119. From the summary by perlchild · · Score: 1

    One class has "algorithms" in it, the other is general "hard math" good for just about anything. Discreet math, in general is better "Focused" at the needs of programmers, in my experience, as well. I'd say go with the first one. You're likely to learn the math basis for O(n) notation of algorithms and other computer science underpinnings.

  120. Graph Theory by swordgeek · · Score: 1

    My manager is a comp sci grad from a few decades back. He's one of the best computer geeks I know, and he continually says that graph theory is the most useful course he took in University. A programmer in our group also says that essentially graph theory is an abstraction of programming theory.

    --

    "People who do stupid things with hazardous materials often die." -- Jim Davidson on alt.folklore.urban
  121. Well, what do you think you want to program? by colmore · · Score: 2, Insightful

    If you're writing GUI programs, implementing business logic, accessing databases, and doing many of the workaday tasks of the grunts of the technology world, you don't need much math. Plenty of people have become very good professional developers with neither a degree in math or computer science.

    However, mathy programming is (to some people) more fun, and if you angle yourself correctly, it's harder and a more rare skill set, so you can get more money. Knowing math is also pretty important if you want to become a professor of computer science, which if you care more about vacation time and benefits than salary, is one of the sweetest gigs going.

    Combinatorics, probability, linear algebra, and graph theory are probably the most applicable to the widest range of problems. I'd put combinatorics at the top of the list, since it's going to be used to figure out the time and space complexity of any complicated data structure or algorithm. If you want to do anything with peer to peer software or networking, then graph theory is more or less essential. Linear algebra is all over any simulation of physics (games, control software for vehicles, pretty much anything with some sort of sensor or motor) as well as finance (there is mad money in financial computing, not as much as two years ago, but still a lot). Probability is good for figuring out things like hash collisions, average performance of algorithms.

    Number theory is used almost exclusively for crytography. Which is an awesome thing to work with. The NSA has a lot of good jobs if you're cool with that morally.

    If it was 30 years ago and more programming jobs required the actual manipulation of 1s and 0s, then boolean algebra and discrete math would be at the top of the list. They still do if you want to work with embedded systems, compilers, or anything under the umbrella of EE/CS.

    Numerical computing (like if you wanted to build MATLAB) uses all sorts of math, and I'm sure there's someone somewhere simulating quantum physics who's up to their neck in Abstract Algebra (which is a fascinating subject if you've got the stomach for some tough proofs)

    There's probably not much undergraduate math that ISN'T useful for writing code in some problem domain or another.

    If you want a good book on the kind of very useful computer math that isn't taught to undergrads nearly enough, check out Hacker's Delight by Henry Warren. It's a beautiful little book that will come in very handy if you ever need to write efficient C or assembly. And if you dig it then dive into the insanity mandala that is Donald Knuth's The Art of Computer Programming.

    --
    In Capitalist America, bank robs you!
    1. Re:Well, what do you think you want to program? by Anonymous Coward · · Score: 0

      (...)and I'm sure there's someone somewhere simulating quantum physics who's up to their neck in Abstract Algebra (which is a fascinating subject if you've got the stomach for some tough proofs)

      *raises hand* And please add high dimensional nonlinear PDE's, a shitload of statistics (fitting various models), and douse it heavily with geometry and functional analysis.
      Stir, let simmer for some time and you get condensed matter electron theory. Pay is $24k/year, you have to code in Fortran 95. No free coffee, either.

    2. Re:Well, what do you think you want to program? by colmore · · Score: 1

      Keep fighting the good fight, sir.

      --
      In Capitalist America, bank robs you!
  122. Discrete is mandatory; rest is useful by Anonymous Coward · · Score: 0

    You must take discrete math. If it isn't a requirement for the degree, it should be.

    Any other sort of math is useful. Every tool you add to your toolbox increases your programming ability to a greater or lesser degree.

    Without seeing the curriculum or the syllabi in more detail, I can only speculate, but "selected math chapters" sounds as if it might be some carefully chosen topics for programmers -- for example, you need to learn differentiation to the point of being comfortable with L'Hopital's rule if you want to be able to do much asymptotic algorithm analysis.

  123. Computer Science is Math by Anonymous Coward · · Score: 0

    Math isn't just used in computer science. Computer science is math. A computer scientist is a mathematician. Your first choice is basically a pure computer science course.

    The problem is many people believe that computer science = programming. That's like saying physics = smashing things together. True, you'll often do the second part if you're studying the first, but that doesn't make it the core purpose of that field of study. Now because most people want to do programing when they go into a computer science program, extra emphasis is usually placed on the practical programming aspects. But a person could actually study computer science without ever typing a line of code, and theoretically oriented computer scientists often do huge amounts of work without a computer.

    This is why a lot of people try to make a distinction between computer science, the pure mathematical aspects, from software engineering, the practical application aspects. Most people probably want to study software engineering, not computer science. They want to be like mechanical engineers, not like physicists.

    Maybe understanding this distinction will help you make your choice. If you're really interested in the mathematical field of computer science, go for the first class. If you're interested in the practical application of software engineering, go for the second. Though as others suggest, take both if you can. Also keep in mind that computer science is a different kind of math from things like calculus and differential equations. If you're struggling with classical math classes, you might still be able to do, maybe even enjoy, computer science math classes.

  124. Does math pay? by Kagato · · Score: 3, Insightful

    The programmers I know who do serious math, such as very complex DSP algorithms, game programming, complex statistics analysis, etc. get paid a fraction of what a I do for business/consumer web apps. That's not to say there aren't some brilliant folks out there getting paid a lot of money to do complex mathematical program, but they seem to be the exception, not the rule. Most of my work tends to be logic monkey stuff. Algebra I and II would cover it the stuff I do. I say current with tech, know how to talk to business folks, and get paid very well for my services.

    Even when I do things like insurance rating and underwriting application; the Actuary has already done the hard math and distilled it into a fairly very simple table of rating factors that are handled using simple arithmetic.

    It's kind'a sad to see Advanced Math only pays for a small percentage of programmers.

    1. Re:Does math pay? by Anonymous Coward · · Score: 0

      Of course math doesn't pay. Just look around you.
      My professors make a fraction of what some of my friends do.

      - A disgruntled graduate student

    2. Re:Does math pay? by Anonymous Coward · · Score: 0

      I second this. 10 years of web app dev (intranets and public facing sites) for various companies (small and large) currently gives me $90K per year. I could've gone into management years ago as well to make even more. But, as usual, there is more job security as the top Indian at your employer vs. being another chief.

  125. Discrete math is more widely applicable by MtHuurne · · Score: 1

    In my opinion discrete math is useful for almost any kind of programming. Being able to do proofs helps you ensure your programs are correct. Sets and graphs are useful data structures for many different application domains. I work as a software engineer and I don't think I could do my job well without discrete math.

    Math analysis is useful when dealing with physics or signal processing (lossy audio/video compression, for example). Vectors are useful for computer graphics and coding theory (crypto and error detection/correction). But it is domain knowledge, in my opinion, not a generic programming background. In other words, when programming in some fields you can't do without it, but in other fields you will never use it.

    In practice, the math analysis you need is often already solved for you. For example, for audio/video compression you'll most likely work with existing codecs (from a library or implemented in hardware) instead of writing your own. And it is not recommended to do your own crypto implementation unless you are an expert in the field. Of course someone will have to design the codec and write the crypto library, but unless you actually enjoy analysis enough to study it thoroughly for several years, that person won't be you.

    Note that any educational institution you may want to study at in the future might have a different opinion on this, or just require the "hardest" type to get only the bright and/or hard working students, so look into that before you choose.

    I did both, by the way, and in my experience discrete math relies more on insight and analysis relies more on practice. I got good grades, but only by doing a lot of exercises: I think my analysis homework took me almost half of my total homework effort.

  126. Exactly what I ended up doing by TrogL · · Score: 1

    I dropped a psychology course I knew I wasn't going to pass and was wandering around the music education building trying to find something else to take when I poked my head into a room full of computers - a whole mishmash of Apple II's, DEC terminals, punch-card equipment (yes, I'm old) and an antique IBM1130 mainframe. I was about to back out again when the prof waved me in, sat me down, then forced me out the door eight hours later 'cause he wanted to go home and have supper. I taught for three years then gave into the dark side and went back and got my certification in what I should probably have been doing in the first place.

  127. Discrete Math by Jerslan · · Score: 1

    At MO S&T (formerly UMR) Discrete Math with Graph Theory wasn't just a required freshman/sophmore level class, but was actually a Computer Science class and not from the Math Department. I would talk to your academic advisor (assuming your school has such a thing). It's their job to answer this sort of question and provide guidance.

  128. There is no choice here by Dr.+Winston+O'Boogie · · Score: 1

    I am surprised to see people even thinking this is a debatable issue. Discrete math and graph theory: hands down. Sure, if you are going to be doing signal processing and special-purpose projects, then differential equations can help, but what percentage of programmers actually wind up working in those areas?

    Most ACM-based CS curriculum do a big disservice to 95% of the students, but those where Discrete Math and Graph Theory are requirements do les harm than most.

  129. Logic and Statistics by foo+fighter · · Score: 1

    All of the suggestions that have been modded to 5 are too high level, in my opinion.

    The most useful mathematical tools to **anyone**, IMHO, are logic and statistics. (I'm not considering arithmetic or algebra "math" for this discussion.)

    Logic, or pure math, is often a second-year undergraduate course for math programs at liberal art schools in the US. It's often called "intro to math", "abstract math", or "number theory" (though strictly speaking number theory should be considered a subset of logic/pure math, but a good and fun course to take after a intro to logic course). It is important because it teaches you how to generalize and analyze problems in a rigorous manner, basically how to reason.

    Statistics should follow after logic since the tools learned in logic will be used to build the tools of statistics. Statistics is important because it teaches you how to rigorously collect, interpret, and model data, basically how to make educated guesses about what happened in the past what might happen in the future.

    These tools are what have made human progress so amazing, and serve as the foundation for the rest of science. While you won't explicitly use them every time you write code, they will be the bedrock that makes it possible to convert difficult, real-world problems into good code.

    Two additional suggestions: discrete math will help you understand how computers work at a fundamental level, and numerical analysis (continuous math) will help you figure out where errors will occur and how to deal with them. These are tools that turn you from a code monkey into a systems analyst.

    --
    obviously no deficiencies vs. no obvious deficiencies
  130. Stick to graphs! by porcho · · Score: 1

    I'd stick to the first subject, as it's related to graphs: you'll use them a lot, depending on the nature of the problems you'll face through your programmer life. Some classic computing problems can be addressed by graphs, and it's likely you find instances of these problems every now and then. On the other hand, IMHO you'll hardly ever use things like "math analysis; vectors, euclidean space, differentials" while programming...

  131. Whatever the Haskell guys based the language on... by Hurricane78 · · Score: 1

    Because in terms of math, cutting edge theory, and elegance, Haskell just blows everything I’ve seen out of the water.

    Try #haskell, to get you started on the theory. But don’t be surprised if it feels like another planet, when they make jokes about The One True Monoid, and Unlambda. ;)
    (The are also much friendlier with mathematical questions, than the #math channel, where every free thought or idea is punished with anti-troll trolling, aggression, hate and the banhammer, and socially acting even remotely like a human is taboo. ;)

    --
    Any sufficiently advanced intelligence is indistinguishable from stupidity.
  132. start with discrete, then take the other by fusiongyro · · Score: 1

    Discrete math is "easier" because as someone who has written programs, you already have an intuitive understanding of some aspects of formal logic and set theory and the higher level stuff in that class is within reach of where you probably already are. If that class has anything to teach you, it will be immensely useful, in a fundamental way. Nobody manages to be a good programmer without understanding at least some of that stuff but a fair amount of it comes to you if you program. If it were 1870, that material would be just as hard to learn.

    The other material is probably great and would be useful to many programmers but I had no use for any of that stuff. It's certainly a bit removed from pure CS which adds that mystique.

    That said, there's no total ordering over knowledge. Take both. And read some EWD's while you're at it.

  133. Not just for games by Anonymous Coward · · Score: 0

    Other than the obvious "take both" I would suggest the second. Understanding that stuff is NOT just useful for games programming as many have stated -- it is a gateway into all of the mathematical sciences and will change the way you understand, cast and reason about technical problems. The important parts of the first are relatively easier to pick up by self-study and the rest isn't all that useful for solving "real world" problems. Yeah, computers are discrete, but double precision floating point is good enough to be worth getting comfortable with real numbers.

    My only reservation would be that "Selected Math Chapters" sounds a bit dodgy. A lame lecturer/syllabus could make it harder than it needs to be.

  134. Math, Smath. by DarthVain · · Score: 1

    I got a CS degree, and I was required to take a whole bunch of math courses. Which I think is bunk. I mostly work with information systems as a disclaimer, but other than your usually high school math, the only stuff I use even remotely regularly is perhaps 1st and 2nd year statistics (which by the way is boring as hell, with possibly the exception of probability as you can use it for gambling). The rest of it, I mean it is somewhat useful as back ground material, but I doubt I have ever used Calc or Linear Algebra for anything. I took Binary Algebra also, and while interesting, it was more computer science than it was math. Most the math that I took I would say has been useless to me, and I could have better benefited from additional CS courses or perhaps the ability to take additional electives to generalize a bit more.

    CS unless you are doing it for academia, or a really hardcore field, really depends on what you are doing with it. If I hiring someone to write code for a physics program, having some advanced math might be useful, however having a more advanced understanding of Physics would likely be even more useful. Heck having a Philosophy course on logic might help some people more. Anyway I think all the math requirements they have for CS are a bit much in most cases. I know I feel I could have saved myself a lot of work in university (math and I were not friends) and directed it elsewhere more useful.

  135. Definitely discrete structures, maybe the selected by MobyDisk · · Score: 1

    In every school I went to, discrete structures is a CS requirement. Don't graduate with out it. But programming is about solving problems, so the question you need to ask is "what kinds of problems do I want to solve?" Then, pick a math or science that matches that.

    If you want to use programming to solve physics problems, than the "Selected math chapters" sounds useful. The vectors and euclidean space sounds great for video games or robotics.

    But let me ask this: if math is not your thing, would IT be a better major? Computer science is a science, and science is math. In the past, computer science was programming, but now it is far more than that. Many CS students approach the upper-level CS classes (algorithms, finite automata, etc.) and find that they really wanted to administer a network, write Python code, and make web sites. CS may not be the best place for that.

  136. No Shortcuts by happy_place · · Score: 1

    Take a lot of math. If you end up programming a digital filter, you'll be glad you had Taylor Series in your Calculus classes. If you end up in Computer graphics, then Linear Algebra/Matrix Math is useful. If you end up doing digital electronics, then Discrete Mathematics/Boolean Algebra is useful. Heck, just to learn about rounding errors, a good Numerical Methods Course is a great course for computer programmers when you're approximating the analog world with finite floating point values. There are mathematical simulations for modelling everything from human behavior (Game Theory) to Wave equations, Partial differentials, Statitistics, and Probability. There's no shortcut. Don't think that because you're taking a math class it has no application. Don't shortchange yourself, get as much math as you can keep up with. Even logical proofs have their place (Formal Verification) in computing.

    --
    http://www.beanleafpress.com
  137. Math for computer science by EdMcMan · · Score: 1

    The second class will not be very useful to you. I've heard this rumor propagated time and again, and no one can ever give me a convincing argument why such a class would be useful, other than for graphics and numeric computation.

    The first class would be much more useful. Algorithms is the more or less the study of the math of programming. If you are seriously considering programming, you should learn this topic in great detail. Judging by the number of topics covered, I am assuming this is a lower-level course. You should definitely take at least one low-level computer science theory course!

    One other area you may want to look at is logic -- look for Dijkstra's book "A Discipline of Programming".

  138. Information Theory by Anonymous Coward · · Score: 0

    You should probably take a variety of intro math classes and see what gets your interest. I'd definitely suggest Information Theory, which is a great mixture of CS and Math and an excitingly young field to be working in.

  139. Discreet by wonderboss · · Score: 1

    Your description of 'Discreet structures with graph theory' sounds like things we use every day. 'Selected math chapters' sounds more useful for numerical analysis programming. If you struggle with math, numerical analysis is probably not the field for you.

    --
    more cowbell
  140. Math and CS by Spazmania · · Score: 1

    As a software developer, I've used little calculus-based math since college. Unless you want to develop software in a specific problem domain that uses a lot of higher math, your encounters with math beyond Trig will be as sparse as a carpenter's.

    That having been said, since your degree probably requires more math I would steer towards graph theory and discrete math. Stay well clear of differential equations. Graph theory has some relevance to computer networking while differential equations a) damn near killed me and b) doesn't buy you anything in CS that I've been able to figure.

    --
    Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
  141. Psychology Instead Of Math by Ukab+the+Great · · Score: 1

    A lot of writing programs for other people to use actually involves getting into their heads and understanding what they're thinking, as well as accepting the bizarre way they sometimes think.

    When someone says a feature in a software project you inherited doesn't work, before you spend 100 hours debugging a feature that you're not able to find anywhere in the code, it's helpful to understand how the brain works and be open to the possibility that the feature that everyone swears was there only exists in a constantly reconstructed human memory.

    If you have problems with math, as I did, you might want to consider forgoing the classes and just buying a book and teaching yourself at your own rate of learning. The ability to pick up a book and teach yourself is a very important skill for a programmer to have.

  142. Do discrete maths. by jotaeleemeese · · Score: 1

    Is what you are most likely to need.

    Funny, in Mexico I did both. UNAM rules yet again.

    --
    IANAL but write like a drunk one.
  143. Engineering vs CS by RandCraw · · Score: 1

    Your math knowledge depends on two questions: 1) What domain do you intend to work in (continuous or discrete), and 2) Do you plan to do research.

    If you might deal with data coming from a continuous domain like the Real World, you need linear algebra, calculus, and statistics, i.e. engineering math. This spans professions like signal processing, image processing, graphics, data mining, machine learning, simulation, financial engineering, and AI (where you need to recognize and manipulate complex patterns).

    However, if your data will arise entirely from discrete domains, i.e. the mainstream world of computing, you'll still benefit from probability (to understand and characterize the range of variation in input data), but you won't need more than the first term of calculus (differential) or linear algebra, and probably not even statistics. This domain covers 95% of the work of programming: web technology, databases, networking, GUIs, mobile, etc.

    In any case, you *will* need discrete math (to understand the theory of computing). And in no case will you ever use real analysis (the theory of calculus).

    If you want to do research, plan to take more math regardless (like queuing theory and statistics). But which math you need will depend on which area of research you choose.

  144. Dilettantes by Antisyzygy · · Score: 1

    In my experience, alot of computer science majors are dilettantes. They don't know much about math, but know tons about programming languages and computers. Many mathematics professors I deal with just laugh at many computer science majors for their misguided efforts due to lack of theoretical knowledge. There are exceptions to this as I have met some incredibly intelligent and knowledgeable computer science graduates, but the math requirement for computer science majors at many universities is a joke. I recommend as a minimum taking up to vector calculus, discrete math, advanced linear algebra, numerical methods, probability, statistics, as well as a couple senior level advanced math topics related to your field. An example for advanced topics would be Fourier analysis, Wavelets (related to compression and image processing), as well as Numerical Analysis. Any differential equations as well as topology wont be incredibly useful as a computer science major until you are a grad student. If you are wondering about my qualifications, I am a math grad student working as an RA on image processing and facial recognition. I program in C and matlab. As far as the question, definitely take both classes. It may be hard but you will know so much more.

    --
    That brings me to an interesting point, / . is just "the ramblings of socially-inept, technology-literate news-mongers".
  145. Discrete, Graphs, Combinatorics - Definitely by dthanna · · Score: 1

    Graph theory underlies every datastructure ever designed - link-lists, trees, etc. It is also how you build the schema map for a RDBMS and remove redundancies through normalization*. It is also needed for modeling program, data, network and other sorts of 'information flow'... including recursion.

    * Yes, Dorothy, most databases in the business world are RDBMS as most systems do not benefit from the obtuseness of object based DBs.

    Discrete is very handy when you have to convert from one number space to another. Not all systems are UNIX/ASCII based. I do a lot of work in the print industry - the core of that is still built on OCTAL character representation and a great deal of EBCDIC.

    Combinatorics - Basically, how do you count. Again, you need this to know if your elementary math is giving you the correct numbers. A lot of things have been automated (BCD and the like), but that doesn't mean you will be working on a 'new' system when you graduate. There is still a lot of COBOL out there. It's not sexy, but it pays well and is generally a stable gigl

    I would also suggest you take a course on Linear Algebra. Again, I'm in print and so use it more than most, but any time you need to lay something out in 2-space (e.g. a web page) and you need to translate that space to another (e.g. iPhone) LA will come in handy to fine tune the output. ... As well as a calculus based course on Stats. With today's data sets, analysis is no longer being done against the entire set, but a sample of the set. How to set up the sample and what sort of distribution you use is different than for algebraic based stats.

    Calculus, IMHO, is only good for the rigor unless you get into engineering, graphics or physics. It's still good to have.

    Lastly, Take at least two classes in communication. One on public speaking (your in meetings a lot and have to learn to communicate what you know to someone who doesn't - e.g. your boss). The other on writing - you will be writing a lot of system documentation, proposals, e-mails and the like. Other than your core CS/Math, I would say to have very, very solid communication skills. They never hurt.

    Enjoy!

  146. discrete math or both by awilden · · Score: 1

    Of course discreet math would mean that it's subtle and below the radar, which is an interesting concept but probably not worth university credit.

    If you have to choose between the two, then discrete math is really the best one. As a long time programmer and CS professor, the basic concepts of graph theory and propositional logic are probably the most useful subfields of math to computer scientists, especially when a class like that includes stuff about functions (i.e. prove/disprove that if f is 1-1 and g is 1-1, then (f o g) is 1-1). Even if it doesn't, you need to understand deMorgan's law at a deep level, and that sometimes a complicated logic expression can be simplified down to nothing if you just think about it. The concept of a graph is incredibly useful for representing data of all kinds and even if you don't remember the relationship between the number of edges and vertices in a tree, seeing graphs once will give you a really useful abstraction that handles heaps and heaps of real problems you'll encounter as a professional.

    People tend to fear and/or discount a class like your discrete math one because it involves proofs, and few programmers use proofs in their programming. But IMHO, the point of teaching proofs is not that programmers should be good at proofs. It's that writing proofs requires you to learn a system with a completely new set of rules, and apply those rules very carefully to achieve your result (aka, teaching you a new kind programming and helping you hone those skills so when your boss drops a new language manual on your desk and says you need to be programming in it in 48 hours, you stand a chance of succeeding).

    Also, doing (real) proofs requires you to think really deeply about problems. I tell students mathematicians do proofs to 1) show something is always true, 2) learn something deeper about the problem itself. Both are useful in programming, but #2 is especially so, because that sort of thinking is what enables a programmer to keep track of the forest for the trees. When you're debugging annoying bug #257, you're more likely to notice that this larger solution will solve #257 plus a whole bunch of other annoyances at the same time.

    As many others have said, the vector math is great for graphics and signal processing. But I think the best thing you can get out of that class is an intuitive understanding of the concept of a vector-space, because if you get that, it's useful across a far wider swath of programming than just graphics and signal processing. Unfortunately, you don't often learn that, because in a standard linear algebra class what you learn about vector spaces is proving their rank, their null space and a whole bunch of stuff that I don't think has much application even when you're doing graphics and signal processing.

    Finally, since I'm already on my soap-box, I'll point out that you might actually enjoy discrete math in spite of your dislike of math. All the math you've likely seen so far is what mathematicians consider Analysis. The other two big branches of math are called Algebra (you'd see a bit of this in discrete, but it has nothing to do with what you learned in high school), and Geometry/Topology (which doesn't have much to do with what you learned in high school). I never enjoyed Analysis that much and there was some serious arm twisting to get me to try the other two branches. But I found out that Algebra used most of the same thought processes that I'd already developed with programming, and it took my programming to a whole other level, not because I often directly used that kind of math in my code, but because it helped my brain think in a more abstract way which let me tackle harder problems in code than I could before.

    It's like lifting weights -- I don't think I often do things on a day to day basis that could be classified as a military press or a leg curl, but I know that if I life it just makes me a stronger and healthier person and that's good enough for me.

  147. Matrix Logic by Darth+Cider · · Score: 1

    Do yourself a favor and check out the Matrix Logic books by August Stern. I don't understand why the simple concept of logic as a vector process (a matrix process) isn't better known. I regret even mentioning the words vector and matrix, lest they put people off of understanding how simple the idea is. Conceptually deep, though.

    Matrix Logic will completely reshape your head. I hope you truly want what you asked for.

  148. Combinatorics and graph theory.... by magbottle · · Score: 1

    Are most useful, in general, for comp-sci (compsy?, har)

    Go for 'Discreet structures with graph theory' . Or both.

  149. Whichever makes you prove things by Penguin+Programmer · · Score: 1

    As a grad student in CS who has also worked in industry, I've never directly used any but the most basic of math (matrix multiplication etc.). The reason math is important for programmers is that it teaches you to think. It doesn't really matter what kind of math you take - as a programmer you're unlikely to ever use it directly, and even if you do you really only need to know the practical aspects. What's important is that you take something that makes you prove things and think analytically. Those ways of thinking are what is important for all computer scientists and programmers.

  150. Discreet Math by Derosian · · Score: 1

    Took two semesters of it when I first started college, if you think of yourself as a logical or analytical person you will find it incredibly fun.

  151. Do all three - and some more! by mattpalmer1086 · · Score: 1

    Learning math & OOAD are not mutually exclusive choices.

    I do agree with what you say to some extent though. I've seen code written by math "geniuses", and it often looks as you describe. Somehow they appreciate the elegance and beauty of mathematical theory, but fail abysmally at translating that into practical code that shares the same sort of beauty. In fact, this describes my current software rescue project quite well.

    But I would advise learning math, and OOAD, *and* other programming disciplines like functional programming - objects are not the right choice for all problem spaces. And do get into the beauty, elegance and power of all of those things!

  152. Courses to take? Hmmmm (thoughts of an Autodidact) by flajann · · Score: 1
    I have never had a problem with mathematics, as is evidenced by the fact that I managed to teach myself calculus by age 13. I can pick up mathematics quickly, and have dabbled in a wide variety of math topics from matrices to advanced calculus to number theory to fractals and chaos theory too... even touched a bit on lie algebras. I have yet to find my limits.

    Mathematics, unlike the poster, was my first love. My interests in computers grew directly out of my love for mathematics.

    Alas, not everyone is so predisposed. I have never taken a "math course" outside of high-school, and was bored to tears by what the high-school had to offer. Oh well.

    Enough of me tooting my own horn, the math courses you choose to take, beyond the fundamental stuff like logic, set theory, and discrete systems, should reflect your eventual goals with your computer science/software engineering career. If you want to delve into, say, bioinformatics, you will need some stuff, for instance, with combinatorics, just for starters. If you are going into physics, then obviously all the calculus and vector courses you can get your hands on will be your focus. If you just want to work in boring IT departments or deal with databases, then you'll need some database theory - related courses, etc.

    If you want to be able to do anything and everything, then go broad and deep. But you really have to *love* mathematics. Math can be extremely fun; the way it's typically taught would lead you to believe otherwise. It all depends on the teacher. Forget high-school math -- totally useless.

  153. A Professor speaks by Anonymous Coward · · Score: 0

    I am a Professor in a strong, research-oriented, Computer Science Department. I think that discrete math (proofs, sets, algorithms and graphs) is essential material for a computer scientist and - if this is a straight choice - would be the course I recommend. Having said this, we are currently radically rebalancing our own curriculum to put much more emphasis on more 'conventional' mathematical analysis and, in particular, statistics. This is what applications require and more significantly is relevant to problems of scale. I think 'internet-scale' problems require a different approach and different maths.

  154. Probably won't matter by LinuxFreakus · · Score: 1

    It won't matter which one you take, whatever job you end up doing, you will be solving specific types of problems based on the type of work. If you are smart you will become skilled at those types of problems just by working with it all the time. College is not there to teach you everything you need for your future job, it just isn't possible and employers know this. Companies look for smart people who have the aptitude to learn as both technology and your job requirements evolve.

    Trust me, I barely passed my high level/advanced math course, but when it comes time to put it in practice in real life rather being stuck in an academic/testing environment, it suddenly makes a lot more sense when you actually know what it is useful for. The grades you get in classes typically have little to do with how you will perform in real life unless there are other reasons such as irresponsible/self destructive behavior which could make you difficult to employ. The most important thing is that you "get" programming. I can't tell you how many otherwise intelligent people there are out there who just don't "get" programming, it almost seems like it is a genetic trait.

  155. Calculus, Linear Algebra, Systematics and You by Anonymous Coward · · Score: 0

    Computer geeks are a varied bunch. Since I have been in the field a while (and grew up as an aero engineer first, biologist, and software architect), this may be useful.
    Depends on what you think you will do.
    Calculus is always useful...it is the language of the sciences, and explains the basics of any problem set.
    Ditto for Matrix+Linear algebra. Vectors and matricies are live and die for any programmer.
    If you steer to hw/embedded work, add in discrete math/binary math.
    If you head into software architecture or AI/Neural networks, add in a course in math of systematics...relationships between lines, etc.
    You may also need other math for various subject areas (Diffi-Q, etc.), but these are the basics.
    Just a thought...

  156. Discrete FTW! by crankybrad · · Score: 1

    I know I personally use the information I acquired in my discrete math class on a daily basis. Along with the day-to-day use, taking the discrete class really expanded my thinking and (I feel) ultimately made made a much better coder. But like most of the other posters are saying, take both classes. While earning my degree I was required to take both, and actually end up using the vector stuff on a fairly regular basis too (not as much as discrete, but some).

  157. Its Got to be the Discrete Course by onuhwt · · Score: 1

    As a recent CpE graduate who had to take classes similar to both, I would recommend taking both of these, but if you can only take 1 of these, you need to take the Discrete Class. It will help with a lot of the advanced logic required for complex programming. Discrete would be especially useful if you are interested in Artificial Intelligence.

  158. Intuition by the+cheong · · Score: 1

    How strong is your intuitive pattern-matching? Discreet mathematics as a direct, explicit application of math in computer science. Meanwhile, real/complex analysis is abstract, and requires _you_ to make intuitive connections between its concepts and _your work_, in order for it to become applicable and useful. (If you know for a fact that math isn't your strong point, then go with Discreet.)

    Furthermore, don't think of the two as being exclusive! They're not separate. Discreet mathematics is a _subset_ of real analysis. When you jump right into discreet mathematics, you're just skipping lower-level details of analysis.

  159. My Vote by dcollins · · Score: 1

    College math lecturer, former game programmer. Sounds broadly to me like the first class (discrete structures) will be a bit better for you. Yes, the second class might be better if specifically you expect to focus on 3D graphics programming. (Note: I had a year long sequence in computer graphics in college but even then never actually used it in my two game programming positions... did more game logic, AI, audio, networking, etc.)

    Just my take.

    --
    We know where leadership by an anti-intellectual "strongman" who scapegoats minorities and likes boisterous rallies goes
  160. If you don't know... by geoffrobinson · · Score: 1

    If you don't know what you want to do, take as many courses as you can so you don't limit your options down the road.

    --
    Except for ending slavery, the Nazis, communism, & securing American independence, war has never solved anything.
  161. which one... by hesaigo999ca · · Score: 1

    >Selected math chapters' (math analysis; vectors, euclidean space, differentials)
    The fact that vectors are in here, is great, and should be looked into, as well as anything with logical circuits and boolean algebra.

    I once was able to use boolean algebra to create a flowchart of a regular conversation between 2 people (albeit it was in a controlled format) which lent much to analyzing people's responses based on their emotions at the time....sort of almost using words to figure out if they were telling the truth or not...(actually "and not" ....get it...!)

    The fact that they guy suggesting which course to take was not a hardcore programmer with years of exp. and many years of proof reading people's work or code. You can tell the real mathematicians when you read their code.
    Keep in mind, also that you are embarking upon a field which not only can totally enthrall you, but consume you as well, to the point of making you want to leave programming altogether.

  162. Captain Obvious by Anonymous Coward · · Score: 0

    I'd start with "Basic" math, to be sure.

  163. Depends on what kind of programming you want to do by cowbutt · · Score: 1

    The 'discreet structures with graph theory' course sounds like it'll be more use for things like systems programming, databases, compilers and the like, whilst the other sounds like it'll be more use if you want to go into graphics or scientific programming.

  164. Statistics by wfolta · · Score: 1

    Class #1 sounds like the better of the two, and a better foundation for programming itself.

    But I'll also add that I've been studying a lot about machine learning lately, and vectors/statistics are absolutely necessary. (And I've also found statistics to be the most counter-intuitive math I've been exposed to... it's taken SEVERAL exposures to it over the years to become reasonably comfortable.) And it's also quite important if you're doing any kind of research or if you're trying to KNOW whether method B actually improves on method A or not.

  165. absolutely no relevance to programming by Anonymous Coward · · Score: 0

    mathematics are in no way in real world related to exquisite or plain programming. its got to do only with binary or if you will silicon manufacturing.
    never ever mathematicians can realize what the hardware does, or an operating system is, built functions for it, and put then in good use in an application.
    if they wonna play with formulas, tell them to use openoffice formula and leave the computers to engineers ! not even the CS majors.

    regards.

    ps I'm too old for this....
       

  166. Both by rjolley · · Score: 1

    Might I recommend both? For me the second course you talked about is the easier one, but I absolutely loved my discrete math course. If anything, both courses teach you how to approach and solve problems. Good skills to have for any programmers. While you are at it, if it isn't already required I'd suggest taking some physics for scientists and engineers as well as some calculus courses. Trust me, I was in your shoes a few years back and won't say it wasn't hard, but it was definitely worth it.

  167. Boolean Algebra by EvilBudMan · · Score: 1

    Of course you need that, but it's hard to get into anything else when, oh I already have a routine for that and it will work every time. Matrix math at some point you will need along with the obvious or is it obvious to begin with? I suck at math but not so bad that I can't get the right answer out of a computer except maybe the "theory of everything" and multiverses and things like that. I think you need chalk and a chalk board for that.

  168. Re:Physicists? Yes, really. by yoghurt · · Score: 1

    If I had mod points, I'd mod you as a troll.

    I am a systems engineer (no, not a computer tech, the other kind) and I am sick and tired of all the belly aching from software when you ask for even the simplest linear algebra. If I want to say, multiply a matrix times a vector, they want me to spell it all out for them. Asking for solving a linear set of equations using Guassian elimination or Cholesky &c and it is suddenly a major million dollar undertaking. God help you if you want something advanced like singular value decomposition.

    No matter that libraries like LAPACK for this have existed for over 30 years. Open up Golub and VanLoan. Why should I need to re-explain this stuff?

    The problem, as I see it, is that there is insufficient overlap between domains. The systems people could do with learning a bit more about software and the software people need to understand the domain. Software is not just software. You should see the crackpot monstrosities that are written from insufficient understanding of the higher level structure. I'd rather have the engineers write the numerical/math code and leave the user interface to the pure software guys.

    No doubt, BLAS and LAPACK are kind of awkward when used from C or C++.

    --
    Yoghurt
  169. Learn vs Practice by Shotgun · · Score: 2, Insightful

    Math isn't just "learned". It is "practiced". Much in the same way that you don't just "learn" to throw a 90mph fastball, you don't just "learn" to do math. Math is a set of techniques, combined with skill that must be developed.

    A large part of math, especially that done in high school and college, is just exercise for the brain. There may be some practical application in the future, but the vast majority of people will never have a need to take a derivative any more than they will have the need to throw a 90mph fastball.

    What they will have a need for, is the mental capacity to think methodically, logically, and mechanically about a problem. I cringed when my son's college writing professor said that "Luckily, journalists don't have a big need for math." That sort of braindead mindset is why we have reporters not bothering to question how federal healthcare will ever save money in the US. Journalist are not trained to wrap their minds around logical concepts like "If A=B, and B=C, then A=C". Those neurons have not been exercised.

    The goal of taking the math class is not necessarily to learn a specific set of mathematical techniques. It is as much about developing the mental capacity as anything else. When you start developing, it will be very difficult to cope if you haven't developed those mental muscles.

    --
    Aah, change is good. -- Rafiki
    Yeah, but it ain't easy. -- Simba
    1. Re:Learn vs Practice by brian12184 · · Score: 1

      I completely agree, most people fail to realize the importance of exercising their brains in this fashion...honsetly, this is why I stayed as far away from classes where I was required to memorize definitions, regurgitate them on the test the next day, then flush the toilet. I dont see any point to memorizing facts, afterall what are they testing? Your ability to grasp the material or your ability to apply pneumonics and get a decent grade? This is why students become frustrated with math; there is no conceivable way to memorize every problem in your textbook the night before a test, you need to understand the CONCEPTS and TECHNIQUES in order to have a fighting chance.

  170. It's ALL Important by brian12184 · · Score: 1

    The byproduct of learning math is that teaches you how to teach yourself how to learn, how to think and how to solve problems, something you do impicitly many times every minute you are a programmer. While learning Calculus, differential equations, linear algebra, etc... may not be important on the surface, it will DEFINITELY go a long way to helping you in these areas of critical thinking, make new technologies easier to learn and new styles of programming easier to decipher because you have the training to be able process difficult problems on your feet in a top-down, analytical fashion. I find that the training I received in Mathematics (was a double major in math and comp. sci) was more important to my long-term growth as a developer and team leader.

  171. Ummm...isn't CS applied mathematics? by multimediavt · · Score: 1

    Last time I checked, computer science *WAS*/*IS* applied mathematics. If you don't like math you should probably consider a different career, or be ready for a long hard road of slogging through a career while the more mathematically inclined advance right past you in the market. I started a software development company last year and I will not hire anyone who is not more proficient (or current/fresh) at mathematics than I am, and I'm pretty good.

    If you really, really want to be a developer I'd say to suck it up and take BOTH classes. There's no such thing as too much math if you are a CS major, or just someone that wants to be a developer.

  172. Two kinds of math by Alsee · · Score: 4, Insightful

    This This is a gross simplification, but there are sort of two kinds of math. There's logic math, and there's numbers math. It sounds like the the two courses roughly divide according to this line. When most people hear math they generally think of numbers math.

    If you are a programmer then you do already love the first kind of math, and it does love you back. It's the second kind of math, the ugly numbers math, that scares you.

    Math is not merely "important in programming", programming literally is a specialized form of math. Most people don't realize programming is math because because people think of "numbers math" when they hear the word math. Everything software is and everything software does is "logic math". The math of manipulating complex information, the math of manipulating complex logic relationships.

    The math of manipulating data.

    'Discreet structures with graph theory' (discrete math; proofs, sets, algorithms and graphs)

    Programming extensively uses sets, discrete math, and graphs to organize data, to understand data, to manipulate data. A program is literally nothing more than one big algorithm built up out of several smaller algorithms. And in a deep sense, programs and proofs are the exact same thing. There is a math proof that every program can be directly translated into a proof, and every proof can be translated into a program. They are fundamentally identical things with identical logic and identical properties. Reading proofs and writing proofs uses the same precise step-wise logical analysis as reading and writing software.

    This course is the math that is the very essence of programming. It's the sort of math and logic that you already you already use every day as a programmer without realizing that it is math - the sort of math you *will* use every day in the future as a programmer. The insights and logic skills in this course will directly advance your every day skills and capabilities as a programmer.

    'Selected math chapters' (math analysis; vectors, euclidean space, differentials)

    There are things that can be useful *in* a program, but they are not really useful *to* programming. For example if you want to handle or simulate physics-systems, falling rotating moving objects, manipulating 3D objects and graphics, then vectors acre extremely important, along with good intuitive spacial skills. The math analysis and differentials are generally even more rare and specialized. Computers are fantastic at handling that sort of stuff, and sometimes you really need an advanced math-programmer to do literal "rocket science" aerodynamics and orbital mechanics, but most programmers will never need to touch the stuff. You don't need scary-math analysis or differential equations to program an operating system or a webserver or any normal business application.

    If you're not doing that sort of sciency-math programming, then you'll never use that stuff. If you're not working on that stuff but you do come across a case where you need to pull in a small piece of that stuff, you can usually just copy-patse in the ugly equation you need even if you don't have any grasp of the math behind it.

    The biggest issue there is if you want to do 3D graphics manipulations. A lot of those math equations can be copy-pasted in semi-blindly, but you will seriously choke on that sort of work unless you are good with vectors and have a good intuitive spacial skills.

    So in short you definitely want to take the 'Discreet structures with graph theory' course. It will make you a better programmer. The other course merely allows you to specialize as a mathy-sciency-programmer. Take both if you're up for it, but that sort of mathematical programming is not everyone's cup of tea. You can get by fine without it.

    one assistant told me that it would be more useful for a programmer compared to the first subject. Then again, he's not a programmer.

    Exactly - he's not a programmer.

    He sees the course expanding your ability to write programs

    --
    - - You can't take something off the Internet! That's like trying to take pee out of a swimming pool.
    1. Re:Two kinds of math by Anonymous Coward · · Score: 0

      I'm the one who posed the question (Anonymous Coward), and just wanted to thank you for your enormous response.
      I'm not doing 3D stuff (and currently am not planing to), but many people mention signal processing and I do like - for example - compression.
      In any case you and many people here have help me get a good idea of what the "two maths" are for. I'll take some more time to think about all of it.
      The choice is not really a dichtonomy for me, I have the latter subject described in the following semester, and the former in the semester after it. HOwever, I can transfer the latter after the former, and I think I'll do that and decide if I want to enroll it after auditing it. Discrete math (and graphs) I will most likely enroll.
      Thanks again, Peace be with you.

    2. Re:Two kinds of math by Anonymous Coward · · Score: 0

      This This is a gross simplification, but there are sort of two kinds of math. There's logic math, and there's numbers math.

      As a mathematician and programmer, I just want to throw my 2c in here and outline some the various types of math that are out there, and how they relate to programming

      Firstly, and most nebulously, there's graph theory. Graph theory is really useful for manipulating problems when you have a set of object and various "connections" or "relations" between them. You might want to schedule workers into shifts, figure out how many routers your network needs to not collapse, etc. These are graph theory problems.

      Next there's Vector Calculus, Differential Equations and Dynamical Systems. If your code ever interacts with or simulates any physical process you will *need* to have a good understanding of DEs.

      Then there's Linear Algebra. This is the foundation of computer generated graphics and you will be very, very lost if you try to do any graphics programming without this. If you've ever seen things like a 'matrix' or 'vector', that's linear algebra.

      Calculus is relevant to programming in two different ways. In more advanced studies, calculus develops such tools as the Fourier series, which is what mp3s are based on, and it also gives us the study of the limit which is what we use when we compare the big-O runtimes of different algorithms.

      Group Theory, Rings and Fields, and Elementary Number Theory are the foundation of coding/checksumming, (lossless) compression and encryption, as well as a variety of miscellaneous algorithms. It's also the foundation of a lot of bar tricks like recalling the day of week given a certain date, or those calculation tricks where you get someone to pick a number, perform some arithmetic operations, and then "predict" the answer they get. Good fun to be had.

      Advanced Set Theory studies might seem tempting, but unless you really want to know how to construct the integers from a series of base axioms it's really not that much use for programming. You'll want to steer clear of this and concentrate more on applications of set theory, which are the foundations of database operations.

      Numerical Methods is vital if you ever get anywhere near a floating point number of any significance. The study of this material will provide you with the tools you need to not only find approximations to solutions to troublesome equations very quickly, but will also give you the tools needed to analyse and track the errors in those approximations.

      Combinatorics is, literally, the study of counting things. If you want to know how many different passwords you can make with 16 characters, 3 of which are uppercase letters, and 2 of which are non-alphanumeric symbols, such that the same character is never repeated twice in a row, combinatorics will give you the answer.

      Finally, while we're at it, it's important not to overlook Statistics. If you ever need to measure something such that you get a different reading each time, Statistics will separate the signal from the noise. If you ever need to automatically group and categorize something, Statistics is there for you.

      There's a whole world out there to explore in math, and it's not nearly as frightening as it first appears, looking in from the outside. Challenge yourself, and you will be rewarded.

    3. Re:Two kinds of math by Anonymous Coward · · Score: 0

      There is a math proof that every program can be directly translated into a proof, and every proof can be translated into a program

      I wonder how to translate this proof into a program... :-)

    4. Re:Two kinds of math by Alsee · · Score: 1

      As a mathematician and programmer... it's not nearly as frightening as it first appears, looking in from the outside. Challenge yourself, and you will be rewarded.

      I'm a math geek and a programing geek. I sympathize with your "Challenge yourself, and you will be rewarded" comment, but not everyone is mathematically inclined. While I certainly encourage people to take more math, not everyone will be rewarded for struggling with fields outside their talents. One can be a talented programmer without being advanced-mathematically inclined.

      My first post was well received and your post inspired additional thoughts, so I will go over some of the areas I agree or disagree.

      To be clear, my standard for what a programmer should study will be based on two points. First I will consider a figurative "90% of programmers at Microsoft", what they need to know and what they actually use. Second, I distinguish between things you need to understand, and things you can look up in a book and blindly copy-paste into a program.

      Graph theory is really useful for manipulating problems when you have a set of object and various "connections" or "relations" between them.

      A lot in programming is involves graph theory. A lot of data comes down to things with connections or some sort of relationships. If your data is list of people and who is friends with who, that is a classic graph. Many basic data structures are explicitly graphs, like linked lists and binary trees. All programmers deal with graph theory even if they don't realize it. Of course, those who don't realize that is what they are doing, and haven't studied it, might be doing it poorly. This s definitely on the important list.

      Then there's Linear Algebra... 'matrix' or 'vector'

      I struggle with classifying this. It is absolutely fundamental to a lot of graphics and I personally place a big connection between programming and that sort of thing, enjoy that stuff. But 90% of Microsoft programmers probably never touch that sort of thing. And if you are merely using a good graphics library and you only do basic stuff with it, then you may never need to see or touch or understand that sort of math. Outside of graphics, I have this nagging feeling that knowing that stuff is good and useful. However it may just be because that's how I think about things and that's the sort of mathematical software I like to do. It feels important to me, but I find it hard to rationally back up why a typical non-mathematical programmer needs it. Maybe it's just my pro-mathematical bias, but this is an area I advocate.

      Calculus is relevant to programming in two different ways... tools as the Fourier series, which is what mp3s are based on, and ... big-O runtimes of different algorithms.

      Here I have to strongly disagree. Virtually all programmers can get by without calculus.

      No programmer in his right mind should be meddling in MP3/JPEG/MPEG calculations, not unless he is specifically a mathematician-and-programmer specifically doing research work. Not only can that math be copy-pasted without understanding it, it is absolutely vital that it must be copy-pasted unaltered.

      Big-O runtime is indeed important and should be covered in the very first algorithms course, but you don't need to know calculus for it. You can learn all you need to learn and do all you need to do about Big-O even if you are 90% incompetent at algebra. All you need to do is be able to follow the size of the largest exponent while throwing everything else away. There is one thing calculus teaches for Big-O, and I can trivially say it here. If you don't know the Big-O for an algorithm, but you can figure out the "Big-O" size of describing the amount of work you do when increasing n by one, just add increase that exponent by one and you have the Big-O for the algorithm. If it takes 100 unit of work to go from n=100 to n=101, and 1000 unites of work to go from n=1000 to n=1001, then your "single step Big-O" is BigO(

      --
      - - You can't take something off the Internet! That's like trying to take pee out of a swimming pool.
  173. Off topic by mcmonkey · · Score: 1

    If the question is pay, the answer is get out of CS or programming entirely.

    Do your undergrad in psychology, get an MBA, have the programmers work for you. You'll make more money and never need more math than addition and subtraction.

    As to the question of, does math pay? This supposedly insightful comment proves itself wrong.

    So the programmer doesn't need math because the actuarial tables have already been worked out. I'm willing to bet the mathematicians putting those tables together make more money than the programmers using the tables. So how is it that math does not pay?

    If you're looking to maximize income, getting a degree in CS or working as a programmer isn't even worth considering, so the parent comment is completely off topic.

    However, to reply to the actual question, for a programmer, I recommend the course on graphs and sets. Discrete maths have general applicability to computer science and programmer tasks (unless, as others have said, you have specific plans to work in areas requiring consideration of the continuum).

    1. Re:Off topic by Kagato · · Score: 1

      In the context of the thread [advanced math for programmers] you never got close to answering the question at hand. How does advanced math really help a programmer?

      There are small subset of low paying programming positions where one may apply that craft. The majority of programming jobs simply don't need advanced math. And it's a sad state that the ones that do often pay subpar rates.

      Re: Actuaries. Companies that have them only need a handful to maintain actuarial tables. They aren't programmers by any means. Experienced actuaries make a tidy six figure salary. Then again, so do senior level programmers like myself. There's only about 25,000 accredited actuaries in the US there's over 800,000+ programmers in US.

      So yes, there are certainly cases where advanced math pays. I bet a mathematician at Fair Issac does just as well for instance. But you've failed to show where advanced math and programming really intersect in being beneficial to the career.

      My advice to the original poster is take the math your comfortable with to get your degree, but focus on understanding the fundamentals of the technology and how to apply the craft of programming.

  174. I neglected statistics and got burned by mpsmps · · Score: 1

    I got a Ph.D. minus epsilon in Math, but never took a statistics course prior to dropping out during the dotcom boom to start a software company. I would trade most of the math I know for a solid background in statistics, which comes up all over the place, from the performance of data structures and algorithms, to dataflow analysis, to mining databases, to projecting performance failure rates, etc. This is not just basic statistics (which I managed to pick up on the street), but a deep knowledge of statistics can make a big difference. I just co-authored a paper on a very simple data structure for which the key step in analyzing its performance is to apply the Kolmogorov-Smirnov distribution.

  175. useless in most cases by Anonymous Coward · · Score: 0

    Unless you really want to become a game programmer and you will have to really want it in order to become it STOP taking graphics courses. The best programming courses you can take are:
          Databases
          Operating Systems (not that you will use what you learn but it gives you an idea on what is expected in the real world when you are placed on a project)
          Networking
          any java and c# courses you can find (even if you don't have to take them)

    College will not prepare you very well for the business world and there are many more jobs out there that have nothing to do with games or the math you are forced to take. Having 3 years experience in programming I find that I just don't use any math skills beyond Trig and have forgotten most of what I learned in calculus 2 and beyond. Remember that your professors are generally people who entered the business world and couldn't cut it so they have no idea what you really need to learn and focus on theory and math skills you will never use. This is ok if you want to become a professor or want to go into theory but for most of use it is useless and a waste of time and money.

  176. DISCRETE STRUCTURES! by Anonymous Coward · · Score: 0

    Go with discrete. As a Computer Engineering major, I've had to take both, but discrete had far more programming applications in my opinion.

  177. Is your goal adequate or excellent programmer? by ReedYoung · · Score: 1

    And, if you give your best effort, are you up to the more challenging math curriculum? Those are my only criteria for such decisions and all the answer I can offer to this question.

    --
    "I can't imagine how things could get any worse!" (some guy) "That could just be failure of imaginatioÂn on your p
  178. insight... by eexaa · · Score: 1

    Which course should you take?

    All of them.

    Graph theory is highly practical (it has a perfect model relation to the actual data structures/algorithms/problems)

    Algebra is usually needed for graphic-related tasks and similar heavyload computation (encryption too).

    And analysis is finally needed for actual inventing and proving stuff.

    Have fun :)

  179. Don't Ask a Math Geek What Math to Take... by tiberus · · Score: 2

    But contrary to my own opinion, one assistant told me that it would be more useful for a programmer compared to the first subject. Then again, he's not a programmer.

    In general I would say, it's a good think you asked for programmer geeks to comment and didn't take the math geeks advice. My wife, an early childhood teacher, took a math class titled "Teaching Math for Early Childhood Educators". It was taught my someone in the Math PhD Program where she was taking her education classes at the time.

    When they suggested to the instructor that they would never use what they were being taught (note: there were special educators in this class as well), his response was "Sure you'll use it, it's fun and easy." Several of them couldn't control their laughter. I was tutoring her thought matrix algebra and teaching her the shortcuts (He only taught them formal methods). She still gives me that "I will set you ablaze" look when it comes to mind, guess we can survive anything.

    The good advice is to take what interests you, what you think you can survive and seems to apply to what you want to do as a programmer pretty much in that order. I'm a member of the more math can never hurt when your a programmer but, it might lead to divorce.

  180. 1960s "new math" finally pays off by peter303 · · Score: 1

    Some of the old-timers will remember the post-Sputnik elementary-school math books where you spent the first couple weeks of the year on set theory. I thought it was a waste of time then, and still think so. But that stuff reappeared in college digital electronics courses, desiging gate-arrays etc.

    I believe the intention was to teach "logical thought" as a premise for doing mathematics. But elementary school math must be brutal and make you memorize the dull algorithms of tables and long division for you to succeed.

  181. Discrete is the answer... unless... by Anonymous Coward · · Score: 0

    I actually hold two undergraduate degrees - one in mathematics and the other in computer science.

    Unless you are interested in Numerical Analysis (used heavily in contracting/simulations/engineering) then you want to go with the discrete option. Never forget that computers are discrete machines themselves and are much better suited to discrete tasks than continuous ones (which is what you would be studying in the analysis course).

    Understanding graph theory, tree theory, and recursion (all topics covered heavily in most any introductory discreet mathematics course) will always be more useful to the computer scientist than understanding the fundamental theorem of calculus.

  182. Both by Anonymous Coward · · Score: 0

    Take both. But if you have to take only one take the first, discreet logic is too important to pass up.

  183. If you want programm for fun take second by S3D · · Score: 1

    If you are in it for money take first. Computer games, 3d programming, computer vision, image processing, machine learning - whatever cull area are there they all relay heavily on calculus and linear algebra, and often their more arcane derivatives like optimization, groups Lie etc. Even google page rank uses eigenvectors. From the other hand it's possible to slog through the whole career in business applications/databases without touching calculus or linear algebra.

  184. Both skillsets are needed by Roger+W+Moore · · Score: 4, Insightful

    "...then hand over their work to skilled software engineers that are qualified to turn it into good software."

    As a physicist I only have to look at the code we use and write to see your initial point (try looking at ROOT from CERN for C++ that will make you want to cry!). However your solution simply does not work. You cannot "hand it over" to a non-expert in the area because the usage and purpose of the code is something that they do not understand and so the result will be unusable (there was one program I remember as a grad student which was a beautiful design but the overhead was so large that one senior physicist calculated that he would be retired before it had finished one pass through the data!). The best scientific code I have seen is generally written by an expert in the field who has experience of good software design. Even close collaboration between physicists and software engineers rarely works because neither side is willing to compromise functionality for design or vice versa.

    1. Re:Both skillsets are needed by Rising+Ape · · Score: 1

      (try looking at ROOT from CERN for C++ that will make you want to cry!).

      It's quite shocking isn't it? And not just a "this code isn't very pretty" problem either, but the instability of the thing is remarkable. Even the sloppiest of my own code was never that bad. So many segfaults... I ended up writing as much as possible outside the ROOT framework after trying (and failing) to understand the behaviour of TObjArray regarding memory management. I'm surprised that any analysis actually successfully gets done, sometimes.

    2. Re:Both skillsets are needed by Roger+W+Moore · · Score: 4, Interesting

      It's quite shocking isn't it? And not just a "this code isn't very pretty" problem either, but the instability of the thing is remarkable.

      Remarkable? Its legendary! ROOT has the dubious distinction of including the worst piece of programming I have ever seen. When adding some extract I/O objects in separate header files to a program, generating dictionaries etc. I suddenly had the linker complaining about duplicate symbols. After spending just over a day trying to figure out why and getting more and more confused I finally demonstrated that ADDING A COMMENT to the code fixed the problem!

      Staggered that ROOT was somehow breaking the C++ standard in ways I had not even contemplated I spent another day tracking this down to an automatically named function which used the C preprocessor line number directive as the only variable part of its name. So, if you happened to have the classdef (IIRC) macro on the same line in two header files ROOT would generate identically named symbols. The result was that something as simple as adding or removing a comment could fix or cause a duplicate symbol problem!

      Far, far worse than all that though was that when I submitted a nice bug report illustrating the problem and pointing out the macro which was at fault they claimed that this was NOT A BUG and did not need fixing! ARGH! I only ever use ROOT through the Python interface now since it shields you from so much of the pain....just not all of it unfortunately!

    3. Re:Both skillsets are needed by Anonymous Coward · · Score: 0

      I'm an experienced software dev from the games industry, who helped out with optimising some detector code written in R about a year or so ago. The physicist in question had cobbled together a collection of R modules (written in C++ by various people around in the world, in various states of bad or badder) which were used to process large data sets. The first problem was simply a data layout issue. Each module required the data in a different format, so 5 or 6 data conversions had to be performed on the data set before the required result was found.

      It's not entirely true to say that an experienced software dev can't understand code from a scientist - most experienced devs are more than capable of determining the purpose of 90% of code fairly easily (since large swathes are simply there to load / save files, re-organise data, re-format data, init, shutdown etc etc). Then every so often you hit a function where you think, WTF? But that's not a blocker if you work in the right way!

      Anyhow, the process I used to optimise the code was as follows:

      1) Identify the bottlenecks

      It was pretty obvious early on that the main problems with the code were primarily the result of inefficient data structures, numerous data conversions. Those problems combined with the sheer volume of data that had to be processed was a performance killer .

      2) Protect yourself from accidentally introduced bugs.

      I forced the physicist to go off and write extensive unit tests for each separate part of the pipeline. This gave me test data sets at each point, which easily enabled me to know when I introduced any bugs.

      3) Continued communication is vital!

      This step looks redundant? Is it ok to remove? Is this the way you want the data to be stored? Or was that simply for a historical reason? (would have preferred to do it that way, but time constraints scuppered that idea...)

      Anyhow, after a week or two, all of the C++ modules had be merged into a single bespoke module, specifically optimised for the job in hand. The data conversions had been removed. A lossless compression scheme was introduced into the data file formats, which drastically reduced the time to read/write the files across the network. Numerous memory and threading optimisations were added to improve performance in some of the analysis sections. Due to the unit testing process, each additional optimisation was an incremental improvement over the previous version - at no point did the code stop functioning!

      It was an illuminating experience anyway - for both parties! By the end of it, the physicist was very keen on these new fangled software development concepts such as unit tests, version control, and (shock horror!) code documentation! Without usage of those engineering practices, the entire exercise would have complete and total failure.....

    4. Re:Both skillsets are needed by Roger+W+Moore · · Score: 1

      Sorry - I did not mean to suggest that software engineers cannot understand the code. The problem is that they don't understand how it will be used, which is not their fault because, being research, we don't exactly know how the code wil be used either! Most of the code we use in particle physics is in a constant state of flux because we are always finding out new detector issues we have to fix or new analysis techniques etc. So it is very hard to sit down and say "we need some code to do X,Y and Z" since X may change and we probably don't know what Z is yet!

      As you say communication is the key but I think that it is very hard to have a good enough level of communication for many applications due to the very fluid nature of the problems being dealt with. If you have a fixed, relatively static problem (like developing a common tool/utility/library for research) then I agree a software engineer would be extremely useful there but this is not where most coding happens and so a culture has developed of writing code ourselves which can also make it hard for those of us who would on occasion like to hire a software engineer to do so because the usual response is: "why should we give you money for that when you can write the code yourself (or get your students and postdocs to do it)" usually follwed with an argument about how the money is needed for electronic engineers to design boards etc.

  185. Re:Physicists? Yes, really. by John+Betonschaar · · Score: 1, Interesting

    I don't get why you'd want to mod me troll, since I don't see we disagree? Of course knowledge of basic linear algebra is an important part of the skill set of anyone who writes computer programs. But that's not the same as being able to write a linear solver from the top of your head and it's also not the only or most important aspect of software engineering.

    As an example: during the job interview for my current job I was asked to spell out a program that calculates the intersection of 2 lines, to integrate expressions and other math trivia, over the phone. I couldn't do it though I was able to formulate the steps to do it offline. Other questions we're purely questions about basic C and Unix trivia, which I was able to answer easily though most if it was in fact irrelevant or obsolete facts for todays software engineering. The interviewer found it really strange I wasn't able answer 'easy math questions' while I did seem to 'know a lot about software engineering', completely backwards to my impression about the interview. After that interview I've implemented simulation software containing non-linear regression, all kinds of matrix stuff, dft's, half of Matlabs basic linear algebra tools, image processing and more. Not because I can tell you how to do an SVD but because of good software engineering practices, by and making efficient use of existing solutions to common problems. That's the difference between writing software on a larger scale as opposed to using computer programs to solve mathematical problem. It's also why I view so many math and physics-related software as 'badly engineered' (though often well-written), mostly because it's confusing, the documentation is minimal, absent or dense and incomprehensible, sensitive to misuse, inflexible, in other words: difficult to use safely in production software. All the math stuff I use in our code is wrapped into sensible and safe interfaces that are well-documented and easy to use, which is what allows us to rapidly build complex but robust software from it.

    It's also for these reasons I think basic knowledge of applied mathematics and intricate knowledge of algorithms, data structures and development methodogies is more valuable than intricate knowledge of mathematics but only basic knowledge how to build and maintain quality software.

  186. Discrete Math All The Way by xtheunknown · · Score: 1

    I think you should go with Discrete Math. There is so much in there that applies directly to Software Engineering especially if you right systems software, as opposed to Financial or Scientific software. Graph theory, queue theory, Maps, etc. You can't go wrong with Discrete Math. It will also be easier for you if you already think like a programmer.

    --

    They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
  187. Math by whoisisis · · Score: 1

    It's a bit of a toughie, but I think I'd go for analysis. It provides a fundamental insight into how math is done.
    Math is made up of three basic ingredients: analysis, geometry and algebra.

    You're much more likely to understand a lot of the reasoning in other courses after you take analysis,
    as the logic applies much more generally than to vectors, euclidean space and differentials. Those are more examples on how to use analysis,
    and of course could be annoying to get through if you don't like that sort of thing.

    In your non-math (ie. programming/cs) courses, you're very likely to meet graph theory, sets and so on anyway,
    and because you've taken analysis, you'll have much more intuition on how to use those tools.

  188. Discrete structures. by ex_ottoyuhr · · Score: 1

    In my experience, math is almost completely irrelevant to computers; logic is what you need to know. Speaking personally, my one year of undergraduate-level Catholic theology and Aristotelian logic has been more useful to me in computer programming than anything in my four years of undergraduate-level mathematics, with the sole exception of set theory.

  189. Well by Anonymous Coward · · Score: 0

    I have a PhD in Math. Employers didn't care about my PhD. They cared about my BS in CS. Math isn't in demand as a skill.

    1. Re:Well by lorg · · Score: 1

      That is cause the non-math people think that math is pretty much just what they learned in elementary school. There are just bigger numbers and lots of that "X" stuff.

  190. Still not sure by Anonymous Coward · · Score: 0

    Can someone please provide a pie chart of these responses so I'll know what to do?

  191. Hard? by OhHellWithIt · · Score: 1

    The teachers I have learned the most from have always been the ones with a reputation for being difficult -- with the exception of the freshman sociology prof who couldn't stand the fact that his course was regarded as an easy A and set out to make it difficult. And even from him, I learned a thing or two to avoid doing if I did not wish to be considered an ass.

    --
    "Who controls the past controls the future. Who controls the present controls the past." -- George Orwell
  192. As somebody who actually has a job right now... by Anonymous Coward · · Score: 0

    I advise not getting too caught up in Math...

    An awful lot of the "Advise" being dished out here is over inflated opinion... I know.. I know, somebody had to point that out...
    Both are useful sets of courses, but neither will land you that dream job. Experience is key in all careers...

    But I would hate to burst some bubbles, not all great software engineers are mathematical in anyway.(I'm not ether of those).
    In fact when you've seen the real world a bit you might notice a tend in your dev teams... Math Grad = Hopeless at even the most trivial of tasks

    Personally, as a CS Grad, I'd go Graph Theory, It appears in alot of different places (Like in testing or verification you might use a control flow graph),
    Its not overly difficult and ties in better with Computer Science and more importantly Software Engineering (The real world stuff).

    End of the day, its your choice, don't let the slashdot masses ruin your life (Like mine and many others before me)

  193. Amen Brother by tobiah · · Score: 1

    There's usually a 3rd-semester "Intro to Advanced Mathematics" class offered by the Math dept., that's the one to take.

    A proof should satisfy the conditions of "necessary and complete" proof of the theorem in question. i.e. nothing extra, nothing missing. Applying this line of thinking to programming makes for lean, efficient code.

    --
    "The ability to delude yourself may be an important survival tool" - Jane Wagner -
  194. ...and MUSIC training helps too by gwn · · Score: 1

    I have lived and worked in various IT environments over the last couple of decades and I have observed a very interesting thing... The best programmers I have had the pleasure to work with/for were also musicians. Usually amateur musicians, but musicians.

    It seems there are very important skill transfers between the two.

    I am also able to watch my own kids... and the musical one has chosen to go to university to get a software engineering degree... and is doing amazingly. By the way he also took every math he could get in high school and first year university.

  195. All kind of maths are good by godrik · · Score: 1

    seriously all kinds of maths are importants.

    If you don't do statistics, you'll never see the difference between that's noise and that's relevant information.

    Discreet structures are the basis of algorithmics. No algorithmics, no efficient code.

    Linear algebra is the basis of... everything including non linear equations So you'll need it for equations solving, optimisation (including in discreet structure), graphics 2d or 3d, sound...

    calculus, derivations (or whatever it is called in your country) leads to data analysis, trends...

    Mod me troll if you want but if you want to do more than selecting colors on a website, you can't have too much maths...

  196. Computer Science by Anonymous Coward · · Score: 0

    If you are majoring in Computer Science I would definitely go with Discrete Class. As you get into more advance computer science fields and plan a career which has to do with coming up with optimized solutions to problems. However if you are aspiring to a game programming career dealing especially with Graphical programming vector analysis will very important. Ideally I would take both because they would help your understanding of the math you will need to know, but one thing you have to realize is that when learning discrete requires a little different type of thinking.

  197. You can get by without either... by Anonymous Coward · · Score: 0

    You can get by without either as I have seen many programmers do. Now their code is unreadable by most humans and even most of the compilers for the languages they work with, but that has not stopped them from creating reams of code that almost does what is needed. Their BA in Art History did not require Math beyond basic addition and subtraction.

    Now if you are aiming for understanding the math you are taking, it sounds like you have already found a point where you are struggling. It might be time to take a step back an assess the foundations to make sure those concepts are fully understood.

  198. Wrong approach by kitserve · · Score: 1

    The way I see it, the OP is approaching this question from the wrong side. I did things the other way round - I have a PhD in maths and ended up in computing. The reason that I studied maths, and the reason I now work in IT, is because that's what interested me at the time. Pick whichever course you find more interesting. You are likely to get better marks and end up being steered towards work that suits you later on. Treating maths like a chore that has to be done so you can get on with programming is the wrong way to go about it - take an interest in the maths itself and the rest will follow.

    Incidentally, every job I have had has been programming related and I have used maths from both areas that the OP mentions in my work in the past. The work I currently do involves virtually no maths. This is because I realised I would like to interact with end-users and non-technical people some of the time I'm working, and (in my experience) the hardcore maths side of programming tends away from that sort of interaction. Difficult is not the same as boring, I find understanding people and turning their requests and ideas into useful code much more difficult than bashing out maths code, but ultimately it's proved more rewarding. Follow your interests, even if they may be difficult, and I think you will be happier for it.

    --
    https://alephnull.uk/
  199. Math not required for programming by Anonymous Coward · · Score: 0

    I've never been required to use more than basic Algebra skills. Maybe "great programmers" need these skills. Most programmers just need basic math skills (Algebra) and know how to use data structures.

  200. Nothing is needed but a brain by crimsontime · · Score: 1

    I took no computer science classes in college although I did take math up to Calculus. I taught myself some stuff about computers, read a few books, played with programming on my own and took a few community college classes and now work as a programmer. I've worked with people who got phds, they have the same job. Funny, sort of. I mostly goofed off and had fun in college and got a degree after 5 years... in Ecology.

  201. Discrete versus "continuous" mathematics by Anonymous Coward · · Score: 0

    I teach mathematics (e.g., continuous optimization) and computer science (e.g., cache oblivious algorithms) in a French engineer school (undergraduate and graduate level). I'm also a researcher in machine learning, a quite in between field.

    My experience as a teacher is that learning by yourself discrete mathematics is far easier that learning continuous mathematics (from measure theory to probabilities and statistics). This is seconded by all my colleagues. If your know about programming, you should be able to understand most of want you will need by reading something like "Introduction to Algorithms" by Cormen et al. and complementing it by a random discrete mathematics book. Trying to do that with reference books in continuous mathematics (like "measure theory" from Doob) will be extremely difficult if you are on your own. Learning probabilities and statistics on your own will also be very painful. Therefore my advice is to go for continuous mathematics and learn the rest by yourself.

    Good luck,

    Fabrice

  202. Both... by farmanb · · Score: 1

    I think which path you choose depends on what you want to do. From a foundational strand point, I'd seriously suggest the discrete stuff. In any sort of higher level algorithms classes you should probably be exposed to, you will need the graph theory. On the more practical side, data structures are vital as any sort of practical programmer. Without a decent grasp of the material in a data structures class, I'm pretty sure you're going to struggle finding decent jobs. The other stuff--the continuous math--is a blast (I myself started out CS and have since been wooed into pure math as a grad student), but as some have pointed out, unless you're doing development in computer vision, gaming (physics engines, graphics, etc.) or some sort of scientific computing in a national lab or university, etc. I don't think it's really going to come in handy all that much. Just my $0.02.

  203. Maths is everywhere by mike260 · · Score: 1

    ...I started becoming increasingly more convinced...

    I lol'd at this - OP managed to take the 4th derivative of 'convinced' in his post.

  204. Based on a Wide Variety of Experience... by taoboy · · Score: 1

    ...in both developing and teaching, here's my take:

    Computing:
        - Some kind of hardware (microprocessor, etc) course

    Computational Math:
        - Discrete Math: Logic, Sets, Relations
        - Algorithms and Complexity

    Application Math:
        - The Calculus
        - Statistics
        - Geometry & Trigonometry
        - etc... (depending on the industry to which you're attracted)

    I really believe that the computational math is strongly supported by an understanding of the practical implementation of stored program computers. This helps both your programming and debugging/troubleshooting, in that you understand the impact of your little creation on the hardware.

    Application math is application-dependent, ha-ha. I went for a long time both as a developer and teacher before I encountered advanced statistics or differential calculus; there are more folks out there doing this in aerospace than you might think.

    I think the distinction between computational and application math helps to compartmentalize your consideration...

  205. as per my experience by Anonymous Coward · · Score: 0

    I took discrete math myself and found it to be somewhat useful for computer science
    unless u plan to get into sm music, graphics or game development....i doubt tht d other course would help

  206. Real Programmers by s1id3r0 · · Score: 1

    Ed Post has already answered this question, and many of the topics that have been raised in the comments he has put to rest as well. Here is and excerpt from the Article, which can be found in it's entirety here: "... What kind of tools does a Real Programmer use? In theory, a Real Programmer could run his programs by keying them into the front panel of the computer. Back in the days when computers had front panels, this was actually done occasionally. Your typical Real Programmer knew the entire bootstrap loader by memory in hex, and toggled it in whenever it got destroyed by his program. (Back then, memory was memory-- it didn't go away when the power went off. Today, memory either forgets things when you don't want it to, or remembers things long after they're better forgotten.) Legend has it that Seymore Cray, inventor of the Cray I supercomputer and most of Control Data's computers, actually toggled the first operating system for the CDC7600 in on the front panel from memory when it was first powered on. Seymore, needless to say, is a Real Programmer. One of my favorite Real Programmers was a systems programmer for Texas Instruments. One day, he got a long distance call from a user whose system had crashed in the middle of saving some important work. Jim was able to repair the damage over the phone, getting the user to toggle in disk I/O instructions at the front panel, repairing system tables in hex, reading register contents back over the phone. The moral of this story: while a Real Programmer usually includes a keypunch and line printer in his toolkit, he can get along with just a front panel and a telephone in emergencies. In some companies, text editing no longer consists of ten engineers standing in line to use an 029 keypunch. In fact, the building I work in doesn't contain a single keypunch. The Real Programmer in this situation has to do his work with a "text editor" program. Most systems supply several text editors to select from, and the Real Programmer must be careful to pick one that reflects his personal style. Many people believe that the best text editors in the world were written at Xerox Palo Alto Research Center for use on their Alto and Dorado computers[3]. Unfortunately, no Real Programmer would ever use a computer whose operating system is called SmallTalk, and would certainly not talk to the computer with a mouse. Some of the concepts in these Xerox editors have been incorporated into editors running on more reasonably named operating systems-- EMACS and VI being two. The problem with these editors is that Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in Women. No, the Real Programmer wants a "you asked for it, you got it" text editor-- complicated, cryptic, powerful, unforgiving, dangerous. TECO, to be precise. It has been observed that a TECO command sequence more closely resembles transmission line noise than readable text[4]. One of the more entertaining games to play with TECO is to type your name in as a command line and try to guess what it does. Just about any possible typing error while talking with TECO will probably destroy your program, or even worse-- introduce subtle and mysterious bugs in a once working subroutine. For this reason, Real Programmers are reluctant to actually edit a program that is close to working. They find it much easier to just patch the binary object code directly, using a wonderful program called SUPERZAP (or its equivalent on non-IBM machines). This works so well that many working programs on IBM systems bear no relation to the original Fortran code. In many cases, the original source code is no longer available. When it comes time to fix a program like this, no manager would even think of sending anything less than a Real Programmer to do the job-- no Quiche Eating structured programmer would even know where to start. This is called "job security". Some programming tools NOT used by Real Programmers: Fortran preprocessors like MORTRAN and RATFOR. The Cuisinarts of programming-- gr

    1. Re:Real Programmers by s1id3r0 · · Score: 1

      Since the link to the article didn't get embedded in the post, here it is. http://www.pbm.com/~lindahl/real.programmers.html

  207. Better reasoning skills by Anonymous Coward · · Score: 0

    I have a master's degree in pure (theory) mathematics, but now work as a software engineer. You may or may not ever use
    stuff like numerical analysis, differential equations etc in your programming career, but studying these subjects improve your ability
    to understand abstract concepts and to think logically. I've known many older computer science majors who had a hard time learning
    object oriented programming due to the fact that it is more abstract than the sequential programming they learned in school.

    So I would say take both. The discrete math related stuff (graph theory, theoretical comp sci) is essential to computer science. The other stuff is good
    for your brain and could be useful at some point in your career. I would recommend studying numerical analysis and statistics/probability if you have a chance.

    Actually if I could do it over, I would double major in comp sci and applied math.

  208. Discrete ftw by RomulusNR · · Score: 1

    He's on crack. By and large the discrete math will serve you better because it's the sort of thinking that is essential to programming algorithms.

    That being said, if you intend to pursue work in graphics, or writing physics simulations or engineering software, the vectors/euclidean/differentials will be a big help. But that's really only for those cases. None of that is at all useful to the average developer.

    Discrete math, logical conclusion, sets, graphs, and (duh) algorithms are a must though.

    FWIW, before being a CS major I took a humanities philosophy class called Intro to Logic. After being a CS major I was required to take Discrete Math. I aced the latter because it was exactly what I'd learned in the former, with different notation and namespace.

    --
    Terrorists can attack freedom, but only Congress can destroy it.
  209. Anonymous Coward by Anonymous Coward · · Score: 0

    Definitely, Discrete math... that is what you would be using a lot as a programmer. specially database, web, network etc

    differentials and all that are more for engineers and researchers. Or if you get into 3d modeling and those kind of thigs.

  210. This question is easy to answer by prefec2 · · Score: 1

    Go for graph theory, sets, etc. as these things appear in CS all over the place. Graph theory stuff can be used with DFAs and other automata and Petri-nets. It can also help in managing semantic data. Sets are used for almost everything. In my actual position I will develop a domain specific language (DSL) which includes the description of some sort of automaton maybe something based on sync charts. Also the DSL shall be able describe things on different abstraction levels or for different abstraction levels. And on the upper level networks have to be described and verified analytically (if possible). This all involves graph theory. Vectors, euclidean space, differentials (analysis) is used mostly in simulations and sometimes (rarely) in stochastic/statistics. So go for the graphs. I also recommend learning something about description logic, Turing machines, horn clauses, languages etc. (but that should be already part of the required curriculum in any Bachelor program).

  211. Discrete by agrajag9 · · Score: 1

    Having a degree in Mathematics and having worked with and briefly as a developer for a large IT company, I say take discrete math. The other class is probably more computationally intensive, but what you do in programming is much more logic based than computation based. Discrete math will deal with topics that are more related to programming and should build logical thought processes in your mind. Also, proof writing very frequently requires extreme outside-the-box thinking which is also a very important thing in development.

  212. Quick Answer by frank_adrian314159 · · Score: 1

    Take both. Really. They're both useful. In fact, stay on long enough to take one this term and the other another term. If you have to wait a year or two for the second to come around again, even better. You can use the time to boink co-eds. And besides, the job market is still sucking.

    --
    That is all.
  213. Don't listen to him! He has no clue! by AlgorithMan · · Score: 1

    one assistant told me that it would be more useful for a programmer compared to the first subject

    WHAT!? thats utter bullshit and he has no freakin clue what he's talking about! If you are not about to write a 3D Engine or an Algebra system (like "derive", "maple", etc), the second subject is mostly useless for you! Take the first course, because nearly every problem you encounter in practice, is equivalent to some graph problem... also you need graph theory in EVERY course on theoretical computer science (complexity, computability, randomized algorithms, efiicient algorithms, parameterized algorithms), these are very closely related to graph theory. Also multithreading and thread synchronisation are discrete systems and even good string processing (compilers, scanners, etc). Heck, you meet discrete math even in artificial intelligence, logics, logic programming, relational databases, game theory, designing micro-chips, routing, networking, sorting algorithms, you name it! everything about computers and programming has to do with discrete math, because processors, operating systems and programs are discrete systems (equivalent to turing machines) and they operate on a discrete set of data (because you only have finite RAM and HD and "discrete" basically means "enumerable or finite")

    --
    The MAFIAA is a bunch of mindless jerks who will be the first up against the wall when the revolution comes
  214. what a bunch of crap: by geekoid · · Score: 1

    ""It is no news that the greatest computer scientists and programmers are/were mathematicians."

    I just threw up a little.

    --
    The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
  215. Noone answered your question: here it is by alexborges · · Score: 1

    Go for the discrete math. class. It has tons and tons to do with the basic computing theory of turing, which is the father-mother theory of the whole thing and learning to make and evaluate mathematical proof is the true signature of the masterful engineer. You will learn enough to invent algorithms and move on to the hairy part of computing: IA, genetic algorithms, fuzzy thingies and that kind of shit.

    Discrete math IS the immediate superset of computing theory.

    --
    NO SIG
  216. How advanced math helps..... by managerialslime · · Score: 1

    In the context of the thread [advanced math for programmers] you never got close to answering the question at hand. How does advanced math really help a programmer? There are small subset of low paying programming positions where one may apply that craft. The majority of programming jobs simply don't need advanced math.

    With regard to your narrow definition, you are correct that advanced math is not a "requirement" for the programming positions that report (and have reported) to me. But the individuals with math-focused academic backgrounds have generally displayed intellectual rigor that delivers exceptional results. This often leads to promotion into leadership, tech-lead, and mentoring positions that pay more. I pay them more because they deliver higher quality results than delivered by peers.

    This is not in any way to discount the value of contemporary C.S. degrees. When opening occur, I interview both. When figuring out who to hire, I am most concerned that my team is composed of people with multiple backgrounds, not one or the other.

    Don't discount other disciplines in shaping your career. I have met a scary number of people who were math majors with skills in classical music theory and composition. Their combination of creativity and discipline translated into outstanding programmers and database administrators.

    As either path can result in a nicely paying career, why not instead investigate what subject areas give you the most satisfaction? People who do what they like are likely to do the best work in any given area. Compensation at that point is mostly a factor of the supply and demand for your skills and experience by any given employer or industry.

    --
    Live Long and Prosper - Thanks Leonard. You are missed.
  217. Abstractions by Anonymous Coward · · Score: 0

    Mathematics and software programming are most definitely intertwined and mathematics can definitely support your programming, I would not necessarily try to suggest one set of courses over another - rather there are benefits to either stream and it depends on the specific problems you end up tackling, so it might be best to go with the stream you enjoy the most. Better to have to work at something that might be hard, yet you enjoy, rather than something that is just hard.

    With the touchy-feely stuff out of the way, below is a quick account of my experience:

    I have an MSc in Mathematics. However, I have always loved programming, and taught my self to program over the years. Today I work professionally as a free-lance developer. I would say that my mathematical training has been indispensable, but not because of specific knowledge of vector spaces or differential equations (most of which I no longer remember or ever use) etc. but rather because of the mode of thinking I learnt. Mathematics is built upon layer after layer of carefully constructed (well defined) abstractions. For me this is most clearly seen in abstract algebra, or topology etc.

    The key underlying principle that is critical to building complex software systems is abstraction. If you can understand how to create clean well defined abstractions of the problem at hand, then you will be able to build complex yet flexible software. In programming languages these abstractions are directly supported via constructs such as interfaces, inheritance, libraries, procedures etc. or indirectly via patterns and principles such as inversion of control, loose coupling, delegates etc.

    All complex software systems rely on such abstractions.

    In contrast, I would say that only a small percentage of the code developed ever relies heavily on specific algorithmic knowledge (e.g. linear algebra for 3D graphics, or hashing algorithms or cryptography, or specific knowledge of red-black trees for hash table implementations). Very often these are simple imported via a suitable library, or coded based on a well know reference implementation, or developed in conjunction with an expert in the specific field.

    So, in summary, if you have some special area of interest that would be supported by a specific tool set, then clearly you should pick that up. Otherwise, any well taught mathematics course (irrespective of the specific subject matter) should highlight the abstractions that enable related concepts to work together, and emphasise the need for well defined definitions in order for things to be computable.

  218. Good question--but too late for me! by DrVomact · · Score: 2, Interesting

    I got a Ph.D. in Philosophy back in '78 (am I going to have to specify that in four digits soon?), and one day when I was moaning around because I couldn't find a job with reasonable pay and even minimal dignity, a friend said to me, "go into computers, Vomact". I said something like, "huh? But I'm terrible at math!". He told me not to worry, "there's no math required, it's all logic". Overall, I've found that to be true. Basically, you need a mental tool-box to solve programming problems, and those problems have been mostly logic problems for me, so my tools worked just fine. I think that maybe studying mathematics gives you similar tools, but I've always suspected there's some kind of mathist prejudice at work in CS departments that require calculus as a prerequisite. I think they just put it on the list to act as a filter to keep people who should get an M.B.A. or something else trivial from wasting their time. But it's a filter I couldn't have passed. Luckily, there were very few formally trained programmers back in the early eighties, and someone like me could talk his way into a software job.

    It's obvious, of course, that if you intend to write programs that actually use mathematics, then you'd better study math—if you're going to be a scientific programmer, for example, just as you'd better understand statistics if you want to write actuarial programs for insurance companies. In fact, depending on what kinds of software you design or write, there are a lot of things you might be called to know...and you can't know the list in advance, when you're still in school. Just be prepared to keep learning when you leave school—in fact, that's when the learning really starts.

    No, I am not saying that studying maths is a bad idea or a waste of time. On more than one occasion, I've gotten essential insights into difficult programming problems that involved mathematical and geometrical understanding from mathematicians, so I'm quite prepared to respect their training. I just don't think it's a prerequisite for the job.

    As others have pointed out, the article summary invites confusion by conflating computer science with programming. I dont' see why you need calculus for either, though.

    --
    Great men are almost always bad men--Lord Acton's Corollary
  219. Recent Graduate by Anonymous Coward · · Score: 0

    I finished my degree last year and all the maths that we did was discrete math; proofs, sets, algorithms and graphs and my degree was mostly maths. I found it pretty hardcore as I didn't have that natural flair and the mathematicians could make head or tale of it. Graph theory and algorithms are useful for parallel programming etc. Of course it depends on the type of programming you want to do for example, for example if you want to work in a financial institute, do some financial maths. I'd say do the first. Get a copy of 'Introduction to Algorithms - Corman', 'Computability, Complexity, and Languages - Davis' (silly oxford comma) and 'Introduction to the 'Theory of Computation - Spiser' all great fun to read, I never got through them, hence my degree classification was cr*p. Have fun.

  220. Both? by Anonymous Coward · · Score: 0

    In my CSE program, we were required to take both. Much lost sleep, but worth it.
    Disclaimer: Math has always kicked my ass.

  221. Why Linux UI rocks, *especially* the GUI by jonaskoelker · · Score: 1

    It's not easy to do well. So many GUI designers end up doing stuff like "add more themes", flashy stuff and wobbly windows, instead of actually improving things.

    I know I may be going off-topic (I can feel the karma burning already), but I'd like to rant about why the Linux GUI rocks. And I'll praise emacs a little too. And I'll shame emacs too.

    So, let's talk about usability. What is it? According to Wikipedia, "Usability is a term used to denote the ease with which people can employ a particular tool or other human-made object in order to achieve a particular goal."

    So, ease of use. What makes something easy to use? Well, some criteria might be

    • Learnability: How easy is it for users to accomplish basic tasks the first time they encounter the design?
    • Efficiency: Once users have learned the design, how quickly can they perform tasks?
    • Memorability: When users return to the design after a period of not using it, how easily can they re establish proficiency?
    • Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors?
    • Satisfaction: How pleasant is it to use the design?

    One of the most brilliant little things that Linux gets right is alt-dragging to move windows. Instead of having to hit a small title bar, you have a (comparatively) huge window to hit with the mouse. Fitts's Law would predict that you can do it faster, i.e. that there's increased efficiency. My intuition approves of this message :)

    Then, if you enable sloppy mouse focus and disable raise-on-focus, you can work in one window looking at information in another window that's on top of a part of the work window that you're not working in. That makes you more efficient, and means you don't have to fiddle with resizing windows. That also makes people more satisfied---people really want their windows to have lots of space (plus, some websites cope poorly with resizing, especially if you also zoom the text).

    And if you use the infinitely configurable compiz, you can have increased memorability---nothing helps you remember a bunch of random data better than you yourself choosing which random data to remember. That is, setting your own hotkeys means you can remember them more easily, so it's easier to learn what the hotkeys are.

    And here's the part where I praise emacs: putting the text navigation keys on ${ctrl or alt} plus ${some letter} really is a boon for efficiency: if you're typing, you're holding your fingers close to the letters. Besides typing, the most common operation is moving around in your text (I claim without evidence). So you can switch between the most two common tasks without moving your hands, which is much more efficient than having to move your hands to the cursor/endhome/pgupdown keys. Of course, that still works if you want that.

    Also, Linux gives you a lot of flexibility, which means you can set up your box to work exactly the way you want it to. Having a tool that works how you like it rather than almost how you like it is bound to affect your level of satisfaction. I know it does that for me.

    Now, for the negatives: although I love emacs, it's not exactly the king of learnability. I mean, the emacs tutorial is long. Not particularly hard to follow, but no one's going to guess on their own that C-x C-C is the way to exit, and C-x C-s means `save'.

    And even on a fairly vanilla Ubuntu install, the default Metacity configuration could be made better for windows users: have only a single virtual desktop, bind alt-F4 to "close application", make Windows+{E,D,F} (AKA Super+{...}) do what they do in Windows. That way it's easier to learn, because there is nothing to learn---the user already knows how to do things.

    So, despite not being perfect, Linux does get some usability things right.

  222. Math doesn't return the love by steveha · · Score: 1

    I suggest you get some books that make math more interesting.

    For any software developer, the math in the "Aha!" books is appropriate. I was able to understand this math in high school, so I'm sure hard-core math nerds will sneer that this is too easy, but I stand by the claim that these books are worth your time.

    Aha!: A Two Volume Collection on Google Books

    Aha! Insight on Amazon

    Aha! Gotcha! on Amazon

    From my own personal experience, I have never needed calculus or differential equations or any of that advanced sort of math in my whole career. I'm now doing somewhat advanced DSP work, and even there I haven't needed advanced math. (I don't entirely understand how the FFT works; I just know how to use its properties to get the result I need. Other people wrote C versions of the FFT for me; I haven't needed to write it.)

    The math that has been useful to me is basic logic stuff, to know how to write conditions for if statements and the like; O(n) estimations, to help you choose the best algorithm to solve your problem; and basic probability stuff, to help me understand how caches work and such. So the first class sounds better to me than the second.

    I'll recommend one more book to you. It's a sort of encyclopedia of algorithms... it will expand your mind with possibilities (if you don't even know something exists, you won't be able to use it to solve your problems). It's engagingly written, with "war stories" that make it more lively.

    The Algorithm Design Manual on Google Books

    The Algorithm Design Manual on Amazon

    The author's web page for the book

    steveha

    --
    lf(1): it's like ls(1) but sorts filenames by extension, tersely
  223. No Question! by stonewolf · · Score: 1

    Take them both. No, I am not kidding. I took the equivalent of both and they have both been extremely valuable.

    Stonewolf

  224. Somebody is selling you a math course by Anonymous Coward · · Score: 0

    I suspect the grad student is trying to sell you on the course. You can get by on high-school algebra, and almost any kind of math beyond that will help, because its the kind of math you will learn to program. Algorithmic courses are always good, but geometric and trig courses are good for graphics. So, in which direction do you want to go?

  225. It depends by Khelder · · Score: 1

    Agreed. It completely depends on what kind of software you want to write or what kind of computing research you want to do. I love continuous math, so I took a fair bit of it, but I've hardly ever used it because of the application domains of most of my software development thus far. I never really liked discrete math or statistics, which is too bad, since they're both a lot more applicable for what I do.

    And for Software Engineering as a discipline, math is not a high priority. It's more about prioritizing, process, requirements, documentation, dealing with other humans, and other stuff I'm probably forgetting just now. It's a far cry from a lot of scientific or engineering-oriented programming, which is often done by by small teams with more training in the application area than in computer science or software engineering.

    I'd say do the math you like and pursue software development that uses that math.

  226. Discrete by Anonymous Coward · · Score: 0

    I actually took both those courses (or courses that covered each of those topics) this past semester, and I must say that Discrete Math was the more beneficial in my mind. Not because the topics discussed were particularly more useful than the others, but because that course put the person more in a proper mindset for programming and systems in general. thinking logically is the core of a programmer, and Discrete Math aided that aspect more. Thus, I would go with that.

  227. Anonymous Coward. by Anonymous Coward · · Score: 0

    Most of the people who are just programmers cannot solve complex problems though they may be the best with their tools. What maths teaches (unfortunately taught right) is you look at objects and their relationship - concrete or abstract and create a model expressing that relationship. Basically addition is the only operation that is needed. Multiplication is a shorthand for successive addition, exponentiation is short hand for self multiplication, negation is complimentary addition, factorial is successive decreasing multiplication etc. Discrete models use arithmetic and algebraic modality while continuous quantities like flow of air, water, electricity etc., use calculus for integration (addition with error margin). So all we learn are patterns of simple relationship and the ability to recognize these patterns. Pattern matching and pattern recognition are expressed via algorithms that are translated into programs with margin of errors. So, what is your goal? Do you want to try to test the limit of your imagination and intelligence, or just use the tools just to solve problems in some domain?
    The best choice is take both streams of maths, one for future job and one as hobby. Eventually you will excel at least in one area. People who have lost job, went vertical like palm trees but you need to be good both horizontally and vertically. So, find some mentors who love to teach maths and try to understand the fundamentals - 1st principles of both discrete and analysis, vectors etc. Don't become an island. You may end up as one of the best in the industry down the road and may be you might create your own company. There is nothing to be afraid of maths as such but seek help outside this forum. Good luck.

  228. Anonymous Coward by Anonymous Coward · · Score: 0

    hey now,,,

    what about mathematical logic, or logical calculi, or modal logic, or constructivist methods of mathematics,,, or any math regarding
    Godel, Church, Turing...pursue the issue of infinity and computability, and algorythms.

    blahabaahahah

  229. Ouch! by Anonymous Coward · · Score: 0

    I took them both. I was an electrical engineer interested in doing VLSI design, which I never did, and have NEVER used anything from the analysis course. It was a fascinating course and I am sure that it made me a better human being, but it has yet to prove itself useful to me.

    I have on many occasions used the information I learned in my discrete math course. I also got to meet a great math professor and even got to help him write his own textbook used in teaching subsequent semesters of the discrete math course.

    Don't waste your time on the analysis course unless you enjoy serious math work. Do take the discrete math course. It's much more useful and more interesting to boot.

  230. Which has the better prof? by Eli+Gottlieb · · Score: 1

    If you're serious about Computer Science and becoming a programmer you will eventually need to take a course in discrete mathematics, and ideally for a broader skill-set you ought to take both the classes you've listed. However, to decide for this coming semester, pick the course with the better professor. In my experience, the quality of professors in =200-level math courses varies really, really widely, and that can make the difference between getting a C+ after not learning much and receiving an A after taking one of the most enlightening courses of your life. Pick the one that most points towards the latter scenario this semester, and just make sure to have taken both by the time you graduate.

  231. You'll enjoy Discrete Math for CS majors by JeffLass · · Score: 1

    When you have a chance read the article in Wikipedia entitled Discrete Mathematics. And then read the one entitled Linear Algebra. It will help you make up your mind. FWIW, when I was working on a Masters in Computer Science the two math courses that proved most useful were: Discrete Mathematics for Computer Science majors and Linear Algebra for Computer Science majors. The distinction "for computer science majors" implies a greater emphasis on process, implementation, and analysis and none on "proofs". In that sense they are "practical" courses because it is assumed up front that the material presented is based on a solid foundation of proofs (referenced or 'appendicised' and "there's no need to get into all of that"). Math courses for mathematics majors and science education majors, in contrast, are entirely "proof" oriented because these people need to fully understand how to extend the absolute rigor of mathematical logic and theory, and also how to teach it. BTW, reading about how math proofs were achieved, with their creative leaps o' logic, can be fascinating and rewarding when they're presented from a historical perspective. It's remarkable how many proofs were actually locked down THOUSANDS of years ago.

  232. Math vs Programming by BlueFigToast · · Score: 1

    I am horrid at math. Math skills are far less important, then the ability to think logically and problem solving. I have been a programmer for over 4 decades now - working on a variety of operating systems from Mainframes to Micros. Did COBOL, Fortran, PL/I etc. http://www.pkill-9.com/ Wayno

  233. which math course to take by Anonymous Coward · · Score: 0

    Depends what you are going to program. If you are looking at logic programming then the first is for you. Now, if you're into making graphics move all over the screen, then you would want to take the second course.

  234. Math is definitely the foundation of CS by Shompol · · Score: 1

    Generally any strong math background will give you leverage in CS. Rule of thumb for graduate math classes: take the easier one, you can always progress to harder class later (in grad or postgrad school).

    Itemized list:

    discrete math - yes
    proofs - not relevant
    sets - yes
    algorithms - yes
    graphs - most likely
    math analysis - if you go for PHD
    vectors - yes (esp. computer graphics)
    euclidean space - same as vectors - yes
    differentials - computer graphics

  235. Can you justify that on the job? by electrosoccertux · · Score: 1

    Personally, I always liked learning the 'harder' thing as that might expose my brain to concepts or ways of thinking that I wasn't already familiar with.

    I would like to do the same, but I would always be concerned I'm not completing tasks fast enough, getting done what I could, etc.
    Any thoughts? I will be entering the workforce soon. I suppose one could simply explain it as becoming more well rounded.

  236. Definitely take Discrete Math by Anonymous Coward · · Score: 0

    I am a programmer, with a master's degree in math. I have found no use whatsoever for the Analysis type of math in my job or elsewhere. I would highly recommend the Discrete class. Graph theory is extremely useful in computer science, and writing good programs is highly dependent on being able to write efficient algorithms. good luck!

  237. Discreet by chiefbutz · · Score: 0

    I am a senior computer science major right now and I would say to go with Discreet structures with graph theory. If you have any sort of Formal Language Theory class it will be a great deal of help. It will also help with things like cryptography. It will mostly help with theory classes. If you do not have to take any theory then I would say you are just doing programming and not computer science in which case the other class may help more.