Slashdot Mirror


Math And The Computer Science Major

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

210 of 1,203 comments (clear)

  1. Certain types of programming... by tcopeland · · Score: 5, Informative

    ...demand more math than others. Artificial intelligence techniques, 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.

    1. Re:Certain types of programming... by XMyth · · Score: 5, Insightful

      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.

    2. Re:Certain types of programming... by Anonymous Coward · · Score: 5, Insightful

      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.

    3. Re:Certain types of programming... by (trb001) · · Score: 5, Insightful

      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

    4. Re:Certain types of programming... by Anonymous Coward · · Score: 2, Insightful

      I agree with the general lack of math skills among most programmers. My degree is in Physics with a minor in Philosophy. My programming skills are self-taught. Some of the most useful classes for a programmer are the logic and symbolic logic classes in Philosophy. I have worked with engineers that love it when they can talk to me about a mechanical problem and I am able to simplify their math into logical units.

    5. Re:Certain types of programming... by StormReaver · · Score: 2, Interesting

      "trying writing even a simple Brickout clone without knowing basic trigonometry and you'll run into problems."

      Having written a simple Breakout clone back in 1990, I can assure you that you need to know little more than basic arithmetic. I wrote several remakes of old arcade games (Breakout, Asteroids, Missile Command, Space Invaders) before I could solve even basic equations.

      3D programming, to be sure, is a whole different ball of wax. That absolutely requires excellent Algebra, Trig., and Calculus capabilities to do anything useful.

    6. Re:Certain types of programming... by Impy+the+Impiuos+Imp · · Score: 2, Funny

      > Business and accounting are fairly
      > straightforward math (arithmetic) but compound
      > interest gets a bit more complicated.

      At U-Mich, at least when I went there, economics majors were required to take Calculus I, so that for one brief shining moment in their lives they theoretically understood the derivation of the continuously compounded interest formula.

      --
      (-1: Post disagrees with my already-settled worldview) is not a valid mod option.
    7. Re:Certain types of programming... by daVinci1980 · · Score: 2, Insightful

      What type of programming do you do, exactly, where the algorithm isn't the major focus of your work?

      Certainly not games, and almost certainly not commercial shrinkwrap products.

      I work out the algorithmic efficiency of every piece of code I write. If I didn't, my games would get bupkis for framerate.

      --
      I currently have no clever signature witicism to add here.
    8. Re:Certain types of programming... by metlin · · Score: 2, Informative

      You are right. Its not just AI, either, there are lots of other areas that demand heavy math.

      My undergrad was in ECE, and I've had to use a lot of math in stuff that I program (Matlab for DSP, numerical methods in C and the like).

      I've had significant experience in AI in the industry (~4 years as a research intern), and contrary to popular belief, good companies that build quality products do a lot of grassroot level stuff before getting down to code.

      And now, I'm in grad school and I program graphics for my GRA in OpenGL and C++ (which is once again, lots of math and physics). I've an internship coming up at a well-known lab where I'm going to be working on simulating fluid dynamics in Java (which is, again math).

      My masters project work is in AI, and uses statistics and various learning algorithms to create an existing behavioural programming language for adaptive agents - most of the time, I sit and work out the best possible algorithm or method of solving a particular deadlock or graphing problem, rather than code.

      That done, I find the need to be pedantic - programming! = computer science. IMHO, CS is more of the cool math, algorithms and the like, while programming is implementing that using code - the latter can be learnt through experience, the former is better learnt in class.

    9. Re:Certain types of programming... by Cheeko · · Score: 4, Informative

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

    10. Re:Certain types of programming... by kin_korn_karn · · Score: 3, Insightful

      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.

      And you will learn it, and employers will not give a shit, because they just want to connect a webserver to a database, which is not science, and when you realize that your ego about your science knowledge has prevented you from finding a job anywhere but McDonald's, you will realize the error of your ways, and you will want to connect a webserver to a database.

    11. Re:Certain types of programming... by AKAImBatman · · Score: 3, Insightful

      What type of programming do you do, exactly, where the algorithm isn't the major focus of your work?

      Not to defend the guy, but sometimes people use their knowledge unconsciously. For example, when I worked out a new collision detection algorithm for 2D games, I didn't need to write down the Big-O formula because it was straightforward enough for me to visualize the equation in my head. It took me a lot of time to realize that I did that,

      One has to wonder how many CompSci majors have claimed that it was a waste of time, then went off to use their education in the back of their head.

    12. Re:Certain types of programming... by the+chao+goes+mu · · Score: 5, Interesting

      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.

      --
      Boys from the City. Not yet caught by the Whirlwind of Progress. Feed soda pop to the thirsty pigs.
    13. Re:Certain types of programming... by The+Snowman · · Score: 2, Interesting

      Besides the basic Calculus everyone had to take, I took Discrete Math and Probability and Statistics. Boolean algebra is critical to anyone who programs using "if" and "for" statements, which should be everyone. "if (x == 7)" is easy even for non-programmers to understand, but a formal education in boolean algebra will give you a better insight into how complex conditional expressions work and how to simplify them (e.g. DeMorgan's Law). Statistics has limited direct use in computer science, but understanding it helps one to understand how important algorithmic efficiency can be.

      Advanced math (i.e. beyond college algebra) is not critical for programming but it helps.

      --
      24 beers in a case, 24 hours in a day. Coincidence? I think not!
    14. Re:Certain types of programming... by Christopher+Bibbs · · Score: 4, Insightful

      That depends on the employer. If you're going to work for a clothing chain, they probably just want a basic code monkey who can hook-up the modules they already bought. If you work for a company that makes money selling your software, they definately do want you to know and use your science skills. It is the difference between being a resource and being an expense. You'll find the exact same issue with other careers where you can do it right or just get it done.

    15. Re:Certain types of programming... by Anonymous Coward · · Score: 5, Insightful

      This isn't about ego. There's simply no point in choosing CS if you shy away from math and won't be working in a field where CS skills are required. You wouldn't enjoy it and consequently wouldn't allow yourself to apply CS methods. There's nothing wrong with connecting databases to webservers. People want that done. It's just not computer science.

    16. Re:Certain types of programming... by mrtrumbe · · Score: 5, Insightful
      And I will stay the hell away from any employer with that attitude. Why do you want the programmer who will be hooking up that webserver to that database to know math well and to be a good problem solver?

      -Because that person might be writing your SQL queries too.

      -Because elegant and reusable code usually comes from the minds of people interested in solving problems.

      -Because that person might be able to understand the problem domain better than some I-don't-give-a-shit-about-anything-other-than-code programmer.

      -Because that person might work in other areas of development eventually. Did you hire the person for ONLY their database-to-webserver knowledge? Was that shortsighted? Maybe you'd rather have a well-rounded and generally smart person to solve those new problems.

      We have a very rigorous hiring program at the firm I work for. We look for intelligent people with a wide base of skills who we think can easily adapt to new problems and environments. We DON'T look for specific knowledge in anything but our most senior positions. We have had wild success in finding very talented people because we are not looking for a person with skill A. How long will skill A be relevant for anyway? Will the person with skill A be able to do good work if we try to teach him skill B later? That seems pretty important to me.

      So the question is really: what are the most valuable qualities that a new hire can have? If your firm thinks that 3+ years of java experience is the most important quality a new hire can have, then I really don't want to work for them. I have over 3 years of java experience, but I in no way consider that my most valuable quality as an employee.

      Taft

    17. Re:Certain types of programming... by Phenris+Wolfe · · Score: 5, Interesting

      I actually swapped from CS to CIS because of Discrete Math II. The teacher made the class way too hard and didn't do a good job of explaining how all that stuff fit together. Interestingly enough, out of 4 CS/CIS majors that graduated together, I'm the only one doing actual work with computers (web development). I also failed graphics programming because of the math. That's bothered me ever since, and I've worked hard to improve my skills in that area. I think the real problem with learning math in the CS curriculum isn't the math, it's the math class. The class generally tends to be geared toward math majors, not people that are going to use math in computing.

    18. Re:Certain types of programming... by Glonoinha · · Score: 3, Insightful

      Bingo! Actually you see this a lot in first year trig or algebra classes being taught by grad students. They are up on the board solving some equation using standard trig or algebra when they see a nice shortcut via calculus, like the area between two curves. Solving the area between two curves is a real bitch using regular algebra or trig, and it is trivial when you use Calculus - like baby slobber trivial. So they do it, but none of the students have a clue what they are doing, because they don't even know that calculus even exists ...

      Many of the things that programmers take for granted as 'baby slobber trivial' are actually applications of advanced math - stuff like boolean operations, one to many relationships, many to many relationships, arrays with more than 3 dimensions, shortest path, sorting routines, loops, recursion, different types of conditionals, etc. These are simply part of our thought processes, an extension of how we think - but we were not born with this knowledge. Anybody that has spent time reviewing code from a 'self taught coder' knows what I'm talking about (no offense to the self taught coders.)

      --
      Glonoinha the MebiByte Slayer
    19. Re:Certain types of programming... by Laxitive · · Score: 5, Informative

      Bullshit. He is as cool as he thinks he is.

      Knowing good math.. makes you a better programmer. I would go as far as to say that computer science _is_ math. Knowing how to hook up a DB to a web front-end is not computer-science. It's a trade skill, like plumbing.

      The difference between some web-scripting guy, and a guy who knows CS, is like difference between an automechanic and an automotive engineer. The engineer might not be able to fix your engine, but he understands the workings of it much better than your average mechanic.

      From my perspective, being some random code-monkey is not too different from working at McDonalds. Pay might be better, but the work is still shit. Having a solid CS grounding lets you work in places and on problems that are actually _interesting_ and challenging. It allows you to actually contribute something new to the body of knowledge associated with computation.. or apply it well to some novel field.

      I can pick up and learn a new language or API given a few months. It would take years of focused study for a random PHP programmer to acquire the knowledge I have.

      Not to say that I'm special or anything.. but I've spent 5 years working my ass off to get myself to a proficient level in this area of study.. and most people who want to reach that same level will also have to spend several years doing it. It's just a question of wether you decide to do it early in your life (university), later in your life, or not at all.

      But it's definitely worth it.

      -Laxitive

    20. Re:Certain types of programming... by Anonymous Coward · · Score: 5, Interesting

      This isn't about ego. There's simply no point in choosing CS if you shy away from math and won't be working in a field where CS skills are required. You wouldn't enjoy it and consequently wouldn't allow yourself to apply CS methods. There's nothing wrong with connecting databases to webservers. People want that done. It's just not computer science.

      See, and that is the problem. Most jobs today in proramming require a BS in CS. Yet the majority of jobs I see have requirments like:

      Backend developer -Must have BS in Computer Science -Must have 3-5 years Java experence -Must have experence in Oracle, SQL server, etc -Must be able to write SQL code for enterpise applications.

      You don't need uber math skills to write good SQL or Java code for a database application. I found after college that while my math and writing skills had improved since high school, my database knowledge was lacking so I went to a technical school. There really should be some sort of IT degree that has a focus on practical knowledge rather than mathmatics. You will use high level mathmatics if you are working on video games, or CAD applications. But most programmers end up writing database interface tools.

      I'd like to see some type of IT degree that taught programming, networking, and troubleshooting. I'd rather hire a programmer that had a strong foundation in networking concepts than one who aced calc 3.

      Hell, they should also stress English judging by many of the programmers I've met.

    21. Re:Certain types of programming... by abe+ferlman · · Score: 4, Funny

      Of course, plumbers need math too. In fact, the more I do computer science, the more it reminds me of plumbing- setting the pipes up so the right stream gets to the right place at the right time in the right amounts. I have a lot of respect for plumbers because they can't just fix their code if they have a bug, they have to get it right the first time and put it immediately into production.

      --
      microsoftword.mp3 - it doesn't care that they're not words...
    22. Re:Certain types of programming... by John+Courtland · · Score: 4, Interesting

      You are most definitely right, CS is all math. When it comes down to it, all a computer can do is manipulate numbers. The sooner you learn that, the sooner everything a computer does makes infinitely more sense, and stops being a little black box.

      And as was said before, if you don't know math, good luck writing video games. Games like Quake perform tons of mathematical operations every second. (I remember reading from Michael Abrash that the Quake engine itself used 2 or so FP operations in the inner loop itself.)

      Also, the ingenuity that comes with being around elegant mathematics created from crazy equations REALLY helps in writing elegant and efficient algorithms. They are very similar in many regards, and the concepts transfer well.

      --
      Slashdot is proof that Sturgeon's Law applies to mankind.
    23. Re:Certain types of programming... by gcaseye6677 · · Score: 3, Insightful

      This is a problem that is found in many math classes at large state universities. The classes are taught by professors that are at the school to do research, and have no desire to teach first year calculus to undergrads. Its just something they have to do while they're trying to work their way up to full professor. So they do a terrible job and don't really take the class seriously, knowing that it won't matter in the grand scheme of things. Worse, some of these professors feel their job is to weed out as many first year students as they can, so there is no real instruction going on in the class. The only students that really succeed at math in U.S. schools are the ones that have the desire and ability to teach themselves.

    24. Re:Certain types of programming... by Chibi · · Score: 5, Insightful
      And you will learn it, and employers will not give a shit, because they just want to connect a webserver to a database, which is not science...


      I agree with you, but only to a point. In most cases, your employers will just care that it's done on time and under budget. But what happens when system performance is not acceptable? That's when you've got to figure some things out. Look for performance bottlenecks, etc. Times like this are when a math background (and I consider algorithms to be math) will be a life-saver.

      Just looking at my co-workers, there are some who have strong math backgrounds. There are others with pretty minimal backgrounds, and it really shows in their code and problem-solving abilities. And guess who my boss has more faith in?

      As a side note, I'm not saying that any of this requires formal education. You can learn a lot of this stuff on your own, if need be. It's just that if you've been to school, there's a hope you had to get through these classes and at least some of it stuck.

      --
      If all you have are silver bullets, everything looks like a werewolf.
    25. Re:Certain types of programming... by Coryoth · · Score: 5, Insightful

      And you will learn it, and employers will not give a shit, because they just want to connect a webserver to a database, which is not science, and when you realize that your ego about your science knowledge has prevented you from finding a job anywhere but McDonald's, you will realize the error of your ways, and you will want to connect a webserver to a database.

      On the other hand, when your job of just connecting a server to a database gets outsourced to monkeys in the congo, the person who learned the math and the science will be getting a serious software engineering and design job.

      Jedidiah.

    26. Re:Certain types of programming... by estoll · · Score: 4, Insightful

      Writing a web front end to a database certainly is computer science. Especially when you enter the realm of web-based enterprise software or use technologies like .NET.
      * Object oriented design
      * Reusable components
      * Disconnect clients
      * Distributed services
      * Application integration
      * Replication
      * Remote objects
      Web applications raise the bar when you start talking about issues such as:
      * Transactions
      * Concurrency control
      * Unpredictable user interactions
      * Browser incompatibilities
      * Security
      Even if you don't use the computational aspects of math it doesn't mean you aren't using math or that math isn't necessary for certain CS fields. Math is the basis of all CS. Without a good understanding of math and the critical thinking skills that go along with it a person in CS becomes the type that just gets the job done. A person with strong math skills is much more valuable.

      --
      http://www.askthevoid.com
    27. Re:Certain types of programming... by Gilk180 · · Score: 5, Interesting

      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.

    28. Re:Certain types of programming... by gtall · · Score: 5, Interesting

      What a load of fetid dingo kidneys. Does Newton's calculus or quantum mechanics ring a bell? Tell us how you want to be connecting webservers to a database for the rest of your life because you were too narrow minded to learn anything else. Math opens up the whole world of technology and science to you, you might find that refreshing after coming home from being told that a software program is going to be connecting that webserver to the database from now on.

      And if you do not develop the joy of learning while you are in school, most reputable employers will figure that out before you even get finished with interview...they won't be happy you do not wish to learn.

      By not getting a well rounded education, your brain as a muscle, will get soft. If you ever find a niche, you will be fed and cared for as a mushroom.

      And you might find that the world is a bigger place than what someone will pay you for. Math and science education is central any country's future. You should want to learn it for that reason alone.

      Companies run by math and science illiterates are an abomination, and they are no fun to work for either.

    29. Re:Certain types of programming... by fitten · · Score: 2, Interesting

      Yeah... and because you have no understanding of combinatorial mathmatics, you don't realize the horrible performance and scalability issues that you will be getting because you don't understand your problem or how the tools you are using work. Bad indices, poor caching, crappy queries, and a host of other things cause the project to be a dog and the customer and your boss aren't happy with what you did.

      Most code monkeys think along the lines of: if you can't get it to work right, you need a bigger hammer. I've seen a ton of them like you. While having a CS degree doesn't automatically mean that you know what you are doing (I've seen plenty that don't), the odds are much higher that someone with a degree will be more disciplined than someone who doesn't have a degree. Plenty of folks take the stance: "I don't have a degree and look how great I am" and somehow think that they are the norm when, in fact, they are the exception (or just deluded because they've never been around *really* good programmers, almost all of which have higher eduction) when they are really just the big fish in a small pond.

    30. Re:Certain types of programming... by Godeke · · Score: 5, Insightful

      Here here and amen! When looking for programmers, I don't care as much about your specific experience as your ability to think. Early on in hiring, I thought experience in a space was the critical element (after all, it was an *easy* assement to make). After several programmers who had to be given specs more detailed than the code, I realized I was wasting a lot of energy because I was trying to work with coders, not programmers. I now make a clear distinction between those who can follow a crystal clear spec, but can't think independently (coders) vs those who can follow a typical rapidly changing spec (programmers) and those who can create a spec to solve a problem (analyst). I have nearly zero use for coders - they cost more to feed specs then the output is worth.

      Anyone who thinks programming is "wiring front ends to databases" is probably a coder. Yes, there is quite a bit of that kind of work in the business space, but a programmer will not wire your database to a GUI: they will come up with tools to do so more effectively. Similarly, anyone who thinks "skill X" is the be all and end all of programming is probably a coder. (I once interviewed a guy who was pretty good with Oracle. Commanded a six figure income. When he found out that the offered project used SQL server 2000, he mocked our company, to our face and to the niche community we work for. In a bit of "the best revenge is success", he solicited *us* for work after the dot com crash. Seems he was out of work for over a year due to his disdain for anything but his tiny niche skill, and our project was looking pretty good.

      --
      Sig under construction since 1998.
    31. Re:Certain types of programming... by ThePretender · · Score: 2, Insightful

      yes, because we all know that those 'serious software engineering and design' jobs you mention don't get outsourced

      might want to go to India to speak with someone smarter than you with a better grasp on mathe and science than you'll ever have - more than likely he'll do better work for less.

    32. Re:Certain types of programming... by Zareste · · Score: 2, Insightful

      Well obviously game programming requires a sick level of math, but if you're not planning to program games or complex graphics, you'll just be wasting your time learning it in college.

      In fact most of the info you'd need for any type of programming is available in the internet. You won't get a degree that way but it's nearly instantaneous and won't cost you several thousand dollars.

      --
      I am NOT a number! I am a - oh wait, I'm number 761710. Look! 761710!
    33. Re:Certain types of programming... by Anonymous Coward · · Score: 2, Interesting

      AC because I'm on campus...

      I have to agree with GP more than you. I've got 5 years experience in Major Company's software division AND a Computer Science degree AND the complete math sequence from a Chemical Engineering major. IOW I've got quite A LOT of math background: only one course shy of a math minor and perhaps two courses shy of the Electrical Engineering math requirements (partial differential equations). I've also got: 4+ years DB2 experience (some really complex SQL to virtualize data cubes from a 3N relational schema, for example). I would be certified in both DB2 application and administration but for lack of time to take out of my actual job duties (and lack of my current manager's support for me doing anything new, but that's a personal problem on her part).

      Reality check: my math skills are useless in the real world of "computer programming". I've actually gone about THREE YEARS between needing a floating point number at work! Now, if Major Company hadn't REQUIRED a Comp Sci degree to go full-time, I'd agree with you. But all the big employers require far more training in skills and creativity than they ask for.

      The math probably DOES make us both better programmers, but its lack does not hinder anyone else from doing our jobs to 95% satisfaction of management.

      I can pick up and learn a new language or API given a few months. It would take years of focused study for a random PHP programmer to acquire the knowledge I have.

      And at this time in my life I can pick up the critical 70% of a new language/API in about 2-10 days. I'm not knocking you, I'm sure your skills are quite excellent, but they are shared by hundreds of thousands of others--who are paid exactly the same as you or I are--who have no math beyond trigonometry.

    34. Re:Certain types of programming... by gordlea · · Score: 2, Insightful

      I would say that Computer Science is an applied Math degree...

      --

      Choose yer poison: Prophets or Profits

    35. Re:Certain types of programming... by Malc · · Score: 4, Insightful

      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.

    36. Re:Certain types of programming... by TXG1112 · · Score: 4, Insightful
      I agree with you, but only to a point. In most cases, your employers will just care that it's done on time and under budget. But what happens when system performance is not acceptable? That's when you've got to figure some things out. Look for performance bottlenecks, etc. Times like this are when a math background (and I consider algorithms to be math) will be a life-saver.

      I do enterprise Capacity Planning and Performance Tuning for big databases. (Anywhere from 100 to 1000 Gb) I cannot tell you how often poorly designed application architecture causes nasty performance problems, precisely because management thinks that anyone can connect a web front end to a database. Our typical developer has no idea how to optimize for db performance. The application owners don't like hearing you need to re-design your application, because we can't tune it any further. I am tired of telling them that throwing faster hardware at the problem will not help, as a faster machine will only choke the database harder. It is obvious to me that these "developers" do not have adequate problem solving skills to effectively do their jobs. Their code may be clean, but the application design is so poor that its performance will always suck.

      Math (and all problem solving skills)are very important for a developer, otherwise one is just a code monkey.

      --
      I will not be pushed, filed, stamped, indexed, briefed, debriefed, or numbered. My life is my own.
    37. Re:Certain types of programming... by vinton · · Score: 2, Interesting
      Boolean algebra is critical to anyone who programs using "if" and "for" statements


      Can't stress this point enough. I'm pretty tired of cleaning up 20+ line blocks of nested if/else statements--it's unnecessarily complex, bug prone, and impossible to understand.


      And then there are the really mysterious things like this (I've actually seen this):

      if (num < limit) {
      ...
      } else if (num >= limit) {
      ...
      } else {
      error("Unexpected error. Please contact customer support immediately.");
      }
      This kind of stuff makes Baby Knuth cry. At least learn enough to know that there are no other options besides "true" and "false".
    38. Re:Certain types of programming... by Pig+Bodine · · Score: 4, Insightful
      The only students that really succeed at math in U.S. schools are the ones that have the desire and ability to teach themselves.

      I don't completely disagree but there are a lot of issues; it's not just that there are professors who aren't interested in teaching. I'm an assistant professor in a math department. I teach numerical analysis to classes comprised of about 75% computer science majors and the rest math majors. There are several things beyond the control of a professor that can impact the quality of instruction. One of the biggest is that many of the students are not interested in the topic; they just want to pass to meet their departmental requirement for a numerical analysis course. Hence I get students trying to copy homework or codes. Just last week I had two students turn in spline code that was a bad C translation of Fortran code. I haven't hunted down the source but their codes were identical and neither student knew Fortran. Having to check for this sort of thing takes time and does not make it easy to teach.

      To make matters even worse, the students put off taking numerical analysis until they are about ready to graduate by which time they have forgotten much of the calculus they learned in their first two years. In less mathematical disciplines, many students put off taking calculus and end up forgetting their high school math. And that's assuming the high schools did an adequate job preparing them for calculus in the first place.

      And then there are teaching load issues. Math departments generally teach more courses than any other department with the exception of English. Everyone has to take some math. Proportionally we are overloaded with classes to teach. Further university guidelines on tenure are often not written to take this into account. Mathematicians at many universities are expected to write as many papers, get as many grants and supervise as many graduate students as computer science professors while teaching more courses. For some reason this doesn't always work even when the professor has the best of intentions.

      The closest thing to a solution that I know of is to hire non-tenure-track lecturers to specialize in teaching calculus, college algebra, etc. That is already done at most schools but often there are rules about retaining such faculty. Even when they are doing a great job (and many do---teaching is what they do and they take it seriously) university policy can prohibit renewing their contracts past an arbitrary time (e.g. 3 years). This makes it difficult to maintain a staff of good teachers.

      There may be professors slacking off but in my (possibly biased) opinion the institutional problems are more common. Students shouldn't be able to put off taking math. The universities should hire some portion of permanent faculty that is dedicated to teaching. And promotion guidelines should be written to reflect what the university realistically expects from both tenure-track and non-tenure track faculty in each department.

      Possibly that's more griping than you wanted to hear about university politics...

    39. Re:Certain types of programming... by admiralh · · Score: 4, Interesting

      And I will stay the hell away from any employer with that attitude

      I really like the way that sounds, and I agree with you whole-heartedly. Unfortunately, i believe that attitude is completely divorced from the reality of most (but not all) companies.

      After 14 years in the industry with a BSEE and MSCS, my company closed it's St. Louis office in late 2001. I was out of work for 7 months in 2002 and underemployed for a year and a half after that. I have you're so-called "wide base of skills," but they weren't the right ones. Companies here in St. Louis were not at all interested in poeople who can "can easily adapt to new problems and environments," they were looking for those specific technologies and if you didn't have those 3 years of J2EE experience, they didn't want to even acknowledge your existence.

      Of course I attribute this to the typical HR department, who wouldn't know a good engineer from a hole in the ground. So their method of separating the wheat from the chaff is a score card based on what technologies you have on your resume. So even though I had done Java and was well acquainted with OO through my experience and schooling, they wouldn't even talk to me because I didn't have "work experience" with J2EE.

      Some of us who have families to support don't have the option to just walk away or cherry-pick companies. We're forced to take what we can get. This attitude runs rampant through corporate culture. I would love to be less pessimistic, but unless there is some massive groundswell, nothing will change.

      --
      Hopelessly pedantic since 1963.
    40. Re:Certain types of programming... by ari_j · · Score: 5, Insightful

      You don't even have to do 3D graphics to get into this stuff. I wrote a space simulation engine for PennMUSH 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.

    41. Re:Certain types of programming... by Tablizer · · Score: 2, Insightful

      But if you wonder how complex SQL queries can be simplified and executed with the least amount of resources, then CS is for you,

      Are we talking about implementing database engines, or using them?

      If the latter, then ideally the query writer should not have to worry about efficiency in execution. One of the alleged advantages of relational algebra is that the machine decides the optimal path, not the query writer. Queries ideally define WHAT you want, not HOW to get it. However, in practice the vendors bastardized relational theory and query languages. But working around these bastardizations is mostly learning the tweak patterns of specific vendors rather than any universal math. In other words, needed is a swamp-guide more than an engineer or raw math genius.

    42. Re:Certain types of programming... by DarkSarin · · Score: 2, Interesting

      Ah yes, HR, the favorite punching boy of disillusioned employees everywhere.

      The sad part is, I agree with you, and I am pursuing a related field (Industrial/Organizational Psychology) which is very similar but has one tool that many HR folks lack: We like to do research and find out what makes the best employee. Off the top of my head I believe that cognitive ability (sometimes called IQ) is most important in programming, not a particular skill (although that is helpful too). Trouble is, many HR folks will only look at what skills people are using, and not what is underneath those tasks, which is why they want someone with 15+ years of experience with .NET.

      --
      "We don't know what we are doing, but we are doing it very carefully,..." Wherry, R.J. Personnel Psychology (1995)
    43. Re:Certain types of programming... by the_2nd_coming · · Score: 2, Informative

      it is called CIS

      --



      I am the Alpha and the Omega-3
    44. Re:Certain types of programming... by WindBourne · · Score: 2, Insightful
      Not only will the other 10% get you, but simply getting a CIS degree or a bunch of certificates is absolutely worthless.

      In the start-up that I am part of, we have had a BS-CS (me), a BS-EE, a BS-CIS and a CISCO/Novell/MS certified person. So what happened with all of these?

      The certified person produced NOTHING. He was able to handle netwwork questions
      able to tell about all the cisco equipment, buit nothing about juniper, dlink, or linksys (certified 5 years ago). Knew network protocols, but could not apply it. He is gone.

      The CIS produced nothing. He was suppose to do DB (postgres) and code in perl/C/C++. He was absolutely worthless. He never produced one thing and never was able to learn anything new, even he attended several top classes paid by our company.

      The EE produce about 100-200 LOCs that was directly relevant, but the code was sloppy.
      He had great ideas and was able to discuss them, but could not (perhaps would not is a batter choice of words). He was awesome in a sale support position, but failed in a tech position. I would say that his math and personality helped him, but his understanding of software engineering was a disaster.

      I just got done hiring several others. One was a certificate-based person, but we needed him only as a network admin/network sales support/lightweight sysad.
      The other person that we selected was a CS who just got out of college several years ago. We hired him over a 15 year BS-EE becuase the EE lied about his background/knowledge.
      He claimed that he was a embedded Linux person with years of experience, but did not know any shell or scripting language.
      When asked about C/C++, he said that fork will (singlular) return a handle to a child process, but did not know what exec was for.
      He only knew about ext2/ext3 FS and NTFS. Never heard of any other FSs (including reiserfs, xfs, jfs, cramfs, and amazingly nfs).
      In his knowledge of IPC, he had no idea what signals, named pipes, pipes, semaphores, or unix sockets were, only FIFOs, shared memory, general sockets, and mutexes.
      He failed big time.
      Had he had a CS background, he would have at least had enough knowledge to fake it well. At best, this guy is a MS coder, but I think that he had been a manager for some time.

      --
      I prefer the "u" in honour as it seems to be missing these days.
    45. Re:Certain types of programming... by Slime-dogg · · Score: 3, Insightful

      And that's all bullshit. Believe me. I'm a computer science major, and I connect web sites to databases. Everything that you do in the business world (business apps, yada) has very little to do with pure computer science.

      The closest thing to it is probably doing the DB work itself, and making sure that your tables are normalized, and that you have the keys / indices done correctly. Sorry, but everything in your list is basically just a concept in programming, which you can learn outside of the realm of computer science.

      --
      You need to restart your computer. Hold down the Power button for several seconds or press the Restart button.
    46. Re:Certain types of programming... by alienw · · Score: 4, Insightful

      That is NOT computer science, simply because writing a frontend to a database requires minimal applications of that stuff. A nice litmus test for codemonkey versus computer scientist is whether you will have to create or use a single algorithm that is not in the standard library. Web applications do not require that 99% of the time, so they can be developed almost completely by codemonkeys.

      If you can publish something you developed in a scientific peer-reviewed journal, it's computer science. If you simply put together something from prefab pieces, it is NOT computer science.

      Anyway, saying that you need to know computer science to program a frontend to a database is like saying you need a degree in electrical engineering to wire up a house. The truth is, there are way too many people with CS degrees and not enough CS positions. But don't mix CS with coding. They are very far apart.

    47. Re:Certain types of programming... by the+morgawr · · Score: 2, Informative
      That's why smart kids go to schools like Kettering where you get to actually work for (and get paid by) a real company in your field from the start (not just an internship; you have to get so much work experience and finish a major project for your company to graduate) and build up your resume while you get the technical background and mathmatic knowledge.

      disclaimer: I am a Kettering grad. There are other schools with co-op programs but Kettering is the largest, the oldest, and the most prestigious. It's also the only place where it's required (at most other's it's an option).

      --
      The policy of the United States is worse than bad---it is insane. -- Ludwig von Mises, Economic Policy(1959)
    48. Re:Certain types of programming... by be951 · · Score: 2, Interesting
      Both sides of this discussion have valid points.

      Certainly you want smart people who can find or create solutions to your problems. But that doesn't necessarily mean someone with extensive math skills. Certain areas of compsci/programming will need advanced calculus, probability, etc.... But most CS grads will probably be doing programming or associated work on business apps. Most of the time, that requires little math. Now, tuning those apps (if any tuning is done at all) may call for some math, or not. Most languages and environments have established techniques for improving performance as well as more general methods (e.g. adding or removing an index, removing redundant or extraneous code, etc....) that may be math based but don't really require the programmer to have a detailed understanding of why they work.

      If your firm thinks that 3+ years of java experience is the most important quality a new hire can have, then I really don't want to work for them.

      Sadly, this is the shortsighted view most hiring managers seem to take. If their requirements say you should have 3 years of Java, you probably won't even get an interview with 2.5 years experience.

    49. Re:Certain types of programming... by admiralh · · Score: 2, Interesting

      Ah yes, HR, the favorite punching boy of disillusioned employees everywhere.

      The sad part is, I agree with you, and I am pursuing a related field (Industrial/Organizational Psychology) which is very similar but has one tool that many HR folks lack: We like to do research and find out what makes the best employee.

      You just hit on the most important thing. You do research. Something that seems beyond the ken of most corporate HR departments.

      I have absolutely no problem with using reasonable screening tools to help decide which employees will be best, as long as those tools have sound research behind them.

      The reason why HR is the punching bag for us "disillusioned" employees is that they are the ones preventing us from getting a fair hearing with the people we would be working with, by using reasons that seem arbitrary and capricious. The perople who get rewarded accoring to typical HR measures are the ones who essential say, "To Hell with what the company needs, I need to use <latest technology buzzword> so I can put it on my resume."

      --
      Hopelessly pedantic since 1963.
    50. Re:Certain types of programming... by aWalrus · · Score: 4, Insightful

      Here here and amen! When looking for programmers [...]

      Ok. Let's nitpick: It's not "Here here". It's "Hear, hear". Why do I bring this up? Because so many people here are saying that yes, you need math and problem solving skills. No one mentions that being able to communicate effectively (and correctly) is also very important.

      I think the new tendency in the IT industry is to have well-rounded people who can do a good technical job, but still perform passably at the graphic design and copy writing stages. I'm not just talking about Web Development here. Every area of IT is approaching this point.

      As deadlines and Time-to-shipment get smaller, programmers are getting thrown more to the forefront of the development cycle. This means dealing with humans, whether it be through well structured language, fanciful graphic design or good interface design. A lot of people are still stuck in the "I'm a rilly good coder, I don need that language stuff aniways" attitude, and I believe that is detrimental to the industry as a whole.

      --
      Overcaffeinated. Angry geeks.
    51. Re:Certain types of programming... by Peter+Cooper · · Score: 3, Insightful

      I totally agree with your coder vs programmer insight, but took objection to this:

      I once interviewed a guy who was pretty good with Oracle. Commanded a six figure income. When he found out that the offered project used SQL server 2000, he mocked our company, to our face and to the niche community we work for.

      That's nothing to do with the point you were making.. he was just a vendor/method snob. Most Linux/BSD/*NIX people would similarly mock a company who used 100% Microsoft solutions. Most C++ programmers mock Visual Basic programmers. Most Oracle geeks would mock a company who relied on mySQL, and so on.

      Come on, if you're suggesting SQL Server 2000 is in the same league as Oracle, that's just plain wrong. He shouldn't have been bagging on your company, that's unprofessional, but the fact he thought SQL Server 2000 was stupid was hardly an indication he was a moron.

    52. Re:Certain types of programming... by Moeses · · Score: 2, Insightful

      You are most definitely right, CS is all math.

      Pretty much.

      When it comes down to it, all a computer can do is manipulate numbers.

      Here you haven't thought it through far enough. All a computer can do is manipulate phenomenon that we identify as electrons and through that manipulation cause a variety of other physically observable events. It is your mind that makes the numbers.

      Computer science is about math yes, but it's not about computers, really. Those particular machines are studied more intently in computer engineering and software engineering.

      It should be noted that most CS degrees do teach a lot of software engineering classes, there is a large intersection of material amoung the various computer oriented degrees.

    53. Re:Certain types of programming... by Frizzle+Fry · · Score: 2, Interesting
      Here here and amen! When looking for programmers, I don't care as much about your specific experience as your ability to think

      I agree. A large part of the reason employers want to see that you have done well at math and computer science in school is that it shows that you are smart and good at solving problmes. This isn't to imply that everyone with a degree fits this description, but you have to play the odds, and someone who has a strong math and cs background and has been successful in those areas is probably going to be better at solving the problems your company needs solved than someone who has read a "how to" book and knows how to copy and paste from code examples.

      This is the same as in many other areas. For example, law schools are impressed by students who have done well in their classes in a difficult major, even if this doesn't give them skills directly applicable to the practice of law.
      --
      I'd rather be lucky than good.
    54. Re:Certain types of programming... by Godeke · · Score: 3, Interesting

      I'm not suggesting SQL 2000 is in the same leauge as Oracle, but the project was for a single server install. Not some mission critical uber-install where Oracle even made financial sense. But you seem to have missed the *real* point: the man was *unwilling* to consider work outside of Oracle to the point he spent a *year* unemployed.

      Would you want to work with someone so dedicated to a skillset that they would deride your company during an *interview* and was so fanatical about it that he would prefer to burn his savings than be gainfully employed? In my opinion, he was a *coder*, which was my point. He couldn't see past his coding skill set to understand that I didn't need regional failover between sixteen servers, I needed someone who could understand third normal form, write SQL queries and learn our system enough to be a valuable team member.

      --
      Sig under construction since 1998.
    55. Re:Certain types of programming... by C10H14N2 · · Score: 2, Interesting

      There seems to be a common thread here that if you didn't do a degree in math, not only are you "just a code monkey" but you're also not a "well-rounded" individual and you're clearly not using your brain.

      Suffice it to say, there are those with other-than-cs degrees out there that must program as a function of their fields on a daily basis. NO, they're not computer scientists, but it's pretty fscking arrogant to imply that anyone programming a computer that doesn't have a paltry Bachelor's in CS (whoopee) is somehow an undermench incapable of abstract thought.

      Get over yourselves...

    56. Re:Certain types of programming... by ACPosterChild · · Score: 2, Interesting

      BROWSER INCOMPATIBILITIES??? CS???
      Umm, yeah, right.

      OO design? No, not even.

      *Maybe* "Distributed services", but only if you go in to analysing the graphs and their nodes, etc.

      Security? Again, no. Possibly the math behind encryption and random tcp sequence numbers, but NONE of the policy and application-specific stuff that a user of the technology touches.

      Computer Science IS math. The "Science" word is completely misleading on a number of levels. Computer Applied Math would be a better term.
      Unless you're formally modelling and / or proving your system (Transactions, Concurrency, delays, etc), you're not doing Computer Science.

      I wish I'd have saved some mod points; I don't mind the posts, it's the damnable ludicrous moderation that goes on.

    57. Re:Certain types of programming... by Anonymous Coward · · Score: 2, Interesting

      Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.

      -Dijkstra

    58. Re:Certain types of programming... by alienw · · Score: 2, Informative

      You could say that, but I am pretty tired of people equating computer science with computer programming as a trade. CS is largely a theoretical field, and much of it is quite abstract. It is certainly not about writing web applications and ensuring browser compatibliity like the grandparent claimed.

      Again, look at my analogy of electrical engineer versus electrician. One of them designs complex electrical or electronic systems that require fairly deep theoretical knowledge. The other runs cables and installs breaker boxes, outlets, and switches. Both require skills and training, and the main difference is the depth of theoretical knowledge required. It's the same thing with programmers versus code monkeys.

  2. A Warning by ziondreams · · Score: 5, Interesting

    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? :-)

    --
    01000001 01011001 01000010 01000001 01000010 01010100 01010101
    1. Re:A Warning by NixterAg · · Score: 4, Insightful

      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.

    2. Re:A Warning by hJordanH · · Score: 5, Interesting

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

    3. Re:A Warning by Dana+P'Simer · · Score: 2, Interesting
      I am sorry to break this to you, but DeVry has a really bad reputation in the engineering community. I, personally, would never hire a DeVry graduate without some really glowing referals from someone I know and trust and niether would most of the engineers I know. I have worked with a few DeVry grads and not one of them demonstrated the skills to really do well in programming.

      To be fair, that does not mean that you are like those people I have worked with and I may have been extremly unlucky in the samples that I have encountered.

    4. Re:A Warning by Nick+of+NSTime · · Score: 3, Funny

      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.

    5. Re:A Warning by jtwJGuevara · · Score: 4, Insightful

      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.

    6. Re: A Warning by Black+Parrot · · Score: 2, Informative


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

      And for those you need discrete math, not the traditional calculus requirement, or the trig that severeal people have mentioned.

      Yes, you may need trig, calculus, or some of the really weird stuff if you do certain kinds of application but for "computer science" per se it's discrete math all the way. Too bad not many university programs seem to understand that fact. (Or maybe they just can't win the battle with their college of sciences and/or math department.)

      --
      Sheesh, evil *and* a jerk. -- Jade
    7. Re:A Warning by Perl-Pusher · · Score: 2, Informative

      DeVry is a vocational type "college". They supposedly teach the skills needed for a career and not much else. Many of these schools claim you can get a 4 year degree in 2 years. They generally don't have requirements in english, foriegn language etc. So most are not accredited by the same accrediting board as colleges are. Many have no outside accreditation of any type. They aren't publically supported and are a corporate owned "for profit" only type of school. Universities are public or private institutions and get most of there funds through endowments and/or government subsidies in addition to tuition. And are regionally accredited through an independent board setup and agreed upon by all of the universities it covers. One such organisation is the Southern Convention of Colleges. I can't say for sure about DeVry, but most of the vocational or technical schools only want your money. Most provide at best poor teaching and are generally frowned upon by most employers.

    8. Re:A Warning by jneemidge · · Score: 2, Interesting

      This is only partly correct. The correct part is the technical/vocational schools are not accredited by the same boards as traditional universities. The incorrect (and slanted) part of this is that technical schools are legally required to be accredited by other boards set up for them, and are legally prohibited from being accredited by the boards which accredit traditional universities. _None_ of them have no outside accreditation; it's a legal requirement that they be accredited. Most of what you wrote _was_ correct through the mid-1990's, when there were some spectacular problems in the technical school industry. As a result of these problems, these schools came under tight scrutiny and regulation and the rules and outcomes are very different now.

      You can make the case that they only want your money, but that's not entirely accurate either. Part of their accreditation process measures their graduation rates and placement rates (placement meaning a student is working in a job in the field for which they were trained). If either of these fall out of norm (which is roughly mid-80% on both measures) the school loses accreditation. Losing accreditation means the school is out of business. So, in order to keep getting your money, there's a _very_ strong incentive to actually get people graduated and out there working.

      It also means that technical schools tend to set up strong employer relationships so that their students can get placed. The ones I'm familiar with have an "advisory board" of 50-100 local companies (small business to Fortune 500) who come in regularly, do their own audits and inspections, suggest changes, etc. In return, these companies take graduates from these schools seriously.

      You are correct that the standards are very different. Technical schools are interested in one thing only: taking a student and getting them graduated and placed in the field of their training. They're not interested in well-rounded students, they're not interested in teaching English, math, sciences, etc. beyond those required for the job. Their mission is to educate students who aren't well suited to traditional university programs. Most people who _are_ well suited to traditional university programs would feel slighted by a technical school, but that doesn't mean they're not highly valuable to the population who can't handle a university program (due to lack of prerequisite education, life pressures, access, or whatever else).

      I have no stake at all in the technical school area -- I just know several people who work in it and have gone over all of this in detail. They're quite sensitive to it, because the common perception of what they do is completely wrong.

  3. oh good lord yes by 74nova · · Score: 3, Insightful

    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.

    --
    use your turn signal! you people act like it's divulging information to the enemy
    1. Re:oh good lord yes by ponxx · · Score: 5, Insightful

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

    2. Re:oh good lord yes by 74nova · · Score: 2, Insightful

      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 in the past, i think.

      --
      use your turn signal! you people act like it's divulging information to the enemy
    3. Re:oh good lord yes by das_cookie · · Score: 2, Insightful
      we have to know math because the math majors cant program, usually.

      Is this your opinion, or do you have some sort of factual evidence to back up this claim? I have a math degree and can program quite well, thankyouverymuch. I know two PhD's in math who can sling code better than most CS majors ever will. I know other math degree holders in the programming field who are extremely competent. While I have no actual statistics to back up my observations, at least I have anecdotal evidence gained over my 25+ years in the IT field, and I find your statement to run counter to my observations.

      To relate this to the original article: the article is dead on, but I'd take it a step further. Ditch the CS degree. Get a math degree and use your electives to learn about computers, programming, databases, and software engineering, the emphasis being on practical rather than theoretical. This approach will likely gain you a minor in CS as well, an impressive 1-2 combination. By the time you complete the CS degree in the article, you're 2/3 the way to a math degree anyway. Want to distinguish yourself from the crowd? The math degree folks hold an edge over CS degree folks in this regard. If you can do math, you can do anything you set your mind to.

      That said, I'm not slamming CS majors. I know several of them, too, who are all quite proficient at their careers. IME, the book on CS majors is that too many of them don't pay enough attention to the math side.

      --

      You! Yes, YOU! Out of the gene pool!

    4. Re:oh good lord yes by Palindrome99 · · Score: 2, Informative

      There's more to it than that.. Math has been around for a lot longer than programming.. any many of the reasons that we need to learn mathematical concepts is that we know how to prove things about math, and there's lots of research going on about how to apply those principles to computer programs.

      For instance, take language theory and Turing machines.. these are purely mathematical concepts, yet very important to computer science and engineering...automata in general are very important in software.. they're not just useful for analyzing a language, but for any sort of procedural system... how about logic? There are many many different types of logic (Modal, CTL, First Order)... again, these are purely mathematical... but we, as programmers, need to know them so we can truly analyze our software, and be able to know and prove how they work..

      Furthermore... algorithms are a HUGE part of a programmers job... to really be able to analyze an algorithm, we need to know concepts like summations, calculus, series, etc. We need to know these things for ourselves, not just to make some code for a mathematician...

    5. Re:oh good lord yes by TedCheshireAcad · · Score: 4, Insightful

      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.

    6. Re:oh good lord yes by NichG · · Score: 2, Insightful

      Actually, undergraduate physics programs often include some basic programming classes as part of a lab component (not hefty programming, but the kind of stuff needed to do data processing). And by the end of it, most people end up having some knowledge of programming just because it was needed or useful for one of their other courses. The impression I get is that the physics software at most universities is written by physicists, as opposed to non-physicists who were given the algorithm to implement.

  4. HS math question. by grub · · Score: 5, Interesting


    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.

    --
    Trolling is a art,
    1. Re:HS math question. by (trb001) · · Score: 4, Insightful

      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

    2. Re:HS math question. by Mandi+Walls · · Score: 4, Funny
      Fess up. You never used graph paper for math class. You used it for D&D.

      --mandi

    3. Re: HS math question. by Black+Parrot · · Score: 4, Funny


      > my little brother who recently turned 18 for a beer

      In my day we turned 18 without any such incentives.

      --
      Sheesh, evil *and* a jerk. -- Jade
    4. Re:HS math question. by wass · · Score: 2, Funny
      It's even worse than you imagine. I was a TA for the introductory physics course for biological majors at Johns Hopkins University. Because of things like graphing calculators, as well as the ability to store vast amounts of textbook information in calculators/PDA's, students weren't allowed to use calculators on the exams (so as to level the playing field). In turn, the math was made easier (ie, no finding the square root of 743.2 for instance).

      It was really sickening that several students couldn't do relatively simple math or utilize scientific notation. For example, a simple quiz question could boil down to the student multiplying 4000 x 0.00007 and not being able to do it! Some students told me to my face that they couldn't do this type of stuff without a calculator! Sometimes after I explain it to them and point out how obviuos it is, they kind of slap their foreheads for not knowing it. But still, these kind of simple scientific notation calculations should have been taught to them at least in high school, if not earlier.

      The scary part is this school is one of the top top pre-med schools, and many of these students will go on to become top doctors in their fields. Some of whom were baffled by simplistic mathematical calculations.

      An amusing anecdote, although probably urban legend, goes as follows. Understand that for pre-meds physics is usually considered the hardest class because it's the only one where full-blown memorization doesn't work. A pre-med, frustrated with his/her physics class goes to complain to the professor. He/She says "Physics is stupid, why do pre-meds need to know physics anyway?". The physicist responds "Oh, it saves lives." Premed inquires how. Physicist responds "It stops the idiots like yourself from becoming doctors."

      --

      make world, not war

  5. Nail on the Head by millahtime · · Score: 5, Informative

    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.

    1. Re:Nail on the Head by AKAImBatman · · Score: 5, Interesting

      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.

  6. Computer Science != Programming by Anonymous Coward · · Score: 5, Insightful

    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.

    1. Re:Computer Science != Programming by Gumshoe · · Score: 5, Insightful
      Dijkstra summed that sentiment up best:

      "Computer Science is no more about computers than astronomy is about telescopes."
    2. Re:Computer Science != Programming by UTPinky · · Score: 5, Interesting

      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.

      --
      I'm only paranoid because everyone is against me...
    3. Re:Computer Science != Programming by jshaft · · Score: 3, Insightful

      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.

    4. Re:Computer Science != Programming by wwest4 · · Score: 5, Insightful

      I have to call bullshit on this knee-jerk arrogance.

      MANY CS majors become coders, and it is a perfectly acceptable outlet for the skills, knowledge and wisdom gleaned from a good CS degree program.

      Just because some people are fortunate enough to be able to pursue a career in academe or in bleeding edge R&D or other theoretical pursuits, does not mean that good programming is not applied computer science.

      If anyone believes otherwise, have another gander at the standard courses in a modern CS degree at any reputable university. You'll find tons of software design theory that can be DIRECTLY applied to writing software.

    5. Re:Computer Science != Programming by Dyslexicon · · Score: 2, Interesting

      It isn't entirely true that (good!) CS programs aren't for people who want to write code. I went to a University of Wisconsin satellite school for a few years and took courses in their CS department. The CS major had different options for the "emphesis." There was the traditional theory emphesis which is what is being discussed above, but there was also a code-monkey emphesis for those of us who wanted to write code.

      in retrospect, though, this might explain why the professors couldn't have coded their way out of a cardboard box.

    6. Re:Computer Science != Programming by tonythepony · · Score: 3, Informative

      Exactly. A computer scientist's need for math is much greater than a programmer's. Coputer science is an applied mathematics. When you design an abstract algorithm and you're technical manager wants to be sure that it necessarilly terminates - it helps if you can write a formal proof - even if just for yourself.

      As for what math you should take - at a minimum you should take an intro to advanced mathematics class. You'll learn like the Principle of Mathematical Induction, how to write proofs, some basic set theory stuff, etc.

      Then take another math course depending on your interests. Interested in using fractals for image compression? Take a course in nonlinear dynamic systems. The point is - if your interested in something you can do with computer science, look for a math course that goes through the underlying theory.

    7. Re:Computer Science != Programming by Seekerofknowledge · · Score: 2, Interesting

      I totally agree with your sentiment, about that class being the "truest". It's direct relation to programming languages, and even computers in general is so outstanding, it is sad that your classmate could not see it.

      To explain mysef, relatively new programming languages are all just context-free grammars, and computers are just exceedingly complex Turing machines. Both of these ideas are part of Automata, and part of the deeper understanding of computing science.

      Your classmate probably just wanted to learn to code (as in monkey-style), and not do anything more abstract.

    8. Re:Computer Science != Programming by fnord42 · · Score: 2, Insightful

      Finally people are starting to get it

    9. Re:Computer Science != Programming by mrtroy · · Score: 2

      Dont mod that up just because the author is disagreeing.

      CS != programming. He is correct in saying that.

      And then you go off topic and say MANY CS majors become coders, and it is a perfectly acceptable outlet for the skills, knowledge and wisdom gleaned from a good CS degree program
      Well no shit sherlock, CS teaches algorithms and theory which would be used in programming, providing people with the background to become a good programmer. The parent did not say anything like CS students do not become programmers.

      --
      [I can picture a world without war, without hate. I can picture us attacking that world, because they'd never expect it]
    10. Re:Computer Science != Programming by kalgen · · Score: 2, Insightful

      Of course many computer science majors become programmers. However, computer science is not about programming -- it's about deciding what to program.

  7. Math and CS by MarkPNeyer · · Score: 3, Interesting

    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.

    --

    My blog
  8. Why is maths useful for computer scientists? by sweet+cunny+muffin · · Score: 5, Insightful

    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.

    1. Re:Why is maths useful for computer scientists? by appelflapje · · Score: 2, Funny

      Advanced math? You call linear algebra advanced math? Hmm... Maybe I overrated math. :)

    2. Re:Why is maths useful for computer scientists? by daehrednud · · Score: 2, Insightful

      That's because you're being a computer programmer, not a computer scientist. Think about what computer scientists/engineers have done to make your job not require mathematics. You're working with webpages over a network I presume, thank many CS's for routing algorithms and queuing theories that make such traffic feasible and practical. You can thank statistical analysis for the memory and process management that so fluidly works underneath your code at the OS level. Think of all the math involved in the complexities of circuits, each capacitor and inductor are placed in perfect mathematic precision to generate a proper current/voltage. There are possibly thousands more examples that I couldn't possibly imagine. Don't kid yourself, you are merely an end user standing on the shoulders of giants. You don't need to know about the mathematical complexities of your underlying system and your customers don't need to know about all the lines of code you've written.

      Oh, by the way, any logic(ands, ors, or nots) appear anywhere in your code?

  9. lots of math by genner · · Score: 2, Insightful

    Excpect everything up to calculus 3, and possibly physics which is a calculus class in disguise They have litte or nothing to do with programming, Most of what you will learn in colledge has little to do with anything.

  10. Heh. Try Neural Networks without linear algebra by Anonymous Coward · · Score: 3, Insightful

    Neural Nets store their information in matrices of varying dimensions. Without knowing how to manipulate them, you'll be in a world of pain.

  11. Of course you need math... by OEJack · · Score: 3, Funny

    How else are you going to figure out how much money to ask for in Rupees? ($1USD = 44.5641 Rupees as of this morning)

  12. wrong assumption by Anonymous Coward · · Score: 2, Informative

    programming != computer science

    if you think programming is all there's to computer science, then don't study computer science.

  13. co-workers without a good math base... by hornrimsylvia · · Score: 3, Insightful

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

  14. Statistics also important by GGardner · · Score: 4, Insightful

    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.

    1. Re:Statistics also important by zymurgy_cat · · Score: 3, Insightful

      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.

      --
      -- Fugacity: Confusing chemists since 1908
  15. Double Major by ePhil_One · · Score: 5, Insightful
    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.

    --
    You are in a maze of twisted little posts, all alike.
  16. I recommend by NixterAg · · Score: 4, Informative

    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.

  17. Programs are math by aim2future · · Score: 4, Interesting

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

  18. The reason we take math... by baudilus · · Score: 3, Insightful

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

    1. Re:The reason we take math... by Znork · · Score: 2, Insightful

      "Math isn't about math; it's about thinking."

      That's always the excuse for any subject that gets criticised as a timewaster. Once it gets hard to defend it's always really about something else.

      If the point really is to teach thinking, why not develop teaching methods and subjects that would be far more efficient at teaching that? Why not teach 'critical thinking', 'memorization techniques', 'problem solving', 'logic' and other general approaches instead of subjecting the impressionable young minds to subjects that many find boring and pointless (critiques with a certain level of validity too), and are likely to turn them off from learning at all?

      Teaching kids to think by teaching them math is like teaching them to cook by setting fire to them. It may get the general concept of crisping meat across, but it's a bit painful and not quite to the point.

  19. 18 credits by mjh · · Score: 3, Interesting

    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.

    --
    Key to financial independence: Spend less than you earn. Save and invest the difference. Do it for a long time.
  20. Philosophy also good by catherder_finleyd · · Score: 2, Interesting

    I have found that Philosophy, especially Logic, is also very applicable to Computer Science. It has been especially useful in relational database design and development.

  21. CS = Math by Dana+P'Simer · · Score: 3, Insightful

    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.

  22. Think!!! by jmac880n · · Score: 2, Insightful

    More than anything else, higher math teaches you how to solve problems.

    How to approach complexity step by step and break it down into manageable pieces.

    How to deal with abstraction.

    How to THINK.

    Anyone who is an accomplished programmer will appreciate these skills.

    It is by no means the only way to learn this, it just seems to work. If you can master higher math, you can usually pick up programming.

  23. Well it all depends by mrtroy · · Score: 2, Informative

    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.

    --
    [I can picture a world without war, without hate. I can picture us attacking that world, because they'd never expect it]
  24. Computer Science AND by NotWallaceStevens · · Score: 3, Insightful

    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.

  25. linalg and physics a must for graphics by zer0mass · · Score: 2, Informative

    Inorder to do anything useful with 3D graphics, you will definitely need knowledge of linear algebra. Whats important for CS students is the application only, but understanding the theory is always a definite plus. Also, an aptitude for physics is also very important inorder to simulate reality. You may want to check out 3D Math Primer for Graphics and Game Development by Fletcher Dunn.

  26. Re:CS has very little to do with math by nathansu · · Score: 2, Insightful

    Wow, are you sure about this tough guy? If you want to be a programmer that does nothing but hack java code for your run of the mill application, sure you don't need any math. But if you want to do somthing USEFUL in the CS field (research, grad work, etc.) you cannot DO WITHOUT the math.

  27. College by duffbeer703 · · Score: 4, Interesting

    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.

    --
    Conformity is the jailer of freedom and enemy of growth. -JFK
    1. Re:College by (trb001) · · Score: 2, Interesting

      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 that, while not terribly useful, allowed me to gain some additional respect with the "old timers" (read: over 40) that I was working with by being able to intelligently talk about langauges no longer in wide circulation. People who come out of school without having done additional programming on the side are going to be in for a shock...and will probabaly move up to management post haste because they won't have the necessary skills to program efficiently.

      --trb

    2. Re:College by gcaseye6677 · · Score: 2, Insightful

      I agree that the primary purpose of higher education should be for the student to become well rounded and to learn fundamentals so they may later teach themselves new technologies. However, schools do need to provide students with some practical, real world knowledge in order to make them employable. The fact is, employers hire someone to do a specific task. Whether they should do this or not is up for debate, but its what they do. The well rounded thinker with a lot of theoretical knowledge who has no real experience in any particular area will be at a huge disadvantage compared to someone who can say "I programmed in C++ and Java for 3 years". In order for a CS/CIS curriculum to properly prepare a student for the working world, there needs to be a mix of theoretical education in fundamentals along with practical, trade school type of skills.

  28. Speaking as a Math and Comp Sci double major by nebaz · · Score: 5, Insightful

    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.

    --
    Rhymes that keep their secrets will unfold behind the clouds.There upon the rainbow is the answer to a neverending story
    1. Re:Speaking as a Math and Comp Sci double major by microTodd · · Score: 3, Insightful

      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.

      --
      "You cannot find out which view is the right one by science in the ordinary sense." - C.S. Lewis on Intelligent Design
  29. Only one problem with that article: by Otto · · Score: 4, Insightful

    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.

    --
    - Give a man a fire and he's warm for a day, but set him on fire and he's warm for the rest of his life.
  30. Wrong question by acidblood · · Score: 2, Insightful
    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.
    --

    Join the NFSNET. Our prime goal is making little numbers out of big ones. http://www.nfsnet.org/

  31. I don't use the advanced math itself, but by Gannoc · · Score: 2, Insightful

    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.

  32. Everything there is... by microTodd · · Score: 4, Insightful

    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.

    --
    "You cannot find out which view is the right one by science in the ordinary sense." - C.S. Lewis on Intelligent Design
    1. Re:Everything there is... by Coryoth · · Score: 2, Interesting
      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.


      To be honest, that's just stupid. You should already be badass proficient in basic algebra and trig going into your final year of high school. I am constantly amazed by the poor level of preparation in mathematics of North American, and particularly US students coming in to College. Where I come from introductory calculus was covered in the second to last year of high school, and the only math course going in the final year (I'm counting statistics as its own discipline) was a pure calculus course. Most students didn't seem to have any difficulty with this. It seems to me that the US sets its expectations of students too low with regard to mathematics education at the high school level.

      Jedidiah.
    2. Re:Everything there is... by CreateWindowEx · · Score: 2, Informative
      Graphics engines - trig, geometry
      Physics engines - Calculus, trig

      Just to add to your list, both graphics and physics engines require linear algebra. Writing either one of these things without a completely intuitive grasp of vectors and matrices will be very challenging. Furthermore, physics engines typically use numerical integration, so the closed-form techniques that make up the bulk of calculus aren't really applicable, and for multibody stuff you'll probably need ODEs/PDEs and the ability to wade through some pretty hairy equations. Most of the good literature relevant to realtime physics engines comes from either the mechanical engineering world or the robotics foks, so hitting the books pretty hard will be required anyways if you just have an undergraduate CS degree.

      One thing that was really helpful to me in college was to work as a tutor in the math center--it's one thing to pass some calculus classes, even doing fairly well, but the experience of having to repeatedly explain the concepts got me to get a much more solid grasp of the stuff I had just quickly learned for a test and then forgotten. I nearly got a double major in math, but didn't feel like taking three upper level math courses plus an extra senior thesis project my last year, but in actuality, experience gained from being a tutor helps me far more in my current work than if i had gotten the dual major and taken some more esoteric math classes.

  33. CS is NOT programming! by DeckerEgo · · Score: 2, Insightful

    Computer Science, in spite of popular opinion, is not programming. It's the science of computation. This is a MAJOR misconception that causes nearly 75% of CS students to drop out in the first year.
    At Indiana University (granted it's a liberal arts college), I learned more about theorems, thesis, mathematics and logic than I did any language. For example, I learned the Church-Turing thesis but not how to make a GUI. The first year of my CS degree was spent entirely in Chez Scheme (a derivation of LISP) for the explicit reason to teach us computation, not languages.
    If you want to learn how to write something stupid for your enterprise (as Linus says), get a IS or IT degree. If you want to learn what a flip-flop is, how to stack circuits to do multiplication or what recursion is, get a CS degree. Those who detest Von Newman matrices need not apply.

  34. Discrete mathematics by Jmstuckman · · Score: 3, Insightful
    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!

    1. Re:Discrete mathematics by sceptre1067 · · Score: 2, Interesting

      Finally getting my degree after 10 years in the business...

      1. Statistics is good, as mentioned elswhere almost everybody in the business word could use a better grounding in statistics. For real world application this will help you from performance maonitoring to coming up with TCO numbers.

      2. As mentioned above Discrete/finite mathematics can be usefull. From my experience it helped clarify some approaches to SQL queries... in other words between set theory and symbolic logic, you will get a better grounding on how to deal with large data sets. Plus logic is good for the daily political discussions in the lunch room!

      3. Data structures... more abstract but if your a DBA for something like Oracle and decide you want to play with your file structure (e.g. heap versus btree, etc.) This will give you some insight into why one might option might be better than another. As for coding... its nice to know, but as pointed out somewhere else, modern languages take care of a lot of the plumbing for you so you don't really have to know it.

      The rest... it's o.k. Out side of that I think, again this has been mentioned before, it depends as to what you intend to do after school. If you end up in the sciences, then you need the math as far as it applies to the area your in.

      If you winde up in the business world, logic and stattistics are going to be the two big things you need. Plus, imo, a good grounding in gathering and presenting empirical data (e.g. not just tracking your time, but really looking at how long it takes you to do something or the server to do a batch process and showing to you superiors unrefutable data.)

  35. The Question Is Sad by kmsigel · · Score: 2, Insightful

    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?

    The fact that the second and third questions are even asked in a serious (or semi-serious) way reflects a sad state. How can you do any "real" programming without knowing Boolean algebra, theory of computation, integer math, algorithms, etc.

    Without knowing the underlying math, how can you understand the logical and arithmetic operations that your CPU can perform? How can you understand whether a given task is solvable? How can you understand how much time a solution should take so that you can compare it to how long it is actually taking?

    Ok, rant over.

  36. Amusing Anecdote by AKAImBatman · · Score: 3, Interesting

    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 at him and call *bullshit*. He didn't talk to me after that. :-)

    1. Re:Amusing Anecdote by AKAImBatman · · Score: 2, Insightful

      Hardware can scale almost linearly (well not quite but close).

      Our ability to scale the speed of serial computations is primarily limited by the physical constraints of the universe. e.g. Light travels at a set speed. In order to make a computation happen faster, you have to make a more dense processor. As you start bumping up against the next limitation (e.g. computing at the molecular level) you have to get more clever about how you perform computations (e.g. Quantum computing.) Getting more clever requires application of new physics to computational sciences.

      Scaled to infinity? Not likely. He would eventually ran into 'transmisions' problems where he did not have the bw to even feed the nodes or have them return the results somewhere meaningfull.

      That was basically my point. He claimed he was using a super-powerful cluster to do exhaust modeling for a nuclear rocket. While he may have done such a thing (probably with incorrect assumptions in the physics model), he certainly did not do it on a cluster of the size he had claimed. Alternatively, he may have made up the performance numbers because he didn't know what the hell he was doing.

  37. Re:Math and CS are different things by tssm0n0 · · Score: 2, Informative

    I've always thought of CS as a branch of math. The field of computer science was founded by mathematicians, and the important concepts of computer science are heavily based in math (such as the study of algorithms and data structures).

    That being said, I don't think of CS as majoring in programming, it's more about the theory behind programming. Kind of like the relationship between physics and engineering. Students may not always learn the most practical details about programming, but they will come away with a good understanding of how computers and software work (assuming they went through a good program).

    The new IS majors that are out there might be a better choice if you want to focus on just high level programming. It could be a good choice for people who want to learn the practical skills, while computer science will exist for those who want to learn the science behind computers.

  38. You Should Learn How to do Proofs by Walker · · Score: 2, Interesting

    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.

  39. Re:Here it comes ... by haystor · · Score: 5, Interesting

    It really depends on what you're doing. I tend to think of programming as split into two groups:

    Computer Science programming - embedded, drivers, algorithms, etc...

    Business programming - This involves moving regular data between buckets. Math isn't so important as common sense. Both seem to be in short supply.

    It's been my experience that CS majors can perform well doing either. But there are other skills necessary for business programming that will allow a mediocre programmer to produce excellent work (such as knowing the business or being a wiz with SQL).

    I speak from the perspective of a math major who does business programming. I work with a lot of other people who do just great but occasionally run into a brick wall when some strange math comes up. These tasks come up only rarely. The most common place to see a math weakness manifest itself is when they foolishly matrix a couple sets of data and everything grinds to a stop. Even that is easily fixed (as long as they tested full sets of data before going into production). The only time I've *had* to be involved was implementing some probability and statistics packages.

    All things being equal, I'd take the guy with math. It means he can think, comprehend written works and probably has a good sense of when his numbers add up (very useful in business programming).

    --
    t
  40. Discrete Math by Mignon · · Score: 2, Informative
    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.

  41. Coding IS math. by Tim · · Score: 5, Insightful

    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.

    --
    Let's try not to let fact interfere with our speculation here, OK?
    1. Re:Coding IS math. by Paulrothrock · · Score: 2, Funny
      Anyone can write a shell script. Very few people can express mathematical concepts in code.
      int c = 1;
      echo c;
      c++;
      echo c;
      Woohoo! I'm a mathematician!
      --
      I'm in the hole of the broadband donut.
  42. Computer Science Engineer by SadPenguin · · Score: 4, Insightful

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

    --
    sigSEGV - doy!
  43. Engineering Probability/Statistics by sphealey · · Score: 2, Insightful
    The most useful math class I ever took (from the perspective of engineering, IT, and life in general) was Engineering Probability. Note the word Engineering in the title - it was taught in the Engineering School, not the Math Dept or (shudder) the Business School. I have used techniques from that class at least once a month for 20 years, and I cannot say that about any other class (except Intro to Political Thought, but that's another topic).

    The particular class I took was one of a pair; mine was 2/3 probability and 1/3 statistics. The twin class was 2/3 statistics and 1/3 probability. Either version would have worked in the end, but I suspect most engineers find probability more interesting.

    Take them if you can find them, even if you have to go to another school to do so.

    sPh

  44. Good point. by Saeed+al-Sahaf · · Score: 4, Insightful
    Since when did DeVry have a "surprising reputation"

    Modded "flamebait" but it's a good point. DeVry, ITT Tech, Phoenix U and so on have questionable standards. Why? Because their main purpose is to separate students from money, not teaching. I think that even a more or less unknown state college is better, at least their mandate is to teach, not separate money from the marks. The parent also mentions that he thinks these schools primarily teach management, and that is certainly true of Phoenix, who's primary clientele is management looking for the coveted Masters so as to be able to move on to tenured PHB status.

    --
    "Who are in control, they are not in control of anything - they don't even control themselves!" - Glen Beck
  45. Re:Short answer: NO by Anonymous Coward · · Score: 2, Insightful

    OK, fine. So you can program.

    What does any of that have to do with Computer Science?

  46. Marvin Minsky said it best.... by sfm_guy · · Score: 3, Interesting

    When Daniel Hillis, founder of Thinking Machines, and all around brain-wave, first went to MIT, he asked AI guru Marvin Minsky what he should study. Minsky said, "Study math, because that way, everything you learn will still be true in 10 years." I've been a software engineer for 8 years, and majored in math in college. I had some disadvantages starting off in trying to convince companies to hire me as a programmer, but once I had that critical one year of experience, the math degree has only been an advantage. Moreover, if you are the math guru where you work, you get to be the hero and alpha geek all the time. My sole regret in taking math? That I didn't take more.

  47. Think math by Max+Malini · · Score: 3, Interesting
    As someone with applied math degress (CS, physics minor) turned software engineer, I'd like to respond to a few ideas presented so far.

    "Math is vital to computer science"

    Well, it's certainly important sometimes, possibly often. I used a lot of math writing a conversion library for 3D file formats, but not so much writing a user system in php.

    Learning to think is what's really important. I got my first software job by explaining at the interview that my skills were in complex problem solving -- skill they had trouble teaching straight CS people they had hired.

    "You really dont need much maths to write a shopping cart applications"

    Possibly not, but... I taught applied calculus at a university for many years as a grad student and I always loved it when students asked me "When we I ever use this?". A seemingly silly question to ask in an APPLIED Calculus class to be sure, but the most important use was always that if payed attention, the course would give them problem solving and thinking skills that would help them advance in whatever field they chose. Bottom line: After school you may not remember the Fundamental Theorem of Calculus, but the thinking skills will be invaluable.

  48. I think it's a good example as to why.. by PrimeWaveZ · · Score: 2, Interesting

    The US doesn't have as many CS folks around anymore.

    I was a CS major for one year back in the Summer 2001 through Spring 2002. It was quite enjoyable, though difficult. I quit because of all of the math classes. I was not looking to be a computer hardware engineer, but in what I want to do (business oriented, non-entertainment software) there is less of a use for advanced mathematics.

    Sure, math is still important. I don't deny that. I'm saying that I am not going to be writing the next Photoshop (yay vector manipulation!) or video game with the "most realistic phyics yet."

    Maybe it is because I've never ever liked math (except for geometry/trig) but that was my weakness in CS. Now I'm a liberal studies major, though I am a service technician for a major computer company now. Oh, sweet irony!

  49. My experience by kneecarrot · · Score: 2, Interesting
    I graduated from the University of Waterloo in Ontario, Canada in 2000.

    Computer Science was actually under the Faculty of Mathematics. So while I was majoring in CS, I had to satisfy all the requirements for a 4 year math degree. I ended up with an Honours Bachelor of Mathematics in Computer Science.

    I remember thinking what an odd situation this was in first year. But, as time went on, it made more and more sense. The math turned me into a great problem-solver and honed my analytical skills. When programming tasks were given to me, I didn't think about which lines of code to use, I thought about the problem itself and how best to describe it, simplify it, and abstract it.

    --

    I always save my last mod point to mod up a good troll. You people are too serious.

  50. You got it backwards by wizarddc · · Score: 2, Interesting

    If you want to be a programmer, a real hardcore programmer, you should major in something other than CS, and then minor, or perhaps double major in computers. I would suggest this to most people. Sure, there are reason to be a pure CS major, but think about the degree you have. Physics, Chemistry, Biology and Mathematics don't change nearly as quickly as Computers do, so your degree will be worth more longer. Plus, once the IT field hits rock bottom, you can simply move into the field of your degree. My cousin is a senior at NJIT, and he told me this straight up. I never went to college for programming, I just kind of picked it up along the way.

    --
    Th
  51. All Math / Physics and No CS Makes a Good Coder by jgardn · · Score: 4, Insightful

    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.

    --
    The radical sect of Islam would either see you dead or "reverted" to Islam.
  52. Re:True! by AnonymousKev · · Score: 2, Funny
    "Can you hack math?"

    Should I be scared that my first thought was an image of a nerdy math-type hunched over an HP calculator and unleasing PI=2.7 on the internet.

    "I've done it! I've successfully hacked math!
    1 0wnZ0rd j00 Py7h4g0r4z!"

    --
    Anonymous Kev
    Proudly posting as AC since 1997
    (Finally got a dang account in 2004)
  53. Young fellas today by pommiekiwifruit · · Score: 2, Funny

    You and your new-fangled Cartesian co-ordinate system. Why, back in Euclid's day we just had points, straight lines and circles, and we were grateful!

  54. Why Math? Because it makes you THINK! by Azzaron · · Score: 3, Informative

    I went through a computer science undergrad which was part of the math faculty. As such, about a third of my courses were in math... not CS, math.

    At first, I thought along the same lines as many of you. Unless I got into some hardcore graphics coding, I never thought I'd use half of what I was learning. And you know what? I was right.

    However, what took me a while to realize is that this conclusion does not make math courses a waste. Those math courses, full of really tough proofs and theorems, tought me how to think. Every single day I use the thought patterns that I learned in my math courses to perform my programming job much better than if I had not been exposed to those math courses.

    Were the math courses hard as hell? Damn straight! Were they worth it? Definitely :)

  55. My view by sagei · · Score: 3, Interesting

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

    --

    Robert Love

  56. Computer Science vs Programming by swollkin · · Score: 2, Interesting

    While I was an undergraduate I was first a math major and then switched over to computer science. When I got there, I was shocked by how much the other CS majors around me despised mathematics. After observing this behavior for some time and thinking about it, I have realized what the real issue is.

    In the past, Computer Scientists really were scientists of computing, but now there is a new niche: commercial programming. Many people who want to be commercial programmers end up in the Computer Science major but have no interest in the theoretical aspects of computing. They just want their degree and their job. I think that the modern trends in commercial programming require a new approach. If you just want to be a programmer, a computer science degree is going to annoy you with lots of math and computing theory.

    After working in the commercial programming world I have come up with a new analogy. Programmers are to Computer Scientists as construction workers are to engineers. One is a trade, one is a science, and we should stop lumping them together at the higher education level.

  57. What is computer science? by Ouroboro · · Score: 4, Insightful

    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.

    --
    When I want your opinion I will beat it out of you.
  58. Three Words by Raunch · · Score: 2, Interesting
    Big O Notation

    Just to know what makes a good program involves quite a bit of math. Nothing made the speed of nested loops clearer to me than this. Basically, it lets us define the best worst and median cases of general types of code with very simplistic functions.

    O(1) - loopless program
    O(N) - One loop from 0 to N
    O(N^2) - One loop from 0 to N with another loop nested in it that is from 0 to N

    So, the length and basically anything that is only executed once is considered inconsequential. It also shed light on
    "I can just do this with two nested loops, why would I possibly have to write this with a/an <advanced data structure>?"
    is a stupid question.

    Coincidentally (no it's not a coincidence), the number of CS sutdents that change their majors to something else during the first year is about 40%.
    --
    George II -- Spreading Freedom and American values, one bomb at a time.
  59. Because you need it. by Tangurena · · Score: 3, Informative
    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, 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.

  60. Math for CS by Viking+Coder · · Score: 2, Insightful

    (1) You can always code better, if you know more about the problem you're coding to.

    (2) Every domain will in some ways be impacted by mathematics.

    Therefore (by 1 and 2), more math skills will almost always make you better equipped to understand any given problem domain, and will almost always make you a better programmer.

    And that's just computer programming; there are parts of Computer Science that have nothing to do with programming computers, but have everything to do with logic and math.

    --
    Education is the silver bullet.
  61. Coding ain't math, not any more by mactari · · Score: 4, Insightful

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

    --

    It's all 0s and 1s. Or it's not.
    1. Re:Coding ain't math, not any more by h311sp0n7 · · Score: 2, Insightful

      I couldn't agree with you more but I wouldn't go as far to say that CS programs should "wkae up and catch up, [...] teach[ing] what's useful in 'the real world'!" Of course its a matter of opinion, but you have to take into account that a B.S. in Computer Science is about innovation. To be "innovative" you need to know the Computer Science timeline, what's been used to get where we are today, and where were going. Hence the need for Discrete Math, Combinational Math, Automata Theory, Numerical Analysis and Computational Models.
      However, I do think that the emphasis on Calc I,II, III and Diff-EQ should be dropped down to just Calc I and maybe Calc II. Like someone said "its the initiaition." The math from high school will help but if you are going to be an creative, innovative, and do I dare use it, efficient, programmer (not this dumb-downed Visual Basic crap), you need the Math theory. It may not be used much in today's realm but if you're doing challenging work in the game industry or getting paid for scientific research for instance then you definitely need that math.
      I hate to say it, but the higher-level math (the Calcs) is like a preliminary for Grad School. If you do well there, then your school or others might want you to go to grad school if you did well in CompSci overall.
      Sorry to digress, but yes, logic, intellectual skills, communication, attitude, and coding styles/examples/techniques are the key factors today. You can teach a humanities or arts individual to be an excellent programmer, but you shouldn't discount the "comp-math" (discrete, etc.) from the equation in the long run as it is an invaluable asset. Anyone can be a programmer, but very few are excellent "programmers" (developers) without the "comp-math" theory.

    2. Re:Coding ain't math, not any more by ivan256 · · Score: 2, Insightful

      It's amazing to me that with the number of people like you out there, there are still people who wonder why programs are slow and resource hungry when written with modern object oriented languages. If you don't understand the math, you don't understand the complexity of the underlying algorithms, and you don't understand why you need a 3 Ghz Pentium 4 to do what everybody else was doing 15 years ago.Just because we have tools and paradigms to hide complexity when you're programming doesn't mean you shouldn't understand how they work. The tools are there to help reduce error, and speed development. They're not there to lower the bar of understanding required to produce code for a living.

      Coding may not be math, and Computer Science (which is what this is about, isn't it?) certainly isn't coding, but math *is* useful in the real world. If you don't understand that, you'll be doomed to never realize why some of the projects you manage fail.

  62. Re:Coding and Math: a short proof... by eric76 · · Score: 2, Interesting
    Short proof: YES and NO

    Proof?

    For what it's worth, the best software developers I've ever met all had a good math background. The better the background, the better quality work done by the software developer. The worse the background, the worse the quality of the software.

    Writing a high quality, very solid program is quite similar to proving a theorem by construction.

    A good mathemetician covers every single possibility when proving a theorem and leaves nothing out.

    Similarly, a good programmer covers every single contingency in his software. As a result, the software runs and it runs correctly.

  63. Computer Science and Mathematics - Depends by hardgeus · · Score: 2, Interesting

    I took CS in college and remain somewhat bitter at the experience. The heavy emphasis on mathematics drove me away after two years.

    I have now been professionally writing business software for about eight years, and in that time I have never used mathematics more complex than arithmetic and very basic algebra.

    I do, however, use my English skills on a daily basis. I have to write documentation and communicate with clients. I have to explain things to non-programmers and I have to translate business speak to techs.

    I have to understand the workings of business. My software exists to make businesses more efficient. If I do not understand the real world processes, I cannot improve them with software.

    When I took CS, they acted as if we were scientists and would all get heavily algorithmic signal processing jobs or some such theoretical crap. The reality is that 99% of us end up in the business world helping people make more money.

    It sickens me that CS is churning out people who took calculus but know absolutely nothing about the business world in which they will most likely be working.

  64. My courses by 1000101 · · Score: 3, Interesting

    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.

  65. Here here by kndyer · · Score: 4, Interesting
    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.
    1. Re:Here here by tkw954 · · Score: 2, Insightful
      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.

      Good point, although I'd say that a good portion of that 10% are engineers, physicist and chemists, who teach themselves how to code a fuzzy controller by starting from scratch (and being forced to interface with (gasp) computer science people to get it to work right. )

  66. Re:Math requirements? by An+Onerous+Coward · · Score: 3, Funny

    My Numerical Analysis final is in 30 minutes. Can you explain the whole predictor-corrector thing? Cuz' I'm lost.

    --

    You want the truthiness? You can't handle the truthiness!

  67. well, start with discreet math by underbider · · Score: 3, Informative
    Take a look at this site. It's a good start for computer science majors

    from there, there're cool things like "modern math", and then you should go deep--way deep: two semesters of linear algebra, graph theory, set theory, algebra, real analysis, numerical methods, mathematical logic, ohh, right, and some more calculus... as a computer science graduate student, I'm hating my self for not taking these classes as undergraduate. (well, or for taking them and not remembering too much) It's all very very useful!!

  68. University != Trade School by ph43thon · · Score: 4, Informative

    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

  69. You'll need the math, but that's not all by sevinkey · · Score: 2, Insightful

    No question, there is a TON of math required for computer science, but if you're into computers it shouldn't be too difficult, as long as you actual read your assignments, unlike myself who coded until late in the night instead.

    The one mistake I felt I've made is not taking enough business courses. I'm not saying to take the CIS route, as that skimps on the math, but now that I'm in the real world I find programmers are often called upon to make real business decisions, even sometimes inappropriate ones for the position.

    In a world where many US jobs are being outsourced to India and I'm sure others soon, there will be less/no available junior level jobs that pay anything. I don't have a problem with this, but that means that for a lot of us to maintain our comfortable standard of living, we will need to come up with the ideas and forge business relationships, rather than just implementing the ideas.

  70. OMFG! by h311sp0n7 · · Score: 3, Insightful

    As an individual with a B.S. in Computer Science I find all this negativity towards CS Majors absurd. If you are considering a B.S. in Computer Science you have to decide what you enjoy doing. Do you enjoy programming, solving problems, implementing solutions that require in depth technical knowledge of how both hardware and software function, etc? Or are you more of a customer service related, implement technology solutions with knowledge of how hardware and software interact, and want to concentrate on using pre-existing software apps to provdide solutions? Obviously, this is just the tip of the iceberg in deciding MIS and C.S. A lot of my friends from school loved doing web programming (HTML, XML, some applets, and web design), but hated the whole theoretical aspect of computer science. If you can't take the theory and its inter-relation with math then you should go MIS.
    Computer Science is itself inherent to math. You can't really separate the two. Sure you can implement all these solutions with A+, Network+, CCNA, MSCE, but how much do you really understand about truly optimizing performance. What about tailoring apps to employers requirements? Cost/benefit analysis of code? Sure, all that helps, but your not really implementing a complete solution just by setting up a network and providing support. There's so much more to it and that's where the theory, programming, and math come in.
    Sure you can get by without the math and theory, but how are you going to implement better solutions and design without them? Even with a loose understanding, CS majors have a skillset and problem solving ability that IT majors just don't have. A good question for potential CS majors would be can you make a contribution to the linux development community? If not, maybe you should concentrate on getting an MIS or minoring in IS with a major in business or another field of interest to improve your marketability.
    In the end I guess it comes down to each person's ability and interests. Math is inherent to computer science, but focuses on better development and better development techniques while understanding the underlying structure of systems. If you don't want to understand this underlying strucutre and don't care about innovation and theory then stick with IT. IT is innovative, but is more system functionality and maintenance rather than optimization, efficiency, development, and extensibility.

  71. Re:Here it comes ... by haystor · · Score: 2, Insightful

    Sure.

    There is math in carpentry too, but you don't need to attend college to be a brilliant carpenter.

    SQL is all about learning the constraints of data i/o and organization. Claiming it is steeped in Set Theory makes it sound a lot more complicated than it is. Sure there are aspects of it that will help, but you could learn all of Set Theory or just learn the one specific instance of that database. Practical experience and common sense will help you more than Set Theory.

    Of course, I'm talking about SQL from a programmer's point of view. This usually assumes the database is already made. In this situation I'll take the person with industry experience and SQL skills over the person with SQL skills and Set Theory (Learning Set Theory does have an opportunity cost, you know).

    Anyhow, my point was that there are vast areas where very mundane programming is done that don't require real math (good math skills always help though). So much of business programming fits into the business way of doing things. Like running something once a day that looks up a list of data and sends notifications to the people on that list. Simple, simple stuff that needs tobe done and can be done well by a plain coder. It is the coder that understands the business logic (hey, they don't need a notification *every* day, except in California where it is required by law, unless they are a private entity) that will excel. There are numerous positions for whole careers for these kinds of programmers. I tend to think of this kind of position as a translator, where his foreign language is "computer".

    One little caveat to what I'm saying. I'm saying there is room for programmers who don't have formal math skills. I'm not saying having no math skills is beneficial. The fact is that the people who have what it takes to be good at programming tend to gravitate toward college and formal math. This means that it is uncommon for a really skilled person not to have pursued math. There is a glut of people without a clue doing the job right now that would disprove my point, if my point was "people without math skills make good programmers".

    --
    t
  72. Critical Thinking by MightyByte · · Score: 3, Insightful

    I graduated with a double major in Computer Science and Math. I now work as a software engineer in a large defense company. Many people interchange the terms Computer Science and programming. These terms are not interchangeable. Computer Science is the theory which provides the building blocks that programmers use (often with no underlying knowledge of what is going on). The act of programming really falls more into the term Software Engineering.

    Computer Science is theory. In most fields, the theoretical people make heavy use of math. The same is true in Computer Science. Algorithm and development is inextricably linked dependant on math. So if the question is "Does CS have that much to do with math?", the answer is a resounding yes.

    Programming or Software Engineering arguably doesn't have as much to do with math. As other posts mention, there are programming/software engineering jobs that use little to no math. However, there are a very large number of jobs that need math. Whether you have one of these jobs or not, you can still benefit from having taken more math.

    The issue is not that you took a class that taught you how to do the math that you need to accomplish the job. The issue is the critical thinking skills that math develops. When I started my software engineering job after graduating, the first project that I was assigned to required lots of math that I had never seen in school even though I was a math major. I was able to do the work not because of something I learned, but because of the critical thinking and logical reasoning skills that my math classes had helped develop. My math background also gave me a familiarity with the basic mathematical tools that I needed.

    There will always be new problems that school has not prepared you for. If you go to school to learn how to solve the problems you will encounter in the workplace, then you are in for a big surprise. The important thing to get out of school is the ability to think critically and learn new concepts.

  73. Lots of great threads here by evilpenguin · · Score: 3, Interesting

    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.

  74. Try proof theory by stype · · Score: 2, Insightful

    The most rewarding math class I took in college was called "Advanced Calculus" where we basically proved why everything in calculus works, start at a very low level. The thinking required for making proofs is very close to the thinking required for making algorithms...only much more defined. I'd highly recommend getting a background in writing mathematical proofs.

    And I think everyone on the planet should take simple probability and estimation courses. People are really clueless when it comes to estimation. Like if I asked how many hairs are on your head...I don't expect the right number...but there are logical ways you could come within an order of magnitude or two. Just simple things like this are useful every day. Estimation is good just for a simple check if your numbers are even in the ballpark. Or just trying to judge how far away something is. People seem to think that a smart person is someone who knows everything..but its more a person who knows how to figure out anything...whether it be by looking in books or asking a friend for help.

    --
    -Stype
    Bus error -- driver executed.
  75. Interesting take on importance of math in CS by call+-151 · · Score: 2, Informative

    Here is an Keith Devlin article "Do software engineers need mathematics that addresses a number of these issues.

    The overall point is that math courses often develop abstract thinking skills, which may be more important for developing efficient, correct code than learning a specific toolset which may not age well. I know Keith Devlin has written other articles about this but this was the only one I could find online.

    --
    It's psychosomatic. You need a lobotomy. I'll get a saw.
  76. Google vs. the Others (Real Math vs. Crapola) by Salis · · Score: 2, Insightful

    Remember when Yahoo, Altavista, MSN, etc etc had their crappy search engines running? What did they base their search algorithm on? It was text/string batching mostly...heavily investing in lists and relevance factors. What does Google do differently?

    They use advanced mathematics to predict the likelihood of matching. What exactly do they do?

    Google represents the Web as a Markov chain, where each website is a node and each link increases the unidirectional transition probability of moving from the origin node to the destination node. You can find the 'limiting probability distribution' of a Markov chain relatively easily, even though Google has billions of nodes and trillions? of links.

    The limiting probability distribution gives you the relative probability that, web surfing through the links (ie. performing a random walk on the chain), you will eventually settle on a particular website. This is Google's original innovation and technology.

    Unfortunately, this type of mathematics is usually only taught in CS graduate school. It should be taught sooner, but it requires getting into a branch of mathematics called 'stochastic processes'.

    --
    Favorite /. tagline: "On the eighth day, God created FORTRAN." And it was good.
  77. If you can't stand the math, get out of CS. by Dr.+Mu · · Score: 5, Insightful
    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!

    1. Re:If you can't stand the math, get out of CS. by Isao · · Score: 2, Informative
      A great deal of this is often lumped under the name "Discrete Mathematics". An example can be found at the MIT OpenCourseware Site.

      And I second the education vs. training comment.

  78. Linear Algebra and Calculus by BigBlockMopar · · Score: 4, Interesting

    And as was said before, if you don't know math, good luck writing video games. Games like Quake perform tons of mathematical operations every second.

    For sure! I don't know Quake personally (I'm not into video games at all), but I assume that it's another one of the 3D videogames where your surroundings change with your perspective.

    That requires loads of matrix transformations directly out of linear algebra. It sounds terrifying, but it's just about having a group of numbers called a matrix. By multiplying them with a bunch of (x,y) coordinate in a certain order, you can do all sorts of warps and shrinks and stuff. If those (x,y) coordinates correspond to a bitmap of an object, you've just warped or shrunk the object, exactly as you'd have to do in a 3D maze or similar.

    Then, there's calculus. There are two courses *everyone* should have to take in high school - auto mechanics (so you know how to change a tire, among other things) and calculus. Calculus means "small stones", as for counting. It's all about rates of change. You could tell the speed of your car by looking at your odometer and your watch, but that will give you only the average speed over a given time or distance. The speedometer, on the other hand, gives you your instantaneous speed - which is the derivative (calculus term) of your position (odometer) with respect to time. This makes sense when you think about it: speed is the rate of change of position.

    (Actually, it's velocity, but that's a whole other kettle of fish if you don't know about vectors from Linear Algebra yet.)

    Don't worry about the math. It's usually the easiest course in your university schedule - and I tell you that as someone who failed high school math classes constantly and who dropped out of high school because of math (that's a long story, though). Math *is* your friend. How's that? You can be guaranteed that if you do all your homework, you will get an A+ in the course. That's it. No reading, no stupid assignments which get marked by TAs who know less than you, nothing. It doesn't even matter how good or bad your teacher is. Just do all your homework and you'll get an A+. It's a non-linear relationship, do 50% of your homework (every second assigned problem) and you'll get a B+. Do 25% of your homework and you'll get a C+.

    As an EE, I had to take 7 university level math classes.

    • Calculus I: Basic calculus, a re-hash of high school which introduced Integration by Parts (table method!)
    • Linear Algebra: Matrices, parametric equations, Gaussian elimination, eigenvalues and eigenvectors. Don't let the names scare you, it's all very easy.
    • Calculus II: Differential equations and infinite series. Always had a hard time with infinite series... but I passed it.
    • Calculus III: Multivariable Calculus and Fourier Series. Very fun course, allowed me to become conversant in Vector Calculus (which is always good for scaring people, though it's actually dead easy). Fourier is really neat, allowing you to express any function (think waveform) as a sum of easily-manipulated sines and cosines.
    • Numerical Methods: A whole course on how to make numerical approximations when you come across something that is impossible to integrate. Mostly programming in MATLAB. Open book exam, I used LyME (MATLAB clone) on my Palm.
    • Calculus IV: Mathematical Methods. All about how to solve partial differential equations like the heat equation and wave equation, also Laplace and Fourier transforms, Sturm-Liouville differential equations, etc. Scary sounding, but actually rather easy once you get your head around it. Doing homework on the blackboard with your friends in an empty classroom is recommended - the arts class which came into the room after our homework sessions always looked at us like we were geniuses. We're not.
    • Statisitics: Ugh. Mostly just plug numbers into equ
    --
    Fire and Meat. Yummy.
    1. Re:Linear Algebra and Calculus by bahamutirc · · Score: 3, Insightful

      Don't worry about the math. It's usually the easiest course in your university schedule - and I tell you that as someone who failed high school math classes constantly and who dropped out of high school because of math (that's a long story, though). Math *is* your friend. How's that? You can be guaranteed that if you do all your homework, you will get an A+ in the course. That's it. No reading, no stupid assignments which get marked by TAs who know less than you, nothing. It doesn't even matter how good or bad your teacher is. Just do all your homework and you'll get an A+. It's a non-linear relationship, do 50% of your homework (every second assigned problem) and you'll get a B+. Do 25% of your homework and you'll get a C+.

      I wish that were true. I did all my homework for my math classes and really studied my ass off, and the best I could do in some of them was a C. I'm no math expert, but I guess it depends on where you went to school at and who your professors are/were.

      Statisitics: Ugh. Mostly just plug numbers into equations and know what they mean. Not difficult, just boring.

      Again, it depends on what you took. I had to take two high level statistics classes for my Systems Analysis degree, and I must say those were my favorite math classes by far. I called it "Applied Calculus". The first class covered probability, and the second class actually covered statistics. What I had thought about statistics before I took the class was more along the line of means and averages. Those topics were covered on the first page of the first chapter, then it took off. Really, I learned more about calc in that class than in my calc classes because suddenly calc became useful.

      If I were to ever go back to school and get a different degree, I would major in Statistics.

      Just my 2 cents worth.

    2. Re:Linear Algebra and Calculus by Derkec · · Score: 4, Informative

      Wow, math was anything but the easiest thing on my university schedule. Calc I&II for Engineers were classes they used to weed out students. That said, I really value what I learned.

      Calc I or better yet, a calc heavy Physics I is the kind of class that will alter how you view the world. It's a must. After that, you might not use a ton of the math you learn in university at work. That said, taking classes in how to program mathmatical algorithms greatly helps me do my job and understand how computers work.

      CS students are blessed/cursed with the likelyhood that some of the math that you learn will be from your CS department. It doesn't make matrix multiplication that much more pleasant, but it is interesting to write a simple search engine algorith that matches a terms in a documents to a vector of search terms.

      I disagree with you on stats class. We were allowed to use Excel to do some of the gruelling number crunching for us once we'd done a handful by hand. Now, I can't do any of it by hand from memory but I'm ok with a book. I do understand what they heck is going on with some basic stats work and have a feeling for how to go about doing some vaguely interesting analysis of things I encounter.

      The number one reason to learn advanced math is so that when you sit down in a movie and they've scribbled jibberish across a chalkboard in the background, you can follow what's being done, or at very least recognize the symbols.

  79. You Don't Need No Stinking Math by thelizman · · Score: 2, Interesting

    Well, that really depends on what you want to program. For instance, to do probably about 80% of the programs out there, a fundamental knowledge of Algebra is useful - but not even required.

    If you want to program video games, you'll need college level algebra just to program the physics, but again, you don't have to be a math wiz.

    If you want to do cad/cam/cas programs, your ass better know some calculus and trig.

    Point in fact, traditionally you've found that people program as a supplement to their chosen profession - mathematicians use computers to crunch large numbers. Engineers use computers to test and design structures. Biologists use computers to analyze and predict populatons. Chemists use computers to simulate complex chemical reactions.

    If you want to get a better picture of where you use math (and a tremendous insight into computing mathematics), check out Wolframs A New Kind of Science. He developed this book while researching computers and mathematics, and its really an interesting read whether you understand wth he's talking about or not.

  80. Re:Explain to me how thats relevant. by Safety+Cap · · Score: 2, Insightful
    I said if you stick with courses that strictly apply the paper title of your major, you're uneducated.

    Surely you can come up with at least three reasons why knowledge of (chemistry/biology/women's studies/poly sci) could possibly be imporant to a student working towards his degree in CompSci?

    --
    Yeah, right.
  81. Real Geeks love math...posers hate it. by gatkinso · · Score: 2, Insightful


    Let's face it - you are not a geek if you can't prove L'Hopital's Rule.

    --
    I am very small, utmostly microscopic.
  82. More Math than CS by AveryT · · Score: 2, Interesting

    I don't know about today but, when I took CS in the early '80s at a Top-3 Canadian University, there were more required Math courses than required CS courses, probably because the School of CS was relatively new then and had grown out of the Math Department.

    While I probably haven't directly used 99% of the Math that I learned in school, what I believe I gained was the ability to solve problems and to think abstractly, analytically, and rigorously.

  83. Math not needed..... by cbdavis · · Score: 2, Interesting

    The best programmer I have every worked with had a BS in Phys Ed. I got a math degree and have worked in dataproc/IT for over 35 years. Spent several years coding, db admin, now a network engineer. My math degree has not helped a bit. Thats not to say that you never use any math concepts beyond basic algebra writing most apps. But by and large, I coulda had a degree in 17th century french literature and probably done just fine!

  84. Don't need it that much by mikeg22 · · Score: 2, Interesting

    From my experience as a programmer, I've never had to use anything beyond trigonometry in programming. Of course if you plan on doing scientific computing there would probably be a need for higher level calculus, but I would say 90% of the programming jobs out there make no use of it. A basic understanding of statistics can also be useful.

    Now, thats for the actual programming. For being a CS major you will need to be pretty "good at math," whatever that means. I suppose it means be able to learn and have at least a passing interest in the subject. Binary logic is closely tied to what schools teach as "math" (algebra, calculus, set theory), so becoming familiar with these maths will prepare your brain to handle computing theory, which is why I suppose CS majors at my school (UCSB) had to take a lot of it.

  85. It's not *what* you learn... by gilmet · · Score: 2, Insightful

    it's *how* you learn that matters. First of all, 90% of people commenting here really don't understand math at all. I'm going to sound like a math snob, but trigonometry, geometry, and (American) Algebra are not math at all. As much as you might think they are math, they are in fact just tools. They are tools like your favorite programming languages and operating systems - you can use them accmoplish certain tasks. "Real" math is concerned with a way of thinking - knowing how to see structure in things where structure is not obvious, then translating that structure into symbols through which others can understand it (whoa... I didn't intend it, but doesn't that description sound a lot like what computer scientists do?). Maybe you think I'm full of crap, but "real" math is often better done by people who have backgrounds in History and Literature. You say, "yeah right," but I guarantee you that actual mathematicians are much more verbally (symbolically) inclined than regular tech-savvy people. I've really diverged from the argument here of whether or not math is useful for a computer scientist... but here's what I have to say about that. The best computer scientists will be interested in and excel at "real" mathematics - computer science is just a subset of information science which is math. No, I'm not a mathematician.

    --

    Every time you read this, I am going against my principles.
  86. ACM issue dedicated to subject by Amigan · · Score: 2, Interesting
    The September issue of Communications of the ACM is actually dedicated to this topic. The issue is entitled "Why CS students need math".

    If you're a member of ACM (one of the major professional organizations for CS folks) you can download the articles from the digital library - if you've already done away with your hard copy. Most University libraries should have the journal available for checkout.

    Having recently received my PhD in CS, I can tell you that if you're going to pursue an advanced degree - then the math is TRUELY necessary. While I was an undergrad, I never understood the requirement - but once I started working in the 'real' world, a lot of it made sense. I don't necessarily use it on a daily basis - but there are times when I say "yeah, that makes sense now"

    --
    "Software is the difference between hardware and reality"
  87. Set theory is still needed for RDBMS coding by msobkow · · Score: 2, Insightful

    Mathematics is involved in most aspects of computing, from the complex calculations of modelling and engineering systems (which includes video game models, movement skeletons, and physics models) to the set theory that drives RDBMS coding.

    You don't need a math degree to program, but you do need an understanding of set theory, linear algebra, O(n) algorithmic efficiency, and boolean logic transforms.

    At very least, you need to have an understanding of O(n) algorithmic efficiency to know when to use a particluar solution for a problem. Just because a hackjob from a coder works doesn't mean it's going to scale to solve the full problem set in production.

    Without those basics, you aren't programming, you're just bodging code and probably causing more long-term issues and expense than your salary is worth.

    --
    I do not fail; I succeed at finding out what does not work.
  88. Math for computer scientists by tim1724 · · Score: 3, Informative
    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.
    --
    -- Tim Buchheim
  89. not a troll but an opinion by swordsaintzero · · Score: 3, Insightful

    I worked freelance for hotels.com and some other big name firms. I am a highschool dropout. The CS grads I worked with were good, but not great. Other than one ex army CS grad I found the inability in my peers to aproach a problem from a new angle to be across the board. Something this new generation seems to be forgetting is that once upoun a time someone that knew ass from a $ prompt and didn't go to school got more credit than ninnies who excel at theory but cant code to save there own life. If you learn deep magic on your own without having it spoon fed to you then in my experience you are someone who really knows what they are doing. Often excelling at real world problem solving above and beyond hothouse flower programmers. Thats the difference between a person that can write a few cotton candy language database connections and someone that writes drivers on the bare metal. You either LUST after computers they consume your life. If you dont live sleep and breathe them for a few years then you can't achieve truly wizardlly status. You cant impart love with a university course. As to math being important to programming, if you cant see that a universe based purely on numbers requires you to be able to manipulate them in order to be really good at what you do, then you have no business in a cs course at all. I went from programming for a living to building harleys and hotrods / programming for fun but I spend just as much time in front of the keyboard now as I did then. A real geek just cant give it up. Sorry for any spelling errors etc. for some reason this thread irritated me and I just had to spout off.

    --
    Panel F, Relay #70
  90. Certain types of jobs... by BrianMarshall · · Score: 4, Interesting
    Math is the basis of all CS.

    If you get deeply into the science of Computer Science, you can certainly get into some math. But, it is important to note that practically no one gets employed as a computer scientist (except for people who stay in academe and study and teach Computer Science).

    Most people going into CS expect to get jobs as systems developers of some sort. 'Code monkeys' might be the bottom of the pack; frequently they are just trained tool-users who write snippets of code behind buttons.

    But to be a great developer is to be a master of a craft, not a scientist. This particular craft is mental - it is, as you imply, a matter of critical thinking and problem solving. It is being able to look at the world in different ways and being able to see how to express an aspect of the world using the tools of your craft. It is a craft with many principles and design patterns and ways of looking at the things.

    To be a great developer requires talent. Picking candidates that are strong on math may be a useful way of identifying people with the talent. (This approach screws people like me, however; I believe that I have a great deal of talent in the craft, but my brain crapped-out after basic calculus.)

    The vast majority of developers require no more than:

    • basic algebra
    • basic trig
    • basic statistics
    Some people need basic geometry.

    Sure, if you are getting into signal processing or astrophysics or a variety of other areas, you need lots of math. But that isn't where most people are going. If you are, and you are into math, great; otherwise, don't sweat it.

    You don't write good SQL because you are good at math (as others have apparently suggested); you write good SQL because

    • you know enough SQL
    • you know what works well

    Nothing beats talent plus experience.

    --
    "When the going gets weird, the weird turn pro" -- HST
    1. Re:Certain types of jobs... by BrianMarshall · · Score: 2, Insightful
      Looking at a part of the the world and expressing it in software is a craft. There may be science involved, either in the problem being addressed or in the way the software expresses it or in the way you evaluate the software. But the act of programming, "The Art of Programming", is a craft.

      To be a good developer requires mastery of Junior High math.

      You know about set theory (as did Dr. Codd), and you use it when you think about SQL. I don't know about set theory but I have a talent for looking at the world in the right way.

      I agree that passion, dedication, [and] determination in relation to a scientific view of the world is required. But I had that when I was ten; it certainly does not take university level math to achieve that.

      --
      "When the going gets weird, the weird turn pro" -- HST
  91. Disagree with Calculus Advice by frostgiant · · Score: 2, Insightful

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

    If you are not especially gifted in math, why not take calculus in high school anyway and then retake it in college?

  92. Re:Math? by narcc · · Score: 2
    I think that math is important to lawyers, programmers, ditch-diggers, aerospace engineers, and the aforementioned people flipping burgers ad McDonalds.
    You mean the programmers right?
  93. CS: The Slacker Course by LoveTheIRS · · Score: 2, Insightful

    From what this article suggests for a schedule. It really is stupid. It looks like you waste your time until Junior Year, and then you still waste most of your time. No wonder India programmers are eating American programmer's lunches, Calculus I & II,? Excuse me those are really basic courses. There is a lot more math out there. Also, the course outline that was suggested lacked three other major genre's of classes that any idiot should see is neccessary for a Computer Programming Job.
    1) Algorithims: Lecture and Labs, Any idiot can pick up a programming book and learn if-then, switch, and then a couple of coding libraries. That stuff is stupid simple, like I learned that stuff by myself. What needs to be learned is Algorithims and their applications. State-Machine being the most simple of code organization and algorithims. If you don't come out of College being a walking library of effective algorithims, you just wasted four years. The real programming is in how you tackle problems with different code organizations and algorithims. I am going to venture to say is that the reason behind the failure of so many computer game companies attempting to build a game engine is those guys have no idea how to apply algorithims, much more get a bunch of the neccessary algorithims in games to work together. Algorithims should be taught from second semester freshman year in lectures and labs. You just cannot be an effective programmer unless you know that stuff.
    2) Memory Management- With the advent of garbage collectors Memory Management is less worried about. However, If you aren't going to program Java or C# you are going to need to program your own memory management. Again, an knowledge of algorithims would be nice, especially in this sub-topic. A programmer needs to create a logical and well thought out way of managing memory in every piece of non-C#/Java code they write. Memory Management is essential to Embedded and EEPROM programming because they can't afford the overhead of garbage collection. AS a CS you don't want these doors closed off to you because embedded's are usually the ones that have to destroy all their software and build a platform from dirt and sweat again. Also, Companies need embedded programmers for everything these days from Microwaves to ovens , to Cars, you name it.
    3) Debugging- There have to be more techniques out there than printing strings onto a console. People need to be able to organize their code in such a way that debugging is relatively painless. This debugging should probably be the class you take Senior year that combines all the good Memory Management techniques, good well applied algorithims with a review of large project's code. Primarily Open Source Code (because you can actually look at the code) should be analyzed be these students. Students should poke at all the big Open Source codebases for theil applications of the algorithims that they had been learning the past four years. Their senior project, a project that lasts all Senior Year, should be the application of this debugging class and the computer algorithims, and students should prove their handle on debugging techniques learned in this course in their programming additions to the Open Source Projects.

    A Person might argue that most algorithims are only used in one area of programming. However, since Computer Science is not an end all and only a tool, Computer Scientists should be very knowledgeable about the algorithims used in, say calculations of quantum physics. The fact is that those algorithims can very possibly be effectively applied to other areas. Computer Scientists need to be very familiar with almost all areas of science because they really are usually the employees of people with well defined needs in a very vertical market. Those slaves need to be very flexible and knowledgable otherwise they might not be able to adapt to the needs of their employer.

  94. Re:Requirements at some places go beyond that. by ari_j · · Score: 2, Insightful

    My alma mater is kind of notorious for being very theoretical in CS, but lately has succumbed to the pressure to be more practical. The curriculum requires Formal Languages and Automata, a 400-level CS course. Discrete Math from the math department covered most of the logic, and if you didn't learn it there you learned it in the required EE 201: Digital Electronics and its lab. Data Structures and Algorithms is another required course, and depending on the professor you either learn it right or you don't. I knew it already, so my professor didn't hurt me, but the guy they had teaching it my last year in school used about a 1200-page textbook, which is a good thing. :) You also have to take Datacomm, which requires you to know all about NRZ, Manchester, et al. right up through how TCP works and has evolved.

    Another required course is Programming Languages, which didn't go into enough depth but still required you to write functional programs (in Lisp), logical programs (in Prolog), and concurrent programs (in your choice of languages; I used C++ to save time).

    Will you use most of these skills daily in a programming job? Not consciously, but they pervade your thoughts and you write better-informed code as a result.

  95. turns out it did make a difference... by wtfover · · Score: 2, Informative

    In my current project, I've spent the last two months wishing I could remember more of my calculus courses. I never would've thought trying to determine the most effective way to feed farmed fish would be so complicated, and require so much math. I've gone through about half a dozen scratch plans trying to figure formulas and the like out.

    On a personal note, I've worked on my own projects that I had to finally take to a former math prof. I simply couldn't figure out how to solve a particular problem. But in this case, I'm probably the exception, not the rule.

    If you're just making buttons pretty, you don't need the math. But once you get into the guts of an engine,whether it be graphics or something more specialized (like feeding fish) there's going to be some math in there, somewhere.

  96. I suck at math and did fine. by ivaldes3 · · Score: 2, Interesting

    I have a BS and MS in computer science and worked for many years in the industry before becoming a doctor and founding Linux Medical News.

    I SUCKED at math, working like a dog for C grades in calculus. My miserable performance was highlighted by a D grade in Differential Equations that I worked very hard for. This did not keep me from making straight A's in my programming classes. There is the phenomenon of mathematica 'late bloomers' and I understood it better when I hit 25-27 years old. However, I've never come close to being good or even mediocre at it.

    In 20 years, I have yet to do an integral since those awful days and I have worked for IBM as a NASA contractor, the now defunct Compaq and briefly had my own software company. I am now working as a researcher in the highly technical field of functional MRI. I still suck at math. I was regarded by my peers as a good software engineer. Even though I no longer program professionally, I still have a good intuition for software problems and can write quickies without difficulty. I now use a sliver of my ability to make sophisticated spreadsheet models for successful investing. A beautiful benefit indeed.

    Do not let lack of math ability deter you from an interesting field that will help you anywhere you go!

    -- IV

    --
    http://www.LinuxMedNews.com Revolutionizing Medical Education and Practice.
  97. it depends ... by bob_jenkins · · Score: 2, Informative

    How much math you need, and what math you need, depends on what sort of code you're doing.

    I use arithmetic almost constantly (incrementing loops, avoiding redundant counters). Boolean logic (x&&b)==(!(!x||!b)) is rather common. Basic probability (p(a) > p(b)+p(c)) is required for optimization. I find myself doing proofs in my head for all the code I write to convince myself the code works. Usually really simple proofs, like TRUE works and FALSE works which implies that all cases work. One recent bug involved a count of changes that couldn't exceed 256, yet every increment had to allow a matching decrement. Tricky tricky!

    On the other hand, if you ever see a calculator on my desk, you can tell I'm goofing off. (There's a calculator on my desk right now.) That usually requires combinatorics, exponentials, bell curves. Even when goofing off I've very rarely needed calculus.

  98. Clear communication as a predictor of skills by Atario · · Score: 2, Interesting

    I think you'll find that anyone who's too sloppy with spelling, syntax, or grammar (except intentionally) will be a pretty piss-poor programmer. Computers sometimes like to crash if you do as little wrong as misspell a variable name (much less misspecify an entire interface). If you can't even get the loose standards of human language right, what chance do you have with a computer?

    (Very carefully proofread text...aaaaand submit!)

    --
    "A great democracy must be progressive or it will soon cease to be a great democracy." --Theodore Roosevelt
  99. The Art of Computer Programming by Shewmaker · · Score: 2, Informative
    Knuth has an excellent overview of the mathematics important for undertanding algorithms in Volume I of The Art of Computer Programming.

    --
    "For the Snark was a Boojum, you see." -From the Hunting of the Snark: An Agony in Eight Fits, by Lewis Carroll
  100. At the graduate level by Rize · · Score: 2

    Computer Science is 90% math at the graduate level. Don't skip out on linear algebra if you want to do 3D graphics and pay very close attention to anything involving matrices and vectors.

  101. the real reason by 10am-bedtime · · Score: 2, Interesting

    the real reason math is important for computer science is that fundamentally, science is a branch of human endeavor involved with forming mental models of some system and then exposing that model to Reality to see what jives and what doesn't. with computers, Reality is a bit difficult to find sometimes, but certainly if you go the way of the programmer, the programs you write are codification of your model and the input they handle can be considered the Reality in question.

    anyway, everyone who constructs models learns an affinity for the "trueness" of the model (if the model is very true, it jives decently w/ Reality w/o need of hand-waving or too many kludges). math is important for judging trueness of the model, and for extrapolating not only simple truth from the perceived world, but the Ability to Perceive Truth.

    many people read orwell's "2 plus 2 makes 5". it's not necessary to study math to appreciate the many levels of this falsehood, but studying math (and henceforth going into computer science) makes it easier to realize even more levels. fiction is a model. of what? society is a model. of what? control / cruelty / repressed-love / tipping-point torture / lies and truths; all are models. of what? all the above, varying over time, are models as well.

    in the end, the scientist seeks to understand and change the mental models to be more true. but each scientist is part of the Reality, in Reality. math is essential to bootstrapping the nimble mind.

  102. Computer Lib by bluethundr · · Score: 3, Insightful

    In 1974, Ted Nelson had some thoughts to share on this very topic in his revolutionary book Computer Lib. 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 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!

    --
    Quod scripsi, scripsi.
  103. Depends on what you want to do by gubachwa · · Score: 3, Interesting
    As has already been pointed out numerous times, if you want to do the really *interesting* stuff in Computer Science, you need a lot of math. Lets look at the different fields/specialities in CS:

    Theory CS theory consists of a wide range of problems: some very heavily mathematical (Does P = NP?) to the not so mathematical (eg. Theory of Distributed Systems). Although the latter is not "mathematical" in the traditional sense, it still requires strong mathematical reasoning abilities. In any case, needless to say, studying CS theory requires a good foundation in mathematics.

    Graphics This one has already been described by other people. No chance in hell you're going to write a kick-ass 3d engine without knowing a lot of linear algebra (i.e. math).

    Artificial Intelligence Machine Learning (Neural Nets, Support Vector machines, etc) is all hardcore statistics. You need to have a good knowledge of linear algebra and multivariate calculus to even begin to comprehend this field. At the other end of the spectrum within the AI field is Knowledge Representation; this type of AI is more logic based, and again requires good mathematical reasoning abilities.

    Operating Systems Here's a field for which you may argue a minimal amount of math is required. Of all the subdisciplines within CS, this one probably does require the least math. However, that doesn't mean you'll get away without a math background. A lot of research done in this field involves understanding/presenting quantitative results. So you do need some basic knowledge of statistics. Besides that, a lot of OS research also involves proving systems correct; this is very heavily logic based stuff, and again an ability to reason about problems abstractly (mathematically) is extremely useful.

    Numerical Analysis Math, math, math, and more math.

    Software Engineering Proving systems correct and defining systems using logic -- very mathematical stuff. If on the other hand you get into the more wishy-washy side of SE then you may be able to avoid math.

    Anyways, there's probably some sub disciples I missed, but you should get the idea. Math is required in almost all aspects of CS. The only reason it isn't required in the RealWorld(tm) is because most of the stuff done there is grunt work that involves nothing more than reinventing the wheel.

    So, if you are really interested in CS, then do it right -- take as much math as you can. If, on the other hand, you are just interested in hacking, then don't go into CS. CS != hacking degree.

  104. Computational Neuroscience and Math by FleaPlus · · Score: 2, Informative

    Many of the previous posters have cited the importance of math in areas like graphics, databases, etc. I heartily agree. Allow me to cite another example: computational neuroscience.

    So I'm in general incredibly interested in various combinations of brain and CS studies, so last year I audited a course on computational neuroscience. This was a course which dealt with understanding neural systems from a computational perspective.

    Unfortunately, my math skills are somewhat sub-par for a CS major. I somehow managed to get a 5 on the AP Calc exam, but forgot everything afterwards. This ended up hurting me significantly in the course. Although I could understand the neuroscience concepts, whenever we started with analysis my head started swimming. Modeling things like ion channels require some pretty hardcore understanding of differential equations, which I understood next to nothing about. I learned a bunch of neat facts, but without a strong mathematical background, I wasn't able to fully comprehend what was going on.

    There are many other examples of my poor math knowledge causing me pain. As it stands, I'm going to be joining a PhD program to study neuro/CS stuff in the fall. Since I'm going to need to have a good grasp of things like differential equations, I'm going to be spending a lot of quality time with calculus books this summer. Being in a position like this sucks -- I really recommend learning math, regardless of what you want to do. It's amazing how often math comes up, and how much the symbolic processing skills math teaches you helps in other areas.