Follow Slashdot stories on Twitter

 



Forgot your password?
typodupeerror
×
Math Science

Which Math For Programmers? 466

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

Which Math For Programmers?

Comments Filter:
  • Physicists? (Score:5, Insightful)

    by jeffblevins ( 554702 ) * on Wednesday January 06, 2010 @11:20AM (#30669802) Homepage
    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.
  • by eldavojohn ( 898314 ) * <eldavojohn@noSpAM.gmail.com> on Wednesday January 06, 2010 @11:21AM (#30669812) Journal

    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 [amazon.com] 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 [wikipedia.org], it might be time. Copies of those sell for cheap used online.

  • Take Both (Score:3, Insightful)

    by Fantom42 ( 174630 ) on Wednesday January 06, 2010 @11:23AM (#30669830)

    Take Both. Make time for it.

  • by Jah-Wren Ryel ( 80510 ) on Wednesday January 06, 2010 @11:24AM (#30669840)

    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.

  • by BigSlowTarget ( 325940 ) on Wednesday January 06, 2010 @11:25AM (#30669882) Journal

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

  • Set Theory (Score:2, Insightful)

    by hightower_40 ( 1167627 ) on Wednesday January 06, 2010 @11:29AM (#30669924)
    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".
  • by Gothmolly ( 148874 ) on Wednesday January 06, 2010 @11:31AM (#30669958)

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

  • by VAXcat ( 674775 ) on Wednesday January 06, 2010 @11:31AM (#30669970)
    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.
  • by Locke2005 ( 849178 ) on Wednesday January 06, 2010 @11:31AM (#30669974)
    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.
  • by Cyberax ( 705495 ) on Wednesday January 06, 2010 @11:34AM (#30670028)

    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.

  • take Discreet (Score:5, Insightful)

    by trybywrench ( 584843 ) on Wednesday January 06, 2010 @11:36AM (#30670068)
    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.
  • by PmanAce ( 1679902 ) on Wednesday January 06, 2010 @11:39AM (#30670120) Homepage
    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.
  • by david.emery ( 127135 ) on Wednesday January 06, 2010 @11:39AM (#30670124)

    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.

  • by omb ( 759389 ) on Wednesday January 06, 2010 @11:41AM (#30670154)
    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
  • Take both (Score:3, Insightful)

    by xZgf6xHx2uhoAj9D ( 1160707 ) on Wednesday January 06, 2010 @11:42AM (#30670172)
    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.
  • by Tharsis ( 7591 ) on Wednesday January 06, 2010 @11:43AM (#30670180)

    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.

  • by boner ( 27505 ) on Wednesday January 06, 2010 @11:45AM (#30670220)

    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.

  • by samkass ( 174571 ) on Wednesday January 06, 2010 @11:48AM (#30670284) Homepage Journal

    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.

  • by Anonymous Coward on Wednesday January 06, 2010 @11:55AM (#30670382)

    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?

  • by Anonymous Coward on Wednesday January 06, 2010 @11:58AM (#30670416)

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

  • by Slipped_Disk ( 532132 ) on Wednesday January 06, 2010 @11:59AM (#30670432) Homepage Journal
    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.
  • by ShatteredArm ( 1123533 ) on Wednesday January 06, 2010 @12:01PM (#30670474)
    Even if you do work in finance IT, what are the chances that you get to actually develop new financial formulas on your own?
  • by delt0r ( 999393 ) on Wednesday January 06, 2010 @12:01PM (#30670488)
    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.
  • by Bakkster ( 1529253 ) <Bakkster@man.gmail@com> on Wednesday January 06, 2010 @12:03PM (#30670520)

    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.

  • by Monkeedude1212 ( 1560403 ) on Wednesday January 06, 2010 @12:04PM (#30670544) Journal

    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.

  • by BlueTrin ( 683373 ) on Wednesday January 06, 2010 @12:08PM (#30670616) Homepage Journal
    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.
  • by TheRaven64 ( 641858 ) on Wednesday January 06, 2010 @12:13PM (#30670702) Journal
    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.

  • by TheRaven64 ( 641858 ) on Wednesday January 06, 2010 @12:15PM (#30670746) Journal

    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.

  • by Anonymous Coward on Wednesday January 06, 2010 @12:16PM (#30670764)

    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.

  • by tjwhaynes ( 114792 ) on Wednesday January 06, 2010 @12:20PM (#30670844)

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

  • by TheLink ( 130905 ) on Wednesday January 06, 2010 @12:31PM (#30670988) Journal
    > 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".
  • by Nethemas the Great ( 909900 ) on Wednesday January 06, 2010 @12:40PM (#30671116)

    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.

  • by CodeBuster ( 516420 ) on Wednesday January 06, 2010 @12:42PM (#30671146)
    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).
  • by colmore ( 56499 ) on Wednesday January 06, 2010 @12:43PM (#30671168) Journal

    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.

  • Does math pay? (Score:4, Insightful)

    by Kagato ( 116051 ) on Wednesday January 06, 2010 @12:46PM (#30671204)

    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.

  • Re:Physicists? (Score:5, Insightful)

    by rrhal ( 88665 ) on Wednesday January 06, 2010 @12:46PM (#30671206)
    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.
  • Re:Physicists? (Score:3, Insightful)

    by cayenne8 ( 626475 ) on Wednesday January 06, 2010 @01:03PM (#30671492) Homepage Journal
    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.

  • Re:Physicists? (Score:1, Insightful)

    by SupplyMission ( 1005737 ) on Wednesday January 06, 2010 @01:59PM (#30672352)

    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.

  • by pjt33 ( 739471 ) on Wednesday January 06, 2010 @02:09PM (#30672490)

    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.

  • Learn vs Practice (Score:3, Insightful)

    by Shotgun ( 30919 ) on Wednesday January 06, 2010 @02:31PM (#30672806)

    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.

  • Two kinds of math (Score:5, Insightful)

    by Alsee ( 515537 ) on Wednesday January 06, 2010 @02:41PM (#30672970) Homepage

    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

  • Re:Physicists? (Score:5, Insightful)

    by COMON$ ( 806135 ) on Wednesday January 06, 2010 @02:53PM (#30673120) Journal
    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?

  • by navyjeff ( 900138 ) on Wednesday January 06, 2010 @02:54PM (#30673136) Homepage Journal
    That formula didn't destroy Wall Street -- greed and ignoring the well-documented limitations of the formula was their undoing.
  • Re:Physicists? (Score:1, Insightful)

    by Anonymous Coward on Wednesday January 06, 2010 @03:00PM (#30673228)
    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.
  • Re:Physicists? (Score:4, Insightful)

    by jc42 ( 318812 ) on Wednesday January 06, 2010 @03:07PM (#30673318) Homepage Journal

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

  • by Roger W Moore ( 538166 ) on Wednesday January 06, 2010 @03:39PM (#30673718) Journal

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

  • Re:Physicists? (Score:2, Insightful)

    by khallow ( 566160 ) on Wednesday January 06, 2010 @04:44PM (#30674638)

    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.

  • Re:Physicists? (Score:3, Insightful)

    by recharged95 ( 782975 ) on Wednesday January 06, 2010 @04:45PM (#30674648) Journal
    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.
  • Re:Physicists? (Score:3, Insightful)

    by dkf ( 304284 ) <donal.k.fellows@manchester.ac.uk> on Wednesday January 06, 2010 @05:19PM (#30675044) Homepage

    Pharmacists arent Chemists

    In the UK they are called that.

    Only by laymen who don't know better.

  • Re:Physicists? (Score:3, Insightful)

    by david.emery ( 127135 ) on Wednesday January 06, 2010 @07:32PM (#30676730)

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

  • Re:Physicists? (Score:5, Insightful)

    by Jahava ( 946858 ) on Wednesday January 06, 2010 @07:41PM (#30676816)
    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 [wikia.com] just as Information Technology drifts towards Engineering.

  • Re:Physicists? (Score:3, Insightful)

    by DrVomact ( 726065 ) on Thursday January 07, 2010 @02:53PM (#30685874) Journal

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

"If I do not want others to quote me, I do not speak." -- Phil Wayne

Working...