Ask Slashdot: How Important Is Advanced Math In a CS Degree?
AvailableNickname writes "I am currently pursuing a bachelor's in CompSci and I just spent three hours working on a few differential equations for homework. It is very frustrating because I just don't grok advanced math. I can sort of understand a little bit, but I really don't grok anything beyond long division. But I love computers, and am very good at them. However, nobody in the workforce is even going to glance at my direction without a BSc. And to punish me for going into a field originally developed by mathematicians I need to learn all this crap. If I had understood what I was doing, maybe I wouldn't mind so much. But the double frustration of not understanding it and not understanding why the heck I need to do it is too much. So, how important is it?"
if you're going into app development or IT, probably not much math needed. i've been in app dev for a long time (and quite successful). Those times that i actually need math? I just look it up, program it, then forget it. I never have needed much math. However, if you're going into some CS field that requires math, well, obviously, it's worth your while to study it.
If a few differential equations are giving you so much trouble, you can stop worrying about learning advanced math. ;)
I have two resumes in front of me. I need someone who can write some fairly complicated software. Are they writing the kernel to an operating system? No. But they'll be making complexity decisions between a server and a client. Not exactly new or novel but important to me and my clients.
So I look at one resume and the guy has suffered through integration by parts, linear algebra, differential equations and maybe even abstract algebra. The other guy went to a programming trade school where those are not taught. The trade school likely taught inheritance, pointers, typecasting, and all that good stuff just like the Bachelor's of Science degree would.
Now do my solutions need integration by parts, linear algebra and differential equations? Absolutely not. But if I'm going to pick between the two, I'm going to take the applicant that solved more difficult problems in order to make it to a class. Few people actually care about those concepts deep in their hearts -- and I'm sure neither of my prospective employees did. But in that same vein, no rational developer is going to care at all that my client likes to be able to drag and drop files instead of doing file navigation to find the files he wants. But I want the applicant who's going to do the inane stuff that he doesn't personally view as important.
Challenge yourself. Take the math courses. Take the logic courses. Take the statistics and combinatorics courses. Take the finite automata courses. Prove to yourself that there are no obstacles in your way. They are a great expense of time now but they are a huge investment in yourself -- no matter how pointless they appear to you.
If I had understood what I was doing, maybe I wouldn't mind so much.
You should attack this problem two different ways: 1) increase the amount of time you allot to your own personal enrichment in these topics/courses (three hours is very little time if you are approaching new concepts in math) and 2) seek outside instruction as it's also possible you have a professor who doesn't understand what they're doing either (the teaching, not the subject matter).
My work here is dung.
If you think advanced math is "anything beyond long division", you are probably going to be in trouble.
"Good at computers" ?
you should put that on your résumé.
In the real world you're going to have problems that are much, much more difficult than 3 hours. Work through it, if for nothing else than to improve your problem solving skills. That is something you definitely will never regret.
FWIW I had some trouble with differential equations, too. I went to the library and found a book there that explained it much better. Made my life a lot easier. If you're having trouble 'groking' advanced math then the problem might not be you, it might be your book/teacher. But if you are afraid of work, the problem is definitely you.
"First they came for the slanderers and i said nothing."
I have both a BS and MS in CS, and have never taken (or needed) differential equations. I also completed all of the coursework for my Ph.D in CS, but didn't do the dissertation. I took three calculus courses, and have never used them, either! Analysis of Algorithms and the ability to do high school algebra and occasionally trigonometry have stood me well, however.
Mathematician here. You're learning differential equations to prepare you for lifetime of abstraction, to sharpen your skills in symbolic manipulation. Those differential equations probably won't really enter into the game... but who knows, you might end up doing game physics which is nothing but a massive differential equation solver.
But I'm here to tell you that differential equations are not advanced math. Take a discrete math class to get a taste of what 'real' math is for a programmer. Take data structures. You'll find yourself doing formal proofs (real math), and it will be extremely applicable to the rest of your programming career. That DE class is there just to make sure you can manipulate symbols.
If you're going into IT, chances are you probably don't need advanced math. Going into CS research? Probably. General software development? I think knowing advanced math helps you develop interesting and useful algorithms that can be used in the software. You may not use the advanced math topics/tools, but the skills you learn in advanced math help a bunch.
If you enjoy programming and computers, don't let poor math skills stop you from doing what you like. I sucked at calculus and do very well as a programmer. Logic is the more important skill.
What exactly does this mean?
- You can use MS Word much better than your friends and grandparents
- You can tweet better than them.
- You are better a googling than your friends and grandparents.
On one hand, if you aren't writing engineering / simulation / trading / game internals, you are unlikely to use most advanced math. So it's not important. On the other hand, if you can't handle advanced math, you probably won't be a top-tier programmer either. Top-tier programmers think about advanced concepts and keep a lot in their heads at the same time. So in that sense I'd say it is important.
You can't change your IQ, but you can maximize the use of what you have by developing good personal mental disciplines, i.e. working your behind off on stuff like this in college. My $0.02.
I bet you're a freshman. As mathematics (along with physics) is the foundation upon which computer science is built, you would do well to have a good understanding of it. I'm not saying that you should become an expert or take on a math degree, but, if you don't understand the basic principles underlying the code that you write, then I would have a hard time trusting that code in any meaningful application. Plus, it's not entirely useless in the real world. If you want to do an estimate of an algorithm's running time? Math. Want to compile some statistics on your application's usage patterns? Math.
You are pushing calculus as advanced math. What about Galois field theory? You are not even at the advanced stuff yet.
Proper algorithm design is not cook-book stuff, which is why it is Computer Science, not Applied Programming. You will likely do well at Applied Programming. The higher order math is for those that will go into the Science part of the programming.
Understanding the difference between the Science and the Application is important.
The most important thing is to know your limits and when you should go looking for help to solve something.
I hated math in university, I still hate it now, but over a 25 year programming career math has turned out to be the single most surprisingly useful thing I learned in university. Calculus, statistics, trig, I have needed them all in my programming work. I wouldn't have the cool job I have now if I couldn't do the math.
This is an exemplar of a phenomenon that I'm really beginning to despise in higher ed, the "do I NEED this?" phenomenon. Frankly, you don't NEED any given class to do most jobs out there. To be precise, your College diploma will not prepare you in the slightest for any of the multitude of skills you actually need in the job market nor is it designed to do so.. It is designed to prove you have the flexibility and desire to learn anything that comes across your plate. Picking and choosing what's actually relevant to your presumed career path is doing the exact opposite of this. How it impacts ME in a way that makes me despise it is that this trend is also transparent to College Professors, who now have no time to actually teach those that want to learn because they spend most of the semester fielding questions like "how will I use this as a McDonald's Fry Cook (or whatever the student laughably thinks they'll be employed as after graduation)" so they can't answer the basic "where can I find out more about this fascinating bit", leading to students like me getting so frustrated at the crap that they just give up on lectures. My honest advice to you is "if you don't think it's relevant to your interests, don't take it and petition the requirement off, you'll save a lot of people a lot of hassle that way"
Just because you're paranoid doesn't mean they aren't out to get you
First, I agree 100% with everyone who says "yes" I agree 'even more' (math joke there) with those who suggest a different computer degree where math is emphasized less. However, let me paint an oddly two-sided picture with 2 different stories.
I have a masters in math. In class one day our professor mentioned that he consulted for the forestry (or some such) department at the school. They were trying to calculate the area of an arbitrary region so as to estimate the number of trees within that area. Problem is the area may be convex or concave. The CS department at this school was trying to solve the problem by triangling the polygon, but ran into difficulties if the area was concave. My professor suggested using Green's theorem. Moral??? On the one hand advanced math gave a much more elegant solution to this problem, on the other hand **the CS department** at this school wasn't advanced enough to suggest it on their own... so if THEY can't do it... (fill in the blank).
Many years later I was managing a small group of contractors on a project (I was also designer for this project) and I casually mentioned during a design meeting that we could calculate the score we needed by doing a weighted average of the various datapoints we already had. One developer mentioned outright that he would need me to write up the weighted average routine in psuedocode and I suspect the other developer felt the same way but was less forthcoming about his ignorance. Floored but already stuck with these guys, but then again... they're contractors and I believe they've been able to keep themselves employed since.
At the end of the day, I'm one of those who thinks math and computer science is like solving puzzles... I would rather hire someone who likes solving all kinds of puzzles than one who has an admitted weakness in some (but perhaps not all) puzzles. If you indeed hate math that much I think you need to do some soul searching and figure out what sub-field of CS would be best suited to you. If you go into a field that requires math and you suck at it you'll probably be eclipsed by others more adept at it. On the other hand a lot of people who like math and CS are quite content to end their careers there... so if you have a growth plan that gets you out of CS work within a few years of graduating...
Firstly, it's very important. You will be kicking yourself in the ass for the next 10 years when you have to keep going back to figure out all this "crap you will never need" that you just so happen to need every month.
Your problem seems to stem from a lack of understanding the basics according to your summary. Go back and really study them until you understand tehm; it will make life so much easier and it won't take long. Everyone these days are "good with computers" and if that is your selling point you can get hired for helpdesk support at minimum wage right now. If you want to be involved in any of the advanced CompSci areas though those fundamentals (advanced math is one of many) are absolutely necessary. The first time you can't figure out a simple algorithm because you don't understand the math behind it just stand up, shake the interviewers hand and go home, you already don't have the job.
It's right next to, "I do grammer goodly"
Table-ized A.I.
This is one area where I feel most CS departments do a very poor job explaining why this math is important. Too many seem to simply teach the math, but not WHY they are teaching the math. They do not show practical reasons for the the math, it is more simply taught as "Well this is the math. You need to know it because you need to know math".
This is one of the reasons why I loved the way I learned these more advanced math classes. I was initially an Electrical and Computer Engineering major. Our Freshman and Sophomore curriculum was already per-designed before we even started. There were exactly zero changes you could make to it (unless you failed a course). We had calculus, physics, chemistry, biology, (and a few engineering classes, which were essentially introductions to engineering design, debugging/measuring instrumentation like oscilloscopes, multimeters, etc., basic circuit design, and practical implementation). But, all the classes were directly integrated. Meaning that at 9am when you had your calculus class which taught you differential equations, at 10:30am in your physics class you were then using the techniques that you learned in calculus to solve real world problems. The same with the chemistry and biology. Every professor knew exactly what was being covered in the other classes, so they knew exactly when they would use that material in a practical matter in their own course. We were using calculus to derive velocity vectors of moving objects, tangential line equations, and 3 dimensional transforms, the day we learned how to use the advanced math. So we were seeing the practical reason for the math and why it was relevant in the same day that we learned it.
For a lot of programmers, you may not need to use those techniques, especially if you are simply writing social applications, or word processors. But if you are modeling 3 or 4 dimensional objects, simulating physics, creating a game engine, writing graphical engines like photoshop/GIMP, all this advanced calculus, differential equations, and matrix operations are very relevant.
We were all warned a long time ago that MS products sucked, remember the Magic 8 Ball said, "Outlook not so good"
Spend time thinking about the different between Software Engineering vs. Computer Science. It's kind of like the difference between Physics and Mechanical Engineering. Some schools now offer degrees in Software Engineering for this reason.
One of the most useful classes I took was an entry-level Mechanical Engineering class. The reason is that the "Engineering" approach and mindset is needed in application development; yet a "Science" degree often doesn't emphasis this enough.
When you're past the hurdle of math classes, look at fun engineering classes outside of the Computer Science discipline. You'll actually learn lessons that you can apply outside of college. For me, "Technology of Alpine Skiing" turned out to actually be useful, and I got to go skiing for a grade!
No, I will not work for your startup
I find it interesting that you found an unrelated and seemingly irrelevant course to have much use to you in your programming. Wouldn't it be true that the math you didn't take would have also given you great insight into things that you aren't even aware of since you didn't take it?
-- ssoorrrryy,, dduupplleexx sswwiittcchh oonn.. -Quote found on actual fortune cookie.
Taking math in school has very little to do with actually being able to perform calculus or differential equations in ten years. It is about training your brain to think differently than most people. To train your brain to think more logically.
The same people who struggled with Algebra in high school are the same people who are going to struggle with complex business rules in application code. If someone failed at something simple like integration by parts, I probably don't want them in a lead role designing important software. I am sure there are plenty of exceptions, but in my 10 year career I have still never found a quality developer who was bad at math in school (plenty who didn't like it, but none who struggled to pass Calc 1-3, except perhaps the ones who were severe slackers at a young age).
-- All that is necessary for the triumph of evil is that good men do nothing. -- Edmund Burke
When I was in grad school, I noticed that the EE classes were all about continuous math. EE deals with a mostly analog world and you need all those partial differential equations to work in it.
On the other hand, the CS classes were all about discrete math. The EE guys give us machines that provide an environment based on binary math and logic. You need to understand finite automata, compilers, data structures, algorithms, and so on to work in that world.
Myself, I found that I liked discrete math better, but that's me.
One piece of advice. Learn and understand networking. You'll never be sorry.
------
Theory blazes the trail, but it can't pave the road.
YOU WON'T REGRET IT!
I started college out of high school as most do. I wasn't any good at 'math' either. I dropped out of college for a while. In the meantime I did a huge amount of hobby and semi-professional programming on my own. Later, after not being able to find a good job, I decided to go back to college. I decided early to actually, finally, try and 'get math'. I did it by forcing myself through math courses slowly, one at a time.
You know what? I finally got some good instructors, and with the combined knowledge I got from my personal programming, I finally 'got math'. And let me tell you, the sensation of actually knowing what was going on in math was exhilarating, amazing, and fun. It turns out that 'math', is nothing more than symbol manipulation, and rules for symbol manipulation (of course combined with various forms of logic). So 'math' actually -is- programming.
With 'math', you just sit around and memorize what the various symbols mean (nomenclature, discipline specific vernacular), what to do with them, and where they are applied. Turns out most of 'math' is algebraic in nature, so doing 'math' really well requires you understand the basic algebraic rules well. Anything else is logic specific to that dicsipline.
I would say now, that if you don't understand 'math', you really don't understand computers. You are just a trades person, and will rarely end up doing much more than vocational work.
Honestly, lacking the nature to push-through the crap envelope tells me a lot about your personality, and is why I would not hire you.
Over the years I've ended up making significant use of the math I learned in university.
Array and vector mathematics for graphics and 3D modelling.
Statistics for the financial industry, simulations, and supply chain programming.
Calculus for physics modelling, sound wave propagation calculations, and a host of other things.
Set theory for in-depth understanding and use of RDBMS servers.
But if you don't know the mathematics that can provide elegant and efficient solutions, feel free to implement a hodge podge of crap code like I've run into time and again over the years.
I do not fail; I succeed at finding out what does not work.
It sounds like you're used to knowing everything already. Learning is not always easy. Spending three hours on a homework assignment is pretty common in a technical major. Think about how little time that really is and you'll see that it's not such a big deal. You will spend at least that long banging your head against new concepts at work, so you might as well get used to it now.
Differential equations in particular can be hard if you're weak on algebra and calculus. IMHO, the most important thing to master for undergrad math is algebra. You need to be able to rearrange equations in your head. Once you can do that, the calculus stuff isn't very hard. Might be worth dropping the class and taking a refresher algebra course. Another option is to check out a few other textbooks from your university library (yes, they have them). A different presentation can make things much more clear. For the same reason, you might also try asking other professors for help. Try the physics department; they may be better at the intuitive side. I didn't really understand how to use integrals (as opposed to solving them) until a physics professor explained it to me.
Visit the
I will unreservedly say that the more math I have learned the better my programming has become. I am not sure what the limits(no pun intended) are but even calculus has been useful in ML applications. Discrete is great for thinking through networks and parallel computing. Statistics and ML are great for getting interesting information out of the hoards of data that most systems can gather. Matrix math is useful for both 3D and ML. The list goes on. But I like you looked at the crazy math until my eyes bled. Then I started to find resources where someone takes some bit and simplifies it. So bit by bit I learned the nasty stuff.
:= to differentiate from == then you are a putz.
But and this is a huge but; you are completely correct that many of the origins of CS seem to be largely old math professors who repurposed themselves. The result is some shockingly pedantic math in place of pretty simple math. So often a CS textbook or paper will use some bamboozling math formula instead of shockingly simple pseudo code. Worst case scenario they could use both side by side. So out comes the sigma notation instead of some pseudo code that says bandwidth_required=sum(network1..networkN);
I am going to go out on a limb and say that the sigma notation make the person feel smarter. I will now quote from the intro to "Calculus made easy" written around 100 years ago.:
"The fools who write the text-books of advanced mathematics-- and they are mostly clever fools-- seldom take the trouble to show you how easy the calculations are. On the contrary, they seem to desire to impress you with their tremendous cleverness by going about it in the most difficult way."
Now some people are going to blah blah about the conciseness of math notation. But I say bah humbug. I'll take clarity any day over conciseness. Plus you can always put the math notation in a box or something so it is not either or. Plus leave the jargon at home. It is not a network topology it is a bunch of networked computers. Plus as programmers we only use a tiny handful of variables x, y, t, i. Not theta, not epsilon, not gamma. Once you need to put a double stroke in your character you have certainly lost me a page ago. If you use
First, differential equations isn't advanced math. Neither is Calc 2, 3, or 4. That's applied math.
How important is it? You're asking the wrong question, and at the same time painting a less than stellar picture of yourself. Asking that question makes you sound more like a whiney kid who doesn't want to eat their peas than someone who is motivated to learn new things and improve.
Learn as much as you can while you are in the coddled world of academia. You will be surprised at how often information you considered useless at the time will be useful. Every course you take is another set of information and skills that may come in handy down the road. For example, being able to understand differential equations will be quite useful if you're working on software dealing with simulations (whether financial or scientific). Even if you aren't implementing the core logic yourself, having a basic understanding may help you develop a user-friendly GUI for setting parameters, or even just writing some documentation. At the very least, you'll have confidence that if the need ever should arise you'll be able to quickly dig up the information you need.
~X~
I work in computing; a meter away is a mathematician.
He knows real math: group theory, complex analysis, Lie algebras, topology, and, yes, differential equations. To him, math isn't about numbers ... it's about rigor, elegance, and beauty.
No surprise that his code is rigorous, elegant, and beautiful. When he showed me how to use Cheetah to build templates in Python, he explained things with an clarity and parsimony. In his world, clumsy coding is as bad as a clunky math; a clear mathematical proof is as fascinating as a tightly written function.
This man is the go-to guy for the 100 person business. Soft spoken and never argumentative, his advice and opinions carry weight. I'm honored to work alongside him; not a week goes by that I don't learn from him.
The problem is the person has to understand enough to know what to look up instead of starting with a blank slate. What the submitter is calling "advanced" really isn't but is instead a starting point to be able to lead into advanced topics if required.
The Universe has a structure that is, as far as we can tell, very accurately modeled by mathematical theories. It's no surprise that when solving problems that arise in the Universe mathematics is a vital tool. That said, some problems have been solved in general and if you expect to only spend your time programming specific implementations of solved problems you can almost ignore mathematics beyond familiarity with the symbols and skills necessary to translate mathematics into code, and only then if you can't just find a library someone else has written.
But do you want to go through life taking other people's word for how and why the Universe works the way it does, oblivious of the knowledge of how to even figure out answers to questions for yourself? How do you know how long it will take your car to stop when you step on the brakes, and how far will it go before coming to a stop? Don't say "1/2 a^2 + v + d = 0"; that's just something you memorized in a physics class. Where does the power of two come from? Why the half? If you don't even know how to answer this question I don't really want you driving on the road with me, to be honest. Most people learn patterns of behaviors that allow them to survive well enough most of the time in familiar situations, but fail when presented with anything novel. The world is so much more interesting than can be properly appreciated by only responding to it with the standard learned behaviors.
Finally, if you do expect to spend your career implementing specific instances of solved problems then also expect to be replaced by a computer programmed by someone who *does* understand mathematics sometime in the not-too-distant future.