Become a fan of Slashdot on Facebook

 



Forgot your password?
typodupeerror
×
Education Programming IT Technology

Math And The Computer Science Major 1203

An anonymous reader writes "What sort of math are CS majors expected to take? Why are these classes useful? Does programming really have that much to do with math? Lineman.Net has published an article that answers these questions and more. If you are considering a CS degree, be sure to give it a look and make sure you are taking steps to prepare for your college career."
This discussion has been archived. No new comments can be posted.

Math And The Computer Science Major

Comments Filter:
  • by tcopeland ( 32225 ) * <tom AT thomasleecopeland DOT com> on Wednesday May 05, 2004 @10:13AM (#9063013) Homepage
    ...demand more math than others. Artificial intelligence techniques [rubyforge.org], for example.

    And what the article said about game programming is right on... trying writing even a simple Brickout clone without knowing basic trigonometry and you'll run into problems.
    • by XMyth ( 266414 ) on Wednesday May 05, 2004 @10:22AM (#9063130) Homepage
      However, writing a web front-end to a database (which is what a *LOT* of people end up doing for years and years) requires practically NO math 90% of the time. Of course, it't that 10% that will get you.
      • by Anonymous Coward on Wednesday May 05, 2004 @10:28AM (#9063219)
        If that's what you want to do, don't waste your time in college, because they won't teach you that. Connecting a webserver to a database isn't science, is it? But if you wonder how complex SQL queries can be simplified and executed with the least amount of resources, then CS is for you, and there will be math.
        • Here here (Score:4, Interesting)

          by kndyer ( 521626 ) <kndyer@@@gmail...com> on Wednesday May 05, 2004 @11:43AM (#9064195)
          I think the problem is that Software Development != Computer Science.

          • 90% of the jobs out there are development positions. These require basic programming skills, understanding of the newest buzz technology and an eye for asthetics.
          • 10% of the jobs are computer science jobs. These usually entail designing/optimizing algorithms or interfacing with "sciency" types like engineers(gasp), physicists and chemists.

          A good COMPUTER SCIENCE degree is designed to prepare you for 10% category. If what you want to do is build java apps and database applications then go to college and learn those skills instead of all of the theory involved in a CS degree.
      • by Gilk180 ( 513755 ) on Wednesday May 05, 2004 @11:36AM (#9064133)
        I spent a summer doing just that. I was working with a group who had almost zero programming experience and just a little database experience. We made things work, but it took 3 quad-P3 servers to run the database (running about 80% capacity 24/8).

        Since we were in the R&D wing, we threw the whole thing over to the operations people about the time I headed back to school.

        The next semester in school I had a databases class. I was baffled by the lack of understanding we had of even basic database design.

        Later I found out that a single operations guy did a complete rewrite of our code in about a week. He had all that useless math background and database experience. His version ran on a single server and was usually at only 50% load.

        There are reasons to hire well trained and experienced programmers even for tasks that seem simple.
      • by Malc ( 1751 ) on Wednesday May 05, 2004 @12:12PM (#9064568)
        Studying maths trains the mind in a different way of thinking that doesn't come naturally to most people. That training translates very well to computer jobs, even if the particular exercises are never repeated again. I personally think competence in music is also very important to computer people as that teaches other forms mental discipline and patience, especially to those who find music hard.
    • by (trb001) ( 224998 ) on Wednesday May 05, 2004 @10:31AM (#9063270) Homepage
      Amen. Don't think programming takes too much math? Try writing a game, any game. I was writing up a Rogue clone and got around to path finding. The number of algorithms to use are just sick, and they're all math intensive. Not so much algebra/trig stuff, but the spatial relations stuff is all math based.

      Other programming...calculating and distributing load, memory management, all math based. If you ever write anything with sound or electricity (lots of embedded stuff), it's all math based.

      Many CS majors will enter the work force only to do data moving programming (ie, take form input, store, retrieve, repeat). However, even those sytems have to have somebody load balancing them which gets into timing and...well, we all know how it goes. Math isn't just a filler class in a CS majors curriculum.

      --trb
      • by Cheeko ( 165493 ) on Wednesday May 05, 2004 @10:51AM (#9063559) Homepage Journal
        Not to mention ANYTHING involving 3D graphics, uses very large amounts of linear algebra. And as you get more involved, with physics, collision detection, etc, calculus and statistics can come into play heavily as well.

        Dot products and Cross products are your friends :)
        • by ari_j ( 90255 ) on Wednesday May 05, 2004 @12:27PM (#9064753)
          You don't even have to do 3D graphics to get into this stuff. I wrote a space simulation engine for PennMUSH [pennmush.org] and stopped at no lengths on some things...it only updates once per second, but I want to detect collisions accurately. Calculus saved the day. I wanted to turn in a spherical configuration space (where most people doing this use a cylindrical one) - take the cross product of where you are and where you want to be, and rotate yourself the amount you want to turn around said cross product. This is probably close to 100 lines of code, just to turn a ship.

          Any programming at all involves math. The better you are at math, the better a programmer you will be. If you are not good with math, you will not be a good programmer. HTML and what most people do with PHP et al. is not programming - it is markup.

          My CS degree required that I take Calculus I & II, discrete math, a statistics course (I took the harder of the two accepted for this, a 400-level math), and a math elective or two. I took a graduate-level cryptology special topics class for one of the electives - it was three CS students and about 6 math graduate students. At the end of the semester, the professor wrote a list of 3-digit numbers, most of them on the range [400,599], and said "This is a list of math courses we've covered at least half of in this class. Take them if you want to know more." There were about a dozen numbers on the list. My other elective was Calculus III, which I took concurrently with Crypto, across the hall, from the same professor. That was a challenge, as he made it extra hard on me in both classes (both because I'm good but also because I'm a smartass). He threatened to encrypt my Calc final. ;-D

          At the very least, a programmer should have discrete math, multi-dimensional Calculus including working with series and sequences, number theory, linear algebra, and diff-eq (I regret not finding time for the last two).

          Like I said - your abilities as a programmer are directly proportional to your abilities as a mathemetician. There's not a science you can study properly without using math.
      • by the chao goes mu ( 700713 ) on Wednesday May 05, 2004 @10:58AM (#9063659)
        I recall trying to tell a coworker his logic wouldn't work because he wasn't following deMorgan's law (the !(x|y) result he wanted was written as !(x&y), not as (!x & !y)). I spent over an hour trying to convince him. He ignored it, said "perl logic doesn't work that way", and, then about two days later, came to ask how to fix it when it kept failing. So, it seems you can try to do it without understanding math/logic, but you may run into a few problems.
  • A Warning (Score:5, Interesting)

    by ziondreams ( 760588 ) * on Wednesday May 05, 2004 @10:13AM (#9063015)
    As a student graduating (June) from a CS similar degree, I take this opportunity to warn/help inform others about such fields.

    If you truly love programming and want to code for a living, do NOT attend such Universities as DeVry, many State Universities, or other small "tech" schools. This may sound like common sense to some, and outright madness to others, but trust me on this one. I personally am about to graduate from DeVry, and, although it's surprising reputation, they in no way prepare a student to enter the world of programming. The majority (I'd say 70%) of the skills I've obtained have been acquired by means of self-teaching and learning from friends.

    More and more, I've been seeing that "programming" degrees focus much more on the management side of things, instead of the developer role. Perhaps this is because of the apparent problem of off shoring IT jobs? The main problem is not that the Universities have changed to this approach, it lies in the fact that the said schools teach in such a manner, WITHOUT advertising so. It brings about a sense of deceit and trickery...but perhaps that's what they were going for? :-)
    • Re:A Warning (Score:5, Insightful)

      by NixterAg ( 198468 ) on Wednesday May 05, 2004 @10:23AM (#9063140)
      The majority (I'd say 70%) of the skills I've obtained have been acquired by means of self-teaching and learning from friends.

      This is pretty much the case no matter where you go to school. A good school will only give you the tools and understanding to be more efficient at acquiring and utilizing the skills. A good school will not be teaching you those skills.
      • Re:A Warning (Score:5, Insightful)

        by jtwJGuevara ( 749094 ) on Wednesday May 05, 2004 @10:43AM (#9063458)
        A good school should be teaching you that your schooling never ends. As in, never stop learning or you will be left in the dust. Any school that doesn't enforce this opinion on their students in any subject matter are already putting their students at a disadvantage.
    • College (Score:5, Interesting)

      by duffbeer703 ( 177751 ) * on Wednesday May 05, 2004 @10:25AM (#9063169)
      College is not a vocational school, although that many would argue that DeVry is a vocation school.

      College is supposed to teach you how to think & learn... it's become a necessity since US secondary schools are so malfunctional. Your college classes should give you a base of knowledge about whatever you are studying, and the rest is up to you.

      The reason that top schools like MIT are top schools is that they force their students to explore and learn new things. If you are a serious student, you can come away with a good education from almost any school.
      • Re:College (Score:3, Interesting)

        by (trb001) ( 224998 )
        There've been many, MANY "Ask Slashdots" and the like about what college classes to expect, and the overwhelming majority agree with the parent...that is, college classes don't really teach you anything other than how to think, and they're useful to weed out people that are just lazy. Advanced data structures and maybe the basics of an OS are about as much as you can hope to learn, as far as practical programming goes. Using your technical electives wisely is a must...I took a comparitive languages class
    • Re:A Warning (Score:5, Interesting)

      by hJordanH ( 645049 ) * on Wednesday May 05, 2004 @10:29AM (#9063240)
      I could not agree more. I attend the University of Texas in Austin (which has a pretty good rating for CS, good enough for Dijkstra to teach there until his passing two years ago) and one of my professors last semester, while ranting about over seas outsourcing, spent twenty minutes lecturing us about how lucky we are to attend a school that focuses more on theory than application. I am a senior, graduating this upcoming Christmas, and the great majority of my completed courses have had almost no practical use to me for coding. On the other hand, they have taught me to think about and logically break down problems, understand how programs actually interacts with the computer, and the theories on which computation is founded. A techincal school or small college CS program would teach me the complete opposite of what I have learned. My professor believes that the ability to think, not just to program, is what will keep our asses fed in the upcoming years, instead of some family in Banglapore Tipikaka ( - does not exist, but you get the picture).
    • by Nick of NSTime ( 597712 ) on Wednesday May 05, 2004 @10:38AM (#9063381)
      What do you know about "many state universities" if you're attending DeVry? Last time I checked, University of Texas at Austin (my alma mater) wasn't advertised between CHiPs reruns.
  • oh good lord yes (Score:3, Insightful)

    by 74nova ( 737399 ) <jonnbell@gma[ ]com ['il.' in gap]> on Wednesday May 05, 2004 @10:14AM (#9063019) Homepage Journal
    we have to know math because the math majors cant program, usually. as a programmer, youll have to work with NUMEROUS different people from all sorts of other fields. you might be designing heat control systems, biochem simulation software, or electronic simulation software like me. the more you know the better in this field, i think.
    • by ponxx ( 193567 ) on Wednesday May 05, 2004 @10:23AM (#9063148)
      > we have to know math because the math majors cant program, usually

      Conversely this is the very reason why physicists and mathematicians have good job opportunities in IT, consulting or banking. In many cases it's easier to teach a physicist programming (or economics) than to teach a programmer the relevant understanding of mathematics.

      Of course it depends on what you're progrogramming and of course a programmer who is good at the kind of maths required for the job will have the edge anyway...
      • by 74nova ( 737399 )
        agreed. we have more programmers at my office that are engineering than computer science majors. i think it is easier to teach a physicist programming than vice versa, but its difficult to teach either to be good at the other. id like to think that ive learned something important in the last 4 years that a mathematician couldnt pick up in a couple months. conversely, i dont think i could pick up biochem quickly. you have to be good at taking on a thought process completely foreign to what youve known i
    • by TedCheshireAcad ( 311748 ) <ted@fUMLAUTc.rit.edu minus punct> on Wednesday May 05, 2004 @11:09AM (#9063790) Homepage
      I beg to differ. I am majoring in Mathematics, and have had to take a year and a half of programming. I am fluent in Java and C++, and I use them both on a regular basis in my course study and research.

      In a Linear Algebra class, it is useful to check yourself by computer, and you can really get a good understanding of operations like inversion, Gaussian reduction, and determinanat computation by writing the algorithms.

      Moving on to a course in Nonlinear Dynamics, a computer is almost an essential tool for modeling dynamical systems that can't be solved in closed form. I had to write my own methods in Mathematica to model these sytems, seek out points of equilbria, and examine their stability. Want a hard core programming exercise? Write a program that will attempt to find Lyapunov functions for a given dynamical system - that will really test your self-worth as a programmer.

      Even in a course like Abstract Algebra, you're going to need a grip on programming to get a deep understanding it, for example, reducing polynomials in GF(256), as is done in Rijndael. You can sit there and mechanically do it out by hand if you like, but if you want to get anywhere, use a computer. Write it in C++, another good programming exercise if you want to link mathematics and computer science.

      Most math majors in their time will need to take a numerical analysis course, which will include most of what I have previously mentioned. Numerical Linear Algebra, root-finding, interpolation, and differential equation solving. It's a much larger challenge to write an RK4 solver for a given differential equation than it is to move information from a database to the web. You'd have alot more self-respect as the 'computer guy' if you wrote a program to fit an optimal Bezier curve or cubic spline to a set of points, instead of simply hitting 'smoothe curve' in Excel. You'd also understand why the 'smooth curve' function doesn't work so well sometimes.

      just my $.02.
  • HS math question. (Score:5, Interesting)

    by grub ( 11606 ) <slashdot@grub.net> on Wednesday May 05, 2004 @10:14AM (#9063032) Homepage Journal

    Not entirely unrelated question about high school math: A couple of weeks ago I was out with my little brother who recently turned 18 for a beer and to shoot pool. He was having trouble making shots so I said "Imagine the table is a large sheet of graph paper when you plan your angles and shots." he said "I've never used graph paper."

    He's graduating from Grade 12 this year, am I just a relic[0]? What do schools use now to teach geometry? I hope it's not all done on a computer, the practical hands-on stuff is invaluable.

    [0] I'm 38; mom died in '82, dad remarried and could still get wood.
    • by (trb001) ( 224998 ) on Wednesday May 05, 2004 @10:40AM (#9063412) Homepage
      Unfortunately, graphing calculators were invented. They're the bane/saviour for many an engineer, since they allow you to get away with an awful lot when you're pressed for time, but they allow many people to skip out on the fundamental lessons of geometry. Personally, I used them in school but not before I had a firm grasp of triginometric principles, ie, I memorized sin-cos-tan tables and could figure things out on paper sans calculator.

      I'm amazed these days at what kids use calculators for. My buddies fiance is student teaching a class of 8th graders and says that for simple *addition*, kids are breaking out their TI's. Really, if you can't add 96 + 48 within a few seconds in your head, you've got issues. Graph paper is going the way of the dodo, unless you're an electrical/computer engineer, then you take stock in engineering pad companies.

      --trb
    • by Mandi Walls ( 6721 ) on Wednesday May 05, 2004 @10:43AM (#9063451) Homepage Journal
      Fess up. You never used graph paper for math class. You used it for D&D.

      --mandi

    • by Black Parrot ( 19622 ) on Wednesday May 05, 2004 @10:52AM (#9063584)


      > my little brother who recently turned 18 for a beer

      In my day we turned 18 without any such incentives.

  • Nail on the Head (Score:5, Informative)

    by millahtime ( 710421 ) on Wednesday May 05, 2004 @10:15AM (#9063035) Homepage Journal
    I am an engineer working with programmers and one of the biggest issues I have is getting them to implement some of the complex math in their code. Many struggle with it and that is a huge problem.
    • Re:Nail on the Head (Score:5, Interesting)

      by AKAImBatman ( 238306 ) <akaimbatman AT gmail DOT com> on Wednesday May 05, 2004 @10:26AM (#9063186) Homepage Journal
      Let me second this. A good software engineer still needs to know the math behind what he's doing. Intuition can go a long ways, but sometimes intuition is wrong. And sometimes there just isn't a good way to develop something without invoking a few formulas. (Anyone who's developed a file system, say "Aye"!) The bright side is that most engineering work doesn't really require anything more complex than high school math. (Assuming that they're still *teaching* high school math. Grrr...)

      My best suggestion would be to shy away from any school that skips over the theory and math behind computational sciences. I myself ended up skipping the degree all together and picked up the various textbooks and papers necessary to educate myself in the field. That's not the path for everyone (especially if you're not very self-motivated), but for me it was better than trying to sort through which school was teaching the real thing and which one was dumbing it down to improve attendance.

  • by Anonymous Coward on Wednesday May 05, 2004 @10:15AM (#9063043)
    Coding is not as important a part of computer science as you may think it is. CS is full of theorems and proofs. Computer science is the science of making algorithms more efficient. Programming is about implementing algorithms.
    • by Gumshoe ( 191490 ) on Wednesday May 05, 2004 @10:25AM (#9063177) Journal
      Dijkstra summed that sentiment up best:

      "Computer Science is no more about computers than astronomy is about telescopes."
    • by UTPinky ( 472296 ) on Wednesday May 05, 2004 @10:26AM (#9063190) Homepage
      THANK YOU for saying this! I got into a huge debate one time w/ a classmate because he was complaining about how Automata Theory (Language Theory) should not be a Comp Sci class. I was dumbfounded... This was perhaps the "truest" computer science class that was required for a degree at UT Austin... and in my opinion perhaps the most interesting class at that.
    • Here here! As a CS Major I couldn't agree with you more and I'm very offended when people think CS is coding. Coding is just a means to an end, nothing more.
  • Math and CS (Score:3, Interesting)

    by MarkPNeyer ( 729607 ) on Wednesday May 05, 2004 @10:16AM (#9063045)
    At my school, Xavier University, Math and Computer Science are a single department. It makes sense, though - the study Languages and Automata is an extremely mathematical pursuit, but it's also very important to Computer Science. The same could be said of any number of different CS related topics.
  • by sweet cunny muffin ( 771671 ) on Wednesday May 05, 2004 @10:16AM (#9063050)
    Useful?! You can't do anything without it. You can't study graphics without maths. You can't study 3d graphics and simulation without quite advanced maths. You can't study audio without maths. You can't study just about anything in computer science without maths.

    Only a Mickey Mouse comp sci course would not require maths to quite a high standard.
    • Amusing Anecdote (Score:4, Interesting)

      by AKAImBatman ( 238306 ) <akaimbatman AT gmail DOT com> on Wednesday May 05, 2004 @10:36AM (#9063355) Homepage Journal
      Recently a "nuclear scientist" (the guy was a nut) was rather disparaging of Computer Sciences in an open forum. (Made the standard comments about "not a REAL science", blah, blah). He then went on to claim that in his younger days he had built the earliest computer cluster and that the software he wrote was so powerful that the cluster could have scaled up to infinity.

      Suffice it to say, it felt really good to throw Amdahl's Law [wlu.edu] at him and call *bullshit*. He didn't talk to me after that. :-)
    • Because you need it. (Score:4, Informative)

      by Tangurena ( 576827 ) on Wednesday May 05, 2004 @11:22AM (#9063973)
      I find that the areas folks are starting to notice more (like data mining) are very heavily into math. Data mining is not just about "who is today's terrorist-de-jour" but more useful to solve problems like "who are our best customers and how can we better serve them?" or "can we make our mediocre customers into good customers?" or "where are our customers?" or "what funny things have been going on?" My latest book purchase is Data Engineering [amazon.com], and the math in it is beyond the capabilities of all my coworkers. Fuzzy logic? duh. Neural networks? duh. Support vector machines? duh. Principal component analysis? duh. Kalman filtering? duh. Without a solid background in math, the book is just a $90 paperweight. Maybe in 10 years it will be all componentized for the code monkeys to use. But I am sure they will use it wrong. I still see things like bubblesort appearing in code I have to fix.

      I don't know about your experience, but I find that post bachelor research in CS to be between 5 and 20 years ahead of industry. Some of the research goes no where, but some becomes the bleeding edge, then the mainstream. Like relational databases. Started (or first written up) as a paper in 1969. If you want to see where theory hits programming, check out game development. That is where most of the new technologies first hit development and get used successfully (the game may suck, but it becomes a showcase for some new techniques). Writing code for the TMS320 (a single chip digital signal processor) is an excercise in math: you spend more time modeling the code in Matlab than you do turning the code into C or assembly.

      I am also finding that graphs (not those blasted pie charts) can be useful in solving complicated problems. And some of the tasks to do, can be described with names like traveling salesman problem or minimum spanning tree. One of the first shocks I ever got in a meeting full of programmers was having to spend most of it explaining graphing algorithms and why algorithm X would solve the problem and why the proposed solution in the meeting would be a bad one. It would be hard to correctly, or quickly, solve a minimum spanning tree problem if you could not recognize it, nor understand what the algorithms were trying to solve. Education is about learning to solve problems and recognizing new situations resembling a problem you already know how to solve. Being uneducated is like only having a hammer to solve problems: you can only fix things by bashing them, good for nails, but not a good tool to use to remove screws and bolts.

      It is also fun to explain to the PHB why something he asks for is totally impossible. Usually it is headbangingly painful.
      Him: This number must be absolutely accurate, no rounding is allowed.
      Me: I can write 2 numbers on your notepad here that cannot be represented the way you describe.
      Him: BS, there ain't no such animal.
      Me: (writing) e and pi.
      Him: (scowling).
      I once tried to explain how .1 cannot be represented as a floating point number, but that ended up being a waste of time. Or how, to answer a question he had would require a time machine.

      Our society does not value intelligence, and has been actively disparaging intellectuals for 200+ years. Our country may have been founded by intellectuals, but de Tocqueville pointed out the disparagement of intellectuals back in 1835 in Democracy in America.

  • by Anonymous Coward on Wednesday May 05, 2004 @10:16AM (#9063058)
    Neural Nets store their information in matrices of varying dimensions. Without knowing how to manipulate them, you'll be in a world of pain.
  • by OEJack ( 648266 ) on Wednesday May 05, 2004 @10:17AM (#9063069)
    How else are you going to figure out how much money to ask for in Rupees? ($1USD = 44.5641 Rupees as of this morning)
  • by hornrimsylvia ( 696514 ) on Wednesday May 05, 2004 @10:18AM (#9063083)
    ..i never want to touch their code. usually it lacks basic logic. the programmer/designer usually does not have a good grasp on other mathematical concepts either. this is true for even simple business logic. the code is usually inefficient...in my experience anyway. the math really helps you to deal with thousands of processes working together, as well as potentially avoiding deadlock by looking at things on a grand logical scale. again, just my experience. take the math.
  • by GGardner ( 97375 ) on Wednesday May 05, 2004 @10:19AM (#9063089)
    Perhaps the most related, useful, but most underappreciated related discipline is statistics. Of all the non-CS classes I took, stats is the most relevant to my day-to-day life. For example, doing analysis of performance and tuning software system, I often see people use bogus statistical analysis, and making mistakes based on those results. Even if your curriculum doesn't require it, I would highly recommend taking a stats class or two.
    • by zymurgy_cat ( 627260 ) on Wednesday May 05, 2004 @10:37AM (#9063365) Homepage
      For example, doing analysis of performance and tuning software system, I often see people use bogus statistical analysis, and making mistakes based on those results.

      Such behavior is incredibly prevalent in all fields and industries. I've been in meetings and seen analyses that make my skin crawl because people make fundamental mistakes when using statistics. Part of it is due to the fact that it's not something that's integrated into any cirriculum when it should be. Another part is due to the age-old problem of using a hammer on screws because all you were ever taught was using a hammer.

      The final part is a basic misunderstanding of probability, statistics, and math. I've actually had a customer want me to guarantee no failures by developing test results and analyzing them with statistics to "prove" no failures before a certain point. I tried explaining how one can never absolutely rule out such things with stats and prob. There's always a chance, no matter how small.
  • Double Major (Score:5, Insightful)

    by ePhil_One ( 634771 ) on Wednesday May 05, 2004 @10:19AM (#9063094) Journal
    I double majored in Math/Comp Sci. I took a lot of logic courses, Diff. Eq., etc. The benefit is really understanding how all the numbers work so you can find intelligent methods of calculating things, instead of simply brute forcing your way through it all.

    I usually thought of it as the difference between learning how to program vs memorizing a bunch of useful code snippets and how to translate them to different languages.

  • I recommend (Score:5, Informative)

    by NixterAg ( 198468 ) on Wednesday May 05, 2004 @10:19AM (#9063098)
    Let's assume that you are well versed in Trig and Algebra (you should have learned them both in HS). Take, at minimum:

    Discrete Mathematics (some call it Applied Mathematics)
    Calculus
    Number Theory (Cryptography)
    Linear Algebra

    I have a CS degree with a math minor and have been completely surprised at how often I've used the math portion of my education in the workplace. I'd recommend taking a good mathematical modeling course as well, as it typically offers a great mix of math, engineering, and CS.
  • Programs are math (Score:4, Interesting)

    by aim2future ( 773846 ) * on Wednesday May 05, 2004 @10:19AM (#9063100) Homepage
    As with many things you do, you can do it quite a while without getting heavily into math, but when you deepen yourself you have to understand math and master it to a certain extent. For several years I did quite a lot of sw development without really using math, but when later starting my PhD I would have been lost without math. Programs are math. Every program can be converted to lambda calculus which is a mathematical expression form. Programs are art, as well as math can be seen as, and... programs are literary work. A certain story or idea can be expressed in many ways, without changing he actual idea behind the program. This is also the reason why software can not and should not be patentable, as it is now within USPTO (due to an old mistake...).
  • by baudilus ( 665036 ) on Wednesday May 05, 2004 @10:21AM (#9063115)
    Most people don't ever use mathematics much more complicated than basic arithmatic, so why do we have to take it in school? Math isn't about math; it's about thinking. Complicated problem teach impressionable young minds how to tackle problems logically, using what you know to be true to determine what you do not. I happened to love it (of course), but a lot of kids were always complaining about how they were never going use Modus Ponens in life. Turns out they were very wrong...
  • 18 credits (Score:4, Interesting)

    by mjh ( 57755 ) <(moc.nalcnroh) (ta) (kram)> on Wednesday May 05, 2004 @10:21AM (#9063119) Homepage Journal
    For my BS in Comp Sci (1992 U of Wisconsin), I had to take 18 credits of math, and achieve a B average in those courses. The 18 credits comprised:

    Calculus 1: 5 credits
    Calculus 2: 5 credits
    Calculus 3: 5 credits
    Matrix Algebra: 3 credits

    Although the University offered minors, my college (the college of letters & sciences) did not. If they had, I would have taken the remaining two credits in order to get the minor in math.

    IMHO, the assistance that math has provided me has been invaluable in my career. NOT because I use calculus on a day to day basis, but because it forced me to develop critical and systematic thinking skills. And THAT has been invaluable. At the time I hated it, but in retrospect it was really good.

    $.02.
  • CS = Math (Score:3, Insightful)

    by Dana P'Simer ( 530866 ) * <dana DOT psimer AT dhptech DOT com> on Wednesday May 05, 2004 @10:22AM (#9063133) Journal
    The SCIENCE of programming requires math. The art of programming may not. There is a distinction. That is why the lawyer in the next office over from me was able to put together a fairly good system to manaage his office and case load in a 5GL but couldn't truley understand the difference between a quick sort and a bubble sort. Of course, almost no one writes sorting algorithms any more. If you are writing a program that utilizes mathmatics to accomplish a goal ( e.g. the matrix algebra used in 3D graphics development ) it is not the programming that requires the math it is the problem space. The thing to remember is that, in a way, when you are studying computer science you are not learning how to program you are learning how to learn to program. Now and Information Systems degree would be more about learning to program and leaving it at that.
  • Well it all depends (Score:3, Informative)

    by mrtroy ( 640746 ) on Wednesday May 05, 2004 @10:24AM (#9063151)
    First I just want to say that computer science programs are not all created equal. There are definately less schools who teach it well than those who dont.

    Now for math, personally I was required to take a fair number of courses during my first and second year. While I didnt find it all relevant to CS, there definately are reasons to take math courses to help you in CS. Proving runtimes is mainly math, encryption is mainly math, etc.

    Also, I just want to make a note that CS != programming. You take a 4 month course to "learn to program", and you take a 4 year program to begin learning computer science.
  • by NotWallaceStevens ( 701541 ) on Wednesday May 05, 2004 @10:24AM (#9063159)
    The rest of the world is filled with mono-educated outsourcing fodder that have crammed a narrowly-targetted CS education into as short a time as possible, memorizing syntax and call center protocols. The best possible insurance of future employability for someone considering CS is to add something else to your curriculum to expand your horizons. Math is certainly one likely candidate, but some other excellent combinations are CS and Music, CS and the Humanitites, CS and Foreign Languages, or CS and English. The suggestion is somewhat counter-intuitive. Most CS majors will frown on your interest in the Humanities. Exactly. Set yourself apart. Study what you are interested in, distinguish yourself from the pack, and seek an advantage through challenging, broad study.
  • by nebaz ( 453974 ) on Wednesday May 05, 2004 @10:26AM (#9063193)
    I find that the math courses I took in college had about as much relevance to the comp sci courses I was taking as the comp sci courses themselves had to the actual work I do as a computer programmer.

    On the one end of the spectrum is pure theory, and proof, and on the other hand, we have complete practice, and "get it done now".

    Math is a great theoretical background for computing, and made some of the algorithmic courses a breeze.

    Ironically, I found the proofs in algorithms classes an attempt by computer scientists to say "see, we are a real discipline, we do proofs too", but I found that I wanted the CS courses to be a counter to all of the proofs and theory I got in my math courses. I wanted some "hands on" learning.

    Once I got out in the real world, especially with languages like Java, even the CS theory/practice (this is a hash table, now write one), I found that most of the data structures/algorithmic stuff had been written and I just filled in pieces.

    Where am I going with this? I guess basically that math is useful for comprehension in CS classes, but depending on the programming you do, you may not even use the CS you learn in the real world, let alone the math. But understanding is good.

    • by microTodd ( 240390 ) on Wednesday May 05, 2004 @10:37AM (#9063371) Homepage Journal
      Well, you have fallen into the typical trap. Computer Science is not really about writing code. That's like saying that being an architect is about cementing together bricks. Or being an aeronautical engineer is about bolting a wing onto an airplane.

      Computer Science is about researching and developing the mathematical theories behind the code. Why are certaing queing algorithms or sorting algorithms "better" than others? What is the "best" way to implement a neural network for a k-class classifier? What is the fastest way to get a packet from point a to point b? These problems have more to do with math, and almost nothing to do with if, switch, and for.

  • by Otto ( 17870 ) on Wednesday May 05, 2004 @10:27AM (#9063205) Homepage Journal
    From the article:
    If you have the chance to take calculus in high school, I may surprise you with my advice. I would not automatically jump at the opportunity for a couple reasons. Please forgive me as I climb onto my soapbox, but keep in mind that I am a math teacher and I know a lot of this from experience.

    First, high school calculus teachers tend to be the teachers in the math department the longest. The problem with this is that while these teachers are more experienced, they have been away from calculus longer than the other math teachers in most cases. Besides that, these teachers are often near retirement and may not be as motivated as younger teachers.

    Second, calculus is the upper-crust of high school math. In college, it's one of the lowest math classes offered. This results in a completely different teacher mentality. A college calculus teacher will be used to working with struggling students because for many of them, that is the toughest class they will ever have to take. But high school calculus teachers will be more used to working with the top students in the school. If you aren't especially gifted in math, you may find that you don't get what you need from these teachers.


    Here's the problem with those ideas:

    1) In Calc I in HS, you're looking at a class of 30 people. 50, max. In Calc I in college, you'll likely be in a class with something on the order of 100-200 people. See, *everybody* takes Calc I their first year, not just the comp. sci's. All engineering majors, all the math geeks.. Hell, even English majors probably have basic math as a requirement... So most of the time, it's a big class, usually a seminar type of deal. If you're having a hard time with it in there, then you'll also likely need to take another not-for-credit class where they can give individual instruction or take some extra tutoring on the side. Whereas in high school, you've not only got a smaller class, you've got an experienced math teacher, who likely knows his stuff, and you've got a year to learn it as opposed to 1 semester only. Okay, so the HS teacher may be less motivated, but you've got a longer time period, a smaller class, and you're in that class with the top students in the school (who can probably help you out somewhat) instead of in there with everybody in the whole school (who likely need just as much help as you do).

    2) Yes, calculus is the upper crust of high school math. It's also a heck of a lot easier than a college level math class. But here's a thought: The high school class doesn't usually count towards your college GPA, while the college level one does. What's so bad about taking it twice? Take the high school calc if you can swing it, then take it again in college. You may still have a hard time in the college calculus, but it'll be somewhat easier because you've got at least some background to it already.
  • Wrong question (Score:3, Insightful)

    by acidblood ( 247709 ) <decio@de c p p . net> on Wednesday May 05, 2004 @10:27AM (#9063206) Homepage
    Does programming really have that much to do with math?

    I think the question that should be asked instead is `Does computer science really have that much to do with programming'? I mean, I'm graduating in EE this year and I sure didn't choose this major because I wanted to learn how to solder -- that's the technician's job, you know.

    I repeatedly question the reasoning of others in becoming a CS major if all they want to be is a code monkey.
  • by Gannoc ( 210256 ) on Wednesday May 05, 2004 @10:30AM (#9063263)
    I don't use any advanced math in my day to day programming job, but solving math problems uses the same type of thinking as solving many programming problems.

    Basically, if you're having problems solving differential equation problems, you're never going to be able to really conceptualize what

    MyClass **p;

    means. Its why you see people start to struggle when they try to use STL, and have just memorized the syntax instead of knowing whats it means.

  • by microTodd ( 240390 ) on Wednesday May 05, 2004 @10:31AM (#9063274) Homepage Journal
    Excellent article. I like the line, you need to come to grips with one important fact first: computer science has more to do with math than computers. I couldn't agree more, and this is something that many freshman CS majors need to realize quickly.

    Heh, I just finished my CS Masters which included a class on Advanced Neural Networks (SVMs and classifiers).

    You would not believe how much math is involved! There was one proof in a whitepaper I read that used calculus, algebra, trig, linear algebra, and geometry. In one proof!

    My recommendation: take all the math you can. Make sure you take linear algebra (vectors/matrices), trigonometry, calculus, probability, statistics, and anything else that looks interesting.

    Why does a CS major need math? Let's see:

    Graphics engines - trig, geometry
    Physics engines - Calculus, trig
    AI - Statistics, probability, calculus, linear algebra
    Basic GUIs - Geometry, algebra
    Networking - Statistics, linear algebra

    And of course, you can't do ANY of the above without algebra.

    Another interesting quote: If you have the chance to take calculus in high school, I may surprise you with my advice. I would not automatically jump at the opportunity for a couple reasons. I think I agree on this one. You're going to start at ground zero when you take Calc I in college. So use high school to become badass proficient in algebra and trig.
  • by Jmstuckman ( 561420 ) on Wednesday May 05, 2004 @10:32AM (#9063288) Journal
    Discrete (finite) mathematics will is required by many computer science programs. It will probably involve set theory, boolean logic, proof methods, and other topics selected by the school or instructor. The class probably has few direct applications to coding, but knowing the material inside and out will be vital for you if you study computer science theory.

    Taking theoretical computer science classes may seem like a waste of time, but I highly recommend it if for no other reason than because you're not going to learn this stuff on the job or on your own. Taking an extra class on object oriented programming or databases instead may be tempting, but you can teach yourself most of what you need to know about these. Take advantage of the time you have in a university and learn about the logical foundations of your field. For those who love computing, it's an experience which you won't forget!

  • by Walker ( 96239 ) on Wednesday May 05, 2004 @10:36AM (#9063357)
    I am a math and computer science professor; I teach both types of classes. And I feel very strongly that computer science majors must learn to do proofs. And not fakey set identity proofs that they teach in Discrete. I mean real proofs from an axiom system like graph theory, abstract algebra, or analysis (pick one).

    Why? Because in my experience, exposure to axiomatic systems greatly improves abstraction and critical reasoning. I teach a "bridge class" (what we call them these days since high schoolers are typically unprepared for math beyond calculus these days) which presents an axiomatic approach to linear orders and the topology on that line. Many students take this class before Data Structures and they remark that it makes the distinction between Interface and Implementation much easier for them (especially since search algorithms are all on various linear orders). They also know how to design APIs cleanly without having to write the program first.

    The point I am trying to make is that you should not just take math because of the techniques you learn from it. (This is anecdotal, but) When I was at graduate school at Cornell, almost every math major I met who started programming after taking a lot of math classes was a stronger programmer than anyone who started programming first.
  • Discrete Math (Score:3, Informative)

    by Mignon ( 34109 ) <satan@programmer.net> on Wednesday May 05, 2004 @10:37AM (#9063367)
    I would recommend discrete math for anyone planning a CS degree. I took such a course in the CS department when I was a math grad student. We used Knuth's Concrete Mathematics book, which is excellent.

    My take on discrete math, as a former wannabe mathematician, is that the high school math curriculum is just enough to get you to calculus and all the extra has been squeezed out. Lots of material in the realm of discrete math is accessible to a high school student.

    In addition, many of the techniques and methods, like difference equations, parallel those in calculus, so it can reinforce what you've learned in calculus.

    Finally, as to the author's point about calculus in high school, I think he's way overgeneralizing about the quality of high school calculus teachers. My cousin, a professional mathematician, recommended that I retake calculus in college. She said that she hadn't really understood calculus until advanced calculus in grad school! Having been down that path myself, I can see this - calculus is such a different way of thinking than its predecessors in the typical high school curriculum.

  • Coding IS math. (Score:5, Insightful)

    by Tim ( 686 ) <timr AT alumni DOT washington DOT edu> on Wednesday May 05, 2004 @10:37AM (#9063379) Homepage
    Ya know...maybe it's just my field (computational biology), or the fact that I've been in school for far too long, but the more I code, and the more math that I use, the more I see the two as different faces of the same beast.

    You don't have look at much interesting software before you realize that the difficult problems -- the ones that are fun to solve -- are inherently mathematical. And conversely, once you start seeing programming languages as expressions of underlying mathematical forms, they start to become very similar to one another. And I'm not even referring to bleeding-edge research code, either -- look at P2P networking, and you're staring into the eyes of a massive, graph theory problem.

    Anyone can write a shell script. Very few people can express mathematical concepts in code.
  • by SadPenguin ( 776485 ) on Wednesday May 05, 2004 @10:38AM (#9063384) Homepage
    This is all so true. I am a computer science major at the Tufts School of Engineering, and the math requirement is huge. I appreciate it though, and I am seeing all the time that the more comfortable I am with math, the more clever and efficient my solutions to large computing problems becomes. Math is the basis of computer science. It allows us to *compute*, which is the obvious origin of computer science. The function of these machines is to process computative operations, and Math is the tool by which we can understand these things, and engineer new more efficient ways to perform them. CS without math is nonsense, who proposed that anyway???
  • If you drop the coding part of CS and focus exclusively on the theory, then fill in the rest with math and physics, I daresay that the result will be far better coding skills than if you focus on coding and throw in math and physics and theory as an afterthought.

    The reason is because math is a formal language, just like any programming language. Except math is far more expressive and complicated than any programming language. We handle the complexity by writing functions and abstractions to simplify it. However, in order to abstract, we have to dot all of our i's and cross all of our t's and lay out the law on when the abstraction will or will not work. Sounds familiar?

    The beautiful part is that there is no compiler and no test suite you can run against your "programs". You have to do it all in your head. If programmers were able to better predict the behavior of their programs, or if they were to write their programs in such a way that it could be done, then we would have far fewer bugs, or at least debugging would be easier to do.

    So, if you are a pro at math and physics, then programming languages is a toy to you.

    Why physics, and not just math? Math is programming for programming's sake. Physics is programming tied to reality in some way. Or in other words, you are practically applying the discoveries mathematicians make, and fudging stuff they haven't discovered yet, all in the interest of getting an answer that agrees with the way stuff really is. Physics adds that dimension of "reality" that is inescapable, just like real programming has the shadow of the "user" or "API" or such that is inescapable and must match what people want to see.

    There is one area that math and physics won't teach you, but it is easy enough to pick up as it is a rather simple system compared to, say, Thermodynamics or Quantum Mechanics. That is the way computers really work and the limitations thereof. This is the field of data modelling, data theory, B-Trees, and hashes and stuff, or the details about the various hacks people have come up with to stick mathematics into this system.
  • My view (Score:4, Interesting)

    by sagei ( 131421 ) <<gro.evolr> <ta> <evolr>> on Wednesday May 05, 2004 @11:11AM (#9063835) Homepage
    As someone who just graduated with both a CS and a Mathematics degree, I would say any (good) CS program is going to require a few semesters of Calculus, a semester of Linear Algebra, some sort of Numerical Analysis class, and a Discrete Math course. Most of these would probably be of the computational/applied variety - e.g., not proof-based. Since I am a Math guy, I would add a second semester of Discrete Math, personally. Maybe one being proof-based and one more applied.

    That said, personally I think CS majors should have a strong math background (the Calculus gives you that) but the only relevant Math, unless you are doing something specialized with a specific requirement, is what you learn in a Discrete Math course (what some programs actually call "Math for CS Majors" or similar).
  • by Ouroboro ( 10725 ) * <(moc.oohay) (ta) (tyoh_noraa)> on Wednesday May 05, 2004 @11:20AM (#9063952) Homepage Journal

    Does programming really have that much to do with math?

    I see or hear this question all of the time in relationship to a degree in computer science. The short answer is:

    You can make a living at programming without knowing much about math. Most programmers can get along with some basic algebra skills, and understanding boolean logic.

    The long answer is that the question asked in the context of a discussion of computer science shows a lack of understanding of what the field of computer science is. Computer science is not about java or c# or sql. Computer science is about understanding and analyzing why a computer acts a certain way given a certain set of conditions. It is about understanding the best way of instructing a computer to perform tasks. Its about knowing that a computer cannot perform certain tasks no matter how well it is programmed. What does this have to do with math. All of the tasks I mentioned are addressable with some mathematical analysis. A computer scientist will write a program to demonstrate a concept or test a theory. A computer scientist will not write a program to do inventory controll for walmart, unless there is some novel or interesting problems in that task that no one has tackled before. In general someone graduating with a cs degree is well versed in theory, and will have to catch up on the practical aspect of the field. For example, I graduated with a CS degree having only seen one Design Specification Document. I now deal with them every day.

    There are many trade schools out there that will give you training in a group of technologies (c#, sql, java, html) and call it a computer science degree. The best of these schools turn out software engineers (a very good skillset to have) the worst of these schools turn out people who are capable of passing a cetrification exam and that is it. In general these guys (the software engineers)can jump right into the business of writing software much more easily than someone with a straight cs degree. However the devry graduates tend to have trouble designing and understanding larger systems, and the ramifications of their decisions within those systems. I find this due to the lack of theoretical underpinnings to their education.

    Don't get me wrong. I'm not saying every trade school graduate is not capable of dealing with and analyzing large system analysis. I'm just sayind that in my experience that these graduates come out a little less well equiped for the task. And yes I know several CS graduates who are dundering idiots, so you don't have to tell me about your experience with one.

  • by mactari ( 220786 ) <rufwork AT gmail DOT com> on Wednesday May 05, 2004 @11:24AM (#9064002) Homepage
    Being a mathematician won't make the switch go off that allows you to expertly use object oriented programming. Nor will it help you create a good GUI. Nor will it help you validate date formats. You need a firm grasp on the math you learned in middle school, but the need to be a mathematician has diminished in many computer science workplaces to the point that the "need" is now a simple "added bonus".

    When coding was entirely procedural and focused almost entirely on crunching numbers, well, yes, math was a big deal, but the paradigm's changed greatly now. Now aptitude in pure logic [rather than a broad math bkgd, much less pure calc] is much more important in my experience. Relational database design and object oriented programming require great understanding of set theory, not calculus. I AP'ed into sophomore calculus and had two semesters (plus an audit of DiffEQ) in college, and haven't used that stuff once since entering the workplace (on my sixth year).

    When I look to interview and hire new programmers to my team, for pure intellectual skills I'm looking at good coding style, properly factored (as in refactoring [refactoring.com]) coding examples, and the ability to explain, say, why an example database schema is or isn't in good third normal form. The math I've seen in my tasks is very basic, whether the product I've helped develop was a simple web-based MIS, county-wide tax system, or financial tracker for the largest non-profits.

    In fact the only time it's been useful for me to understand mathematical concepts [beyond set theory] was when I thought our resident Geographic Information Systems (GIS) experts weren't considering all the ends and outs of different map projections [state.ga.us]. Even then, what I was commenting on was well outside of my job description of a database admin.

    It's good to know math, all other things equal, but in today's programming workplace, the emphasis on math in CS programs is unfounded. I'll even daresay that's why so mnay people who weren't schooled as programmers do so well -- I know about as many programmers that have impressed me with their proverbial skillz that had a degree in the humanities or no degree at all as I do those with a CS background.

    Wake up & catch up, CS programs, and teach what's useful in "the real world"!
  • My courses (Score:4, Interesting)

    by 1000101 ( 584896 ) on Wednesday May 05, 2004 @11:38AM (#9064154)
    I had to take:
    Calculus I
    Calculus II
    Calculus III
    Discrete Math
    Advanced Mathmatics for Engineering
    Numerical Analysis I
    Numerical Analysis II

    Numerical Analysis actually has programming projects and I can see using many of the algorithms in "real-world" situations. Discrete Math obviously has uses. Advanced Mathmatics for Engineering also has obvious CS related topics. The only math courses that I probably won't ever use in programming are my Calculus classes. However, the other math courses listed above are all built off calculus so you had to take them.

    P.S. If all you want to do is write average-joe database connections, perhaps CIS would be a better major rather than CS.
  • by ph43thon ( 619990 ) on Wednesday May 05, 2004 @12:07PM (#9064510) Journal
    Or.. well, it should not. A lot of the responses here mirror the main conception I came across while in University. "Everyone" wants to go to University, but they really just want to learn skills easily acquired at a trade school (not that there's anything wrong with that.) Engineering or CS (notice, it isn't called Computer Programming) majors should be embarrassed to be heard complaining about learning theory. How do you think people figure out new applications? There are entire countries full of hungry people who technically, know how to program. How are you better if that's all you know, too? My assumption is that the people complaining about theory simply find it too hard to understand. Though, the complainers are right, in a way, we don't need that many folks graduating from University. They should just be in some tech school. Oh, and the more mathematics you know, the better. How come most people don't get the fact that since math is just a big glob of abstract structures, you can take different parts and apply them to any application you want?

    p
  • by evilpenguin ( 18720 ) on Wednesday May 05, 2004 @12:29PM (#9064771)
    There are a lot of great threads in this discussion. For the most part I am firmly in the "math is good" part. The more types, the better. The barest, most essential minimum is actually often taught in the Philosophy departments of universities: Logic. A thorough grounding in logic is essential to being a good programmer. And I don't merely mean being able to throw together a chain of ands and ors that work, but being able to optomize logical expressions to find the most compact and efficient expression possible. I can't think of a single kind of programming that doesn't benefit from a fairly deep knowledge of symbolic logic.

    Beyond that, various mathematical disciplines have different levels of demand based on the work being done. I'm largely excluded from the world of real-time 3D graphics because I never went beyond the basics of the math that underlies it. (Some of the most terrifying evil geniuses I know are guys who can not only do all the math involved in projections and rotations, but can also implement it using only integer math -- they scare me!)

    You'd better have your logic (deep) and at least your algebra, pre-calculus, calculus, geometry (with trig). From there, every bit of math you learn broadens you and gives you the potential to see solutions your competitors (other job applicants) might not see.

    This is the value of all education: Having more knowledge at your fingertips is the rich soil that grows insights. I know a lot of people who think they they can use an Internet connection and Google and they are "programmers." To some extent, this is true. But you can't look for things you can't imagine or remember. Information and knowledge are not the same things.

    I don't limit this to math education either. Even history, music, literature, biology, chemistry, physics, and philosophy can provide the mind with the possibility of new ideas. Anyone looking for "the easy path" through education to a job is short changing himself. University time is the time to wallow in the sea of human learning. The goal is to be an educated person, not a unit of productivity fitted to a particular cog in the great machine of industry. We make and use machines for our rote tasks. Your goal in education (to me) is to become maximally adaptable: to achieve cerebral fitness.

    In other words, I think this question is the wrong question.
  • by Dr. Mu ( 603661 ) on Wednesday May 05, 2004 @12:58PM (#9065103)
    If you haven't got an aptitude for and a love of mathematics, I would urge you stay out of computer science. You won't succeed. The same talents and interests that bear on math also come into play in CS. They're hopelessly intertwined. Math is the foundation for computing, and the more you take, the better.

    As a minimum, I would suggest:

    1. Algebra, Analytic Geometry, & Trigonometry. Know this stuff cold. After 30 years in computing, I still use it every day.
    2. Logic. Ditto.
    3. Calculus up to, but not necessarily including Differential Equations.
    Very helpful at times:
    1. Linear Algebra
    2. Probability & Statistics
    3. Numerical Analysis
    4. Automata Theory (offered in CS departments)
    And if you're really into it:
    1. Number Theory
    2. Topology & Graph Theory
    A good grounding in one of the "hard" sciences like Physics can also be useful. And if you've got an aptitude for music, indulge yourself! Remember, it's not just the content of these discplines that makes them valuable. Each one teaches you to think in different ways. And an agile, flexible mind will make you more valuable to your future employers.

    Go for an education, not just training!

  • by tim1724 ( 28482 ) * on Wednesday May 05, 2004 @02:38PM (#9066159) Homepage Journal
    This is a list of the stuff you should learn, which may not exactly match what your school requires. This assumes you've already had a reasonable mathematics foundation in high school (classical algebra, trigonometry, single-variable calculus, etc.)
    • linear algebra
    • graph theory
    • combinatorics
    • logic
    • abstract algebra (very cool, and useful in a surprising number of ways)
    • multi-variable calculus
    • numerical analysis (I found it boring, unlike everything else on this list, but it can end up being useful)
    It's likely that you will have to take courses in subjects such as differential equations (either for your school's requirements, or as prerequisites for some of the above classes), but I don't think they're particularly useful to most people in CS.
  • Computer Lib (Score:4, Insightful)

    by bluethundr ( 562578 ) * on Wednesday May 05, 2004 @09:35PM (#9069702) Homepage Journal
    In 1974, Ted Nelson [hyperland.com] had some thoughts to share on this very topic in his revolutionary book Computer Lib [digibarn.com]. As the "crackpot, visionary, gadfly" he calls himself he stated that "Universities require higher math (usually calculus and at minimum linear algebra) before allowing students to program a computer. This is preposterous! This is akin to requiring a PHD in mechanics in order to drive a car down the road! Grade school kids can - and do - learn how to program computers with no math background at all!"

    This is a paraphrase, because unfortunately I don't have my copy in front of me at the moment. But I believe I got it pretty close. While I agree with Ted on the whole, I also concede that it entirely depends on what you want to do with your programming projects.

    If it's got anything at all to do with breaking apart, twiddling or mangling things like sound and video and many applications of graphics [kenmusgrave.com] then yes higher math will be a requirement. It will also be useful in helping one think logically enough to handle programmatic tasks more easily.

    That being said, there are still many many programmatic tasks you can accomplish...to make your life easier because someone else hasn't in the area you're programming in, or just to learn the internals - the process! - of programming: Ted was dead on (as he was about a lot of things!). No math will be required for a great many tasks!

"Protozoa are small, and bacteria are small, but viruses are smaller than the both put together."

Working...