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.
Unless you are programming video stuff or programs that actually require advanced math.
the majority of programming does not.
Discrete and Numerical Analysis are the only classes that I recommend. I am the Lead Architect of a Mega Scale project, and can honestly say I never use those advance method concepts. I do although recommend learning the thought process that comes along with those math classes. There are projects that use a lot of computations, but many don't. Try to learn the ideas behind it all, and then forget the formulas, you can always look them up.
I think some writing courses would probably give you more mileage.
love is just extroverted narcissism
I've been a software developer for over a decade. I majored in Computer Science and minored in Mathematics. In short, no one has given a crap about my knowledge of calculus, complex variables, and the like. Not once. A sole number theory problem came up once during an interview, but that's it.
If I could do it over again, I would have definitely picked a different minor; perhaps in physics, environmental sciences, or even writing.
Computers do math. They just do math. Yes, it is important to learn, both from a practical aspect (can you predict the entire arc of your career right now?), and probably the most important- getting through these classes show you have the ability to take on complex subjects in a relatively short amount of time and apply them.
Beyond anything else, a degree is a method of showing potential employers that you can learn.
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.
Honestly diffirential equations probably isn't the most important skill for a Comp Sci graduate to have. Outside of specific applications you'll probably never use it again. I never have. I wouldn't discount all higher math though. Most algebra related classes (discrete algebra, linear algebra) definately have applications and if you don't understant those you'll probably suffer for it. Just suck it up and deal with it. The system isn't about teaching you useful skills. The system is about proving that you can jump though hoops.
Many parts of Computer Science require quite some mathematical knowledge. .... all require you to know something about math.
Machine Learning, Artificial Intelligence, computability, linear regression,
Sure you don't need advanced math to install a router or network. Or even to make an App. But you're pursuing a degree in Computer Science, so computer science you get. If you're just interested in some programming, networks, etc... You may be better of getting some certifications from M$, Oracle, Cisco and the like.
Maths is always good, no matter what situation. It goes side by side with logic, and calculus is a way of thinking about the world and its processes.
For some areas, there's a lot of math involved. Consider data analysis. At first, it may seem like you will never need data analysis, but many people end up working for companies where they have to track performance and efficiency issues (if you can save those 5 bits for each of those 10M clients, you'll get a nice raise). Another example: picture a situation where you are developing a phone application to determine if the user is riding a bus or not. In these kinds of situations (not that rare), you'll need to know data analysis, frequency analysis, time-frequency analysis....and for that you'll always eventually wind up having to understand some concepts of 'Advanced Math' (though do note that this isn't 'advanced math' at all)
I often hear that there are engineers and programmers. If you just want to be a programmer, maybe you won't need maths, but if you want to be an engineer, it will not only boost your way of thinking, but also simplify a lot of problems. (I'm not saying you'll ever have to know how JPEG or GIF works -- this involves maths --, but I'm saying that if you do, then you can do great things with that information).
Have you heard about SoylentNews?
An important lesson I learned after college is that not every "requirement" is an actual requirement. Requirements like classes are often hurdles that are placed to either weed out people who don't want to do the hard work. Sometimes they are there to seem accredited to other organizations, allowing the school to justify their degrees.
I couldn't get a CompSci degree for the same reason. I couldn't handle calc. I got As in all my programming classes, but couldn't do the math.
I would say CS requires more creative thinking than logical thinking, but both are needed. However, in my every day life, I use maybe an Algebra 2 level type math?
Unless you're going to be writing video games or the like, you probably don't need it. But unfortunately, nothing you can do about it if the school is requiring you to.
You can do what I'm doing: get an English degree, show off your computer skills, and tell employers that with my geekiness and my English skills, I make great presentations and write very well.
We don't live in Shouldland.
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.
I went to school for art. I have no degree to show for it. I always had an interest in comp-sci, but never pursued it beyond a hobby in school. Now i'm a senior engineer at a big software company making cool stuff. I'm well respected by my peers and have never had a hard time getting a job in this industry. I suck at differential equations (I am good at vector and matrix math, and well, i can apply quaternions. my forte is graphics libraries like open gl and direct x). I probably don't suck so much as i've never had a math class beyond advanced algebra, but there's a lot more to being a productive member of a programming team than solving differential equations.
What matters is that you can get good solid work done.
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.
CS is about algorithm development, not application of higher math concepts. I spent several years writing C++ for satellite image processing, and can tell you that I truthfully do not know all of the ins and outs of the mapping functions, projections, etc. That's why the company has a couple of PhD's working on this. They do the hard number crunching and then articulate what we need to do in terms that a non-math-major can understand.
I see no reason why you should spend money getting yet another credential. You should be learning for the sake of learning. If the advanced mmath doesn't interest you, don't sweat it. You'll do fine.
Of course you need maths at a higher level. Try binary subtraction by hand.
Computer Science can be seen as having a theoretical and practical side. The theoretical side deals with defining how computers work, how to make them better, and why algorithms run the way they do and how to make them better. The practical side takes the theory and implements it; however, it still takes the abstract side to develop applications and make them do what you want efficiently.
You don't NEED math to write applications but without it, your applications will suck. Also, you won't be able to do anything much more advanced than a Helo, World application without memory and runtime issues. Also, go try to write a 3D Graphics engine without advanced math; I work on an OpenGL library and use matrix, vector, and physics maths every day. Not to mention the math I use to fine tune an application to run faster, use less memory, and logically fit parts together where they don't step on other running parts. You might never use some of the math you learn but you will use math and if you want to be taken seriously, learn it or go write websites in html.
-SaNo
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.
Technically speaking, Computer Hardware Engineering is definitely the playground of Math Gurus. However, Software Engineering, Networking, Security, etc, have nothing at all to do with Mathematics. Mathematics and Software Engineering both "inherit" from Logic by way of some cool associations with Linguistics, (Semantics, Syntactics, etc). It is really detrimental that many go into the industry without much greater backgrounds in logic and linguistics.
Crap is going to open a lot of doors for you, mainly the exit.
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.
imho I think the math mindset is very similar to the cs mindset, I'd still deem it a useful mental training exercise regardless of anything I say from here on out.
In reality whether or not you use it completely depends on what field you catapult yourself into. There's a place in every industry for a cs grad, not a single industry escapes computer software. For example if you stay with just simple web stuff I'm doubtful you'll ever encounter any math beyond arithmetic; in fact I'll say right now you probably won't use even 90% of what you learn in cs for simple web stuff. But if you become a serious software engineer say working on "big data" problems, high speed trading, visual toolsets, or anything involving worlds that include engineering or sciences then there's a chance you will need to dust off some of those books. Even if you have "real" mathematicians doing the heavy lifting for you it's still a good idea to know what you're programming instead of being fed with a spoon.
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.
I always said, in High School they teach you what to know, in College they should be teaching you how to think. Higher level mathematics is all about problem solving skills which is important in any career these days that requires a college degree. It's not about the answer to differential equations, but how did you get there? What steps did you take to look at the problem, determine what needs to be solved and then come up with a method to solve the problem. Problem solving is a skill that's sorely lacking these days. I may not know the resolution to each and every new issue that comes up in my environment, but the ability to track down the problem, understand the problem and then find or design a solution is what really matters.
Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians.
Mathematics is highly important in computer security, software engineering, and network engineering. I started writing an access control system several years ago; the first thing I did was ingest an 18 page international standard describing the proper implementation of role-based access control systems. It was a *lot* of mathematics describing the relationships between security contexts--between objects, between accounts, between roles.
Networking seems pretty straight forward; but try bringing graph theory to the table once. You'll suddenly have a lot to say about the wonderful, efficient network you designed and how it's not your fault it's not meeting performance requirements because the technology just doesn't exist yet.
Software engineering is the practice of turning a project plan (a scope, work breakdown structure, design considerations, requirements, etc.) into a finite state automation. Program control flow and algorithmic efficiency are highly relevant in all cases. You're not writing an LZ77 encoder, just a PHP application? And how are you passing data from your Ajax application through JavaScript? And it doesn't work all the time? Why, that's because you've missed a critical race condition in this section of the flow; and besides, if you handled this action in this way instead it'd be 1000 times faster.
Support my political activism on Patreon.
Not at all. I've been writing code professionally for 14 years and in that time I've used Calculus exactly twice. Maybe if you did engineering involving a lot of physics but I seriously doubt those jobs are common. It looks good on a resume and all things being equal an employer would probably pick the applicant with the better math skills but then again the same can be said of just about any skill.
Anyways good luck.
The answer to that question is 42 If you don't understand that, you may have to work on your advanced math a bit more.
I was promised a flying car. Where is my flying car?
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 guess because it starts with the words Ask Slashdot:
The school I went to in particular, the CS courses had more math than they had actual computer courses. I think they were just padding the cirriculum to make their degree program and math looked like the most viable option. As an 18 year old it was enough to make me change majors, I can do math but its not my favorite pass time, so a degree that looked an awful lot like a math degree with a minor in computers was enough to scare me away. I regret not looking at other schools.
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.
And don't forget statistics and data analysis!
Have you heard about SoylentNews?
Of course, it could be useful for a future job, depending on what that may be. You'll never miss that skill that you don't have, because you'll naturally move yourself into what you are capable of. You won't need much math for front end stuff, user interfaces, accessing a database, code monkey stuff. Actually, you don't need much CS either. But if you want to get into physics simulations, signal processing, graphics/audio processing, finance, video games, writing a database, ..., that math knowledge would come in handy.
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
In a good team, it's good to have one person who is good at maths. Just in case. Maybe two or three if you are developing graphics engines. Same in the financial industry. Or if you need software to run fast, someone who can figure out how to use a cache in an optimal way. Someone who can give the correct answer to "if one Kilobyte costs 0.002 cents, how much is a Gigabyte" is handy. If there is nobody, a team can be in trouble.
Doesn't have to be you, though.
Once upon a time I worked on things like tracking a moving object from a gimbal mounted camera which was attached to the nose of another moving object (a helicopter tracking ground targets). That involved a hell of a lot of complex math, mostly linear algebra with a lot of trig. Those math classes sure came in handy. I would have been dead in the water without them.
I've also worked in the digital video industry and used transformations and matrices to manipulate overlays on video. High school trig was sufficient for that particular job. I've probably spent less than 2 man years doing complex math in my entire 10+ year career. When you need that sort of math, you really need it. But most of the time, it doesn't really matter. It's just good to learn how to solve all those more abstract problems that come up in higher level math
There are two types of people out there. Those that compartmentalize all their knowledge and only use knowledge from the appropriate compartment and those that use all their knowledge all the time.
If you a compartmentalizer, then don't bother learning anything other that what you are going to do, you won't use it anyway.
If you are someone that uses all their knowledge all the time, then you should struggle to not just learn things, but really understand them. I use differential equations, linear algebra, calculus, and abstract algebra all the time. But then I know them all inside and out and so it's just natural for me. I use statistics quite a bit as well, but I usually have to look that up. I try to use the appropriate tool for the task.
The old saying is that if all you have is a hammer, everything looks like a nail. A corollary to that is the more tools you have, the more options you have, and you can pick the best option for the job. A question for those that say, "I can just look it up." If you don't know that screwdrivers exist, why would you ever go to look for one?
The bset two programmers I ever hired, didn't answer any computer related questions correctly. The first because I didn't ask any. I only asked him math questions because he had a BA in math and I wanted to make sure he knew what he was doing. Others had asked him computer questions.
The second answered almost every question with, "I don't know, but I have a book about that on my desk." The important thing was he was able to convince me he was smart and wanted to learn.
Your question implies you are not that smart and don't want to learn. So I wouldn't be inclined to hire you. It's not too late to change though.
but CS is not IT and not even application development. and a pure CS track gives lots of skill gaps. But what makes a party or sports University better then a Trade School?
There are jobs for people with wrenches in the auto industry.
I am reminded of an asinine scene in Peggy Sue Got Married...Or Did She? where Kathleen Turner's character goes back in time to her high school days and bitches that she never once needed to use the algebra she was learning in class.
Then proceeds to labor to tell the bright kid about computer chips or something so he can "invent" them
And labors to try to invent...panty hose.
The writers never connect it all.
Programming is about more than algebra. It's complex functions on symbols and ideas as well. If you have difficulty with the math, well, a math of idea-pushing might be harder still.
(-1: Post disagrees with my already-settled worldview) is not a valid mod option.
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...
In case you haven't noticed by now... differential equations is where math meets the real world.
It is how we can translate a natural phenomenon into a math equation to figure out problems.
Being able to look at problems and be able to translate that into an equation into which the problem can then be solved is a vital in engineering.
I suggest you take Linear Algebra, too.
Previewing comments are for sissies!
Recently graduated, currently employed for a consulting company, pretty nice job with a great salary and benefits and basically the best job you could expect straight out of college. Yes, the math SUCKS. I had to do three semesters of calculus, then I got screwed into taking linear programming (not bad) and non-euclidean geometry (pretty bad).
Are you ever going to use this stuff? Probably not. If you do, you'll look it up. If you're going to actually be using that kind of math on a daily basis they'll probably be looking for someone with a math major, if not a PhD programmer. But first recognize that there's a distinction between 'i'm going to need to know this' and 'it'll help me to sit through this'. Just because you aren't calculating multi-variable integrals on a daily basis doesn't mean it won't help to know a bit about them -- just knowing that such things EXIST is a HUGE advantage, because then you can recognize places where you might need to use it and go look it up. Advanced math is also helpful just for rough estimates, so you recognize that you can't always just throw more servers at a problem and expect it to get faster; I'd say it'll help you recognize "Mythical Man-Month" type situations and such.
But I suspect you may be like me, as I had a ton of trouble with the math too. And the reason, I think, is because I'm more of an engineer than an academic, and they don't teach high-level math properly for engineering minds. They never give practical applications. If I can see how something is used, I can understand it. But if you just tell me to memorize some formulas, I'll never get it. So if you have that same issue, it might help to talk to your prof or look around in some different textbooks to see if you can find some examples of actual applications of this stuff.
The only math I use at my job is doing Euler problems during breaks... Other than discrete math, and another class called something like math for decision making. Calc 1-2-3, applied stats, linear algebra? Never use 'em for actual work. I know they're useful if you want to go to grad school, though.
Ironically enough, you are kind of proving the my original point. No, programming is not the most difficult branch of applied mathematics, but what you are actually trying to implement CAN BE. Almost all encryption projects, codec projects, etc, have a subject matter expert who documents the requirements. I can't tell you how many genetic alogrithms I have had to implement, encryption algorithms, etc, and I have absolutely no math training over Trigonometry. It isn't required. I have created created algorithms to parse 3DES, IPSEC, etc. Oh, and yeah, I often had to consult a subject matter expert. A Programmer should be a master of Programming, and know where to draw the bounds of their specializations. Knowing when to grab a subject matter expert is another quality of a great programmer.
Also, change your teacher and/or materials, (or more probably get additional help).
I really struggled with advanced maths & stats until I got a prof who made things easy; now I (sometimes) teach them.
And I'm far from being a genius - just an average guy. Also, I find this knowledge useful on a regular basis, in many ways & areas.
I don't believe it's useful to ask "will I ever need 'x' particular tool?"; you cannot know.
Think more along the lines of "a broad understanding of these concepts & tools will help me become a more-rounded and performant practitioner".
So, don't give up! If you are intelligent, which I assume you are, then the problem is not with you, it's with your teacher.
Find someone to make it easy for you, and you'll go from hating it to enjoying it.
There's few things in life more satisfying than getting over this kind of difficulty.
I've got a math degree, and have been programming for over a decade.
Differential equations? That's "math for engineers" -- it may be relevant for designing a bridge, or analyzing a rocketship... but it is unlikely to come up in programming (unless you are programming for something that is controlling a piece of hardware -- if your software is doing force feedback on a robot-arm, the equations for forces and motion on the arm are relevant, and perhaps you want to take a mechanical engineering intro class to understand them better!)
"Math for programmers" is more things like discrete math. Probability can be helpful. Taking some class that teaches you to do proofs is helpful, as it teaches you some patterns of thinking about things that are useful. Linear algebra might be useful (if you're doing graphics applications, for example, linear algebra tells you how you can rotate and scale things...), though increasingly you do that via "buy the right piece of middleware" (I've worked on several games, and none of them had programmers actually worrying about the algebra of drawing stuff on the screen at that level, you just had a very high level interface of "put foo in the world at coords X,Y,Z, rotation T")
If you can't handle differential equations, that may be a warning sign that your problem-solving skills or abstract-reasoning skills are lacking. Or it might just be that you're bad with differential equations; if you do fine in discrete math, you're fine, just bang your head on diff eq enough to graduate and don't worry about it after you manage to pass. If you find that you are also bad with discrete math and probability, then be aware that there are certain types of programming that you are likely to also have difficulty with, because they are very similar to math. That probably doesn't stop you from being gainfully employed as a programmer doing other types of programming, and even being a better programmer than a lot of people, though! Everyone has strengths and weaknesses; a programmer who is weak in abstract reasoning isn't necessarily any worse than the programmer who can't write very well and thus always does bad documentation (and there are a lot of those in the world...).
And to punish me for going into a field originally developed by mathematicians I need to learn all this crap.
You need a serious attitude adjustment. Some brilliant folks invented an entire industry, and you're upset that they were mathematicians. You also ignore the fact that, to invent the industry that they did, they needed to be mathematicians. You also are under the delusion that differential equations is "advanced math" (it really, really is not).
I think you need to step back, eat a slice of humble pie, and really think about whether computer science is for you. Math is not the unrelated field that you think it is.
The short answer to your question is: YES, no matter what subfield of computing you go into (Networking, Systems, Software Engineering, QA, Release, or Project Management) you'll need advanced Maths. Which advanced maths depend on the specific subfield. But the reality is, you're far better off knowing most of the stuff that a 2nd-year Math major has to take.
If you're a Software Engineer (and, to a lesser extent, QA), you'll likely need the Maths which help you describe real-world actions or model real-world happenings. This means Geometry, Trig, Calc, plus Maths common in Physics, plus application-specific stuff, like various Linear Algebra, Complexity, Markov Modeling, Game Theory, etc. Basically, Software Engineering has the biggest demand on Math knowledge, but it varies according to the type of project you're on.
Networking and Systems depend heavily on the Linear Algebra and Discrete Math fields, particularly Set Theory, Game Theory, Complexity/Computability, and Graph Theory. Most of this is not writing down equations, but having an intuitive understanding of the problem being presented because you've had the requisite background. For instance - modeling network traffic flow and determining system load both require Graph Theory and Complexity, but it wouldn't be immediately obvious to the outsider.
Release and Project Management are less Math-intentive, but it's still important to have college-level Maths as a strong foundation. Complexity/Computability, Linear Algebra, and, particularly, Statistics, Graph and Game Theory are cornerstones of these fields.
The reality is that Math is a significant part of any Computer Science degree, and is critical in daily professional use. Outside specific programming positions (e.g. those involved in modeling of some kind), it's not the same use as a Civil Engineer or the like would be using Maths. But you have to be comfortable thinking about Maths, and you need to have significant educational background to be successful.
Personally, beyond Geometry and Trig, I'd think that you'll have to take about 6 semesters of some sort of Math in a reasonably rigorous CompSci program. You'll probably only use 3 of those courses on a regular basis, but you'll never know WHICH 3 you'll be using at, so you need all of them.
If you find Math difficult, tedious, or boring, you need to seriously rethink a CompSci degree (and, by extension, a career in something normally requiring a CompSci degree). Or you need to talk with your Maths professors/teachers, and figure out why you have difficulty or are bored during Math classes. Either way, it's a required skill for the profession.
There are always four sides to every story: your side, their side, the truth, and what really happened.
if you have any projects that can be publicly shown, they sometimes speak louder than experience in a resume. (especially if they deal with the technology/skills companies are looking for)
Math is sometimes useful for specific jobs like finance, 3d graphics, and you may find yourself in trouble if trying to grok details of those projects. However strong Logic sense should serve you well on most other projects. overall I think a strong background in algorithms, data structures trumps that of math. You can always look it up or ask someone for those rare cases where you deal with a tricky math problem.
If you're like most people in a University STEM program, you found High School very easy. This math course may very well be the first challenging thing you've done at school. You have to face and overcome this challenge, just as you'll have to face and overcome many challenges during your programming career.
The point of all this 'well-roundedness' stuff, where people tell you you must learn diverse subjects that have no relation to your desired career, is to make you work outside your comfort-zone; and to expand your comfort zone to include new subjects and skills. You'll have to do the same in your career.
I would have definitely picked a different minor; perhaps in physics...
You're not the first to be puzzled by the relationship between computer science and mathematics. There are two ways advanced math can be useful to you.
One is obvious even to a layman. If you want to write software that does advanced math, you need to understand advanced math yourself. You're not going to be able to code a differential equation solver if you don't understand how to solve differential equations yourself. This is known as domain knowledge, and it is required any time a domain-specific problem needs to be solved.
The other is obvious to anyone that understands what computer science is. Computer science is not the art of programming computers. Computer science is the development and analysis of algorithms. You don't need to be great with advanced math to sort a list of numbers. You don't need to be great with advanced math to write an algorithm that sorts a list of numbers. You might need to be decent with advanced math to determine how long your algorithm will take to sort a list of numbers, or to compare it against other sort algorithms. Computer science, at its core, consists of large amounts of formal logic, proofs, and some calculus thrown in for good measure.
This second relationship between computer science and mathematics isn't often as obvious simply because laypeople don't understand what computer science is. The discipline is often conflated with the totally unrelated disciplines of information technology, software engineering, or software development. I say totally unrelated because you don't need anything more than pencil and paper to do computer science, which isn't the case with those other disciplines.
That being said, it depends on what you want out of your education. If you're looking at education as a means to an end, as a way to get a job in the computer industry, as job training, then you probably don't need much in the way of advanced math. Get the degree, get a job, and pretty soon you won't even remember what an integral is. Very few coding jobs require any meaningful advanced math skills outside of domain-specific applications. Very few (if any) IT jobs require any advanced math skills at all. However, if you want to be a computer scientist, then yes, you'll want that advanced math. As much of it as possible. You'll want to be dreaming of crazy topology stuff in non-Euclidean space. You'll want to be lost in thought about bijections between various sets. You'll want to bleed n-tuples. And you'll want to have a trust fund, because you won't be able to find gainful employment.
For every one computer science job, there are a dozen computer jobs. You don't sound like you have a burning passion for math. Avoid computer science and focus on computers.
YMMV, but I tutored math and computer science for over 5 years. I have a BS in Electrical and Computer Engineering and have completed a good amount of graduate level coursework in Electrical Engineering, Computer Engineering, and Computer Science.
You love computers, you're very good at them. This is sufficient for you to have promise in the computer industry. Studying advanced math would probably just be a distraction for you.
Chuuch. Preach. Tabernacle.
Their are gaming industry trade schools, that are actually really good. Though, I would never personally hire someone with this background, or university background, unless they had actually accomplished something with their knowledge. At least a simple phone app, personal website, some sort of demonstration that they have passion, motivation, and can follow through. And if you hadn't noticed before, the U.S. Education system is incredibly backwards when it comes to education, especially when it comes to I.T., (computer science, whatever). There are a lot of very valuable industry certifications, especially from MSFT, Cisco, Java/Oracle, etc. Any of these are handedly more valuable than a college degree. And, these are infinitely more valuable with demonstrable experience. But, Experience, Passion, Self-Learning, etc, will always trump formal education and certifications. The industry changes too fast. You have to be agile. This is what employers look for. Not the rigidity of formal education.
I think we need more apprenticeship like systems or at least more hands on classes with Professors who are / have done real work in the field. Also the idea of being well round needs to go / be cut down with to days high costs of school that should not be forced on to people. (Some Colleges still have forced PE and swim tests at the College price level)
Math is irrelevant. You'll never use advanced math in your career. What you are learning is advanced problem solving, which is invaluable.
Dont become developer, you better be a team leader, or even better, project manager :D
Learn it.
I am very small, utmostly microscopic.
In terms of the actual work: Most application programmers and web developers won't need any kind of advanced mathematics. They might be tasked at collecting statistics, though, so it's a good idea to have a general understanding of that. Systems programmers are more likely to need advanced math. You will definitely need some strong mathematical skills if you're going to directly work on software that handles data compression (including audio and video formats, like JPEG and MP3) or error correction/redundancy. But most programmers don't ever have to do this; if you want to decode a JPEG file, you probably use libjpeg or your toolkit's built-in decoding functions.
Now in terms of actually finding a job, that can be a different story. The underlying problem is that many HR departments think that "Computer Science" is programming, and that anyone they hire as a coder should have a CS degree. But the professors who teach CS think that CS is a branch of applied mathematics, with only a tangential relationship to programming. Given the current balance of power, I suspect the corporations are eventually going to kick the universities in the ass until they start teaching CS the way they want it to be taught. But that hasn't happened yet. Which means that anyone who wants to become a programmer, but isn't that good at math, has a real problem breaking into the business world.
A traditional computer science program is designed to prepare you for research, may that be in academia or industry. Most of the problems that you'll be solving won't be easy, the solutions that you develop won't be seen by many people out of your field, but the work of a good computer scientist will be groundbreaking. They take the impractical and make it practical, primarily through developing algorithms that have a strong mathematical basis.
It sounds like you'd be more interested in a software engineering degree. That's still heavy on math, but the emphasis is on designing and implementing software in a rigorous manner. Or maybe you want to be going through some sort of college program. That'll be much lighter on the math and you can still get decent jobs with it, but you'll be more of a grease monkey of the information age. (That is fine if you like that type of work, just realize that your career options are more limited.)
Just push the button with picture of the food item on it and the register will tell you what the change should be.
You are satisfying requirements for a BS degree which requires the higher math. It's not necessarily specific to computer science. I wouuld say in Comp Sci as compared to other science majors that math is less important in regards to most of the jobs you might obtain and the ability to design complex solutions is more important. But again, it depends on what you are going to specialize in. It sounds to me like your problem is girls, parties, and too much liquor. Ok I'm just kidding.. It sounds to me like you simply are not very interested in math and thus find it challanging. It's too abstract and you need concrete. Many Comp Sci majors are simply not that kind of mind. Some go off to Info Systems or whatever the current variation of that is and specialize in business. The truth is that its simply boring if you are not into it.
Have you fscked your local propeller head today?
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.
The implication that "algorithm development" =! "application of higher math concepts" is hilarious.
What's hilarious about using numerical analysis (algorithms) to solve complex mathematical processes?
The idea that all computer scientists are also math experts is laughable though.
For roughly 99% of the software work out there, it's not directly applicable. Yes, it's nice knowledge to have, but so is a lot of other knowledge. While I don't want to sound like I'm "bashing math" education, it should be considered in terms of the alternative subjects for the given time and effort. ALL knowledge is "nice to have", but we only have a limited time to absorb it.
Educators don't push hard enough to weigh the options, or at least don't document their subject decision process publicly. "Trust us, we know what's best for you" is hard to accept. Perhaps the educators need an education in choosing education.
Table-ized A.I.
For the past 20 years, I have been doing a wide variety of projects, and though some of the university math has been very useful (e.g. Linear algebra), I can honestly say I have never needed to use any of the differential equations techniques in the form taught in school.
At best, I had to use a system that can be described by a differential equation, but in discrete form and with simple functions that numerically solve the problem.
I agree with the less-cynical-sounding commenters: math is important in CS not just because of the history of the field, or because it shows your willingness to work hard, or because maybe one day you'll code in a domain that requires tensor analysis or what-have-you.
It's important because when you "grok" it, your mind is different than before you grokked. Garridan's comment (http://ask.slashdot.org/comments.pl?sid=3805139&cid=43874611) is right on: you'll "sharpen your skills in symbolic manipulation". Pushups and bicep curls and stretching aren't sports: athletes do those things to condition their bodies for the real sports where nary a pushup is involved.
Maybe the marketplace for the kind of job you want demands a CompSci degree in these tough years, but I know many developers from a few years back who don't have one. Question yourself: would you be better off getting certifications plus a 2-year diploma and a 2-year headstart in the job market rather than a 4-year degree? You might do just fine with job-oriented training on top of your aptitude and some experience.
je ne suis pas un fou
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"
Being the sort of person who would never use the word "grok" is probably even more important to your career and your life. Even more so with using it twice in two consecutive sentences.
Slashdot: providing anti-social weirdos a soapbox, since 1997.
You think you love computers. But basically you love some parts of the computers that you are familiar with. But in real life, after getting your CS degree, the part of computing that puts food on the table and pays rent, is probably not going to be that part of computers that you love. It is going to be some pointy haired bosses, some nitwit IT department, some insane procedures instituted by some VP, and work, deadline, metrics, annual performance review ..
Where does diff eqn figure in this? It is where you learn to do things that are not particularly interesting, whose purpose is not immediately evident, things that are hard, things that require hard work, long hours and perseverance to complete. In short these frustrating experiences prepare you for a career. Any fool can devote all his/her time to something he/she loves. I am not sure the job I am offering is going the what you are passionate about. I need workers who will complete tasks even if they are boring and appear to be pointless. I will hire people who have suffered through diff equations. In an earlier era I might have insisted on Latin too.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
I work primarily in computer graphics. My close friends/family mostly work in video games and simulators. I find that I need to understand advanced math a fair amount - Linear Algebra, Discreet Math, Graph Theory. My friends in simulators or the graphics of core games end up working on some pretty snazzy math problems as well. My family member that works in casual games only uses Trigonometry.
- Formal Logic (might have to look in the Philosophy department for that one, it was dual credit for us)
- Structured Programming
- Number Theory
- Mathematical Modeling
Lots of the rest of it was fun, but I haven't really used much of the college level math since then. The geometry and trigonometry I had in high school have served me much better.
Hope this helps.... Red
As has been posted earlier mastering differential equations is an exercise in symbol manipulation, but the underlying equations are really important.
Mathematics is an ordering of nature via symbols. In the ordering of nature, Newton realized that most equations had a second level of ordering that described the original equation. These equations of differentiation and integration were achieved by making differencing ratios and approaching a limit. Differential formula can be used in every field of science. They are used regularly in Computer Science usually as an algorithm to optimize a process.
Learning to manipulate these equations in your situation is probably unnecessary. Understanding what these equations are used for in the real world is very useful. I suggest you consult Google for each equations use in real world situations, if only to give you some mnemonic for learning this stuff. (You can probably consult Google for the DE problem answers too.) If you know how the equation/formula is used in the real world you might see a use for the same concept in a program, hence it is good for a degree in CS.
On the flip side, a good teacher should be able to make this stuff come alive and be far less dry then you make it out to be. Your academic career will flourish if you spend a lot more time researching your teachers for next semester. Consider a different institution if the student consensus is that there are no good math teachers where you toil.
machinator omnis sine licentia
I think it matters a bit on what you want to do. An awful lot of the "heavy lifting" math intensive stuff has been implemented in the form of shared libraries. Do you want to encrypt data? Knowing more of best practices around session and key management (which isn't a math laden topic) and that you need good entropy for key generation (something you can find implemented in a shared library). So, go find some shared libs with AES and prng (source of random data) and you're likely good.
Do you want to be the guy who makes what replaces AES? Learn to love math.
Really it comes down to: do you want to follow best practices or make them? The more you want to be on the end of making best practices vs gluing together bits and pieces the more really knowing math helps.
END
Getting your BSc or even your BSe (Software Engineering) will require calculus. You're unlikely to ever use it again since you won't pick a job that requires a deep understanding of the subject. You can even look up anything that you need to know and/or use libraries written by those with that deep understanding. Just get through the courses.
And I explained to him that the same logical thought processes that go into higher math (and by that I mean maybe college-level calculus 101) are required to do solid, efficient coding of any kind. He was absolutely horrible at math, and his attempts at coding were predictably terrible.
"Melt the ice; eat the moose; drill the oil; get it over with." -Max Boot
Is a minimum of Algebra I, maybe some Trig and Geometry. Otherwise not much. Calculus is NOT required.
I have a good career despite having not completed my degree, but it is a more difficult path. Math is and always has been my worst subject, so I understand your frustration. If you get a base set of skills in your brain now, it will probably be easier for you to refresh your knowledge some years later when a problem comes up that needs some specific math skills. Some examples I have run into include linear algebra, matrix manipulation and probability, which are used in search engines and 3D stuff. I recently needed to understand the math behind the checksum method used by Galois Counter Mode, specifically whether it could be performed on separate chunks of a file and then recombined (it can). This required a lot of quality time with a discrete math text. None of this stuff is considered advanced, but my point is that exposure to concepts now can aid in finding a solution to a problem you are presented in the future. The stuff gets harder to learn when you get older. :-)
Maybe you should take some writing courses. That paragraph sounds like a 16 year old venting.
I was terrible at Calculus. I got a D in Calculus the first time I took the class. I had to drop out of Calculus II because I couldn't understand a damn thing. It ultimately led to me dropping out because I couldn't get the degree I wanted without going through those classes all over again. But, I finally grew the hell up and decided that just like everyone else who got a CS degree before me, I was going to pass Calculus I and II.
After a long break I finally, perhaps somewhat insanely, decided to take two accelerated evening courses over the summer at UMass Boston. 12 weeks for Calculus I & II. An entire calculus book. It was pure hell. When I wasn't working I was either in class or doing homework. I literally got 1 hour of sleep some nights. Literally sleeping standing up on the train going into the city for work the next morning. Having fun on the weekends? Forget it. Friday night to Monday morning was homework time. I was deficient on Trig and Algebra knowledge, so I had to teach all that to myself as well as I went. I shall forever refer to that as the summer of calculus.
I ended up joining the Marine Corps after that summer. But I learned a simple lesson from that as well. They give you every chance to succeed. It's up to you if you want to take it. I also got the G.I. Bill, which in the end allowed me to afford my courses more easily and accelerate the pace at which I took them. But it's the same thing. They give you every chance to succeed and it's up to you to take them up on it.
And for whatever reason Linear Algebra had the Calc classes as prerequisites for it, and I ended up absolutely loving that class. I also got serious and got my degree. Calc I, Calc II, Linear Algrebra, and Discrete Math, all under my belt.
You're not special. Do what everyone else did. Someday if you're the dean or run the CS/Math department at some university you can alter the requirements if you think they're so unjust.
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 have been out of a school for a while, and I just picked this book up to refresh/prepare for an upcoming interview. Try getting through that book without a math background. My mind is still hurting from what I was reading last night.
But the point is, what kind of job are you looking for. Quite frankly, you would most likely NOT enjoy a job that was not challenging.
Prof. Farnsworth - "Oh a lesson in not changing history from Mr I'm-My-Own-Grandpa!"
If you are looking at immediate employment prospects and saying you don't need math for them, then yeah you're right - in the short term. But 5 years from now, who knows what you will be doing or what you will have to be familiar with? Even if you don't remember the exact approaches, you should at least be able to recognize the problems. As for the actual math, I sucked at math. Until I got a good prof who loved what she taught and convinced me that while my doing the problems assigned was good, if I was having difficulty it was because I wasn't doing enough homework. So I ended up doing all the problems I could get my hands on and basically doing math all day Saturdays and Sundays and quite a few evenings. Turns out if you want to be good at it, you have to do a lot of it - not just the minimum required. Very few of us are Sheldon Cooper and math is all about practice.
It really depends what you want to do for a career, honestly you could get by with College Algebra for most any business I.T. position, but to be great at your IT job I would take Business Calculus, Statistics, and Discrete / Finite mathematics at a minimum. I would say that breadth of mathematical knowledge is more important then knowing something like Calculus III, Linear Algebra, or Differential Equations. Survey classes are a good option.
If you want to be a computer scientist proper, you will need 400 level mathematics courses, a real computer science degree is little more then an applied mathematics degree. If you want to be a programer I can't comment on that because I'm not a programmer, I'm a computer systems engineer. If your going down the systems engineering route knowing something about electronics is just as important as mathematics. To be good at systems engineering you need a very broad knowledge base, I've used advanced calculus like never in my career. Algebra and Statistics daily, for example calculating the MTBF for a RAID array requires no calculus what so ever, but you need to know how to work with probabilities. If you want to implement an algorithm in code, some random computer scientist already did the leg work and all you have to do is integrate it into your project.
In short it's like playing with legos, you'll need advanced mathematics or electronics if you wish to roll your own lego bricks, however today we typically just buy bricks off the shelf.
Advanced Math trains your brain to be more awesome. I was a math major in college. I find that it trains people to engage in higher-level, abstract thought, which is what a lot of architecture is about. If you just want to build stuff, physics was the way to go. There's never any reason to waste your brain on a CS degree, though. Good schools require that you master the programming languages before you show-up to the first class-- and if you can do that, just buy the books and learn on your own anyways! You'll then be prepared to keep up with the floods of stuff you need to learn in your career! My quote: "Books make their authors redundant. Good books make their authors obsolete. - David Betz"
You didn't give us enough information to answer that question, and you probably don't have enough information to give us. Here is the only answer that is going to matter: the more you know, the broader your employment opportunities. How much you need to know depends on what jobs you end up getting. They range from "no advanced math needed," to "you can't possibly know enough math."
I've written jail management software, tax collection software, basic game physics libraries, office management software, and a whole bunch of stuff covering a very diverse range of topics.
Game physics were the most mathematically demanding topics, but all of those problems have already been solved by others. My need to actually know game physics math was minimal (vectors, matrices, dot products, and cross products covered most of what I needed), as I only needed to be able to understand the language of the presenter enough to implement the math in code.
However, sometimes I am presented with a business problem that I can solve with the math I learned from game physics. One example was writing a report showing which jail inmates were ever housed together over a given period of time. This was easily solved as a one-dimensional collision detection problem, exactly as it would have been done in a video game. It wasn't advanced math by any stretch of the imagination, but it was an application of math that I would never have predicted until faced with the problem.
So there is no simple answer such as, "you don't need math" or "yes, you definitely need math." There are far too many variables to consider. The bottom line, though, is that it's very helpful to know, and in ways you can't predict. Sadly, the college/university classroom is the single worst possible environment in which to learn it.
A sports University will have a CIS program more firmly rooted in theory. Such a program will also have more robust basic education requirements including math, science, the humanities, and even engineering depending on the school/department.
The party school will have all of the "useless" stuff that hiring managers like to treat as not directly relevant to the job.
Academic arcana can be useful even in IT.
A Pirate and a Puritan look the same on a balance sheet.
I do basic IT admin work and I haven't gone out and gotten a degree. Just a long list of job related work experience. However I work in an region of the U.S. where a degree isn't going to help much anyway because there aren't high paying IT jobs unless I want to commute 2 hours every day.
The point is. Sometimes experience outweighs a degree. Sometimes you need to know math. It all depends on what you want to do.
Whenever a player quits EVE to go play WoW, the Average IQ of both games increase.
1. What you're doing as a programmer most of the time is basically applied math. Most of it is discrete math.
2. If you can't figure out the logic of higher math courses, you're going to have serious trouble figuring out the logic of 300,000-line programs. If you can't handle it, you may be going into the wrong sub-field, and would do better focusing on, say, technical writing.
3. Statistics is incredibly useful. For example, let's say you're tracking the performance of your systems, and you need to figure out what's an unusual number for some metric you're tracking, and whether it's worth waking up the sysadmin to investigate.
4. Linear algebra and calculus are critical if you're trying to do stuff with graphics. And you can make big bucks by doing that well, as some of my classmates who went to Pixar found out.
I am officially gone from
Math is a big field, and -- if you like computers -- some discrete math subfield might click with you. Even if it seems much different than differential equations, math is a very interconnect field, and having a foothold in one area might help you with others; proofs and problem solving work the same way everywhere. Differential equations might be easier afterwards.
Many schools have a discrete math survey course, and much of it is directly relevant to programming. I'd start there.
However, if you can't handle that class, then you should reconsider your major.
FWIW, I'm under the impression that most continuous math (calculus, differential equations, etc.) isn't directly useful for most programming. (Although, speaking as a physics grad student who spend a lot of time writing simulations, there are certainly programming applications for continuous math.)
I'm not going to say the actual math is all that important. If you have trouble with even basic calculus though then you probably aren't suited to programming. You can perhaps fix the underlying problem though. You just have to find what it is.
and why. you can't write something that applies a formula or mathematical concept without first being aware that it exists and having an understanding of how it works. do you need to be able to do it by hand on a piece of paper with a pencil or know the quirks of your model of graphing calculator? No. do you need to understand the process well enough to realize what changes will have which effect? Absolutely.
In SOVIET RUSSIA... erm...NSA AMERICA, the Internet logs onto YOU!
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.
That your gripe is with differential equations suggests that your department is just using the Math courses as a screening process (eliminate the chaff). Statistics (parametric and non-parametric), linear algebra, number theory, numerical methods ... these all have direct application to real world problems folks face in applying computers to business or engineering problems.
Number theory is the basis for cryptosystems. You probably won't be developing your own, but understanding a bit of why they work (or don't) is an example of how advanced mathematics impacts our day to day life in CS applications.
Even if you don't become a "data scientist" understanding statistics (correct and incorrect usage) are key to performance analysis, system tuning, etc.
Numerical methods help one appreciate entire classes of errors which computers make by design; not critical for an OS developer (no fp in kernels) but someday, somehow you may find yourself dealing with floating point computations ... learning about the fine points (see, for example, the Goldberg paper "What Every Computer Scientist Should Know about Floating Point Arithmetic" http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html).
The list goes on. But differential equations really shouldn't be part of it. Pity that few CS departments work closely with Math departments to craft courses where the subject matter not only matters, but the linkage is made explicit.
Differential equations are really important in CS now. They didn't used to be. I have a MSCS from Stanford from 1985, and there was almost no continuous math in CS back then. I got lots of discrite math - number theory, automata theory, formal methods, proof of correctness - all the stuff you need for Vols 1-3 of Knuth. Things have changed since then.
Today, we have machine learning, which is all continuous math, statistics, and differential equations. If you do anything with robotics or advanced game development, you'll need differential equations. A game physics engine is all differential equations. Vision and navigation systems need differential equations. Modern control theory requires so much math that control theory PhDs are struggling. Yet that's how they get those quadrotors zooming around like they're on rails. Search engines, ad engines, and machine translation all have differential equations inside.
However, almost all the differential equation work needed for computer science can be visualized. It's not like abstract algebra, where it's all symbol manipulation. You can usually draw pictures, or get your computer to draw them, to see what's going on. At least for the low-dimensional cases. Often in machine learning, you can see what's going on for the 2D case, but the real work is happening in some space with 50 or so dimensions.
If you're just going to put business systems together, you don't need much of that, but you don't really need a MSCS either.
Programming is about understanding and manipulating symbols in complex systems. Your using the same parts of the brain in differential equations that you use when debugging a program. If you don't like the advanced math then this may not be the field for you.
Comment removed based on user account deletion
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.
A lot of learning Math is learning problem solving skills, or even more importantly it's about learning how to learn new problem solving skills. Sure there are many advanced Math skills that can be useful in industry, but learning how to think about problems in multiple ways can be helpful for developing solutions to problems. Additionally, Math can be useful for determining complexity and optimizing programs.
It sounds to me like you're more interested in software development than in computer science. These two fields are often confused for each other, but are certainly not the same thing.
To the OP.... Math is sort of the language of science and provided much of the logical foundation of computer science, programming languages, compilers, etc.
Advanced maths can be challenging to learn especially when it is not taught well (which is increasingly becoming the case these days).
Two comments:
With regards to differential equations, don't stress out in short term... you may not run into too many Diff Eq or integral in your CS degree undergrad.
In the long term, having a solid understanding of advanced mathematics and some physics (optics, E&M, mechanics) will open doors in your career and will enable you to teach yourself new technology. So do yourself a favor, summer is coming up... keep working at the DiffEq's, Fourier series, etc. a little bit here and there over the summer. Maybe even consider getting a minor in Physics?
Best of luck
GPA should be 2-3 parts and or some of the filler classes need to be pass fail.
Have a core class GPA. An gen EDU GPA and an filler / fluff class GPA.
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.
What do you need vs. what do you use?
What I use...
Linear Algebra - I do a lot of work in the print/PDF industry. Matrix transformations being the primary one to convert coordinate systems.
Number Theory - To understand cryptography, data compress, encode-decode, etc. - it's really hard to do any of this without Number Theory.
Discrete and Combinatorial math - As strange as it sounds, knowing how to properly count and manipulate integers is the heart and foundation of what a computer does.
Graph Theory - For flowcharts (yes, a good developer should still sketch overall design, logic flow, data flow, etc.), logic, state-tables, and programming data structures (including object inheritance).
Regular Algebra I & II - used all the time... Solve for X?
Both Algebra (discrete) and Calculus (continuous) based course in statistics.. or as we would call it sadistics.
I had Calc I, II, & III. Do I use any of it? NO - but I'm not a Quaint. But it's been helpful to make better sense of the maths I *do* use.
In short - don't select the courses based on what you will *need* - but on what will help you solve problems, be functional, productive, and give you the tools to teach yourself what you don't know when you need it. It's just like all the CS class you take - a zillion languages, data structures, networking, databases, etc. Because of that background I've been able to teach myself Python, JavaScript and a few other languages - that didn't even exist when I was in school.
CS is like woodworking (which I do as well). A lot of folks can use a table saw, router, planer, etc. to make a nice piece of case goods. But if that's all you know how to use that's what you will be limited to doing. The truly skilled folks can use those tools, a hand saw, along with a cabinet scraper (level a finish), chisels, carving tools and a Stanley Combination plane. They don't use them or need them all that often. Sometimes it's years apart - but when they do they are sure glad to have that tool in their toolbox.
When a new project comes along, would you rather be the one that can say 'Sure, I can take that on.' or the one that says - 'Go ahead and outsource that to a contractor.' Maybe you are the contractor - Yea, I can do it! - or no, have to pass on that gig - maths are too complex.
I don't remember much of my Calculus - but I know it's there. And, if I ever need it I can go out to the Wikipedia page and bone up on the part's that I forgot. And if I never need it - I still feel that I am a better person having learnt it at one time.
Finally - for all of you that said 'oh, you'll never need that because library 'x' handles it for you.' Someone had to write library X. I'm not saying that everyone needs to start from square one and invent the wheel, fire, and the lever. But you should at least know how the wheel, fire, and the lever work when you use it. Lest you start to use a screwdriver for a chisel.
Good luck.
I've been a tech for years, and moving into information security (just got my Associates in Applied Science in Information Security and Digital Forensics) but decided going for my Bachelors might be a great idea. I'm not looking forward to the math either. However, I know I will need it for courses such as cryptology.
Parent got it right; it's about problem solving. I have dual math and cs degrees, and while most of the actual math escaped me decades ago (I couldn't solve half the diff-EQs or integrals now that I could in college), the practices and thought processes have (IMnsHO) made me a better programmer. Programming is about efficiency as much or more than it is about knowing any specific language or being able to execute a particular task. Most importantly, I think is the ability to have faith that your code is correct and complete... proofs in linear algebra and number theory were immensely helpful for that. Testing edge cases and knowing that your loops will terminate properly flex the same muscles as proofs by induction. I think of Pollard's rho more doing database programming than I did in math classes, but I'm glad someone pointed it out to me there.
Math can also be directly applicable depending on what you're going into. Visual and game programming is full of geometry and trigonometry. Artificial Intelligence, Big Data, Data Mining all require statistics, hashing algorithms, efficient tree traversal, and all sorts of things that span the boundary between CS and Math. In the end, though, all of programming is just implementing algorithms, and all algorithms are just math problems. The two complement each other brilliantly.
You're in college to learn not necessarily get good grades! Yes sometimes you'll have courses which require agonizing effort to get a c+ but it's learning and the process of learning that are the reward not your grade. So there's dozens of fields in technology where advanced math is central... There are just as many where it is ancillary. That's not the point. You're not going to do well in any tech field if you don't enjoy learning (especially If learning the particular subject pushes you to your limit and you don't like that)
As a Computer Science graduate who sucked at college math - it's largely irrelevant unless you're going into a niche field that uses it (ie, if you're writing scientific software or the like).
CS largely boils down to Algebra and Discrete Math. You'll need a very good handle on those, but Calculus, Trig, etc? Mostly irrelevant. Though I did pretty well in high school I'll admit that college level advanced math was difficult for me to wrap my head around. My last Calculus class I had to take three times and even then still only managed low B on my third attempt. My actual CS courses though I think during my entire term in school I only made 2 B's and everything else was A's.
Nothing CS coursework nor in my life afterwards that has required advanced math. Honestly having been graduated and programming for 10 years now I don't even remember how to even do an integral or a derivative.
"People who think they know everything are very annoying to those of us who do."-Mark Twain
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 didn't go to college straight out of high school. I joined the military instead. After four years of that, I returned home and was ready to do college. I chose to take a degree in math because that was my worst subject in public school and I wanted to show myself that I could be successful at something that had been difficult for me to grasp. I ended up doing quite well, but the point of this to note that I, too, questioned what I was going to be able to do with a science degree in math. I posed that question to one of my professors during my junior year, to which he replied in a manner similar to a few people posting here: that the "math" isn't so important as the manner in which being successful at math makes you think and that this analytical, rigorous way of thinking was something that many occupations held in high regard. One interesting thing is that my experience was sort of the opposite of yours: I was working on a science degree in math and was told one day by my guidance counselor that the curriculum had changed and I needed to take a computer class. I was most annoyed as I couldn't see what a computer had to do with a math degree. Obviously I had to take the computer class and the rest, they say, is history; I've been programming now for more than 20 years. When I do interviews, I'm probably the one person in the universe who doesn't [usually] ask a coding question. Instead, I just talk and try to understand how a candidate thinks, how they might approach a problem, how "mathematical" they might be in their thought process. Curiosity is another very positive thing, in my opinion.
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
Getting a CS degree generally requires you to do a lot of math so, yes, it is important. Things like analyzing algorithms, graphics, simulation, and pretty much anything involving AI requires a lot of advanced math. It's hard, but it can be fun and satisfying as well. And proving that you can master it (by getting a CS degree) shows employers that you can solve problems and should be able to tackle some really hard programming projects. That all being said, general business programming doesn't require a whole lot of math. You can write UIs, stick stuff in databases, and write business rules for 10 years and never do anything beyond some basic arithmetic. I've worked with a lot of people who don't have CS degrees. In fact I would say most don't have CS degrees. It might be harder to get a programming job without a CS degree, but if you work at it you'll eventually find one. After that experience pretty much trumps degree as you progress in your career. At least from what I've seen.
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~
Many universities have applied comp sci b.s. degrees which require a minor in a related degree. They tend to leave out everything above Calc. That would be my recommendation and you might actually be more employable with that degree anyway given the minor.
Grok these instead
Combinatorics, Stats and Probability
Markov Processes
Random Variables
Linear Algebra
Those are more like math and thinking and less like Empty Symbol Manipulation anyways
then whatever else is used to solve problems you're interested in along the way
If you don't do the maths you will probably will never miss it and spend your time happily programming away, perhaps even revelling in your awesome coding skilz when you solve some hardcore problem with bucketloads of code. But when some poor programmer with some maths later looks at your tangled mess they will probably say 'OMG what is this mess... this should be a simple stats problem'. Maths gives you a bunch of powerful solutions to common problems that you will otherwise waste your time obliviously re-inventing badly.
-Experience... (subject line wouldn't let me type the whole thing...)
I'm now at the wane of my career, and here's how math went for me:
Degrees:
- B.S. CIS (in the business college, three math courses; in the advanced course, if you could identify the integral sign, you got a B. Oh, and a stats course, more on that later)
- M.S. CS (curiously, you don't need the advanced math as a prereq to a lot of master's CS programs. Took a discrete math course, which IMHO is the only directly relevant math to the concepts that comprise CS)
- DCS (Doctor of Computer Science, but we did the dissertation thing. No math per se, but my diss chair had me go chase the second differential as a possible test for my hypothetical correlation, but it didn't work that way. I think he just did that to be funny)
My computer career has had a healthy dose of software development and management, and until recently my calculus deficiency wasn't a hinderance. However, statistics have been pervasive in all my jobs, either directly in the code or indirectly in testing or management. My last string of positions have been in the domain of missile defense, and this is where I had to go dig out the old texts to figure out such things as Taylor series and RK4 integration - knowing ballistic trajectories is all about this topic. And again, stats pervades.
So, based on direct experience (three degrees, four 'math' courses, and a varied string of jobs), I'd say 'It Depends.' There are a lot of things to do out there, and I know you can make a decent career in computer science without running the undergrad math gauntlet. However, there are certain domains where it is used; if you want to go there, you need to be able to 'speak snake'. And, as much as I hate to say it, familiarity with the ways of statistics is useful in most any place, if for nothing else than to be able to tell people who put up graphs of amorphous point clouds with a line running through them who say, 'and it's evident there's good correlation' that they're full of liquid shit without the proper statistical test.
So There.
See Donald Knuth. See Linus Torvalds
You mean the guy who got a M.Sc. from Helsinki University or the guy who got a Ph.D. in math from Caltech? Using hashes to manage file in git needs math. Finding a good scheduling algorithm needs math. You don't need all the math all the time - in fact, you probably don't need most of mathematical knowledge at all. But the skills of thinking abstractly and analytically, and a basic understanding of what math can do, are enormously helpful. You can't google something you can't even imagine.
Stephan
the odds that you'll wind up choosing an area of CS that is actually dependent on advanced mathematics is nil; those that do find themselves in such an area do so because they already love the math.
there are literally thousands of areas of CS, you can choose from the 90% that don't use any math at all.
and judging by my GPS's refusal to use the elevation number, that it already shows me, to calculate my actual speed and distance using basic trig, there are virtually zero consumer products where the math matters at all.
the only reason you need math is, as you've said, to get through the degree. so drop the math, drop the degree, and stop worrying about what people from six decades ago thought was important then. run your own business, sign your own paycheck, and do whatever the hell you want. no client has ever asked me about my CS education. It's been twenty years of running a successful business, and no one gives a damn.
stand by your own work, guarantee your own efforts, and be responsible. no one cares about anything else.
a) Doing a three hour homework on ODEs or PDEs make you in no way comptent in "advanced math".
b) Consider the following task:
N ressources (sockets) which can react on random events E_i (connect,disconnect,read) , with p states (wait,connected,data in buffer) each. The external events each cause a transition of the states.
How does the system react to a sudden change in the number of events? How should you introduce timeouts? How many resouces slhoud you allocate?
Conveniently written as a (coupled) linear stochastic differential Eq.
Ok, but back to why you should learn it at least once: It will help you to classify problems correctly. When being asked to generate a sine wave on a minimal microcontroller, you will at least have the option of implementing the dgl (four multiplicaitons, four additions) instead of the series (more). If you give the answer: cant do it in 4 bytes of memory and 100 cycles/step - your problem. At least understand the problem (e.g. stocahstic ode) in a way that you know *there is a differential equation hidden in it and if i give it to a physicist he will not do 10^9 simulations, but sit down and cut it to a handy and understandable form*.
Interesting thought but here's one way how I know:
I have a colleague who is a freakin math genius.
We both work as developers the same large software project. I've seen enough of his code to know that there's nothing that he's doing that I don't already understand, and in most cases would have approached and solved in exactly the same way. In all the cases where I would have implemented it differently it pretty much comes down to personal choice with no clear advantage either way (yes I've also asked him to be sure I'm not missing something I dont understand). In short, there's nothing extra in his code due to his math knowledge. Yet occasionally I've done stuff in my code mostly around knowledge representation that he's asked about and said he learnt a lot from.
I seem to recall touching on differential equations in high school calculus. And, yes, programmers do use math to determine/understand/compare the efficiency of algorithms.
Conveniently, you are unlikely to learn so much that you become less employable, so you won't even suffer in the long run.
The goal of education is to learn! Going to school with the goal of learning as little as possible is wrong headed. Why has there been so many slashdot questions and posters in the last couple of years all wondering how to learn the minimum amount necessary?
Learning mathematics is not necessarily a requirement for computer science, however it is a requirement for being educated! You don't need to be an expert in mathematics, but you do need to be able to work at it and exercise a flabby brain to allow thinking logically and abstractly, two important things necessary for almost all fields of study. If you can not do anything beyond long division then it is likely because you're unable to think logically and abstractly, and programming will be the wrong career choice for you.
Calculus is BASIC mathematics. It is not advanced. Long division is arithmetic it is not even mathematics really. Without calculus you won't understand physics or chemistry. Without mathematics and physics you won't get that dream job creating the next popular video game, you won't be programming any robotics, you won't even be doing computer graphics. Chances are without mathematics you'll be stuck doing basic grunt work making web pages or doing IT help desk support for the rest of your life.
Computer science is also not just about programming, programming is just one small part of it. Please people, stop trying to be least that you can be.
Hi, I'm a track runner and I just can't seem to get into doing sit-ups.
I want to go to the Olympics, but no one will look at me twice if I can't do 100 crunches!
Why do I have to do these stupid sit-ups, when running needs LEGS.
what the heck.
If you want a hard-core mathematical proof about how your code behaves in time and space (for a value of time and space that makes your software market competitive) often a procedural representation is better.
Look at what happened between ATM and IP networking: "Another key ATM concept involves the traffic contract." For TCP/IP over Ethernet, the "channel contract" was a reamed-out muzzle diameter.
Two viable business models:
* Usain Bolt with a water-resistant wristwatch
* Arnold Schwarzenegger with a waterproof wristwatch
One permits more formal math than the other. I'm guessing Bolt is cooling down before 'egger has finished filling in his entry form.
I tend to agree with the OP regarding the (ir)relevance of calc/diffeq. I rarely (if ever) use any concepts from farting around with f(x) in that sense...
BUT stats and discrete math is HUGELY important. I've gotten way more use out of my one semester of discrete than the entirety of calc.
I for one would love to see CS students get 2-3 semesters of discrete (and preferably 2 of stats) and one semester of calc (rather than the other way 'round).
"Time flies like an arrow; fruit flies like a banana." --Groucho Marx
For CS (Computer SCIENCE) it is quite important. You'll be crunching numbers all the time, that's what CS-people do, they make computers do very complicated math problems.
If you're looking to do computer technician, network engineer etc. some basic math is still required but nowhere near as heavy. If you're looking to do programming, depending on the field you're trying to program for, you may need little or much math. Eg. making games and 3D graphics is very math-heavy, making websites not so much.
CS, require it's own math curriculum, the rest should be satisfied with a high school math curriculum (sets, logic, real numbers, functions, probability, geometry, quadratic equations, integrals, ...)
Custom electronics and digital signage for your business: www.evcircuits.com
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.
I believe I know how you feel. You may be great at many subjects but just don't get math.
Start with the basics. Basic principles of calculus and standard derivative formulas. Memorize them. Write them out on a "Master Formula List" and memorize it.
Write it out on a blank piece of paper as many times as it takes to get it perfect 10 times in a row.
The funny thing is that by the time you do this, you no longer need to write it out when you take a quiz or test. You may even start to realize that cos, sin, and tan are related and there are patterns to the formulas. Most people who struggle with advanced math are just not getting the basics and foundation set in place first so their math house crumbles. Take it slow and steady and you will realize that the individual pieces are not harder than basic arithmetic. You just have to learn to do the bookkeeping.
I forced myself to finish my Computer Science degree almost 10 years ago and have not regretted it since.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
I'm not sure what you mean by 'grok' but it's important to know what's possible. I remember a student asking a prof: Are we really going to remember how to do this 5+ years from now when we might actually need it?? And the prof said that the point was to know that it is even possible and demonstrate, at least for a short while, that you can do it. Then later when you may need it, you will know it exists, hopefully what it was called, and have the confidence knowing you can implement it.
So, a bad programmer might say 'it's not possible' when given a problem, a better programmer will say it's possible but we need to find/buy a library to do it, and a good programmer will be able to implement the solution themselves. (btw- I'm not saying leveraging libraries and plugins is a bad thing, it's just not *always* the best solution.)
I've worked on a number of projects which started out seeming to be simple but ended up using some semi-advanced math. It is rather rewarding to bust out a solution to a problem that others might have failed on.
Sometimes the order in which you execute the math operations from that equation the PhD gave you makes a difference.
I'm pretty sure the poster was talking about higher math...I don't consider order of operations "higher math." I don't consider statistics higher math either. PDEs? Someone has already derived the steps necessary to solve these. Linear algebra should be included in any decent CS degee program.
So I stand by my assertion that CS people don't need to know higher math. I never said they didn't need math. But is the ability to solve proofs in set theory or understand properties of f(S) necessary to most CS types? I doubt it.
Differential equations are not advanced math. If you were complaining about topology or having to prove something then that is advanced math. When I was taking a grad school test on OS ( I forgot the exact topic) it involved something about scheduling and it was much shorter and elegant to answer by using limits than having to explain the answer with lots of words.
As a professional who is been in the software world for at least 12 years, at this point in my career I do not need that kind of math. However , understanding that kind of mathematics as well as the numerical algorithms to go with them is very useful as many fields use them. If you don't know the basic mathematics expected of an undergraduate you will be cutting yourself from many opportunities.
"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."
Don't rush into judgement on this. There can be several reasons why you have difficulty with math.
First, it could be as you say, but consider the alternatives:
Second, it could be that you just need to review the background material, or even that you overlooked something early in a course. Whenever I reach the "I'm lost" stage, I try to back up to where I first became slightly confused...then back up one or two steps further.
It could be a motivation issue. Try looking ahead to see where you're trying to go--for instance, the seemingly pointless epsilon-delta definition of limits that most calculus textbooks starts off with is only there because they intend to use the concept of limits in explaining integrals, derivatives, and infinite series. Without seeing where you're going, half of the first semester of calculus will seem like pointless bullshit.
It can also be that the instructor isn't good at teaching large groups. First, I would try asking the instructor for help in class--it may be he needs a nudge to remind him he's skipped over something important. If that doesn't help, try contacting him outside of class--odds are good you'll get better communication when he's trying to help one or two students as opposed to 120. If that still doesn't work for you, see if another professor or even another student can explain what you're having trouble with.
Analysis of Algorithms. Optimization of logic
If you want to be any more than a coder the you need some background in math to understand (and caclulate) the savings of doing alternative ways of coding. This is especially true with recursive algorithms that are not simple recursions.
Also the effect of various data sturctures like trees and hash tables for algorithms. or even the effect of different types of indexes in DB searches or to understand that query optimizations the DB servers is showing you.
Without it you don't have eyes, like a eletronics engineer that does not have a multimeter.
Thats just with the programming part. Then you get into all the things you want to program, like graphics and games (physics and geometry), or statictics for simulatations or the math for economic forcasts. Each has its subset of math that is needed for the job.
But to get back to is. If you want to be a programmer with a big P, then you need the fundementals of math that revolves around data structures and algorithme and Boolean algebra at least. If not then anyone can do your job.
Depends on what you want to do. Most coding jobs don't utilize much more than basic discrete math. Set theory, modulo arithmetic, etc. That said, there are still plenty of projects and applications that utilize heavy duty math. Photoshop, audio editing, 3d games, etc., not to mention all manner of scientific computing. If you can be content not working on projects like that (or, possibly, not working on the "mathy" components thereof) then you'll probably find you never, ever use differential equations once you leave school.
You won't really need it most of the time. But when you do, you do. I've encountered multiple problems that I just couldn't solve without advanced math (whatever that may be). I've run into serious give-up-on-the-project kind of problems due to my limited math knowledge. The first is creating a proper equalizer (and some other cool stuff that requires DSP). While I could probably follow some basic instructions to get what I need, I just don't feel comfortable in this field at all and am currently going to great lengths (in the form of a big stack of books:p) now to get my complex analysis and DSP knowledge to a workable level.
The second is properly comparing performance test results for a rather large application. This requires some serious statistics and quite a few tricks. I've given up on this and have left it to a mathematician.
To get back to the question. Advanced Math is not that important - most software engineers hardly ever need it. But that's because they don't work on interesting stuff. All interesting stuff requires lots of cool maths. 3d engines, image and video processing, software synthesizers, mp3 players, performance testing, big indices, ray tracers and even database systems are all built around some rather cool maths. If you don't plan to ever touch such things (in other words, you're going to develop some rather boring business software like most of us do:p), you could consider dropping it. But you're probably going to be sorry every now and then.
0x or or snor perron?!
On what the real problem is, and if you can compensate for it.
If your problem with math is that you can't handle generic problem solving, and instead try to memorize solutions then your probably screwed in programming.
On the other hand, you don't understand math because no one told you (or you haven't tried to understand) how it works, or what its used for, then that may just be a problem with your education and probably won't impact your programming abilities.
Or maybe your just a little slow learning it, nothing is really wrong, you just need a little more time. In that case it probably won't affect your programing abilities unless your really slow learning to program....
I suggest that if you think about it, or talk to a bunch of people about what exactly you don't understand about math, then you will have a clearer picture of whether programming is to closely related to math too make it a career.
PS: I myself had varied math success while in school. Some subjects like calculus I did really well in. Some subjects not so well. To this day, I wish I had taken more math in school (I stopped after first semester diffeq). It sucks to have to bang my head against some math concept for weeks before I get it enough to understand why something works enough to implement it well. Last year, I spent a few weeks studying galois theory and kicking myself for not taking abstract algebra when I was in school.
That said, a lot of "advanced" math shows up in the strangest of places. Sometimes without sufficient background you won't even be able to identify it. So, your stuck trying to solve a problem the "hard" way.
So, while a lot of people are saying you don't need it for specific areas in computing, if your programming for long, you will run into things more advanced than linear algebra, even if all your doing is "business programming".
If a programmer is given a task related to the physical world we don't want to have to babysit them through year 9 maths to bring them up to speed - or acceleration, or displacement :)
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.
Not the point. The point is the actual flow of a program is a mathematical concept, and higher mathematical concepts will give you a much better understanding of exactly what you're doing. I mean that on the level of "implement an HTTP session handler" or "implement an HTML reflow engine"--stuff that isn't calculus--you will benefit strongly from a strong mathematics background.
Support my political activism on Patreon.
One thing that I've learned in physics and simulation software: If you're using trig functions you're doing it wrong. OK, not wrong but your code has sub-optimal performance. Vector and matrix math are almost always the way to go. But of course most the comp-sci majors I've met were not required to take a linear algebra course. To me that's one of the most useful math classes a programmer can take.
The primary function of these math courses including analysis and algebra is to teach you how math works. Math is a language which allows you to describe things. Math notations are widely used in CS. Most prominent, stuff like sets, classes, relations etc. are relevant to understand ontologies and meta-models, which you have to understand to be able to develop programs today. Graphs are everywhere in CS. Meta-models, models, databases, social networks you name it. If you start software monitoring, which is also relevant in todays software maintenance, you have to deal with differential equations and many other things from analysis.
So in shot: Yes math is important. And yes math is hard. Try to learn it like a language. When I was studying, I first understood it after momorizing many rules and lemmas etc. until it reached critical mass in my brain to be useful for anything. Nowadays I cannot work without it :-D
Experts is too strong a word in a discussion about whether introductory calculus is necessary or not. The submitter is bitching about stuff that used to be expected to be known by the graduates of the maths-science stream of a high school.
In my case I customize ESRI's ArcGIS software. The most math I've had to use so far are things like algebra and a little trig. Mostly dealing with X, Y coordinates on a map to find distances using the distance formula and direction using the slope formula. But in every case I just googled up the formulas then wrote the code that would do them. So it helped to understand the formula in order to program it into the syntax of the language we were using at the time. The companies I've worked for started with VB6 but now use mostly VB.net and C# with a hint of Python and a dash of C++. In fact I actually took the branch of the CS degree at my college that had the LEAST math classes! It was called concentration in Information Systems and the highest math was Business Calculus which is basically "Advanced Math for Suckers". (Sorry if I offended anyone that loves or uses Business Calculus daily.)
--- Nothing is secure.
I disagree. Learning how to do a sort in abstract terms and how to apply it is a lot more useful than learning how to do it by rote in a single extinct version of VB. The apprenticeship is supposed to kick in with your employer showing you the way THEY do things, the education is there so you have a choice of employers that do things in different ways.
A good way to illustrate the differences is to think about what people would get to know from sex education and then what they'd get from sex training. Very different isn't it?
I agree with this, but I view it more as logic (boolean logic, discrete math) than engineering math (calculus, differential equations). Engineering math has far more to do with memorization than analysis. Unfortunately, its the engineering math that is more often required in a degree plan. I'll take the view that "advanced math" is post-graduate level and not really what the OP was referring to.
Get a tutor. Odds are you had a bad math teacher in school at some point that hosed you and your class*. This happened to me - the teacher taught us Algebra wrong in 7th grade. I was sunk in high school. My parents got me a tutor who untrained me in the nonsense non-algebra and got me back on the right track. I was doing college-level math by my junior year of high school. Once you get it, it's just problem solving, which is fun if you're a geek. If you fundamentally don't get it, no wonder it seems like punishment.
You need somebody who can figure out where you're broken. Then you need to get fixed. It's, again, just problem solving, except now you're the subject of the word problem.
* I've recently tutored some of my then classmates on Facebook. It wasn't just me.
My God, it's Full of Source!
OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
but the weight of its importance depends on how far you go. A B.S. in Computer Science does not expose you to much in the way of how higher math is applied in computer science - but if you go to the graduate level, you need that background. One of my criticisms of how calc and beyond is taught to CS undergrads is that the applications are not made clear at all. It wasn't until I was in grad school and started working on some machine learning / bioinformatics stuff that the application became clear. If I never see another word problem with springs again it will be too soon.
Actually that's why we have scientists doing the programming at my workplace - it's too time consuming to remind non-scientists and non-engineers of the stuff they were taught in high school and have forgotten. It's not very difficult mathematics either.
And depending on the work to do, that may be the right way to do it. But if you're doing a advanced UI/javascript (not tiny silly web pages that anyone can do), the intersection between the people who know enough to do it, and scientists, is extremely close to zero.
I'm not talking about people who THINK they can do both, but those that actually can. We had ONE out of slightly under a thousand engineers where I work, and he recently left to work for Google. They've been trying to replace him for a year or so (he gave a very early notice), and multi-hundred-thousand/year salary or 40-50k referal bonus isn't working.
Its just easier to hire 2 people.
Computer science is a field of math. If you're majoring in the field, you really ought to already know that. Computer science does not mean "writing computer programs". It does not mean "the set of skills needed to get a job in IT". If those are what you really want, you're in the wrong place. Computer science (note the word "science" in its title) is a field of math that studies the process known as "computation" from a theoretical perspective. If that isn't what you want to study, you need to find a different major.
"I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
Back in the late 80's/ early 90's, I considered using a lookup table for some trig calculations. The first thing I did was check the computation time for a "multiply" and for a tan() calculation in a loop dividing by the number of iterations. I was supprised to find the cost of a tan() computation was only the cost of 8 multiplies. I am curious as to how you are beating this using vector math. Are you are using normalized 3 vectors and the dot and cross products to compute sine and cosine? And maybe sin(x) = sqrt( 1 - cos(x) * cos(x)). While I was using closed source code, a friend had access to the open source implementation of tan() and printed it out for me. They might have been different. I might still have it. It was an interesting technique. I eventually found a book that described it. I believe I still have the book. How much would you pay for the information? I like people who don't like math, they pay well!
Computer Science, indeed, is a very wide area, so that "Software Engineering", "Information Systems" etc. are branches of it (and from "Information Technology", which covers with more enphasis some stuffs about Management e Development, more than CompSci). Because of this, it's important that you learn a little from everything, so that when you choose an specific area to following on, you have the basis knowledge necessary. Once it's Computer Science (or, reading by another way, The *Science* of Computing), it's somewhat natural the high bulk of mathematics in it, once CompSci is the initial branch of mathematics that took "created own life", investigating things that were even outside maths field. So, it really depends of what carrer you want you follow, and it's like was commented: development of games demands Hardcore Math. Scientific Software i don't need to say. AI (Artificial Inteligence) and BI (Business Inteligence) too. Even some fundamentals of networks comes from mathematics (you maybe will heard about Dijkstra's algorithm... it's used in network routing). So, that's it.
yeah.. the only integration in my career in comp sci and the biological sciences was to assure that non-whites had equal room at the table ...
but i would not trade my calc history for aNYthing ... it nearly did influence me to change to a mathematics major ..
The logic, the approaches to analytic thinking that a math background provids are not duplicated in any other area..
and isnt comp sci 'practical logic'??
"There are 11 kinds of people: those who know binary, those who don't, and those who could not care less!"
tl;dr: I am a master of logic. I looked at not the book that you said was good, and only spent one minute thinking about what it said, and I didn't learn any logic. Therefore, the book I didn't look at isn't a good introduction to logic.
Hiring two people doesn't work if they can't communicate. That's one reason programmers need to know slightly more mathematics than they can get from a scrape through grade in high school.
If you think a Laplace Transform is a French car that turns into a robot then there's not much other than shell scripts, web pages and front ends to other people's software that can you do - and seriously, how much of any project is the UI?
I agree, not just at the college level, but at the high school level as well. Sometimes you need to get your hands dirty, you need a mentor there to help you when you inevitably make a mistake Not all high school kids are college bound, and it is incredibly useful for both networking and experience so they can gain meaningful employment. It also helps the employer, because if they know you'll do a good job, they will fight HR on your behalf to get you hired.
I did an 8 month co-op with IBM and it was an incredible experience. It went beyond the 2 month summer internship doing menial work.
I learned from an amazing mentor, and because of the length of time I was there I was able to take ownership of experiments and tools and actually contribute.
Best of all was when the college job fair came. Everybody all dressed up waiting in line to give their resume, the recruiter scans it and puts it on a pile. But because of the length of time I spent as a co-op with tangible accomplishments, my resume didn't go on the pile. I would have conversations with recruiters about what I did, and was offered interviews on the spot. From the vantage point of the recruiter you're just going through the same routine, but anybody with experience and interesting stories will catch their attention.
D6 63 0D 70 89 81 BB 8E 7B 7C 5F 5D 54 EA AB 73
No one will look your way without a degree? You serious? I know plenty of developers who became professionals w/o degrees. I have an A.S. in Comp Sci myself, I can say from experience it was a complete waste of my time. I didn't learn anything I didn't learn on my own on my frist read-through of Bjarne Stroustrups "The C++ Programming Language" and after I read K&R I was way ahead of the curve.
They did teach me the basics of Java, but even that was only done to serve some backwards style of teaching OOP. I'd wager many Comp Sci grads don't "know" a single Library; not even the STL. It's really pathetic but it's true. When I asked by my dean how I felt about the program, I said it was a waste of time, he tried to justify the lack of teaching anything useful by speaking in proverbs... "we teach students to learn how to learn".
If you just want to get paid for writing programs, learn Java and SQL, get into Web 2.0 or writing apps for the Apple / Android stores. That's where the money is, college might teach you the basic syntax of C-like languages, but you're going to have to spend your whole life learning libraries and new systems anyway; and for being such a profound truth of Software Development (constantly learning new systems/libraries) it's funny it was never, not once mentioned to me or any other COSC grads I know.
Fuck college.
I never needed Differential Equations at all. But I am in IT security. A friend that is in robotics would have a very different story. On the other hand, I need logic, some complexity theory and some advanced algebra and even some (almost standard) geometry regularly. So it really depends.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
There are no generalizations. You don't replace a trig function with something else, you change the approach to the entire problem. Also, if that was on Intel hardware of that era you were using the 80387 coprocessor which implemented multiplication and trig functions on the same hardware - look up CORDIC algorithms to see how trig functions can be done using shift-and-add operations. Most modern processors can multiply in a single cycle if pipelined. Vector operations on Intel or GPU can often be done in one cycle these days, so vector operations are fast. The math usually works out more elegantly using vectors as well.
As an example, consider the sun at the origin and calculating the gravitational pull (gx,gy) on a planet at coordinates (x,y). Lots of people would use atan2(x,y) to get the angle and more math to get a radius and then compute F=G*m1*m2/(r*r) and then gx = F*cos(theta) gy=F*sin(theta) or some such - 'cause that's how they learned it in physics class. A better way to go is: T = G*m1*m2/((x*x+y*y)^1.5) where ^ is exponentiation. Then do gx = T*x and gy=T*y. The only complicated calculation here is the exponent of 1.5 which is also the same as cubing it and taking the square root. So at worst we have a square root and a few multiplies to replace all that trig. This also trivially extends to 3d by putting a z*z in there and computing the 3rd component gz=T*z whereas trig will make your brain hurt in 3d.
Now that I wrote it down, I recall making this exact suggestion to the people working on x-pilot back in the early 90's. Then implemented gravity that way and got a rather large performance improvement on maps with lots of gravity sources. It's a specific case, other problems involving trig will have different non-trig solutions, but I hope this illustrate the type of thing I was talking about.
I founded a software company 19 years ago. We have 50+ engineers working here now. I didn't take DiffEq.
But I suspect the engineers you hired did study DiffEqs, in spades. And your company is the better for it.
If it weren't for deadlines, nothing would be late.
This question comes up all the time. The answer is the same every time. Not because the math is useful in itself (though it often is), but because if you can't do math you can't do computer science. You may think you're good at programming, but you're just pushing code around without really understanding it. Linear algebra, statistics, number theory, calculus and differential equations; you don't have to learn them all, but if you can't seem to learn any of them, computer science probably isn't for you.
(as for "advanced", mathematics is such a deep subject that for any field I could name, there'd be some mathematician who would claim it was elementary and real advanced math started somewhere else)
Actually, you need both. If you're doing angular acceleration, say, a ship that's firing thrusters to rotate around its center of gravity, then you have to keep the orientation of the ship as an angle (in radians, say), and also its angular velocity, and you apply its angular acceleration to that angular velocity. That part simply can't be done as pure Cartesian vectors. Then, when you fire forward thrusters, you take the angular orientation and convert that to a Cartesian vector which you use when applying the thrust force to obtain a Cartesian acceleration vector.
So most of the time (like 99%) you can simply use Cartesian vectors for everything. But you still need trig functions for some stuff. It's inescapable.
I was going to start this out by saying that some people saying DiffEq isn't "higher math" are math geeks and that they're over-emphasizing math... But then I went back and re-read the OP and, well, maybe they're still overstating the case, but they do have a point.
If you really want to go for a career in computer programming, you will need a more solid basis in math than a good understanding of long division. You need to be able to do function based math (grouped under Algebra when I learned it) in your sleep; you will never be any good with computer code if solving simple equations and reading functions isn't second nature to you, regardless of variable names or format. And all of those proofs you did in Geometry and then probably again in Calc I and II - that's formal logic, and if you can't apply formal logic at a whim, computer programming is going to be a rather rough life for you.
Beyond that, statistics and probability, linear algebra, matrix algebra, trig, vector math - these are things you're likely to run across sometime during your career. Maybe (probably) not every day, unless you're in a job that utilizes them heavily, but they're good to have learned at one point so you know where to start 10 years down the road when you run across that situation.
If you really got through the math between long division and DiffEq without really understanding it, I'd recommend going back and working through anything in the above list until you do understand it - and if you have more advanced math ahead of you, include Calculus in your review. If you need a tutor for it, get one; or audit lower level classes as refreshers; or find some book that explains things in terms you understand. Also, if you don't know it already, understand your own learning style and find something that matches your style; understanding how you learn best can help immensely as you go forward.
PS - DiffEq is a bit different; I had zero problems with math classes (aside from being bored) until I got to DiffEq. I did calculus, complex math, matrix algebra, prob&stats, and linear algebra all okay - don't know what it was about DiffEq that tripped me up. Don't feel bad that it seems difficult - it isn't simple. It's also nothing I have used in my career as a software developer.
Let us live so that when we come to die, even the undertaker will be sorry -- Mark Twain
"How Important Is Advanced Math In a CS Degree?"
Apparently, at your university, the contract you have with the CS department for your degree program has it as a required class, so it's of paramount importance to you getting your CS degree from the program in which you are enrolled.
Should it be important? That's an entirely different question, and not one you have asked here. I will answer it anyway.
If you plan on getting a job at a site which uses social networking, then an understanding of graph theory is a necessity. Given that the entire Internet 2.0 bubble is based on social networking being important to monetization, if you plan to get a job doing CS things, then you plan to get a job at a company which uses social networking.
A lot of advanced math is useful to solving graph problems, not just Warshall's for computing transitive closures. For example, Differential Geometry http://en.wikipedia.org/wiki/Differential_geometry tends to be incredibly useful for reducing resource requirements related to Computability http://en.wikipedia.org/wiki/Computability_theory . Reducing data center costs for something that has scaled, or is intended to scale, as large as Facebook or Google, or even Yahoo, Twitter, LinkedIn, and so on, is the primary gate on your income vs. expense ratio = profitability.
It's useful for other things as well, which will likely become obvious to you after you learn it well enough to apply it as a tool when faced with new problems.
I have an extremely terrible memory making math exceptionally hard as I can't keep numbers in my head without them going all over the place and it's not much different for remembering the equations.
So I have been looking for ways to help me remember and I found a website that does just that:
https://www.khanacademy.org/
The practice video's and exercises combined with simple short term goals such as achievements for getting x answers right in a row or within a certain speed really gives me a constant focus point.
You should give a go, it's good fun =)
"An ounce of action is worth a ton of theory." --Engels
Casteism
A BSc prepares you for any kind of specialization, including scientific programming and computer graphics. (Want to render fur or smoke? That's differential equations.) Bear in mind that many of your fellow students don't know yet what they will specialize in, or even don't grasp all the options. Exposing you to higher math shows you what those options can be. It's good to know what else is out there, because you will certainly get in touch with other fields through collaborations or a career change. If on the other hand you even have trouble with algebra (which I count as beyond long division), CS as a whole may not be the right thing for you.
Whilst studying for my BS in computer engineering 20 years ago, I struggled with the same issue. Now, after all these years, I'm poised to complete my Doctorate of Engineering in mathematics. The trick was grasping the basic concepts of advanced maths (theory, not equations and applications) and then solving them using software, either commercial or custom. One thing that was a *huge* help was Mathematica. It's damned expensive on a student's budget, but it was an amazing learning tool that, at least, helped me earn that first degree. Most tech colleges require MatLab, which is an amazing tool as well, but it's hard to match Wolfram's software. I'm not suggesting that you just key in your homework and coast â" Mathematica always provides reference material, links, and other sources that a great way to pull apart the problem and make it understandable. Lastly, if Mathematica is out of your budget, use Wolfram Alpha. This free tool has more capabilities than Mathematica did 20 years ago. There are also low cost modules for Computer Science, DiffEqs, Stats, Integration, and more. Best of luck. I hope your degree leads you into a successful career.
"Adventure? Excitement? A Jedi craves not these things."
If you want a degree in either software engineering or computer science, then the math is part of the (pardon the pun) equation! I do performance engineering (actual job title is Senior Systems Engineer) for a tier-one Fortune 50 company. Without the math (3rd order differential equations at the least), I could not do my job. No, I don't need that on a daily basis, but I DO need it from time to time, such as when developing predictive analytics algorithms to properly analyze system performance and time-to-failure (Kalman filters anyone?). FWIW, my previous job was developing risk analysis (real-time) software for the options trading industry - keeping the portfolios of traders and market makers properly balanced, using (primarily) the Black-Scholes risk algorithms - again, 3rd order differential equations. :-)
So, want a position that is just something more than being a code monkey? Then math is your best friend!
Sometimes, real fast is almost as good as real-time.
And found out that most likely you will never need this math as you already guessed. I`m not good at math either but I like to learn the syntax and principles so they are in my "toolbox" if I ever need it and when I need it I just check how it can really be done. But really: study numerical analysis and numerical calculus, this can come in handy.
This combination doesn`t exist: ETIs that know about humanity and want to see us dead. Otherwise we wouldn't exist.
Computer programming requires you to know algebra. Even if you dont know that is what you know.
In almost every case, your job will not require you to know or use everything you were forced to learn in school. So just do what you can to get through it if you feel you need a degree as a badge in order to get the job you want. Most companies value similar work experience over education. Unless the field is highly technical. Most computer science jobs are not highly specialize or technical. If you are not excellent at mathematic, then you will not want one of these jobs anyways.
Just do what you have to in order to graduate. This means that you will go to the library and pull up all the old examinations and memorize every questions from the past. You will get the correct solution for each one and practice this over and over again. Even if you dont understand it completely, you will have the process down and you can probably pass a test without really understanding it. It doesnt matter if you know it, because generally, you wont have a job that requires it. But you will end up with a degree to show an employer that you are willing to buckle down and work hard and complete a task over multiple years.
After saying all of this... I think a computer science degree is a waste of time. You can now learn more online then they will ever teach you in a college or university. Most employers will value work experience and practical knowledge over a degree. Most software tools are completely free to download, test, use and learn. All of this can be done for free and you can do it while working at a very easy computing job that does not ask for a degree. And you will not start life with a large debt.
I have a BS comp sci degree. I had to take 2 semesters of calc (differentiation and integration) as well as combinatorics, finite math, operating systems and yes ENGLISH, LOGIC, Art History. A 4 year degree isn't just a trade school degree. A lot of theoretical stuff that was very helpful in figuring stuff, making it easier to learn new ideas at jobs as well as making me a less boring person to work with. That piece of paper shows an employer that you are able to dedicate yourself to a long term task.
I attended a conference once several years ago where Alexander Stepanov - father of the C++ STL - spoke on math and CS. He recomended a personal indepth study of algebra and geometry, not because they were particularly related to computer science, but because the teach (resp) problem solving skills and architecture. I suspect the basic rationale behind requiring advanced math for a university degree in any field of science is to enhance your thinking muscles. Rather than fight against it because you don't understand the reasons why, try to embrace it and get more than you paid for from your education. Hire a part time tutor to help you understand the ellusive concepts. You can never learn too much in this life.
Theoretical computer science is very math heavy. Stuff like studying what is computable and what is not, the order of computation of algorithms, proving whether programs are correct, and so forth. These things are what being a computer science academic is about, and that's why most CS degrees are math-heavy.
The work that the majority of software developers do in the real world does not use much math. (As other commenters have pointed out, there are exceptions; aside from scientific programming, such fields as data mining and financial analysis require math.) There are a few schools that offer computer engineering degrees (rather than computer science) that focus on preparing you for real-world work. Community colleges and continuing education programs also offer many classes focused on the practical aspects of software.
I do system modeling, architecture and design, capacity planning, and design for high availability, high capacity, high performance, continuous operations,, and occasional programming. I am not in a research organization. I am in the world of commercial IT. Most of my career has been in technical sales.
I use simple algebra all the time. Workload growth over time implies exponentiation. In the last few years I have used logs and even quadratic equations in system analysis and modeling.
I use Boolean logic, AND, OR, NOT, XOR, IMPLIES, DeMorgan's Law etc to construct and understand & debug other's complex if statements and hierarchies of them.
I use probability to understand variations in workload coming in to servers, their business (busy-ness), and how to combine multiple workloads together. Some of Excel's probability functions have an unnecessarily limited domain. I had to substitute alternative versions in VBA that added and subtracted the logs of the components and then exponentiated to return the results.
When considering servers (machines and programs) capacity and responsiveness, I use queuing theory, and consider where things get buffered and queued along the way and at the layers between clients and servers.
I use graph theory to be able to understand network flows, linkages between relational tables, multiply linked lists, and graph databases.
When modeling communications links or systems availability, with lots of things with very low error or failure rates, I do binomial expansions and sometimes Maclaurin or Taylor Series.
I do most of all this in spreadsheets, but sometimes the provided functions are simplistically written, so they cannot handle combinations of large and small parameters. Then I had to substitute a better algorithm.
Some people are willing to zero in on an optimum of something via successive approximation, but when a function is readily differentiable and that is easy to solve for a zero, isn't it embarrassing?
I have created and navigated through a four dimensional array A[i,j,k,l] only once, to deal with the consequences of combining four independent discrete probability distributions of requirements for a type of resource.
if you want to work with computers but not be a computer scientist, maybe you should pursue a degree in IT. Western Governor's University offers one and there are many being offered in various universities. CS is exactly that...science and it requires math. With a CS degree, you should be able to do some Assembler programming, and you should be able to program simulations (math intensive). If you want to go into any kind of cyber forensics, math will be important. You know what...even being a business analyst requires the use of math, so I suggest learning it. You mentioned differential equations, which aren't truly advanced math. They are important in science, engineering and economics. Just stick with it and in the end, my suspicion is it will be worth the effort.
Yeah, I anayzed the CORDICS. And the source implementation of atan2, etc. And optimized for cos = 1-sqrt(sin). (By the way, sqrt is expensive, too). And looked at integer approximations.
The key was I ONLY NEEDED ACCURACY WITHIN 5%!!!!! As others have pointed out, understanding the problem speeds things along nicely. Reviewing the source code showed that the lib calls used hardware doubles. Cycle-expensive. Modern processors, FP and INT are pretty close when compared to trig functions. And only needing very low precision meant the taylor expansions were around two mults and an add. Three and two for some of the more expensive ops, but the trig ran more expensive there as well.
Side note: Going to int was considered as well, but adding in the renormalizations added time, too. And I usually avoid div when I can.
Side note: The power of 1.5 can be done as a cube and a square root (sqrt(x*x*x)). It is cheaper to do x^1.5 as x*sqrt(x), saving a couple of mults...
Early 30s, undereducated, curmudgeonly, senior software developer here.
Not only is math my weakest area, but that weakness was probably partly due to my self-defeating and self-fulfilling belief that I didn't *need* much math, so I got my CS degree from a shitty university with just through Calc 2 and a couple non-calculus-based stats classes. No linear algebra, no dynamics, no quantum-anything, no Fourier analysis, no algebraic topology, no number theory, no discrete math, etc..
And so I've spent the last decade writing stupid CRUD-and-forms apps. It's boring shit that only pays high-5-figures (in my top-3-by-population U.S. city as I work in university research, though I am repeatedly sought by some of the biggest names among tech employers. But I choose my current employer for the work-life balance).
But to go anywhere more-interesting -- say, working on self-driving cars, or data-mining stocks or health data, or building robots -- I need more math. Shit.
I have taught myself some linear algebra from a LA book, at least, as well as learned some slightly less-basic stats (e.g. Markov models) and taken a couple graduate-level CS courses in AI and ML. But it's definitely not enough to break-free of my self-imposed intellectual chains.
So, get as much math as you can -- not because you'll definitely use it (maybe, maybe not), not because it's fun (but if it is for you, great; it is for me, when I understand it), and not because it's important for its own sake (by definition, anything that isn't eventually useful is useless), but because it gives you FLEXIBILITY later in life. And you have no way of knowing, a priori, whether you will need that flexibility.
I'm not original in this thinking. Learning more math is what Nassim Taleb would consider an example of "robustification" -- becoming robust against unknown undesirable future "bad" events or scenarios.
My strong advice: Don't be so damned efficient - or arrogant/overconfident - in your learning that you fail to robustify yourself against a future you that is smarter and wiser than the current you.
Is Capitalism Good for the Poor?
Every single function you have ever written, or will write, is an inductive proof. To be good, you must understand induction. Some people come by this through their own intuition, and can be good without the formal training. The rest need to have it hammered in with math problem sets.
And, btw, differential equations does not qualify as "higher match" in the university context :-(
In other words, the Calc and Diff EQ are not directly relevant to writing code. But there's more math coming which will be...
Universities are great for covering material but they are lousy at teaching you how to apply it. There are no shortage of students who get excellent marks and rip up maths like they are nothing but can't recognize and resolve daily real world challenges that arise where those maths can solve the problems. The same is true of most other material.
With nothing more than simple algebra, high school chemistry, basic physics, and a bit of simple electrical theory you can dazzle and impress even people with technical degrees with your mastery of the world around you.
I have worked at some places that hired folks with only a high school diploma, if that. These were some of the smartest people I've ever known and they were definitely good enough to make it without the diploma. If you are truly amazing at what you do then any employer would be happy to have you. You just have to demonstrate it.
That being said, it is more than worth it to take an honest look at yourself. Are you really that good, and if so, would it come across to a stranger? As many people have pointed out, the degree is not strictly about what you learn, it's a chance for you to prove what you are capable of. Also, most of the folks I'm talking about started doing this stuff before formal tranining was as pervasive as it is now.
Nice. Hey, but since we end up dividing one could do the cube and then a reciprocal square root ;-) So many options.....
But is vector and matrix maths "advanced"? I'd argue not - here, we do that for our GCSEs (exams taken at 16 years old).
Oolite: Elite-like game. For Mac, Linux and Windows
Information for information works as well as money. Thanks for the iterative CORDIC algorithm information and clarifying reformulating the problem to not use trig was an option. I was using an Intel 386 processor, and I may have purchased a coprocessor, but I don't recall for sure. If I did, my measurement may be of the coprocessor time rather than the algorithm. I am also not sure if I compiled with coprocessor support or not. Thanks for pointing out my possible error. The method in the tan() implementation was to use Chebyshev polynomials (See http://en.wikipedia.org/wiki/Chebyshev_polynomials#Trigonometric_definition) to make the Taylor's series converge faster (See http://en.wikipedia.org/wiki/Approximation_theory). It required some rescaling as well. First, find the Taylor's series of the tan(x) function to the number of terms needed and then choose the Chebyshev polynomials T_i(x) with values smaller than the approximation accuracy you need. Use the largest T_i(x) first since T_(n+1)(x) T_n(x).. Solve for the highest power of "x" and use it to eliminate the power of "x" in the Taylors series. You may have to add up the errors of each Chebyshev polynomial you use. For instance, T_4(x) = 8x^4 -8x^2 + 1 so x^4 = (1/8) * (T_4(x) + 8 x^2 - 1). Use x^4 = 8 x^2 - 1/8 to eliminate x^4. This reduces the number of multiplies and additions needed for the evaluation of the Taylors series to a certain approximation. I did also see a case where someone used fractional powers of "x" to possibly reduce the complexity still further. I am recalling this from memory so a I may have got a few details wrong. One of the 3 books that mentioned this method was a Math book by Korn and Korn. There is a Dover edition.
If you have not tried it, try to inline your simple functions. The cost may be your function call overhead. I am assuming you are using C or C++. Also, it may help to look at my post on the same level as this one.