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.
How the hell is this a front page article?
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.
See Donald Knuth. See Linus Torvalds
"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 know places like RIT offer degrees in Software Engineering which it sounds like you're more interested in vs Comp Sci which is the theoretical portion.
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.
and learn. It won't be immediately useful, but someday you'll put it to use to solve a problem, or to understand the nature of a problem.
Khan Academy on Diff-Qs
I think some writing courses would probably give you more mileage.
love is just extroverted narcissism
I think it's important for training your brain to think they way required to code. Math, logic, etc. all go together.
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.
Maybe you should consider majoring in another computer related field, such as IT or Software Engineering?
It really depends on what you are planning on doing in Computer Science. If you are planning on following the traditional path where you are using existing Programming Languages and developing software off that, then you really don't need much in the way of math skills. You simply need to know that one sort is faster than another and you use that faster sort (frankly, you just use the built in sorting capabilities and you don't need to think about it).
If you are going down the research pathways, in private or public sectors, higher level math skills are quite a bit more important. You need to be able to analyze what your algorithm is doing, how quickly it will process, and understand the reasons behind it to make it better.
I can relate with the not knowing what the math will be used for, but as a computer programmer I always find areas where I wish I had learned more math. Computers at their lowest level are mathematical beasts, and knowing (and more importantly understanding) more math will help you dream up better algorithms.Of course there are CompSci related professions where the math isn't as important as others.
The specifics of the math is unimportant. The logical analysis and critical thinking exercises are very important.
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.
Math is important for everything. And this isn't even advanced math yet. It is like color-by-numbers compared to painting.
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.
Advanced Math is one of the best predictors of how good of programmer you will be. Programming is really about quickly understanding a situation and breaking down the problem into simpler steps. Very similar to Advanced math, understanding an equation and realizing it breaks down into 2 or 3 fundamental equations. The top 5% of programmers easily twice as productive as the next 10% and the bottom 20% actually have negative productivity on a team. Any one can learn to program, however very few will be great at it and that is why most computer science programs use Advanced Math to filter out people with less potential.
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.
You need to understand algebra backwards, forwards, and in random order. If you meant that you don't grok algebra by "anything beyond long division" you should either apply yourself, or give up and find another field. Algebra isn't advanced math, it's extremely basic math.. At least as far as a BSCS is concerned. Is it important to understand Calclulus, and DE? Probably not..But you'll almost certainly need to pass the courses.
It isn't about 'being designed by mathematicians', it's about understanding basic math as it relates to computers. How are you going to understand the complexity of algorithms when you don't understand the most basic math? When someone expresses that a algorithm executes in logarithmic time, or exponential time... It's not OK to just have your eyes gloss over and go to your happy place.
Also, to be fair: You don't need log division. You don't even need to know how to multiply. Computers do that stuff for you... But you describe how they should do it with algebra.
Muddle through diff-eq and then promptly forget it all. You won't need it for future coursework. I haven't needed it in my 5 years of career so far, and I'm doing quite well financially. Frankly, I don't understand why they make undergrads in computer fields take it.
... you're going to be a shitty programmer.
Not that you'll directly need math in programming -- but the mental skillset is the same when you start doing things beyond the trivial or already well understood. I regularly use concepts from calculus, trig, etc. but then again I do a lot of GIS and graphics work.
That said, what CS degree is requiring you to do diffeq? I've never seen one go beyond calculus, statistics and discrete mathematics.
It depends on what you want to do. I work mostly with device drivers, and I rarely deal with anything more complex than trigonometry and some discrete mathematics (although I wish I had more background in queuing theory). If you're primarily interested in web site design, you probably won't use much past trigonometry.
An area like Computer Vision, though, requires a solid background in mathematics through Linear Algebra, and a computer graphics is heavily mathematical.
Phil Klein, an CS professor at Brown, is teaching an on-line course at Coursera on linear algebra that you might want to check out. Its goal is to introduce linear algebra by exploring its use in a number of domains.
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.
math, some statistics, and the ability to work with spreadsheets and manage time. Wasn't for me, though, so I moved on to working with a software engineering contracting firm. That was fun, got to sand the rust off of my coding skills, and really only required a basic understanding of geometry for the purposes of dealing with graphic widgets on a screen. Also had to understand timing and event counts and so forth, but that was fairly well automated. That stayed constant until my most recent job, and I'm having to make use of a lot of trigonometry and calculus to deal with angular datums and changes of values of time. I haven't required the use of differential equations professionally, yet, and I honestly dread the thought that I might, but I guarantee you that seeing the math in action in the real world will make grokking the details far easier than working it out on a whiteboard in school.
Oh, you might want to also remember that the more complicated job as a senior engineer can easily pay as much as 2x-5x as much as that screwdriver turning datacenter monkey. Most of my peers in the datacenter were college drop outs and lacked degrees, and they were very intelligent, but they looked at academics and people with degrees with scorn and condescension. People with degrees typically looked down on them as well, but that was because they were shitty programmers or couldn't code at all.
It's not crap, and WTF does "grok" mean. You learn diffy-Q since it's required to model most dynamic systems. If you can't cut teh math in CS, get an IT degree. Hell, I'm not even a CS; an EE.
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.
.. are fields where math is invaluable. Most big data analytics requires understanding of statistics.
In my case, I've worked as a DSP engineer, using mostly C, C++, but also Matlab. Complex wave-calculus and physics, as well as numerical methods are super important for this.
But you might have to transfer to an institution that offers a BA in CS that drops the heavy CS requirements. Realize a BA not BS will limit your job opportunities in some cases where HR pre-screens for BS in particular, but you can take on a secondary major to distinguish yourself. Also on your resume say Bachelor's in Computer Science rather than B.A in Computer Science. Completely honest and doesn't automatically disqualify yourself by the HR pre-screening.
There are a lot of software devleopment domains where you won't be able to excel without strong math skills, but there are plenty more where you'll do fine without them. No game development, no science data processing, but business, productivity, and social software development will be fine.
Or hire a tutor and push through it.
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.
Computer graphics, digital signal processing, and algorithm heavy graph work all require heavy doses of math to accomplish anything. Run of the mill web development, simple embedded work, and business logic programs don't really require anything you haven't learned in grade school.
The question is: If you had a choice between two developers, one of whom can code well and put in the work to also be competent with math, and one who can do "most things, but if you ever need any of that math nonsense, you'll need to hire a second guy" which would you pick? After you have some experience if you specialise in development that doesn't require math it won't really matter, but at the start I would always pick the fresh hire who can do the tech stuff PLUS the math.
Sidenote: Some development companies actually prefer math majors to CS graduates.
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 founded a software company 19 years ago. We have 50+ engineers working here now. I didn't take DiffEq.
My friend works for a rocket company doing software development. Might come in handy for him.
I haven't used DIF E Q's since college. However, after working with a bunch of computer science people for quite some time, I have to wonder what they actually teach in a CS curriculum. It certainly doesn't seem like any sort of engineering by any means.
side note:
My wife went for her masters in elementary ed and came home one day after one of her masters courses and exclaimed: "Did you know there is an entire math based around 1's and 0's?!?!" I said: "Yea, I think I took a course in Boolean Algebra or two.
PSU grad BSEE
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.
If you're going to switch to whining "OMG WHY DO I HAVE TO LERN THIS" after a tough three-hour problem-solving session, do the entire profession a favor and GIVE THE FUCK UP NOW. Computer Science does not need another person who's "good at computer" because he can cuntpaste code from Stack Overflow and smack it until it works.
Seriously - you're going to have to learn harder things, that take longer, for even *less* relevant reasons, over and over again in your career. If you're not wired for it, you're going to be a shitty developer.
I say very important. Not necessarily for the math, unless you go into game engine design where matrix algebra, and ray-tracing is highly important (I don't know much about that subject though).
I'm a PHP web-developer by day and use very little advanced math at my job. But that's not at all what the advanced math classes teach. In my opinion, the math classes (Calc 1&2, Discrete 1&2) teach you how to think. Solving problems, using variables, understanding differential equations, and how variables can interact with each other. Personally I found Mathematical Methods of Economics (if your school offeres a similar class) to be very valuable in teaching how to think and analyze problems. Discrete really nails home computer science theories (and even more in a CS theory class, again if you take it).
So will you use the math, probably not, is it important, yes...very yes.
I would most definitely say it is important, and have seen the problems with trade school developers versus computer science folks first hand in hiring. Though at first I would have said it's not overlly important, getting to see the different in people first hand, and then looking at my own processes, have really made me have a different mind to this question.
It's not that you're going to need to know how to take a derivative, or write a program that performs a complicated mathematical equation. It's that by learning to do them and understanding the concepts, you are going to have an easier time. Even basic application development can often require you to play around with numbers in ways that are going to be easier to understand if you've had to work with numbers a lot. Not to mention the fact that you are building skills in logic, formulas, trends, etc that will be useful throughout your career as a developer.
Not to mention the idea that there is a lot to be said for facing a challenge head-on and overcoming, versus taking the easy way out.
Finally, I've had plenty opportunity to use mathematical concepts as well while developing applications and reports for business. And though you will probably end up going online to find what you need, understanding the concept, or at least being able to read what it's doing and then understand the concept, can go a long way. If you never learned it, it's hard to pick it back up. I've handed those systems off to programmers without a background in math, and invariably the take the route you are asking about ... avoid working on it and leave it to someone who understands math. Wouldn't you rather have the skill then need to tell you boss he needs to send the request somewhere else?
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.
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.
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
Computer Science /= Software Development /= Information Technology
Computer Science
0, zero, nada, naught.
In my opinion - advanced math is not required to be a software developer. It's not even required to be a good software developer. But it is absolutely necessary if you ever hope to be a very good / great software developer. If you can't talk about intuction, injectivity, bijectivity, set theory, a smattering of category theory, a decent understanding of linear algebra, finite automata, graph theory, calculus etc, then you mgiht understand *how* to use your tools, but you won't intuit *why* you use that tool, and you might miss when you need to use different ones.
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.
Not very important beyond basic arithmetic most of the time. The problem is too much CS is taught by useless academics who think computers exist mostly to solve math problems.
What's becoming ever more important and many CS grads absolutely suck at are people skills that let them interact productively with a wide range of stakeholders (other engineers, QA, UX, product, localization, etc). So drop the math, and take a sociology or cultural anthropology class.
Signed, Dir of Software Engineering at a company you know about.
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?
ADD, SUBSTRACT and EQUAL.
You don't need anything else to understand the most complex computer in the world. You also need logic, like AND, OR, XOR.
I had a double major, CS and Math, so I know a little bit of both. Where I was working the top dogs had no math or CS, they just learned programming on the job. I noticed that they were using floating point for financial calcs and said they should be using some sort of fixed point, but they couldn't understand why. I never used calculus or anything like that on the job, but I would guess it is a better foundation for software dev than a music degree.
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.
Just to name a couple...
Advanced Trig: Gaming
Stochastic Calc: Operations, testing, financial modeling
Don't even get me started on Matrix Math and Calc when it comes to quantum computations for (and if) we ever get a quantum computer.
You want use existing frameworks, don't sweat it. You want to create your own good luck without at least trig and calc.
Proof: http://www.songho.ca/opengl/gl_projectionmatrix.html
Hi, I do machine learning, so statistics is very important, but again fairly basic stats. You need obviously some calculus for this but nothing super complicated. Proofs are good to know how to do, because convergence proofs are necessary in algorithms.
The most important math for CS is discrete math. There's a fantastic book called Concrete Mathematics that covers more than you'll need. It's the best.
Linear algebra is super important across CS. If you can vectorize an algorithm, that's a win. But again you don't have to master tricky hand-manipulations, getting real fast at solving this or that. You just have to understand it enough to apply it.
Mental manipulation of terms is helpful at the white board, seeing that this term cancels this term, or these guys converge in the limit, just some basic fluency. But no need to go overboard. Fluency with the basics is more important than mastery of fancy things.
Don't wimp out on math though just because it's hard. It's hard for everyone!
"CS is about algorithm development, not application of higher math concepts."
The implication that "algorithm development" =! "application of higher math concepts" is hilarious.
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.
As a math prof, I don't have much patience with math students who "just aren't computer people." I tell them that what I hear is that they can't figure out how to arrange their thoughts into logical steps and explain them clearly, so they must not be math people either.
Same applies here. If you can write truly good code, then you can handle a first DE course easily. Contrapositively, if you're incapable of elementary DEs, then I bet you write crap code too. Man up and put in the kind of quality time that you do with computers.
You'll likely never write a novel either, but I recommend that you take some English classes too.
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.
Sheesh kid, learn some maths. Maybe you'll even enjoy it, especially if you don't go into it thinking that it's "crap". Math courses help in more than just practical ways, they help you to learn to think, reason and apply logic when you're programming. Do you need a degree? No, but it would definitely not hurt you to take some night classes in first and second year university level maths. Algebra, calculus, statistics, differential equations and logic. Oh, and it's not crap, it is beauty, it is the purest abstraction of reality that we can conceive. And, btw, long division is arithmetic if that's all you got.
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...).
Three hours are nothing, just be more patient.
You should start worrying if it takes you more than two or three afternoons of _heavy_ thinking to solve a difficult assignment. Sometimes it just takes a bit longer.
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.
I went through the grueling punishment of advanced Calc I,II,III and IV in order to get a B.S. in computer science ('97), getting straight A's in all computer classes but C's in the Calc. Constant weeks of meeting with the Math professors in their office trying to understand the work only to struggle on exams. But you know what, having the B.S. Computer Science on my resume definitely helped when I first got into the workforce, and still helps now
All I can say is to just grind through it, do everything you can to just get through the math courses, whether it's making a home in your professor's office morning/day/night
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.
... that this topic is going to receive hundreds of comments.
Dont become developer, you better be a team leader, or even better, project manager :D
I avoided all math units on my CS course (by taking Psychology instead). I didn't find any dependency on the math I missed in any of the other CS units at all, (or anything I've done in my subsequent career) so in my life at least math or the lack of it has had no actual relevance at all.
I don't know if not taking any Math at all is even an option at your school, but if it is, its the solution I would advise taking. I personally found that doing Psychology was actually a lot more useful/relevant to CS than you would first think, it gave me some real insight into stuff such as how the brain processes things, knowledge representation techniques, and how we process vision. All would be directly relevant to writing software that needs to do the same or similar things.
Look, I'll admit that not every computing problem requires advanced math. It's good to know so you have some idea what's going on behind the scenes in many cases, some idea beyond screaming "I typed this and it said it should do it, WHY DIDN'T IT?!??!?", but for many problems, it sometimes boils down to stringing together the right libraries that someone else made and applying some design and writing magic.
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.
But the attitude you're presenting here is one of entitlement and/or victimhood. You're directly implying that you DESERVE a programming job for reasons which seem entirely described by "I love computers, and am very good at them", but the fact that you're not qualified for some of them is somehow a punishment to you.
Or in other words, it's sounding like you feel entitled to getting a job, a lot of money, and the prestige of "a computer job" or "a CS degree", but feel that the actual work and experience is an unnecessary impediment to this goal. It's as if you don't understand why this actual knowledge "crap", as you put it, has to stand between you and cashing paychecks in your underwear from one of the private jets you'd inevitably own if only the rest of the world got off its lazy ass and figured out how to get you the money you so rightfully "deserve".
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.
From my experience job hunting this summer (Dallas area), every single job that I interviewed for with CS as a requisite actually had little to do with CS. Everyone wants a CS major at entry level, but when you get to the interview, the work usually entails data entry and markup languages for 6+ months, then you _may_ get a shot at actually designing something where you could possibly apply CS theory (but I suspect this is just bait). For the ambitiously inclined and those wishing to avoid losing proficiency in what they've studied, it's tough choice to make. For this reason I decided to work at a boot-strapped startup and do OSS, instead of dealing with this kind of stupifying job market. That isn't to say all CS job markets are like this, it just comes with the territory.
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.
My university (Big Ten) removed differential equations from the curriculum (Computer Science) a few years ago. FYI
It depends on what you will be working on. The work I do now requires some knowledge of linear algebra and matrices.
If you don't "grok advanced math" the career in Computer Science is not for you. Switch your major to Art History and get good at busing tables.
90% of software development is writing code, and chances are, you don't need to understand Linear Algebra for that. The other 10% is solving complex problems, which requires both understanding of mathematics and problem solving skills developed by studying mathematics. And it is these 10% cases that separate software developers from the morons polluting our industry who think they are "good at computers."
There are lots of rewarding careers that don't require understanding of advanced math, but CS is not one of them. I suggest you either stop wining and hit those math books, or consider a different occupation.
There's no science without math. If you don't feel like doing science, why do you want to become a scientist? There are so many other professions related to programming and computers. Computer Science is specifically about programming as applied mathematics. Get used to it or get out.
He says it himself, the applicant doesn't need the qualifications he looks for but he just wants them. Because being good in a field you don't need means you are good in another field... and that is the level of a LOT of managers in IT.
But IT is gigantic, sure if you want a job at say an IBM (god forbid) maybe your diploma's matter. At a startup? Nobody cares. But what is it YOU want to do. Because if you hate maths, then you are NOT going to be any good at a job that requires you to be good at maths for the rest of your life.
Most computing, algebra is what you need (mostly for the problem-solving stuff; not the math).
However, there are a number of lucrative branches of software development that make heavy use of extremely advanced math.
I know that they have started teaching topology to network architects. With some of these distributed new database systems, I suspect that it could be applied there, as well.
Good luck!
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.
Now do my solutions need integration by parts, linear algebra and differential equations? Absolutely not.
I took all that math and I used to work at a company like yours.
I was bored to tears after month and left. The company who hired me should have hired the tech school grad because it would have been cheaper, the tech grad probably would have found their work challenging, and it would have been a better fit. But the hiring manager had an ego and a lot of "shoulds and oughts" about what the "right" candidate should be and only wanted the "best" working for him and as it turned out, I wasn't the "best" for his particular needs.
I went to a big school in California and got my BS in Computer Science, pulled a 1.6 GPA in math, but a 3.1 GPA overall. I've made a great career out of back end web development, and have never needed anything above Algebra. It's never impeded me from getting an interview or a job.
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.
In my opinion the most important reason you need to obtain any formal education what so ever is to be able to show potential employers that you were faced with tough problems and you managed to solve them. This shows that you can learn and solve whatever issues they may throw at you.
in short, the formal education is mostly not about the specific content.
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
Industrial assembly line coders and maintainers don't need math, that's true. Many people have successful and happy careers doing this. But the math would not hurt. Part of your problem is probably academe itself. Math curricula are designed to weed out students not suitable for a degree in math. See if you can take more practical math from your engineering school. It won't be any easier, but the usefulness will be more obvious.
Coders who work on interesting stuff definitely need math. Examples from my past - machine and deep learning require linear algebra; robotics requires machine learning and lots of mechanical engineering calculus; security requires knowledge of the basics of cryptography and cryptology. Data transmission and networking requires discrete simulation modeling and optimization of linear models. Automating reverse engineering of undocumented software requires lots of math-type stuff (regular expressions, parsing, finite state machines, graphing).
conrad6
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
"nobody in the workforce is even going to glance at my direction without a BSc"
Nonsense. In the start-up where I worked after college, one of our star programmers was a high school student. A big part of my job was training new hires; we didn't insist on CS majors. We hired lots of math and physics majors: folks who were comfortable with abstraction and logical rigor and problem-solving. We also hired some business majors and other non-science types if they showed some aptitude for problem-solving. Seriously, I would train these folks in a week and then we'd start billing them out at $100/hr. Not that you'd want them writing kernel code on their first day, but most businesses don't need really elegant code, they just want the damn TPS report to upload to the accounting department server automatically.
Do you need any kind of math to do QA and debugging, which is probably what your first "programming" job is going to be if you wait for "the workforce" to come to you? Heck no.
Perhaps the title of the article was deceiving. Is math needed for computer *science*? Yes, absolutely. Diff Eq? Well, maybe if you're doing large-scale simulations (weather, nukes, population biology). But for computer *programming*, all you need is boolean algebra and a little algorithmic complexity theory.
Do you need a B.Sc. to get a programming job? No. If your school offers a B.A., take it. I do recommend a bachelor's degree. Without it you'll have to do some kind of tangible project (write your own game for Android, for example) to show that you're capable of closing Facebook long enough to write some code.
With advanced mathematics, you're a computer scientist. Without it, you're a code monkey, and just about anybody can be a code monkey.
There's plenty of jobs out there that only require a code monkey. But there is also an increasing pool of available code monkeys. The field is increasingly being viewed as a lower skilled position, so you will get paid less and be more disposable without advanced theory and practice.
The reason you don't see why it's important now is because you haven't learned it yet, and therefore don't understand its applications. Besides the fact that you're still in school and have limited if any real world experience, so obviously you haven't limited context for knowing what problems you will actually be expected to solve in the field. Will you use diff-eq every day? Almost certainly not. Every month? Doubtful. Possibly not every year. Put the likelihood of it showing up eventually is high, and the person considering hiring you will want to know that when it does show up, you're not gonna shit your pants.
More to the point, you'll probably be able to get through most if not all of your work without advanced mathematics. But you'll be better at it if you can apply something beyond long division. You'll be able to find better solutions, work through issues more quickly, and be better equipped to identify what issues are present and what tools are out there to solve them. Without advanced mathematics, your job will be a lot of "yeh, that'll probably be ok." With advanced mathematics, your job will be a whole lot more, "give me a second, I can come up an optimum solution and prove that it's optimal."
If you're struggling with math, get extra help. Seriously, get extra help. I'll say it again: get extra help. I've never met a professor who isn't willing to give you the resources you need to learn what they're trying to teach you. Being is college in a golden opportunity to actually learn stuff from people whose responsibility it is to teach you, take advantage of it.
You should consider that perhaps CS was invented by mathematicians for a reason.
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!"
My case was the exact opposite. I started the Computer Engineering degree, got thgough the first three years that were essentially math and very basic programming and when I had to deal with the project management, and advanced programming I realized I really hated that stuff...
Long story short, I got a job, dropped out of college, moved to a new country and had a very good early career working in all things Oracle.
However, if you want certain kind of jobs, live in the US or ever hope to be a manager, you do need the degree and learning "the math" is essential for getting the degree... so I'll that it's very important. If you don't understand it, even after reading from a book and asking your teacher, there are a few nice IRC channels (like #math and #physics) in many networks (I usually go to freenode), there are people there that can help you understand concepts... but only if you've done your homework... otherwise they are kinda jerks...
hth
cheers
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.
The bottom line is not that you actually need to know the diff eq or calculus algorithms you learn in class, but you need to be able to learn and understand them. There is a difference between understanding something and being able to understand something. Yea, in practicality, they mean the same. But the point is different. If you cannot "grok" (btw, I don't like your use of this word, I'm guessing you're not good at English, either) undergrad math, then I doubt you can fully understand complex problems that you will inevitably face in any field in which you need a pure CS degree. I suggest career change before it's too late.
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.
haha, he thinks he thinks differential equations is advanced math.
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
Aha! So *you* are why my auto-pilot inverts the aircraft when I cross the equator.
Remember that Numerical Analysis course you took? Sometimes the order in which you execute the math operations from that equation the PhD gave you makes a difference.
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.
Get tested for possible disability. It's not a stigma.
Get supplemental material. I recommend calculus for cats (a book) -- it's a math explanatory text with no problems for verbal thinkers.
I should say that I have a disability that makes math difficult, but I think there are enough resources at your disposal. also, talk to your professors and see if they would be willing to custom design your major without calculus in it.
That's not even mentioning the tutoring that's available at most universities.
I also have not watched the teaching company's calculus course, but really like the professor that teaches it.
www.thegreatcourses.com
(Many of them are available in the library system.)
Get Michael Spivak's calculus text, a big black book. The preface addresses what's at hand here. You take math classes so you can 1) understand how to state, approach, and solve complex problems and 2) clearly articulate solutions that you can prove valid to yourself and others. Those issues are extremely relevant to cs.
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!
So you're basically saying that you are too stupid/lazy to understand anything beyond long division and you (claim) to be 'very good at computers'.
1) Send me your resume (I need a good laugh)
2) Sign up for MSCE cause you're gonna end up in the IT dept somewhere ghosting images onto laptops.
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.
Math is like the gym for the brain. When you bench press weights it's not because your physical activity will necessary require a lot of bench pressing. It's to tone and train the muscles. The brain is the same way. It needs to be programmed, exercised and trained. The logic and thought process used for math translates into programming skills. It's OK to struggle at math, it means your pushing yourself. If it's easy, your not really accomplishing much. Some people are naturally genetically physically fit, but most of the rest of us are capable of reaching those same levels with drive, training, and exercise. The same goes for brain. If Math is easy for you, your probably better off toning other parts of the brain with exercises in things like physics, engineering, and even liberal arts! The idea is to tone the brain and learn to train. In some cases you may train for a literal carrier in math, for everyone else being mentally fit applies to all parts of life and any carrier. You don't need to know math, it's something you should practice.
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
suck it up and learn you pansy
I just finished getting a "D" in my College Algebra class this spring, and am considering between a Business and a CIS degree. In either direction I want to earn a Bachelors of Science Degree, and as I pride myself in doing math without additional help, the D was a major blow.
However, given the number of people I've worked with and talked to, I can offer something a few professors have pointed out and can understand and see easily,and can therefore justify. How deep into the computer do you want or need to program? If we're talking stuff like game or app development, the necessity might depend on the complexity of the project being worked, which a lot of the comments have already explained. The further into the OS and hardware, however, may necessitate heavier mathematics due to not having those libraries or components many surface-level apps use to fall back on. (To put bluntly: How many Operating systems are written in Visual Basic or HTML?)
I personally want to have it to keep my doors and options open, especially as I get older. However, as technology seems to get easier for the end user, I also see it becoming increasingly easier for the programmer as well, which is why I don't think it's a necessity anymore.
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.
Computer Science IS math. It's like the red headed stepchild branch of math, and Computer Science is not Software engineering. But CS itself is math.
If you were good at math, then you wouldn't be posting this question.
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.
I don't know how many times I've seen people blindly do something with out realize there is a math problem in front of them. Whether it's an optimization problem, risk assessment, false positives with extremely rare conditions, a game theory problem ...
If you don't have the math back ground you will miss the problem and not even look for a solution.
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.
I think that people who don't want to be well rounded should be tracked away from higher education altogether. Being well rounded is the foundation of our educational system.
The current problem is that educational institutions have been saddled with the short-sighted demands of a labor market that prefers to externalize its training costs to prospective employees (students) and taxpayer-funded institutions.
People who want to acquire specifically applicable skills should go to trade schools or apprenticeships, which should be expanded. The bonus is that when these people get bounced out of the labor market because their narrowly focused skills have become obsolete, there will be a training infrastructure in place to re-train them for the current market.
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
I started in the US college system taking Calc I and II. I was miserable... But I stuck with it. Then I took Physics and Calc I and II made a lot more sense! Usually it is the other way around, but I digress.
I finished college in the UK where maths in CS isn't really pushed. CS students take a self-taught maths class in their first year and that was it. When we got to a machine learning-type course where linear algebra was king, a lot of students struggled. Usually I am a middle-of-the-class student but when we got to linear algebra I shot to the top (more or less).
You need to decide something here, are you going to be a Computer Scientist, an App Developer, a Web Dev, or a Software Engineer? You will absolutely need math much higher than calculus for Computer Science. As someone said here, if you want to program F-22's for a salary that will make you dizzy, you will need super advanced math. If you want to do App Dev or Web Dev, you probably wont need that much advanced math. Software Engineers need math, it will make you a better programmer, trust me.
If you want to be an IT guy, I'd recommend not doing CS, actually. See if you school offers a degree in management or IT management. Since you already have CS classes (I assume) do it as a minor. Most IT positions I've seen out there want project management experience rather than coding. I could be completely off base with this but that's my own views.
Knowing how to suck it up is very useful once you're out of college.
Really.
Computer science is advanced maths. The non-mathematical parts of a typical CS degree may be software engineering or IT, but they're not computer science.
Math may seem hard to grasp, but it's really good at taking a large range of overlapping problems and distilling them to one great framework. That's very useful when it comes to addressing the overlapping client specifications that constantly change. Brute force coding and memorization can only take you so far. Math can elevate your code to a kind of art that appeals to everyone.
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
Depends on the area you'll end up working, if you intend to develop web apps for a living, you probably wont need any of it. I am doing a thesis in Forward Error Correction (FEC) and using Fountain Codes, and well... I really wish I hadn't forgotten all my linear algebra... :(
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.
Two things that may sound incompatible:
1) I have not used advanced math in my 16 year career as a software developer. I may have used the principals but I have not used the actual math.
2) I am glad I re-took the course and my only regret is I did not track down a tutor and have an even better understanding of it.
You are going to school to obtain knowledge not just get a job.
Give it 100% and you will have no regrets, and there will be nothing holding you back later on in life.
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
I guess being one of those crappy business logic programmers who does more development of apps to automate data center enviornments, I find that I forgot a hell of a lot of math I had back in my CS day. I can even crack open an old college book and say to my self "Oh yeah I remember that I once did that." But it would probably take me more than a few minutes to try to figure out half of the stuff I had to learn to pass.
One could argue that solving differential equations is just arithmetic, whereas math is actually more about proofs and logic. But leaving that aside for now, you are not 'good at computers' in the way you think you are if you are also not 'good at differential equations'. The two tasks are identical.
Math is just a language. As has been mentioned, you are learning to manipulate symbols. You are learning how to create a description of a solution to a problem, or an idea, in a language you are not familiar with. 10 years from now when some newfangled programming paradigm comes out, if you're 'good at computers', you are going to be expected to do the SAME THING. Solving a hard problem by manipulating code, grasping difficult ideas, working through new concepts, sticking it out when it gets hard... there's NO difference at all.
What you are actually 'not good at' is understanding the size of the investment required to learn something difficult. And this deficiency is going to hurt you in computers. If you are 'good at' some procedural coding language, and then the problem requires you to do functional programming or parallel programming or something radically different, do you really think you're going to 'grok' it in 3 hours? You're going to have to go through the identical process you have failed to follow in math. You have to go to the basic core ideas of the new language, the new architecture. Get three more textbooks (programming books) and talk to people (user groups). Form a study group (hacker marathon). You have do some "Hello world" stuff. You need to practice. You need to invest a ton of time.
I'm in a Physics PhD program today, but in Freshman Calculus I almost dropped out because I thought I'd made a mistake. I thought I was 'good at math' in High School and suddenly slammed into college-level work and didn't get it right away. I thought... oh no... I can't do this after all and I almost gave up. I wish I could go back in time and tell my younger self that all I really needed to do was double-down and work harder. I needed a lot more practice before exams. I needed to do extra work where I was weak long before homework was due. When I finally did do that, things started to click, and incredible opportunities opened up for me.
You need to improve your work ethic and stick it out. This has almost nothing to do with computers or math. It has everything to do with you.
I'm a network engineer with 30 years of experience.
You absolutely need lots of Algebra. There is no way to exist in the IT field without it, and you will need it in every single IT specific field. If you don't know it, you're not going to go very far in IT.
If you are involved in CAD/CAM development or operation, you will need lots of geometry and trig. Maybe even some calculus dependiong on the specific field of work.
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.
Although you may not use the specifics of any area of advanced math, the ability to identify and classify problems and have conceptual solutions is primarily based on mathematical constructs.
24+ years in the industry. I have been an IC, Lead, Architect, Manager, etc. etc. etc. No degree of any kind. Published author on programming. I have worked on factory automation, inventory management, big data, accounting applications, GUI, web. You name it I have probably worked on it. I currently work at one of the big 3 in software. The only time I needed math was understanding Big O notation for job interviews and when I am doing my own 3D game programming.
If you don't like math, then you probably are in the wrong field. If math isn't fun, and your idea of a good time isn't reading the new Dover math books that come out (I can't wait for Pinter's set theory book in September), then you're not going to be able to sustain an interest in computers over the long term.
Having said that, which specific math you are going to need is a whole different matter. My biggest problem is forgetting math I haven't seen in years. Use it or lose it.
Books matter a great deal. Stoll's new linear algebra book Dover just reprinted is a model of how to be unclear and obfuscated. "Applied Matrix Algebra for the Statistical Sciences" (also Dover) says the same thing in a lot more understandable way.
Few hundreds years ago a fool fell in love with the idea F=ma was a good idea...Now, represent F through a potential U depending on space coordinates, time derivatives operating on space coordinates to obtain acceleration leads to a Differential Equation...Wanna get to a barrel of laughs? Almost every powerful law relies on DEs, think about Schroedinger Equation, EM Waves equation and many many others...
Think about DEs in this way: maybe they won't make you a better programmer nor technician, but they can help you out in figuring what is the best description of this very boring reality.
Maybe, one day, they could shake up your mind, suggesting you to dodge a useless TV show, getting interested in what is implied behind the time evolution of a Density Operator...
You will write down your n+1 equations, solve them all...and will end up with the statement that if only you were placed in a different initial point in phase space you could have passed that bloody data by reference
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.
Originally, before Computer Science became a science ,it was part of Mathematics just like Analysis,Statistics,...etc.
That tells you how important Math is.
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*.
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.
I have an MS in CS, have taken and passed Discrete Math, Introduction to Logic, and Automata & Formal Languages and the first few paragraphs of The Unprovability of Consistency (actually the "revised" version "The Logic of Provability" are already completely incomprehensible.
(To some extent this is just a specific instance of the problem that in Mathematics there is no unified, unambiguous set of symbols. But there is more to it, the writing is far too spare and overly concise. Like most Mathematicians I suspect Boole cannot differentiate between mathematical formulas and natural human language.) [pun intended] And I like Mathematics.
What does the empty square box mean? (I assume this is not a missing HTML character since the book cover also has the empty square box on it)
What does the symbol for perpendicular mean here (I assume it does not mean perpendicular, but if it does, what is the meaning of perpendicular in logic?) What IS modal logic?
Are some of the symbols from other forms of logic? Like the rightward pointing arrow. Can I assume this means Implicaton? Why are they not defined here? (By the way, I was taught that a single-lined arrow and a double-lined arrow have a subtly different meaning. Wikipedia claims they are identical, at least in logic. http://en.wikipedia.org/wiki/List_of_logic_symbols
What is the difference between 'p' as a variable and 'A' as a variable? Sentence vs letter? Sorry, there is far too much assumed here to claim that this is a "clear" mathematical work. Or were you just trolling?
"I love computers, and am very good at them."
"glance at my direction"
"If I had understood what I was doing"
You're right, you don't need more advanced mathematics. What you need is a few basic English courses if you expect to get and keep a job. ...but seriously, calc and diff eq are really important if you ever want to do anything beyond web programming with your CS degree.
Conveniently, you are unlikely to learn so much that you become less employable, so you won't even suffer in the long run.
First, mathematics is a language. Languages provide our minds patterns in which to arrange our thought sequences. For this, even if you do not write mathematical formulae in your work, and even do not consciously remember the formulae you learnt, if you have learnt to concatenate in mathematical sequences and relationships your mind will be able to concatenate in mathematical sequences and relationships, and to understand the relationships of the elements in those, which are the fundamentals of computer languages. You will be able to write your own code then, instead of simply bunging in bits you pull from libraries that will achieve what is grossly required. That is, you will be able to produce elegant, and original, instead of copied and kluge code.
Second, when you come to the bottom line in computer-science, where the math and the transistors meet, the math is dead simple stuff (or at gross glance seems to be): It is Boolean, digit one and digit zero. You don't even need to be able to count to two. You need only be able to count one and not-one. The complexity comes from the need to do numbers and number relationship, and logic and syllogistic sequences using only those. All the way to the infinite-exponent and most advanced calculus and factoring (statistics is factoring), painting pictures and conveying ideas and thoughts. All using only one and zero,, or one and not-one. Truth to tell, learning maths and logic is easier. Then you can use a computer-language, or easier still, engage a computer, to convert your maths numbers and formulae, letters, pixels, etc. to one and zero array expressions.
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.
I agree - you won't regret it.
However, for a slightly different reason. If you wish to become a Software Engineer (Computer Engineer) then you have to consider the process of software development and how it is always ripe for improvement. The process of engineering the improvement of the method is a job for the applied mathematician.
The truth is, that 99% of us in the industry are quite happily applying ourselves to the development of software ignoring the actual process. We follow established techniques such as Agile (insert more here). And, while we are sill in the beginning phase of software development (much as a witch doctor was to medicine) we can use smoke and mirrors to disguise ourselves. Eventually Computer Science will actually mature. The "fad" will be over and the the number of jobs will be reduced, positions being replaced by other automatons. The skills will be in the periphery, such as the actual science. In the Math.
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.
"However, nobody in the workforce is even going to glance at my direction without a BSc"
Really? I graduated with a BSc degree in Comp Sci from a large and reputable university 10 years ago, have been employed on both a full-time and contractual basis ever since with dozens of clients, and have never ever once been asked if I have a college degree. If you're planning on getting into programming as a profession, you need to demonstrate proficiency as a programmer and not ownership of a college degree. There are exceptions of course (Google), but these days most companies large and small will judge you on your programming skills first.
If all you want to do is to draw some buttons on a window and put some if clauses behind them, plug in wires between network devices etc., then of course mathematics is not so necessary. If you are not interested in any kind of development work but rather *using* computers, you probably never need mathematics (but then again, why are you studying computer science (practically == software/hardware development) in the first place instead of something, which takes advantage of computers?).
However, I'm sad to say that if you ever want to do something cool for which anyone (except your mother) is going to genuinely say WOW, it will be pure math from beginning to end. Even modern user interfaces utilize e.g. physics simulation, and topics like advanced graphics, game development (and I mean modern good-looking—probably 3D, but even 2D—games), signal (e.g. graphics (including video) and sound) processing, virtual reality, machine learning, pattern recognition, computer vision, algorithms, statistics and probability, data mining, cryptography, simulation, artifical intelligence, information retrieval, language processing, not to mention regular software of many application areas (e.g. medical imaging, industrial engineering, physics, chemistry, bioinformatics, business intelligence etc. etc.), are pure math. You can be a good programmer, but of what use is that if you cannot put your skills into use for anything useful? The skills of programming are just a device for achieving a target—it's not a target itself. Your client doesn't pay you because you are able to e.g. develop software. Instead, they pay you because they expect you to deliver them something from which they in turn can get more profit.
Of course, there are many application areas and simple applications, with which one does not need almost any math at all. You can be successful with them, but often that kind of applications are not so interesting and revarding than the more complex and abitious ones. After all, to exagerate a little, a trained monkey is able to do repetitive and mechanical routine tasks requiring almost no intelligence. In today's world, math is at the bottom of almost anything, and if one doesn't understand it, one should be prepared to get only quite simple work to do, if any. Of course that kind of jobs do not pay so well...
Like already said, almost anyone can install and use Windows 8, office applications, Internet browsers, games and so on, maybe even do some basic web sites etc., and claim to "be good at computers". In reality, they may be "good" from the viewpoint of their mothers or more inexperienced friends, but from the viewpoint of IT industry, they just suck. Everyone can do what they claim to be good at. It's not even enough to be a very good and well-educated programmer or be able to cite your CCNAs and CCNPs like clockwork. In the field, everybody claim to be able to do that, and you are asked about "what more can you do for us so that we should hire you". If you are happy with a job related to administration of workstations in a public library or teaching senior people to use computers, then you can forget even the BSc degree. However, if you want to be a respected and well-salaried professional in the field of development, you just have to take your math (and the rest of your studies, as well) very seriously.
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
I have a math degree from MIT. I work in CS.
Math has helped me more and more as I've advanced in my career. At first, I never used it. As I became more senior, it became more and more important that someone could read/understand/challenge equations.
Math is like the most open door. From math, you can go anywhere.
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 learned to code in primary school. To just be able to program, knowing how to count, add and subtract is pretty much all you need. But oh boy does your coding skill improve with every additional math skill you learn! I did some bioinformatics and advanced maths when I got the chance, and it changed my coding style completely.
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.
You should figure out what you really want to do. Computer science is a very different field from either software engineering or programming, though obviously there a big overlaps.
CS deals with the innards of computers and heavy math theories behind it. The other two mostly use the foundations built by CS to build stuff on top.
I quite confidently believe that most programmers will rarely need math on university level. In other cases usually a quick look at a wiki page will give an adequate explanation. Most business systems are very boring things like CRUD on databases for accounting or inventory management and that sort of stuff. But these things need to be well designed, reliable and flexible, which makes it a job for software engineers. (basically programming using structured processes for the definition and implementation of the software)
I've heard a lot of people say you need advanced maths if you want to do games. Game programming is a bit of an oddball area. Iteration is key so it is more important to test something quickly, see if it's fun, and keep changing it until it is. This requires more of an ad hoc style of development which suits programmers. Don't make the mistake of thinking these people are simpletons as they can be very smart and creative. They just solve a very different set of problems. Things like how can I make this mechanic more intuitive, or, how can I improve this portal effect?
Then there's game-engine programmers. These guys really need to know everything there is to know about the calculus, linear algebra and computer graphics theory. But these people are few and usually only at big companies. (and probably well-paid) Apart from requiring quite a bit of math, building your own engine is a lot of work.
Most people though, just take an off-the-shelf engine or framework and work with that. As long as you know basic euclidean vector maths and trig you can do a lot of stuff, and you'll very rarely encounter matrices. In the off chance you'll need them, you want to read up on how to use them, but you don't really need to know how they work internally as a standard library will take care of that for you.
It's definitely useful to know all that stuff, but not essential if you just want to make a game. I recently read a paper called 'Real-time fluid dynamics for games' and while I don't understand every math concept described in there, I was still able to implement it and play with it. But if I were to dig deep into my books of Calculus and Linear algebra I might be able to understand and use it better or even improve on it.
Undergrad level differential equations is not advanced math.
"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.
Try an Information Services Degree?
At my school Math and CS were derivatives of the same department in the early days, and still seem to work closely together.
Math Professors have tenure too, and Masters and PHd students need to TA classes as part of their work-study kind of relationship in big research universities. Its probably easier to teach Math where there is a gradable answer (right/wrong) than it is to teach a CS class where you have to review code for correctness and grade projects where there is no one right answer and too many possible languages to code in.
They need to keep perpetuating the Math department jobs at these schools, and the CS department can't evolve their curriculums fast enough to catch up with technology's cutting edge.
Major Curriculums are probably very slow to evolve. Consider the political battles that go on in the department heads (trying to please the employees without causing too many waves).
My opinion is schools teach too much theory and are further behind reality. Which class in school teaches how to do a corporate review, build and hire a team, or how to manage your financial portfolio. Those are practical skilled used in all walks of employment and life, but schools don't think those are worth teaching (the system is more about theory than practical skills).
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.
There exist Scientists who study computers, and do the work that ends up determining the design of computers years or decades in the future. For these Scientists, Computer Engineering is the most appropriate field of study. Their needs set the bar for what goes into (competent) computer science programs; programmers and the like simply go for that degree because it's the closest match to what they want, and all of it can be useful depending on where they go after school.
For "information and technology workers", people who push buttons on premade programs and put together different premade parts following instructions, any college degree is likely overkill - they're like plumbers or electricians, except requiring less smarts and getting less pay. That said, IT workers need to be more competent than the average joe, especially in their field of study; they may not specifically need a college education, but the skills needed and acquired through a college education have strong overlap (and even if the degree doesn't improve your competence any, it does prove something to employers).
"Programmers" and "Engineers" (of the Database, Network, or Systems variety) come somewhere in between. Much of their day-to-day stuff might not touch math -- but occasionally they'll come across a problem where a firm grasp of mathematical concepts and how they relate to what they're working with will significantly help - it could mean the difference between 5 minutes and 5 days, or between $0 and $10,000. The math skills help in ways that might not even recognize as problems - they give you faster ways to do things, and let you set things up right the first time so they don't bite you later.
Unless you're completely a cog in a machine at a giant corporation, you'll probably wear a few different hats over the terms of your employment. The generic "systems administrator" title means you'll be dabbling in hundreds of areas, and often deviating from the "standard" setups you can find in walkthroughs and such online.
A car analogy: Consider generic plug-and-play IT workers as people in the city and programmers/engineers/admins as people living in remote wilderness. Math skills are spare tires in your car. In the city, you mostly drive on paved roads, rarely have a flat, and if you do get a flat without a spare, there's many resources available to get you back on the road quickly (maybe a couple hours wait, maybe a couple hundred dollars, and good to go.
If you live in a remote location, you'll often drive on unpaved roads (or no road at all), greatly increasing your chance of a flat - and when you do get a flat, it'll be a much bigger problem - perhaps hours of walking to get back to civilization, exposed to the elements, and then having to get back out to the vehicle. Or days of waiting for help to arrive when you can't do it yourself. While not all programmers/engineers/admins deal with math on a heavy basis, those that don't will occasionally have "flat tire" problem where the math background would help.
A final note: Any place large enough to need an IT department, will have someone there who both has and applies significant mathematical skills in their job. It may not look like math - no exercises on paper, no calculator, and it may closer resemble material from the Logic class from the Philosophy department - but it'll be there. And those people will outrank every (nonmanager) person who doesn't have those math skills. Do you want your salary cap set at 5 digits, or 6 or 7?
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.
Excuse me, but I simply must ask: are you a software agent? I have rarely witnessed such semantically incoherent, yet syntactically correct, output in response to a subject. I can only hope you aren't being tested here for use in defeating spam email filters in the future.
Either that, or are you on very strong dissociatives like PCP or ketamine? If so, I will leave you to analyze the waterproof wristwatch Austrian movie star metaphors for code moving through space down a reamed-out Ethernet muzzle diameter to the entry forms (as they pass through time). I mean, this is certainly hardcore lavender mathematically rigorous analogy conceptual traffic contract keys if I have ever smelled it with my retinas!
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
YES. Statistics, game physics and graphics (physics, calculus, trig, geometry), search engines (statistics, ?), nearly anything realtime/embedded (Arduino PID controller - calculus). True, you don't need it if you want and can get a lower end programming position ... writing fiscal reports that just add and subtract, and display.
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.
I was sure I was never going to pass BSc level math, man-o-man, it was like climbing a mountain compared to hiking the hiking we did in high school. Now in my master's courses, I need to look it up now and then - and then I think, why was this so hard?
Bottom-line, math grows on you like a little seed through the years and suddenly you see things in real-life which are so much more easy to model and comprehend because you have that knowledge. Furthermore, don't shove this off as, I will look this shit up when I need it, that assumes you already know the problem, which often is not true. Recognizing a problem is the hard part and to be able to, you need to have seen that stuff.
If you're thinking about how important it is to you instead of how important it is to your customer (the college/uni) then you're already doing it wrong and you'll have problems if you ever graduate and get into the workforce.
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.
If you want to be subjugated to the data entry end of a bean counting factory, then just ignore all that yukky math. If you don't want to be stuck in the data entry end of the bean counting factory (usually the sub-basement of a large bank or corporate office), then you will need math. Routing algorithms need graph theory. Game development needs trigonometry (Maclaurin/Taylor series) and linear algebra (4x4 matrices coded as arrays) till its coming out of your ears. Likewise Financial Analysis needs you to understand eigenvectors and eigenvalues (again, Linear Algebra) ...so its not just for solving higher order differential equations. Automated Industrial control (SCADA and friends), needs logic, plus (first and second order) differential equations along with calculus. Fast Fourier Transforms (FFTs) are used for most compression algorithms including converting mp3's and doing image processing, noise filtering/cancelling, etc. Any job involving scientific computing will require the math requirements of the job (to write weather forecasting software, you need to know Navier-Stokes equations for example). Any job involving simulation software will require all the math of above plus game theory. Its not enough just to know about it though, most software (like most math problems) require efficiency (the big O notation) so that instead of coding a crappy algorithm that takes 500ms or more for a robust processor to execute, you code an efficient algorithm that takes 2ms for a low-end processor to execute, and likewise scales well.
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?
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.
The main goal of DiffEq is to give you a semester of the hardest damn way to solve a rather small set of problems so that you're more likely to appreciate the Laplace transform... and to get a significant number of your peers to quit and go into another curriculum.
Look at the linear circuits courses and you'll see about 2 weeks of application of DiffEq before you shuffle off to using the Laplace Transform.
If you skip ahead to Laplace Transform and its application in linear circuits and still don't get it... Take the discrete mathematics course and change to an Management of Information Science degree program... Make sure it includes COBOL. You won't starve, but you won't be happy either.
Math is never about differential equations or real functional analysis or any of that crap. It's literally warping your brain to figure out new ways to solve problems you've never thought existed before. The process literally hurts, but you'll be a better developer for it.
Unless you want to do the most boring tasks forever - if you can get a job doing them. OK, you can develop many web pages, but real software takes math of various types. If you can't grok math, can you grok boring. Robotics, games, graphics, business - anything at other than trivial levels needs some sort of advanced math - Calculus - games, graphics, robotics, trig - same, statistics - business, marketing, advertising.
That sounds exactly like my experience. I always flew through all my CS classes, but struggled with math. I eventually graduated and started working, where I didn't need any of that math anyway. Then I went back for my MS. I took "statistical machine learning," which was extremely hard, but it finally made math "click" for me. It gave me a way of relating math with a subject I already understood, Computer Science. I am now in a CS PhD program and the math is heavy. If you want to focus on "writing code" then you probably don't need a ton of math. But if you want to get into the really cool aspects of this profession, then yes, you do need math and it will be worth the struggle of learning it. ;)
For what it's worth, it helped me to think of an equation in terms of a computer program. "Math/algebra/calculus/etc" is just the programming language. It amazes me how I struggled with math for years growing up and it turns out it's very similar in a lot of ways to Computer Science.
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!
I earned a second major in Statistics alongside my Comp Sci degree. In my 25 years of systems programming, application programming, *nix, Windows, GUI apps, data gathering, data analysis, web, comms, you name it - in a wide variety of fields I have NEVER used any of my statistics knowledge more complicated than a mean or median to this day. Not one single bit.
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.
In any technical field, differential equations, linear algebra and calculus are fundamental topics. They are not considered "advanced". Even if you disagree, you shouldn't call them "advanced" e.g. to a prospective employer.
To be honest, if you don't "grok anything beyond long division", you probably don't deserve a bachelors degree in anything.
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!"
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?
Do you need to solve differential / integral equations - NO. But you need to understand what thiey are and what they do (and how to find solutions - like Taylor expansions), because these are commonly used in programming. It, of course, depends on what type of programming. But nearly every area, in order to be good and get the best jobs, you will need some specific mathematical skills - statistics, calculus, trig, geometry, probability and more. If you can't grok any of these, you should find something else to do, not software development.
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.
...for a web site code monkey. You just chose the wrong major for your brain.
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.
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
If you can't do math then get the hell out of my profession and go get a business degree or something equally worthless.
Simply because at the end of the day, Computer Science is NOT REALLY about "computer".. but on "computing". If you're going to say that you're a Computer Scientist and you're good at computers, but not really in computing (math), it's like you're saying your an Astronomer who is only good at telescopes but not the heavenly bodies, and stuffs.. Computer is JUST a tool, a very powerful one... but it is still JUST a tool. As in programming... it is an art, or a science, or whatever.. but it is also JUST a tool for problem solving, for building things, for improving life, etc etc etc...
I've worked in IT field for a lot of years and I encountered a lot of great developers that didn't study CS.
My question is, do you really like to become a Computer Scientist? or a Programmer?
Not all programmer/developers are computer scientist... but all computer scientist know how to program or two. (However, this doesn't make "programmers" less cool than computer scientists)
I can build a complex website that stores a lot of data from users with only little-to-nothing programming that uses mathematical equations and stuff...
At the same time, I can create a "small" program (console-based) that only shows a rotating triangle but it surely has mathematical computations (unless I am to use a predefined function, rotate())..
The bottom-line is, at this point in time, you decide your career path. From what I clearly observe from you, you misunderstood your bachelor course.. Let me repeat, Computer Science is NOT REALLY (or not only) about "computers"... but about "computing".
Translate as much of the math into code as you can. Eventually it will make more sense. If you're a good programmer, you have it in you to be good at math.
Computer programs that do anything non-trivial are point to set mappings, which is the definition of an algorithm. Without the understanding of what can and cannot be done analyticially, and what must be done numerically (unless some very brilliant person discovers otherwise), you'll never be able to nail down those nasty little errors that are due to decimal-to-binary, binary-to-decimal, conversions, and why some calculations take so dang long. A programmer without Numerical Analysis is just a web-page developer.
Like most things in life it depends. I feel taking the classes in order to learn how to think more logically is important. However, unless you are into modeling of some sort you are unlikely to need anything beyond the most basic calculus and linear algebra.
Part of my job description is interviewing and hiring software developers. I am supposed to hire programmers but I never bother. I hire mathematicians. I make a point of never asking any software related question during the job interview. Just the math. Heaps of it. Usually, after half a year, they become excellent software developers - they already know the grammar, they just need to learn the vocabulary. On several occasions I was overruled to hire a star programmer. None of them lasted.
"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 =)
There's no doubting a BSc is a great thing to have but don't assume the employers won't hire you without it. If you are creative, passionate and can represent that by creating projects that can be displayed or explained there's a good chance you will make more than someone who doesn't have that regardless of the presence of a BSc.
I say this this from experience having been a software engineer for 18 years (now a software architect) and a business owner for 5 years. I value and look for engineers who have a tangible example of their passion for software engineering and/or computer science.
Good luck!
"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."
I have masters degree in Math. i was employed as a software developer for about 15 years.
and i perfectly know that every my co-ed wich has been expelled from university is now paid at least ten times more than i.
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.
That kind of algebra, calculus and probability you take in CS is the typical basic math needed for any engineering (that is what CS is academically). The only science to require truly advanced math is physics.
Hello,
Personally, I always have loved maths and it has helped me a great deal over the years. However I can understand that if you don't like the subject, it is hard to learn. When I was younger I did 4 years of ancient Greek at school. It was by choice, but it was punishing. I hated learning the grammar, having to acquire vocabulary the hard way (since ancient Greek is not spoken), and having to look up almost-unreadable words in a huge dictionary. Also it felt almost totally useless. However I stuck at it and I found that that too was in fact very useful, if only to understand better much of the foundation of Western languages, not to mention access to the roots of much of our culture. For instance, beyond transcriptions of the works by Homer, the works of Plato, Aristotle and many others (indeed, mathematicians) are written in Greek. The new testament was also written in Greek and it is in fact fairly easy to read.
So, the same for you with math. Stick at it. It will become easier, you will conquer your initial feelings and feel better and stronger for it, and you will be able to leverage this effort to a large degree.
As Aristotle wrote: the roots of education are bitter, but the fruits are sweet.
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.
I have a few observations, here:
First-- and I say this with the greatest of kindness-- what constitutes "advanced math," depends on your context. My parents have high school diplomas from the 1950s. For them, "advanced math," is algebra. For you, as an undergraduate in a BS program, "advanced math," are classes you can't take without permission as an undergrad. (And when I was an undergrad, I would browse the catalogs of other departments and couldn't even understand the descriptions of the 400- and 500-level math classes. In my supreme arrogance, I assumed they were bullshit.) As a graduate student, "advanced math," is whatever is so esoteric you have to beg a faculty member to teach a class in it, or suck it up and organize a class yourself. As a faculty member, it's whatever was in last month's journals.
Second, what math exactly you might need depends a great deal on what you end up doing. But-- and this is critically important-- mathematics is a tool for computer science, and vice-versa. What you can do as a computer programmer is in many ways limited by how much, and which mathematics you know. Yes, to a degree, if someone else has figured it out, put it in a good software package, and made it available, then anyone can use it. This is the great advance of computers over "pure" mathematics. But, there is more to "being good at computers," than re-using other peoples' software and library packages. The idea is to make new software, which in a very real sense is an exercise in mathematics. (For most of us, myself included, the Curry-Howard Correspondence qualifies as advanced mathematics....)
Third, there simply is no branch of mathematics that cannot be applied to computer science. Even branches like number theory, which was once famously touted as being "pure" and "application-free" mathematics is at the heart of modern cryptography. Do you *need* advanced mathematics? Some, I would claim, actually are essential-- some set theory, some discrete math, some graph theory, so that you can understand basic concepts in modern algorithms. Beyond that, if all you need to do is maintain what other people implemented, and implement at someone else's direction, you probably don't *need* much. Even there, though, the more advanced math you have, the better you will be able to truly understand the algorithms, to evaluate them, adapt them, and extend them. But if you have visions of working on any of the "cool" stuff-- AI, robotics, image recognition, advanced social networking stuff, real-time *anything*, video game development, virtual/augmented reality, medical applications, engineering applications, and a dozen fields that don't interest me that much but are still the current hotness-- then, yes, you will need some math.
One good way to see that I'm not blowing this out of my ass is the following: Go to stackoverflow.com and watch tags like "math" and "computer science," and observe two things: Observe the sheer number of questions there are on a daily basis asking about this stuff, either professionally or for hobbies, and observe how often there is really no way around the issue other than to truly understand the math they're asking about. Sure, sometimes someone will solve your problem, but you can't make a living off stackoverflow.com answers.
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.
Differential equations can be intimidating to solve directly. The math is more understandable when aplying laplace transformation first. Then again in a discrete system the equations are difference equations and they're much easier to grok as well.
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.
The only math I found useful on compscience was linear algebra and propositional calculus. That is easy to understand if you understand logic, any other maths would be useless imo.
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.
I would argue that Differential Equations are not advanced math as they are taught during the initial Calculus sequence(freshman level classes) or right after(at best sophomore level math).
Whatever math class in your school that teaches sets, functions, relations, counting theory, cardinality, groups, writing proofs etc(the name of the class usually has the term transition or fundamentals in it) should be considered your first advanced math class. Everything before it(algebra, trig, calculus, diff eq, linear algebra) are all elementary mathematics.
Yes, advanced math is critical because computer science is a mathematical discipline.