Ask Slashdot: How Many of You Actually Use Math?
An anonymous reader writes with a question that makes a good follow-on to the claim that mathematics requirements in U.S. schools unnecessarily limit students' educational choices: "I'm a high school student who is interested in a career in a computer science or game development related position. I've been told by teachers and parents that math classes are a must for any technology related career. I've been dabbling around Unity3D and OGRE for about two years now and have been programming for longer than that, but I've never had to use any math beyond trigonometry (which I took as a Freshman). This makes me wonder: will I actually use calculus and above, or is it just a popular idea that you need to be a mathematician in order to program? What are your experiences?"
The bulk of programming jobs have nothing at all to do with math beyond the high school level.
Its mostly counting beans and keeping records. Really, it is.
Gaming, (image rendering and manipulation), statistics, and rocket science are a few of the obvious areas that come to mind where more advanced maths may be necessary. Even these fields have packages available to do the heavy lifting once you figure out what it is that you want to do. Knowing what to do the key. This kind of programming constitutes about 1% of the available jobs and 98% of the chest thumping on slashdot.
Sig Battery depleted. Reverting to safe mode.
If you want to be an efficient programmer in some specific domains, an understanding of higher math allows you to optimize your code. In game development this becomes important when you are trying to have your cutting edge game run on older hardware.
Try to read a serious book on graphics or game engine architecture then tell me how much math you need.
How Many of You Actually Use Math?
Last I added it up, three of me.
The only math course in college that I felt applied directly to software engineering was discrete math. It's all about logic, graph theory, etc. and provides the basis for computer science.
That said, most software doesn't really require calculus, geometry, or even trig. But certain fields (AI comes immediately to mind) require a significant math background.
There's no -1 for "I don't get it."
Comment removed based on user account deletion
go google quaternions, or rotation matricies
properly understanding these sort of techniques that are used widely in 3D programming applications without having knowledge of linear algebra is damned near impossible
It doesn't matter if you use it in practice. You'll learn to think critically to solve abstract problems. Don't buy into the hype that you don't need math.
Calculus is virtually unused in computers. It was designed as a shorthand for a world that didn't have computers. What you need to be learning instead is Linear Algebra.
now we need to go OSS in diesel cars
I clicked because I thought the topic was "Ask Slashdot: How Many of You Actually Use Meth?" I was looking for a support group :(
Others do what they can, mathematicians do what they want.
You are probably not gonna use what you learned in Huckleberry Finn or History, either.
There's a reason these are taught, and it's not all about pure facts.
(-1: Post disagrees with my already-settled worldview) is not a valid mod option.
Once I had to program a cursor to move diagonally across a window. While unchallenging, it was probably the pinnacle of my mathematics programming. Sometimes I have to remember to divide by 1024 instead of 1000. There you have it. Most of my life centers around multiply nested loops peppered with if-then statements plus regular expressions.
Please do not read this sig. Thank you.
I don't use much math in my work on radio telescopes, which is mostly making gizmos to control physical stuff. Someone else worked out the algorithms long ago, and I do the hardware end of it.
But I work with coders who have to do some rather intense math to solve problems (mostly coordinate transformations or path generation) that had been solved poorly in the old software.
The determined Real Programmer can write Fortran programs in any language.
While programming is not necessarily math-heavy, mathematics gives you experience with problem solving, sometimes in unconventional ways. It's really the only technical problem-solving you do in school, and it's an important learning step, for what it teaches indirectly as well as what it teaches directly.
It's not necessarily the actual math skills that are important - it's the understanding of the concepts behind it that will increase your understanding of any kind of process, job, or task - programming being one of them. Knowing what the area under a curve means is probably more important than knowing how to calculate it.
I don't use calculus or any kind of advanced algebra in my day to day work (in communications, far from programming) but I'm sure glad that I understand the basic concepts, thanks to a first degree in engineering.
Although you might not use a lot of advanced math learning it changes how you solve problems. I found it abstract algebra and formal logic the most useful.
If you really want to get into game programming, the advanced math will be your friend. Supposedly even some ancient (and infurating) concepts like quaternions are coming back in computer graphics. For anything else, it still isn't going to be a waste of time. The analytical skills and "mathematical maturity" obtained by taking a good calculus course (and actually applying yourself rather than just trying to pass) will go way further than the actual calculus will for most people.
I work on a 3d modeling package, I'd say math is a very occasional thing. And then it's not math, it's math concepts. And it's trig + matrix math. The vast majority of the time you use the pre-existing methods other people have created and there's no need to understand what they do. The best way to learn that sort of math would probably be to go and buy a book on 3d game programming and work your way through it.
And the vast majority of the programming you do has nothing at all to do with math. Which is good, because I struggled with math.
Checkout ai-class.com to see some of the ways in which Math gets used in computer science. That class touches on just a few topics and doesn't go very deep. When you work in the machine learning field, there is a lot more math that you'll find helpful.
Realistic physics requires it. On top of that, the more math you learn before entering the field, the more opportunities will be available to you as a programmer. Don't cripple yourself while you're still young.
Damn_registrars has no butt-hole. Damn_registrars has no use for a butt-hole.
How many of you use the problem solving skills that were developed in math class? I may not use math everyday, but I certainly solve complex problems that I'm sure others with less math education would struggle to solve.
It depends on what you want to do. Here's a simple example: if you want to write games with Unity then basic maths will see you just fine, but if you wanted to write your own competitor to Unity, then you'd need a higher level of maths. Same applies to OGRE, and Bullet, and... the list goes on.
After about three months of relentless Willy action I reckon I'm now as good as when I was 10.
Logic is math, and EVERYONE needs logic.
Even if you never write a proof or solve an integral in your working life, it's important to understand how math works. Life, all of it, is one big word problem. If you don't have a basic understanding for the mathematical nature of the universe, you're simply not going to be able to navigate it as well. If you don't understand how mathematical arguments work, you won't be able to offer useful opinions on the matters of the day.
I'm not sure that everyone needs to know calculus, but everyone needs to know what calculus is and what it's used for. Everyone needs to be numerate.
Give me Classic Slashdot or give me death!
...then you certainly won't use any. If you do know some and are comfortable with it you will find many uses. On the other hand if you struggle resentfully through the minimum required math certain that you will find no use for it, you will be right.
Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
I use the phrase, "If I had a dime for every time these morons keep asking the same question." I keep adding up how much money I would have if I did charge a dime per dumb question.
We will bankrupt ourselves in the vain search for absolute security. -- Dwight D. Eisenhower
Clearly I've been watching too much Breaking Bad.
The CB App. What's your 20?
Trig as you already know is great for 3d stuff.
Calc is great for decision logic and business intelligence
Stats are great for business intelligence type work
As someone who did horribly in high school and college math, I did the minimum for my degree. I've retaught myself much of stats and calc because I found them useful in my personal projects. I find them more rewarding now that I have applications to use them in. I was a bad student though early in life. YMMV
Most of the math in the corporate programming world is really elementary. Basic algebra or less.
making simple games in UNITY doesn't require much math, but doing stuff like creating new engines or modifying the engine like in the AAA titles requires math. or actually creating the engine and coding in NEW FEATURES in for the first time requires math. how do you think all those new features get into UNITY and UNREAL in the first place?
not like the boxes to add a light source and have it bounce off water appears by magic
Did anyone else read that as 'How many of you Actually use Meth?'
I did, actually. Not that it's a bad article, but it was a little anticlimactic when I though I was going to read about some doper on here.
My current job title is "Bioinformatics Analyst," and I need to at least understand a good bit of math that I didn't learn in highschool. While it's rare that I directly need to implement complicated mathematical programs, much of my job involves tuning parameters for specialized software.
I need to have a good understanding of the changes that are likely to result from adjusting parameters X, Y and Z before I submit a job that takes upwards of a day to complete. To do that, I need to read the papers and understand the algorithms.
Agreed. Any graphics engine uses a ton of linear algebra under the hood, so you'll need that if you ever want to modify one or write your own. Also, if you want to do any kind of physics simulation (which you probably will, if you're doing games), you may need calculus (but maybe not, since video games fake as much as they can get away with).
I explicitly release the above into the public domain.
You don't really need math. But the thought processes learned through math training are really useful.
I use linear algebra and calculus everyday.
As a geomatics engineer, my programming often involves using and understanding different levels of vector calculus as well as some basic linear algebra.
By the time I'm 30, I probably won't use it as much. In the meantime, I use it everyday to solve different problems.
Your plans may change, either because your interests change or because of circumstances beyond your control. Also learning higher maths helps your problem solving skills and mental agility. If you dislike educating yourself just for the knowledge or simply want to take the path of least resistance towards what you perceive as a fun profession perhaps you should re-evaluate your motivations.
Reading Slashdot headlines is not normal.
On Meth, it is.
Meth. Not even once.
APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
If your game needs to simulate physics and your programming library and tools don't do that, you will need the appropriate equations. Proper physics equations can be complicated and involve calculus. A good example is moving a vehicle around a curve realistically. There you need math to simulate the equilibrium between forward motion in the curve and centrifugal force that want you go straight.
The more you know the more opportunities you will have and the more earning potential you will have. I've used college level math in programming projects before. I have a friend who's a PhD making buckets of money doing very high level math. So if you want to make buckets of money doing high level math related programming, you will need to learn high level math. If you're comfortable making decent money limited to projects going no higher than high school math, then that's all you need.
So Trig is like 3 houses in Monopoly. You've made a huge leap in earning potential but you're not at the top yet.
Work Safe Porn
Purity
The CB App. What's your 20?
If you can't do the maths up through at least a year of linear algebra, and didn't make at least a B, I don't want to hire you for any of our technical jobs.
now we need to go OSS in diesel cars
Just because you don't necessarily use those tiny little watch screwdrivers everyday doesn't mean you aren't helped out by knowing a bit about how to use them.
Either way acedemics is not about learning exactly what you need to do your job it's about proving you have the ability to learn and reason full stop.
The end of your formal education is not the end of your learning. Most of what I need to do day to day is not stuff I learnt in school but I imagine it would be considerably more difficult for me to pick it up if I tried to focus incredibly narrowly on specifics as if things could be so neatly deliniated.
There was that one time I was able to do a Group Transform. It was mostly lucky and it made no difference.
All your database are belong to U.S.
The key areas for math in general computer science are algebra and statistics. Even if you are not actively using algebra, the thought processes in programming are very similar. Statistics are critical for analyses of system behavior. Linear algebra is useful occasionally, but mostly it's just something that is nice to have been exposed to.
I never use calculus, but it was in taking a calculus class that my algebra skills solidified, so the coursework was not wasted. In general, you should always progress one step further in coursework than you expect to actually need.
Also, there's a big difference between knowing enough to get an entry-level programming position, and knowing enough to have a career where you end up designing major projects.
I am not particularly talented in math(s). Math is hard for me.
I do not use much math(s) in my day job.
I consider math(s) the single most important subject I studied in my education, from third grade through Master's degree.
Education is not the same as training.
One can train for a vocation.
Coding is a vocation.
Do not study math(s) or attend a university if training, not education, is the only goal.
The problem with that line of thinking is that there's no stop condition; it's inherently a slippery slope. Yes, knowing more of anything is good and may have unanticipated benefits. But you can't stay in school forever.
At some point, we have to draw a line.
There's no -1 for "I don't get it."
Which is also why there is a lot of high school level code out there.
If you never learn more than you need then you'll never know if you have learned as much as you need.
Learning more math won't always make you a better programmer. But it will show you whether you can do something better than someone who knows less math.
If you want to get into post-graduate studies, this means taking the GRE test. There's a lot of math on the GRE that you have to do quickly.
None of it is terribly difficult, but I found that I was very out of practice, which slows me down quite a bit.
If you can do high school math in your head quickly, it vastly improves your score.
I've been in the CS industry for nearly 12 years and offloaded nearly all my high school era math off to calculators and spreadsheets. Very rude awakening when I took my first practice GRE.
/sig
PhD chemist here, just to give an idea of my work and complexity level. I do a huge variety of algebra regularly. I also do occasional trigonometry and a lot of statistics. Simple linear regressions are always important, and a certain amount of other curve modelling. Calculus? Never. Haven't touched it since grad school, but I did have some use for it then in error analysis studies (multi-variate derivatives to be specific). Then again, I think studying calculus helped me in algebra. It got used so often in manipulating the equations that it became second nature while the calculus remained more challenging.
Whether or not you need math really depends on the type of programming that you're doing, but it can creep up in pretty mundane areas. For example, suppose your program is doing some sort of tedious calculation and you want to display a progress bar or an estimate of the amount of time remaining. If things are somewhat complicated, you may need to fit some parameters to estimate time remaining. Fitting generally means finding parameter values that minimize some quantity (like squared error), so now you're into calculus (take partial derivative, set to zero, solve for parameter value). Of course, you can probably find a formula in a book but you may not truly understand it, or when it is applicable, if don't have a basic math background.
Also, you'll never be able to verify that your algorithm is working by manually processing sample inputs. That's a tremendously useful ability to have. See the following thought process:
>> "See if I give it A, it should give B, but instead it gives C"
>> "Let me try it by hand"
>> "My algorithm is wrong" or "My implementation of the algorithm is wrong" or "I'm using the wrong algorithm to solve this problem" (knowing the difference saves you notable amounts of time)
>> "I now have an understanding of the actual problem and can solve it"
Yeah, you'll notice that a lot of the richest and most successful people never completed college. And that's fine but in my humble opinion, that's a risky bet to take. I've done interviewing for developers for a fortune 500 company and seeing a college degree on the resume doesn't cause me to kick back and say "Oh thank god, they have taken Multivariate and Differential Equations calculus, now all my Spring applications are going to be able to compute the triple integral (by parts) of a toroid in three dimensional space as it passes through a fluctuating field exerting a force on it!" (Yes, I know that makes no sense at all) No, what that tells me is that we're going to be able to throw you in an environment where you have no clue what to do but resources to go out and find what to do. On top of that, you're going to be able to digest the driest and shittiest of documentation (like a calc book) and come back to me and have gleaned some working knowledge from it. Sure, you might have to go to the next cubicle and say "What is up with this stack dump?" And you may have to seek out an authority (like a professor) but you're going to come to some answer for our problems.
In short, it tells employers that you know how to play ball and high order concepts don't frighten you. I'm not going to throw integration by parts at you on the job but it is good to know that you stepped up to that challenge -- even if it was just to get to a final, pass it and move on. In short, I went to a liberal arts college, I took classes on music theory, calculus, physics, Native American studies, advanced literature, etc and in those classes I created four part inventions, mounds of calculations, papers, powerpoints, etc and I have used little if any of that in my day to day job post college. But in mastering those processes I learned how to play ball. Now, I'm not saying you need to go take music theory and Native American studies. But the thing with Calculus is that all software development is logic and math. So don't you think you'd want to get all your i's dotted and t's crossed so that any employer that looks at you knows you have studied beyond the requirements of math for writing software into a realm so lofty they won't even be able to use it? I'm sure glad I did.
My work here is dung.
Advanced Math simply isn't used. The college math requirements are just there to cull out the weak members of the herd. This is why Computer Science Majors don't have as many idiots running around as Business Majors do. (or Political Science, Marketing, etc.)
Adidas To Bring Back Sneakernet
Computational complexity theory requires knowledge of set theory, number theory, abstract algebras, logic etc. You certainly don't need to know computational complexity theory to be a programmer, but is a good example of the kind of deep fascinating knowledge that will make you a cut above a code monkey. And big O notation, how long will that algorithm take? In reality is that these mathematical skills are not necessary for most jobs, but they make you more competitive in the job market. They make programming richer too. And, yes, I use math all the time even calculus as I do astrophysical simulations.
Comment removed based on user account deletion
I developed a game using Unity3D.
I make heavy use of trigonometry, and a very small part of calculus.
Your question really depends on what you want to do:
There are other fields that are not typically taught in math courses but in CS that are heavily math related. Like performance analysis. This I use a lot, but once again, it really depends on what you work on.
I do a lot of database work so it's set theory all day long. It's in a bit of disguise as it isn't what normally is though of as math but set theory is a math field.
I once used differential equations to solve a problem of how to optimally transmit parts of an on-demand video program on multiple multicast addresses to minimize the start time to view the program. I'd say that was the only time I ever solved a differential equation outside of class.
As someone with an electrical engineering degree, I have to say that you really need to understand vector calculus to understand electromagnetic fields. But frankly unless you are designing microwave circuits or antennas, even that knowledge is rarely tested in a work field.
If you need to read any scholarly papers to pick up on new technological ideas, most will contain some calculus equations. Generally you don't need to really know how to solve the equations (as they will solve them in the paper), but you may need to at least understand what is going on. Kind of like knowing how football is played allows you to enjoy a game, even if you haven't thrown a football in 20 years.
Most knowledge of error-correcting codes and cryptography is more algebraic and number theory rather than dealing with calculus or differential equations.
On the other hand, every day I seem to have to convert from bits to bytes and back again.
A lot of people applying for the jobs you want will have taken many math classes. Think about what your resume says if you don't have those same difficult classes. Can you replace them with something that will tell the employer you are even more qualified?
You should not waste your time with it. Otherwise, you might end up competing with me for the interesting jobs. Neither of us wants that. ;)
Being good at math often means you are a good, creative problem solver. Even though I very rarely need any specific knowledge from the math courses I've taken, I use the skills I developed solving and proving all kinds of math problems every single day. With computers and without - just make sure that whatever you study, you learn how to think.
If you have the ability to look at a problem and say "oh yeah, 3 variable calculus", you will be able to be more effective than the guy or gal who goes "I don't see how we can make much progress here, let's shelve this."
Granted, this differentiation (get it? get it?) only occurs in rare scenarios in real life. But I will submit that those 1% of scenarios might decide the difference between success and failure on the project that makes you a success or failure.
Much of life is about having that extra edge. Math is an edge that is worth the investment. Not everyone can swing it though, but I have no problem impressing on as many kids as possible as much math as they can stomach. Like eating your greens, it's good for you.
intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
Don't do math. Talk to Frank.
Operation Guillotine is in effect.
In a digital world, classical calculus isn't used very often. To be honest, I forgot most of it. The big thing you should know how to do is integrate. Instead of an integral, you will typically use a Riemann sum in programming. However, Riemann sums are taught in most calculus classes, and you should be aware of how it works in comparison to an integral.
I'm not a software engineer, but I do a lot of programming for data analysis purposes. Yes, I think you should take calculus. Not because you will use it directly, but because of the more abstract concepts you will learn while taking the class.
One of our competitors trademarked the term "hypothesis". From now on, we will call them "boneheaded ideas".
How much CS is used in IT desktop / admin jobs?
Same idea people are put off by the 4 years pure class room when at a tech school you can get the needed skills in 2 years or less.
It depends what you want to do (not just what you discipline is, but exactly what you are doing. Do you want to develop a rendering engine? Yes, calculus, and probably linear algebra. Do you want to just use existing libraries to animate stuff? That requires considerably less)), and how good you want to be at it. I do some scientific software development, and almost every package I use involves calculus in some way. But icebike is right, I usually never see the calculus, or have to do actual differentiation or anything like that. However, if something goes wrong, I DO need to use my knowledge of calculus to understand exactly what is up.
Interpolation, functions, and linear algebra seem pretty usefule for anyone doing graphics, and are covered (Aside from the LA) in most calculus courses: again, not because you will be using them all the time, but because when something goes wrong it is often attributable to some error you made in understanding these principles. Think of it as being a pit mechanic versus working in a repair garage: usually a member of a pit crew doesn't have to rebuild a transmission, but they should at least know how it works and be able to tell where subtler problems are coming from, and usually they know much more than that. Programming is composed of tools: you don't need to know how they work to use them, but you really should.
That said, calculus is something everyone should really have some experience in. It's a freshman level course at most unviersities and isn't that much more difficult than algebra. And yes, most people won't be using calculus in the sense that they can take a homework problem and use it on the job, but again, education is not training, and you need both to succeed.
Depends on the Maths, depends on the CS.
"Logic", if it can even be considered a branch of Mathematics, is always important. The various topics under "Discrete Maths" often overlap with CS. The habits of rigorous thinking, proofs, use of counter-examples, etc. are all indispensable to proper programming.
That being said, my personal experience in web and systems programming is that as long as you don't go into game and graphics programming, you don't really need to apply any "mathematics" beyond high school level, if even that. The curious thing is even though you may not really consciously use mathematics, better programmers generally do have a pretty good grasp of higher mathematics....
But then, I've really never done any damn calculus in my programming career (not that it's particularly long). In fact, unless you're doing something very domain specific which needs the actual maths, usually an approximate solution will be simpler, easier to maintain, and less error prone. (It's not always easy to resist the temptation to implement the fancy solution though)
(PS: And I speak from personal experience -- as a programmer it's often helpful to have friends that actually know their maths very well :-p)
Don't quote me on this.
It depends on the field you end up in, really. Writing $randomSmallSocialWebApp requires only a moderate understanding of algebra, statistics, and numerical methods. (You can get by with less, but you won't be as good a programmer and won't float as high.) Writing $randomControlApp requires considerably more math, depending on the job.
In my job I write a lot of embedded software and use a lot of my math training. From control theory to simple things like calculating rise times and ring on a bus.
Will you directly use the Calculus in your day to day? Probably not. However, before you feel justified in rejecting further math education there are a few things to consider. First, limiting your education is limiting your future career options. What you as a youth believe you will want to do in your adult life is more than likely shortsighted if not plain wrong. The more choices you have--by way of an education--generally speaking the better off you will be. Second, while it isn't likely that you will directly use advanced mathematics in your day-to-day learning these maths is exercise and training for your brain. Much like learning a second (or third,...) language you expand your potential for creativity and problem solving. Techniques and ways of thinking used to tackle these advanced concepts ARE directly applicable. To phrase it another way, if the only tool in your toolbox is a hammer, then everything starts to look like a nail.
Even if software development isn't going to be your future career choice, but especially if it is, I would encourage you to push yourself as much as you possibly can to learn as much math as you have opportunity to learn. In the same vein I'd also recommend learning a second language, particularly one that does not resemble your first language. Will it be hard? Will it be a pain in the ***? Of course. However, at the end of the day, you will be stronger, far more capable, and justifiably confident than your slacker peers providing you with a distinct advantage in a highly competitive job market.
Two of my imaginary friends reproduced once
I am working in the academia doing High Performance Computing, Scheduling, Multi-Pbjective Optimization, Approximation Algorithms and Graph Analytics. I am using mathematics all the time.
Some part of it is actually straitght up mathematics: find a parameter set that optimize function f(x). Some part of it is linear algebra (dense, or sparse). A lot of it is combinatorial optimization: (e.g. counting or estimating the number of objets that have a given property). A significant part of is probability and statistics to perform result analysis.
Though most of it is not mathematics as OP probably means provided he is in high school. Most of the time you do not compute things yourself. You plug it in a mathematical software that does it for you. Thought some times the operations you need are not available and I need to write them. But the importance of knowing mathematics is to be able to pick the right tool, understand what it says, and, most importantly, understand what it DOES NOT say.
The training you get in mathematics is CRUCIAL to any kind of system analysis activity. Not necessarily because you will have a lot of equations to deal with, but because it trains the mind to see what is right and what is wrong. "Implication is not equivalence", "correlation is not causation", "monotonicity is not linearity", "random is not uniform" are the most classical example of simple mathematic mistakes people do all the time when they lack proper mathematical training. In CS or IT, such mistakes can cause a lot of pain...
For building cool, advanced stuff, and being an elite coder generally (e.g. sophisticated apps, or competitive coding), you certainly need a level of mathematical maturity.
I certainly had to pick up a little for graphics; a mate took some machine learning classes in college without a mathematical background and it melted his brain.
Likewise, the world-class coders who win international programming contests have heavy maths backgrounds and can bring it to bear on problems real fast. The real ninja competitive programmers I've met all seem to have dual maths/computer science degrees.
For well-paying jobs in the finance domain, good maths is VERY useful.
Certainly, for everyday development, you don't need maths. But for anything particularly intense, e.g. graphics, machine learning, anything that used to be called "AI", you certainly need it.
If you want to get educated in college, you cannot avoid math.
If you want to be an engineer, you cannot avoid math.
If you want to be an electronics engineer,
you will become a proficient mathematician for certain...
I recommend electronics if you like mathematics.
I recommend lumber grading over programming.
If you want a good job with the math skills you mentioned,
become a machinist.
This makes me wonder: will I actually use calculus and above
Probably not unless you are in some fairly specific areas of engineering or academia. I've almost never used calculus in my professional life though I've used software that does lots of it for me. I have however used the crap out of statistics. For most people they are much more likely to utilize statistics in their jobs and day to day life. Frankly I think it is terribly under emphasized in most curriculums.
or is it just a popular idea that you need to be a mathematician in order to program? What are your experiences?"
It's important to understand it even if you don't actually use it. You can't really understand a lot of things unless you have at least a basic appreciation of calculus. I'm glad I learned it even though I don't actually use it much.
I wanted to build a better shake detection routine for an iOS app and dug into my background of digital filter theory in order to craft (and then implement) some specific band pass and high pass filters based on a set of defined frequency characteristics, as well as understanding the RMS (not that RMS) calculation of a continuous waveform in order to trigger set events. All so that when the user shakes my app pretty things will happen.
I am Slashdot. Are you Slashdot as well?
You won't command much credibility if you can't even spell "orthogonal" right.
That's a good point. A lot of math in computer science is used behind-the-scenes, so to speak. It doesn't show up directly in the algorithms, but it's used to show that an algorithm is correct, or that one algorithm is faster than another, or that an algorithm cannot take more than so long, or that an algorithm will take so long on average.
I explicitly release the above into the public domain.
Speaking from experience: if you're interested in a computer science career, a good mastery of maths is absolutely necessary and definitely not optional. You can't do without in this field. Period. As a software (games?) developer, you may or may not need deep skills in math, depending on whether you want to be creative with new algorithms, or whether you want to be the kind of coding monkey that does some plumbing of pre-canned components and libraries without giving much thought on the underlying concepts and algorithms.
cpghost at Cordula's Web.
One math course particulaly comes back to me again and again when I am programming. It was called "Numerical Analysis" when I took it but might be called something different elsewhere/now. It involved analysing the errors inherent in computer arithmetic and calculations. Especially floating point inaccuracies and aproximations. Whenever people tell you to not use floating point it is usually because they don't understand this subject and don't know the techniques to work with it and avoid the problems.
I do most of the design and programming on A Tale in the Desert and Dragon's Tale and I've seldom/never needed to do an integral or solve a system of differential equations. Understanding those concepts does frequently influence game design, however, so having taken those courses was important, at least for the kind of games I do. (Giving specific examples would require that you are familiar with gameplay for each of those games, but feel free to contact me directly if examples would be helpful.)
:)
But on to specific branches of math: You'll certainly use linear algebra doing 3D programming, and IIRC that's considered "beyond" calculus. (If you're using OGRE or Unity 3D, at least at the API level then I'm surprised you haven't run into this.) Applied Math, which is often a college freshman course for a CS decree is crucial to all sorts of programming, especially games. Combinatorics is critical for game design, though if you're just planning to be a programmer, not so much. Numerical Methods will teach you exactly when and why rounding errors to happen, how they can compound each other, and in general help you write squeeky-clean math code. The game I'm working on now is a gambling MMORPG - I probably don't even have to say how important statistics is, if this sort of thing is in your future
Notice how different each of the math subjects above is? A lot of this comes down to learning how to learn, and that's the one thing that in my experience differentiated high school academics from college.
This is spot on. Also if you want to be a shader guru, not knowing higher math will prevent that. Games are probably rare in the software world in that math is actually used a lot.
With a background in Engineering and currently a Biologist I would say that calculus and differential equations are absolutely necessary. Things (objects, fluids, heat, proteins, etc.) move over time. There is no way to describe or model these things without calculus.
It depends on what you're trying to do. Not knowing what you're doing can be hurtful, for example, not knowing very basic algebra means you can't do simple things. Recently I noticed my colleague couldn't determine the row and column for given an index. Quite trivial stuff.
Fairly recently I've implemented a 3d cone curl for iBooks style page flipping and countless interpolation functions where an API doesn't give enough control. Being able to work with a continuous principle and derive a discrete function is very important in animation.
I guess it comes down to 3 things: how well you understand the subject, how well you can program and whether you can apply relevant maths in a way that won't obscure your code or make it more difficult to maintain. I don't want to tweak random values, and if you don't understand these random values and start exposing them, you're going to make spaggetti code.
Understand your chosen coordinate system and swap when you need to! Take an arrow with a head - you can place a static arrow head at the end of a line or you can derive the arrow head's position and and shape as a function of the line - the latter looks really nice if you understand the coordinate system. If you don't, you'll end up making a horrible mess.
But alas, your mileage may vary - if someone hadn't done the hard work for me, I wouldn't be able to implement many of the things I'm asked to as I'm merely an engineer (and yes, I have a few of those mid-level textbooks with titles like 'Maths for Engineers' or 'Somethingtotallypointlessbutitsyourjob Theory For Engineers'). Once you've solved a couple of matrices most of what you'll do in Unity is state orientated, so with the help of a good model you don't need to think, ie: in some model context, model->modelToWorldMatrix will transform model coords into wordspace, use modelToWorldMatrix.
Hope this helps!
I use lots of math. Mostly trigonometry and geometry (software deals with mapping and displaying positions), probability (for the AI stuff), linear algebra (for drawing, calculating intersections, etc), discrete math (for dealing with data structures and database query optimization), and formal logic (for figuring out computer languages).
I have very occasionally used calculus, but mostly to prove optimality of algorithms and sometimes for physics stuff, but mostly as a software engineer, someone else already did the calculus, and you just need to be able to use the results. I cross the line a bit between research and application, so I do a little of both.
But the overwhelming majority of software people (even in my R&D organization) don't use math at all, beyond basic arithmetic and simple logic. Most software is just data storage and retrieval with a pretty interface. The libraries, languages, and operating systems do all the heavy lifting for you. But I would seriously hate my life if all I did was glue together parts built by other people, and had to tell myself that my area of expertise was "business logic", so understanding how the underlying stuff works is unimportant. I build those underlying parts, and that's why I need and know math.
I work in the defense industry, writing software for both fielded systems and the modeling and simulation used to define and design such systems. I constantly use algebra, trigonometry, FFTs, logarithms, complex mathematics, statistics, probability, and a bit of calculus underlying many of the models. I do a fair amount of data analysis, which has me thinking about the various ways to condense and display data. My coworkers who can't understand the math are relegated to building UIs and writing messaging interfaces. Those of us who can understand the math create all the underlying code doing the real work. The former are much more likely to be viewed as replaceable and laid off in the bad times.
Linear Algebra and Discrete Math are probably the most relevant, depending on your field. (Number, ring theory are also useful, sometimes.) I've never used Calculus in my job; but there are probably folks who do, it's just rare.
That said, there is something to be said about the way mathematics can bring structure and rigor to a person's thought process. After raising 2 teens I'm convinced that the 2 most important things to helping someone learn how to think are math and expository essay writing; after that the rest is just data.
what about other NON college education.
http://articles.chicagotribune.com/2012-03-11/news/ct-oped-0311-page-20120311_1_college-costs-rise-kayla-heard-college-attendance
"Yet, give Santorum his due. He touched on a reality that deserves more public discussion: College isn't for everyone. Some very bright students thrive better while learning a hands-on trade, for example, than they do in a classroom. Others simply can't afford the time or tuition of college because of their personal circumstances."
College is not for all and there others ways to learn then going to a big 4 year plan. College needs to be cut down / cut up into small chunks that can better fit fasting moving tech and can work for people who are working and want to gain more skills but can't fit into the college time table.
http://articles.chicagotribune.com/2012-03-25/news/ct-oped-0325-page-20120325_1_collegiate-learning-assessment-college-students-richard-arum
"I recently wrote about the possibility of testing and certification for what I called a "college-level GED." Like the current GED test for high school equivalency, it would award certification to bright, hardworking job applicants who want to show potential employers how much they know, even though they never graduated from college/"
community colleges and trade schools are not the party schools that some colleges are.
"Ohio University's Richard Vedder, my former economics professor who gave me the collegiate GED test idea, is even more blunt in his assessment of today's academia: "Universities are becoming more like country clubs," he said, with climbing walls, indoor tracks and other luxuries that give students "something else to do with their free time besides drink and have sex."
Experiment design and analysis uses math. Systems monitoring uses quite a bit of math (or pages you for false alarms at 2am). Scheduling uses math. Stress test analysis uses math.
For game programming, physics uses LOTS of math, and since that math is expensive to perform, you often end up needing to do even more of it to come up with alternatives that feel 'right' while being better adapted to your physics processor. Then there is analysis of what your players are doing, AI (and learning!).
Realities just a bunch of bits.
Calc is also lovely for understanding financial/economic graphs. I look at price curves all the time when shopping for quantitative things, like picking what size hard drive to buy.
I don't know if it is directly applicable to the job, but in the world of software engineering, I generally find it easier to work with people who have made it through all the required math than the ones who didn't. Even if that's not a causation, it's still a filter, which can be useful.
I didn't use math much past counter++; until I learned some hard core math. Then I had a new hammer and the math in my code grew to the point where I now need GPUs to keep up. I love OpenCL.Discrete math rocks. I look back at my old pathetic basic algebra self and shudder.
Often it is useful for either figuring out what is going to happen when some set of algorithms get pounded (instead of just coding up a script to bash them) or in cool analysis of data that otherwise just sat silently in some log file.
My experience is that advanced mathematics is not needed every day but it is needed sometimes. In my career I've worked in the chemical industry, biomedical engineering and telecom; all as a software engineer. In each I have used calculus at some time. Sometimes it just added insight and others it was absolutely required to do the job. Understanding advanced math certainly doesn't hurt and often helps your career by making you more versatile to your employer.
Computer programs are mathematical expressions, so I am using math virtually all the time at my programming job.
I have never solved a differential equation for my work, or even while programming for fun, but techniques I learned while taking Calc I-IV I no doubt use in my work without even thinking about it. Practice solving difficult math problems both stimulates and creates the areas of the brain you use when programming.
Discrete math and digitial logic design? Yes, I use what I learned there sporadically. The most important part of discrete math for most programmers is understanding computational cost. You don't need to take a discrete math course to learn Big O notation, but it might put it in better context with other ideas. I don't do hardware, but digital logic design was my course in logic. In order to read someone else's code and fix his stupid mistakes, you have to understand his flawed logic and fix it.
Signals and Systems and Probability and Random Processes? I got a terrible grade in the first class, but when what the professor was trying to teach finally began to sink in 10 years later signal processing became a lot clearer. Much software can be thought of as a signal processor. You have an input, you process it, and you have an output. Basic probability is also quite handy when programming. Pretty much the only thing I think about is a normal distribution. The ideal piece of software is correct in all cases, but you always have to consider the probability of situations when making cost trade offs or pitching an argument with management about the importance of something you want to work on.
Hmm, the slope of my benefits with time is negative, and the slope of the slope is negative. Time to get that new job.
Mod me true.
If you just want to make a living, then you'll probably never need any higher math.
OTOH, if you are at all serious about programming as something you want to be really good at, then you need a _lot_ more.
I've worked with low-level game code (Quake asm), with video & audio codecs (MPEG2, h.264, ogg vorbis), with crypto (one of the AES candidates) and I wrote most of the code for the compiler sw workaround for the Pentium FDIV bug.
I doubled the speed of a Computational Fluid Chemistry code base, so that simulations ran in half a week instead of 7 days.
I've also won a couple of international code optimization contests.
The key here is that except for the h.264 optimization all of this has been pro bono, my daily job at a Norwegian IT company has almost never _required_ me to know a lot of math, but having math as a hobby means that I tend to spot all the bogus calculations in Powerpoint presentations. :-)
Terje
"almost all programming can be viewed as an exercise in caching"
My floor and the floor below are filled with statisticians and genetics researchers.
Now go back to making crayon drawings like a good boy and stop bothering the female-dominated hard working biostatistical and medical research fields that solve your problems ..
-- Tigger warning: This post may contain tiggers! --
I went to a specialized and rather rigorous science/tech college for undergrad, in which I took introductory classes in linear algebra, multivariable calculus and differential equations. It's rather depressing that I haven't really used a single bit of any of it since graduating (or even, for the most part, in any of my post-everyone-takes-these classes), but indeed, I haven't. But I imagine if I were doing anything particularly engineering-like, or anything having to deal directly with any sort of physics (which would include game development, as well as many sorts of graphics or audio manipulation), I would.
I haven't even had to use anything from the second half of my high school algebra class. Though, programming is all -about- everything from the -first- half of high school algebra... (i.e. arithmetic done on variables. ;))
I've had to use some basic geometry/trig all of once in the past 5 years of coding, and that was on an image manipulation question.
So the title says a lot. I've used only a small bit of the whole field of mathematics over the years. Quaternions, trig and some linear algebra are most of what it comes down to. I think I may have used a derivative ONCE. Stats can come into play, depending on what you're doing.
But I'm going to recommend something to you: take a bunch of math, and dive into a scientific field of endeavor that leverages that math. Most of the natural sciences require a good understanding of statistics. Physics obviously requires a lot of interesting math. Even if you decide to really study computing science itself, you'll need an enormous amount of abstract math knowledge; computing is little more than applied mathematics.
I've got a minor in Earth sciences (meteorology, geology, etc.), and it's rapidly becoming obvious to me that the most interesting problems for a programmer to work on are in the scientific fields, not in the 'industry'. Climate modelling, economic models, terrain simulation, CERN and the LHC...those are places where math is completely requisite, and they're the fields that are either shaping the world or are significantly being shaped by the changing situations in the wold.
Making games is interesting work, and I've enjoyed my time in this industry, but I'll probably make my way out in a few years to do more school in a physical science field. If you really want to have an interesting programming career--truly interesting and perhaps even world-shaping--you NEED math.
Students who do well in the more advanced undergraduate math courses (real analysis, abstract algebra, etc.) may never specifically use those precise topics, but good performance in those courses serves as a strong testament about being able to deal with abstraction, work precisely, and construct correct arguments. Those skills will serve students well and may impress employers/managers that the student actually is pretty good at thinking and problem-solving.
Linear algebra as mentioned above is probably more likely to be specifically useful in applications: modeling, graphics, science and engineering settings, as typically relationships are too complicated to be understood effectively by anything besides a linear approximation. But many linear algebra courses are technique-based and rather cookbook, missing an opportunity to take advantage of good more abstract approaches.
It's psychosomatic. You need a lobotomy. I'll get a saw.
I have an MSCS from Stanford, but it's from 1985, when the logicians and expert systems guys were running things. So I have lots of number theory, combinatorics, automata theory, and mathematical logic. I even took "Epistemological Problems in Artificial Intelligence" from John McCarthy.
So what did I end up needing? Tensor calculus. I realized that expert systems AI was stuck. The future of AI capable of dealing with the real world seemed to be in nonlinear control theory. Which is all calculus and statistics. I struggled with that, and got legged running over rough terrain figured out and patented. But this was 1994, and the simulators sucked, and I couldn't get any further without better simulators. So I spent a few years beating on that problem, and produced the first simulator that could do a ragdoll falling downstairs.
By 1997, I had that solved, but it was kind of slow. A 200MHz Pentium Pro just wasn't enough engine to get it up to real time, and that was the top of the line in CPUs back then. By then I was burnt out on the problem, and it wasn't making much money, so I sold the technology off to Havok and went on to other things.
I didn't see that what was needed was to couple nonlinear control theory to Bayesian statistics. That's what makes all those quadrotors zip around so precisely. Modern statistics barely existed when I was in school. Now it drives everything from finance to speech recognition to advertising, so it gets worked on and people study it. Nonlinear control alone never had that big a market, so the field didn't get enough attention to move it forward.
So I needed more math, and different math, than I got in school.
Pretty much every day, but I write digital signal processing programs in C/C++.
Although in 12 years of programming I don't use math beyond geometry, trig, algebra I, and discrete mathematics -- taking 2 semesters of calculus expanded my consciousness. You see how numbers relate to one another in a whole new way. Learning about the kinds of problems the higher maths are meant to solve is also fascinating.
"Love heals scars love left." -- Henry Rollins
I thought I'd add this little information piece. In this John Carmack interview the very first question asked is how much and what kind of mathematics is involved in game engines.
The fact that this question is being raised...is...disturbing. I'm talking early Bobcat Goldthwait, maniacal screaming, dark-acerbic comedy disturbing.
Math is about much more than "solution." Math is also about how one arrives at solution. Math is about how one communicates the most fundimental ideas. Math is about proof, certainty, and understanding (individually and communally).
Certain themes occur in our daily lives; themes that today, we "know" and "understand" (with certainty) because they are reduced to a mathematics. If there is no mathematics, one is left with faith-based, opinion -- hypothesis...speculation.
One builds upon a foundation. If one's foundation is toolsets -- created by others -- then one's capability will forever be limited by said toolsets. However, if one's foundation is the underlying reasoning of toolsets, then one can transcend the toolsets and achieve excellence far beyond the imagineering of others. It was gaming, game theory, relativistic models, fluid flows, collision dynamics, vector mechanics... that grabbed me by my entrails and kicked my youthful ignorance, arrogance, and laziness into a new dimension of sympathy and love for the elegance (and necessity) of higher-order mathematics.
The fact that the argument is evidenced by "Ogre" and "Unity3D" evokes an almost sympathetic, puppy-like pat on the head. Ugh... I see these kinds all the time at conventions. All gooey-eyed and heads filled with mush! I see their resumes and portfolios... and they go directly into the trash. I get their babbling phone messages and I route them to the bit bucket.
Answer: If one is content with limitation; chained to the capability of others, unable to even communicate intelligently with pioneers in one's field... no, math is not important. But...trancendent excellence is forever denied to the willfully ignorant.
I use statistics a lot. There's a lot of number crunching in programming, and data sets are getting bigger and bigger. Understanding statistics helps you understand trends, when they are significant and when they aren't, etc. I actually wish I understood stats better and should do some more reading on it.
I must be a bit of a nerd, because I find calculus useful just in everyday life, let alone for my job. Understanding the difference between a change and a rate of change is something that most of us can intuitively grasp if we think hard enough about it, but being able to apply the language of calculus to that event helps me better understand and communicate it. Again, when applied to working with datasets, calculus becomes very important.
Mathematics is a language that is used to describe reality. The better you understand mathematics, the better you can understand the world around you, and the better you can articulate that understanding, both to yourself and to others.
www.clarke.ca
Ignore the computer scientists. They tend not to be the best programmers anyway.
Learn how to program. Learn software engineering. Learn how to deliver working software quickly, that meets the needs of its users. Learn how to re-use the work of others, in particular those nice computer scientists that did the research, wrote the standard libraries and included them in the basic language spec.
It doesn't hurt to be good at maths, to be able to understand it, but it sure as hell isn't important to have a degree level understanding for most programming jobs. It certainly isn't as important as strong people skills. Linus isn't a living god because he's the best mathematician in the Northern Hemisphere, it's because he's able to coordinate and manage a large, diverse and intelligent team and get them working together.
disclaimer: I didn't do computer science at university, it was too easy. I did financial analysis, where the computing element was merely automation of the complex analytics and mathematical models being used.
Yes,
Depending on the field and where you your going you really should have it. CS covers a broad area, like many tech companies hiring an "computer guy" require a CS degree in the qualifications. The reality and they know it, that's not what they need, software companies love to say you have to have a CS degree but then you find out they are developing with perl. Really CS for a perl scripty job? Having the math base puts you at the bottom of the technology tower, that foundation where everything is put ontop of it.
A pure example, while not 100% relative, ask your "IT guy" (admittedly many not all companies consider IT your desktop support) how a CPU truely works. While they are a smart man or woman and solve many problems they very often have no idea the foundation of how things a layer bellow works. But the stronger your base is the further down that tower you go, and the farther down it you are in the future you can easily move to any place above it.
My view is that even though you might not need these skills, the very act of attempting to learn them alters the way your brain is capable of solving problems in a way that is indispensable.
I thought the original article was a troll. Math is hard, and causes kids who are otherwise good students to drop/fail out, therefor math requirements should be lowered.
You could also say memorizing names and dates is hard, and causes kids who are otherwise good students to drop/fail out, therefor history requirements should be lowered.
Grammar and spelling are hard (and unnecessary anyway since MS Word will do it for me!), and causes kids who are otherwise good students to drop/fail out, therefor language requirements should be lowered.
Basically, the originally argument is "no one is great at everything, so therefor nothing should be required and grade school should have no minimum standards." It is a position I completely reject.
The very premise is bunk--math is not that hard. If you are dropping out or failing to graduate high school in the USA because of math, then you aren't that smart and weren't a good student to begin with. As a math/science geek, this was never an issue for me. But I can relate, because my language ability lagged behind my peers, particularly when it came to learning a second language. I know what it is struggle in one particular area.
So is that why I dropped out of school? Actually, no. I somehow managed to pass two years of Italian in high school (not required for graduation, but I felt I had no choice as a second language is expected on college applications.) Oh, and I also passed a year of Russian and a year of German in college. Some of the toughest courses I took. It was more of an effort for me to do two semesters of Russian over a summer than all the extra math courses I took in my spare time that eventually added up to a second major.
So F you, boo hoo, math is hard. Yeah, if you're stupid and lazy.
But that's not what I'm hear to say.
What I want to say is, it's not just math, but which math. Our USA system is geared towards getting every one to calculus. Calculus is fun and all (no really, it's fun!), but not a relevant goal for everyone. I think this particularly applies to computer scientists and programmers.
Most folks would be better off on discrete maths, such as abstract algebra, linear algebra, group theory, probably, etc. (Probability can include calculus (particularly when infinite series get involved) but there's a lot you can do with just high school algebra.)
So to the OP here, I'd say, yes, math will do you good, it just might not be calculus.
To the folks who can't even get over high school algebra, well, yes, I would like fries with that.
I am far from an expert on this subject, but it's shocking how easy it is to tell who has or hasn't made a study of math. Usually at any rate.
Those that study math and really took the time to comprehend what they were looking at seem to be much more capable of the more abstract problem solving.
Mod me down with all of your hatred and your journey towards the dark side will be complete!
Well, I'm a physician. So while I don't deal with differential equations on a daily basis, I certainly needed a lot of math just to understand things like pKa and reaction rates in biochemistry, things like stroke-volume and the Starling equation, to understand how a kidney works, to understand why a 4cm aortic aneurysm is not such a big deal and a 6cm one can be deadly (something about a 4th power in there), acid base imbalances, why in the trauma room I need to use the short catheter and not the long one, etc. I needed math just to understand all of those concepts. In my day to day work, well, I don't need THAT much math - mostly fairly simple arithmetic. Dose is 50mg/kg divided in twice daily, patient weighs 7 kg, so I need to give him 350mg a day which is 175mg twice a day... Not rocket science. You need to look at an arterial blood gas printout, glance at the pH, HCO3 pO2 and pCO2 and instantly decide if you're looking at metabolic or respiratory acid/alkalosis. There's math there but after a while it's not work - they are all numbers you have seen before. And then there's the math that has to do with billing, and figuring out if you're actually earning or losing money which is not as easy as it sounds. Then there's the math that you have to deal with from your banker, who wants to bill you $700 a month for that new equipment you just bought. Should you buy the other model and save $50 a month, or not?
Then I go home. I have a mortgage. More math. Should I refinance, or stay as I am? How about retirement? How much money will I need to maintain my lifestyle, and how can I make sure I have it?
Oh there's plenty of math in life. Not everything is a Taylor series, or trig, but think of it like running. You have to learn to sit, then to crawl, then to walk, and then to run. Most of your life will be spent sitting, some of it walking. Rarely will you run. But still it's good to know you can, and that you can do it when you have to. Math is the same way. If you're a fool you'll kid yourself into thinking that math isn't important. That's the same as going through life with your eyes shut. Things will happen to you and you'll get into trouble, because the ones who are good at math will rob you blind. Or you can open your eyes, and spot where the reasonable deals are and where the rip-offs are.
Seven puppies were harmed during the making of this post.
well... i'm designing an engine, at the moment: http://lkcl.net/engine for this project http://facebook.com/UltraEfficientVehicles. the actual complexity of the maths required to do a proper job is waay beyond my abilities, so i am using iterative programming with python, as a temporary substitute.
to give you an example of the kinds of things i need to do: the design is a cross between a revetec and a bourke. if you've not heard of either of those: the revetec uses counter-rotating multi-lobate cams instead of a crank (2 tri-lobe cams shared across 6 cylinders), and the bourke used a scotch yoke to get a perfect sine wave. both designs have extended dwell time at TDC.
so basically, the "bang" is longer, hotter and quicker than a standard crank. what that means is that the exhaust gases are *not* burning as the piston goes away from TDC. and, with the cams, it's possible to arrange them so that as the piston falls away, the pressure against the cam face is turned into a *continuous* torque. so then, the advantage of the cams therefore is not just that you can get a torque pressure for over 120 degrees (as opposed to only 40 for a crank), but that you can do *anything* - including tricks like the above.
so the equation that i need to solve is that the rate of change of the face of the cam, acting as a lever to produce torque, where the lever is itself shrinking in length (because the cam face is dropping towards the centre of the spinning cam), equalises the torque as the amount of pressure falls off due to the expansion of the hot gases. luckily - and i say luckily - because "detonation" is being used (above 1800F you get the hydrogen burning as well as the carbon, so it's all over in under a microsecond) there's no burning gases so it's not as complex as it could be.
as i simply haven't got the level of maths to express the equation properly, nor do i know what sort of pressures will actually be involved in a 70cc cylinder, nor do i yet know exactly what compression ratio it's going to run at (i've made some adjustments to the cylinder's stroke), i am having to do the best i can.
so to calculate a first version of the cam, i ended up using a spline curve to roughly match a sine wave and then altered it slightly. even here, however, my first attempt to calculate the cam face was an O(N-cubed) algorithm, and i had to look up "line through circle" which is y=mx+c into y-squared + x-squared = r-squared and use that to reduce it to a more accurate O(N-squared) algorithm.
bottom line is: hell yes you lucky bastard if you've got an opportunity to learn some more maths for god's sake do so. you're damn lucky: you could probably solve the equations needed to sort this stuff out in a couple of hours, whereas it's taken me two weeks of thought and experimentation to get as far as i have, not having access to the right level of expertise.
btw, to the guy who said "instead of calculus, use linear algebra" - you're dead wrong. the iterative loops i'm using are a very poor substitute. when i zoomed in on the critical sections of the results (the DXF output) of what i'd produced, i found that they were wrong. i had to increase the number of steps around the 360 degree circle to 1,440 and the inner loop steps to 14,400 in order to get a level of accuracy that looked acceptable, and i don't actually know if it's going to be good enough.
if instead i had the right maths, i could have used it to calculate the tangent of the roller-bearing as it drops against the face of the cam, and worked out properly, with an O(N) loop, what the cam face should be. the O(N-squared) loop is because i have to "simulate" a CNC milling tool the exact radius of the bearing going round, "shaving" the cam face away, taking a minimum distance (hence the line meeting the circle) as the bearing rotates through 360 degrees (inner loop, 14400 steps) as the cam rotates through 360 degrees (outer loop, 1440 steps). this iterative technique is *not* as accurate as using calculus.
You say you've used trigonometry. if so, then you're already "advanced" beyond the level that Hacker was talking about in his article where he said that Math Is Too Hard For Our High School Students. He was advocating dumbing things down past algebra and trigonometry.
Now, mind you, I think of even trigonometry as high school math myself. But if you use it and know how to use it, you're already in the top half of the distribution of students in college.
Will you ever *need* Calculus in computer programming? Probably night. I might recommend taking a class in linear algebra if you're interested in computer graphics, because some of that applies. You may not use it, but the underlying engines rely on it. And, yeah, the underlying engines rely on numerical approximations to calculus for things like physics engines. Linear Algebra doesn't require calculus as a prerequisite.
However, Calculus is interesting and stimulating, and will stretch your mind to think in new ways. If all you're interested in is training for the job you want to do, then, no, you don't need it, but truthfully, except to match resume requirements to get through the door, you don't need most of college. If, on the other hand, you want to be broadly educated about the world and human intellectual achievements, then calculus is a good thing. Not necessary, but well worth the time.
I work as a graphics and animation programmer in the games industry, and I found that in university the required math courses focus mostly on calculus, (for my cs degree I had 3 required calculus courses, 1 required linear algebra course and 1 required logic course), which maybe isn't the best focus for many people.
Calculus still does come in handy in quite a few games related places like lighting equations and physics simulation, however, for the most part other areas of math apply much more directly to my every day work. Which is to say, math is used in my every day work, but maybe not the parts that are most frequently taught.
Understanding geometry and linear algebra techniques used for modifying, blending, and interpreting spatial information (transforms, positions, directions) is a requirement for any game programmer, but little of it is taught in basic university math courses.
Even in my first linear algebra course (which I looked forward to because I was trying to learn matrix math on my own), most of the time was spent on solving systems of linear equations, least squares etc, with very little time spent on geometric transformation... and I don't think any course I ever took covered quaternions at all, which is the most difficult to grasp, and useful math construct for storing 3d orientation.
Anyway, yes of course you need to learn math! Learn whatever math they will teach you, it will help make it easier when you have to learn the really useful stuff yourself.
If you're an engineer of any kind (including software), then guess what? You need math. Maybe a lot, or maybe a little (and it depends what you mean by "math"), but chances are the more math you can handle the better your work will be.
However, that wasn't the question, it was in effect "how much math should the average person be forced to learn in school?" This touches upon the current fad of piling on more work, more STEM, making younger kids learn what their forebears learned at later ages, and insisting that everybody has to go to college. Algebra in middle school? Sounds like a great plan, but in practice it is utterly moronic and self-destructive. Much of the curricula, workload, "standards," and homework are there not so that kids learn more or become better citizens, but to con parents into believing that their kids are in a great school and have a shining academic future. It's bullshit. Well below half of kids who exit middle school successfully graduate from a four year college program (you'll have to look it up yourself), and it's worth asking what happens to those who actually made it a couple of years after graduation. Let's not even talk about the cost, which amounts to a colossal fine to be paid by those who dare to pursue higher education (unlike in most other societies).
We insist on living in a fantasy world. Who needs manufacturing? We're in a {knowledge | service | innovation | blah blah blah}-based economy! If you don't go to college, you're on your own and nobody gives a shit about you, and you're likely condemned to a low wage forever. If your personality doesn't fit into the narrow demands of the school curriculum, then you must have some phantom mental illness and need to be medicated. Obviously it can't possibly be that the educational system is deeply flawed. If some vastly unhealthy diet is heavily promoted in commercial pop-culture venues and easily available at every single supermarket on the globe, then it must be good! Diabetes, heart-disease, obesity, lung cancer, etc. should be treated with pills that you need to take for the rest of your life, not by avoiding junk food, sugary beverages, smoking, etc. Try suggesting to people that they should only drink sweet soft drinks a few times a month. You yourself probably think it's a crazy suggestion. Next step: shift the discussion of the explosive growth of health care costs to hot-button political controversy where it will languish forever and never be solved.
Believe it or not, all of these are consequences of a moronic, self-destructive educational system that successfully serves a small fraction of the population. What do people learn in school? To feed themselves in a healthy sustainable way? To earn a decent living? To be skeptical of whacko religious, political, and cultural figures and doctrines? To cultivate their minds and bodies to be wiser and more satisfied with life? To build an ever improving society and culture? To help make sure that this lifetime is as good as it possibly can be for themselves, their fellow citizens, and for everyone else on earth? Or do those things sound utterly idiotic and at odds with real life and the education we all end up with?
But a huge amount of computer science is not about modeling the physical world. It is about organizing data or doing accounting or serving up web pages. Advanced calculus does not help at all with that.
Three jobs ago, I worked on electronic design automation that required knowledge of mixed integer/linear programming and graph theory.
Two jobs ago, I needed calculus and vectors for a different EDA tool. Also needed quite a bit of hairy computational geometry.
One job ago, didn't need that much math... just a bit of vectors and computational geometry.
Current job, don't need calculus, but do need statistics.
I would say that most interesting programming jobs require a fair amount of mathematics. The boring, crap, grunt-work IT programming tasks probably don't.
Why?
If you do not have a decent grounding in set theory, please do NOT attempt to do any significant database work.
Basic select, insert, update and delete can be dealt with via modern ORMs. Anything beyond that, such as joins, intersections, unions etc. are almost entirely set theory. Where is that covered in the traditional mathematics curriculum?
Yes, some ORMs purport to do that stuff, too, but they rarely do it well.
True story: I was taking a database course as part of my college education. The professor introduced us to relational theory, including an algebraic notation which described subsets of fields in a record and subsets of records in a table. Then, over the course of three class periods later in the semester, he taught us SQL. It boiled down to "this is how you do xxx in SQL." From that, we got table creation/destruction, selects, views, subqueries, aliased fields and tables, inner and outer joins, the whole enchilada. I've been able to build on that and do some pretty heavy-duty SQL work but I had to know the underlying theory. Being subsequently trained in RPG, where much of the legacy code does NOT use SQL (and you invariably don't have time to replace it with code which does), that theory comes in very handy.
We understood the underlying theory, all expressed via math. Learning SQL was a simple matter of learning how to express our desires in a language the computer could understand.
You need at least algebra to understand O(n) notation. Without that, you're usually stuck either cluelessly gluing together someone else's libraries (a LOT of that in modern SoftwareDev) or continually recreating O(n^3) (or worse) algorithms.
If you aren't going to learn calculus, one can only hope you never need to do any kind of Numerical Analysis. Any course where you're allowed to use Mathematica, because the calculus (such as taking the third or fourth derivative of a function) is "overhead" relative to the material being covered, is the very definition of "heavy duty." And, since physics is largely the application of calculus, avoiding calculus means you also need to avoid anything which involves physics. Stuff like game design (Angry Birds uses plenty, Angry Birds In Space uses more), putting rovers on Mars, wireless network design (wave propagation between obstacles and through different media is very calculus intensive); you know, the COOL stuff.
For the typical web developer, creating shiny web pages which do extremely simplistic database work, you probably won't need calculus. Ever. Is that all you ever aspire to be? And how long can you continue to do that without being crowded out by graphics design wizards with increasingly intelligent design tools?
... by the Dew of Mountains the thoughts acquire speed, the hands acquire shakes, the shakes become a warning
It sucks, but your professors will expect you to have a higher level of mathematical knowledge and design assignments that assume you know how to use advanced math. Generally, no, you can look up the forumlas and plug them in or use a package that does the math for you - but your prof may give you ambiguous assignments that you will not no how to solve unless you have the math chops.
That's part of the reason I'm a lawyer and not a programer. Money was also a factor.
I have been through several levels of Calculus, and, admittedly, have never actually used Calculus in any of my programming jobs; but I didn't get high enough into the theory of things to need it. I did some work with biometric scanners, but not the theory end. I just missed a job programming laser cutters that sounded like it would use fairly decent math. I've had one boss and one teacher who worked at NASA; and I wouldn't expect anything that cool without some serious math.
OTOH, I am pretty good at basic math through trig (partly from the calc classes), and it has been a huge help to me in most of my dev jobs. I've had a few positions alongside non-mathy programmers, and I ran circles around them. I once took a professional developer's code, and reduced dozens of complex lines down to three simple math equations. There was nothing exactly *wrong* with his code (except he was getting a logic bug he couldn't find), but three lines is way easier to maintain, and it's a lot more fun to write.
If you want to do anything with networking, masks are easier to do if you understand boolean logic well. If you want to write games--especially graphics--you can be a lot more efficient if you're good at math (and more efficient=faster). Text manipulation is easier to do when you get things such as capitalizing a letter just means subtracting 32 from it. Twiddling the calendar is easier when you get that a month is 30.6 days, and how that reduces date math to a division and an addition.
So, no; you don't need math--all of that is doable without, as long as you have the libraries, etc--any more than you need to be a good runner to enter a marathon. But being good at math will make you more competitive, and a better programmer, and will give you better tools for problem-solving.
Hiring-wise, I would take a candidate that is good at math over a more experienced one who isn't.
In high school I didn't think math was all that important to programming. I was astonished at how wrong headed I had been by my sophomore year in college and tried to learn as much math as I could. You don't need to be a super math genious or anything. But algorithms are really just math and most of what a programmer does is string together algorithms to solve a problem. Some math has direct applications like Linear Algebra, Complexity, Logic and Set theory, while others like learning the transforms (Laplace, Fourier, etc) and other Calculus stuff or Probability is only used heavily in some subsets of the field. But they all sharpen the mind in ways that are useful for a programmer.
A programmer solves word problems. You get a sloppy problem defintion, you refine it and then you write out the formula for the computer to solve. The level of math required to come up with the formula depends on the complexity of the problem you are trying to solve. Most real world problems can be solved by simple algebra and logic, but the more math you have under your belt the more easily you can recognize problems that can be solved better. A transform can change an expensive O(n^2) algorithm into a O(n log n) algorithm. Knowing the math can tell you when that makes sense, and if you aren't good at that stuff you can at least know it and get the problem reassigned before you waste time on a bad implementation.
BTW A Programmer also spends considerable time debugging. This is often just reading the math that others (or an earlier you) has written and figuring out the disconnect between the intention and the reality of the formula. Other times it is figuring out what base assumption is wrong or proving the harware is broken.
I have been a self employed full time game programmer for over 10 years. I use trig every week, calculus maybe once a month, and have even dipped into differential equations a few times. It all depends on what type of game you want to make, and what libraries you are going to use. If you are going to write your own physics engine then you must have an awesome grasp of math, even if you use an off the shelf one it still helps to have a background heavy in math.
I'm a theoretical computer scientist who slings code for fun. I question the validity of teaching programming as part of computer science. Sadly, that battle was fought, and lost by my side, way back in the early 70's!
I am the penguin that codes in the night.
The only time it's really appropriate to stop learning is when you're dead. (Though I suppose if you think learning can only happen in a school you may as well be...)
The point is whether or not the math they teach in high school is useful for anything and should be taught. The problem with this thinking is the high school years are rather formative for many people - the subjects they are exposed to and their experience with them can have profound impact on the decisions they make that will form their lives and professional careers.
So take math. It may not be "useful" but it will influence you and your worldview, and that's important.
BUT! If I were to change anything, I'd shift Calculus later and put more focus on Prob & Stat - A better understanding of prob & stat will make your life better and really help keep your bullshit detector well tuned.
Also, this comes to mind and is worth watching, tangentially related.
=Smidge=
In relation to the topic, most programming tends to top out at algebra. Some of it uses trigonometry and statistics. Calculus and imaginary numbers come into play during certain, specific engineering requirements. So it really depends on what you are coding, but I would say that you really don't need calculus. What you do need is a solid foundation in mathematics and to be in practice. There are other math-related topics that come up in information technology. A couple of examples off the top of my head would be data structures and encryption. If your math skills are rusty, those topics might not be very easy to comprehend. Another consideration is that any college or university you go to will probably make sure you know your mathematics by having you take their classes (unless you test out of them) regardless of what you took in high school. Speaking from experience as someone that went to a university from a public high school in the USA, chances are that you will probably not be ready for the demands of higher education coming out of high school. You really do not want to be rusty at that point, or it will be that much harder for you (especially since advisers will probably suggest you take five to six classes a semester if you don't want to be there into your thirties).
Slightly off topic, when did a call out against math start? I was required to take 3 years of math in high school. Every math class I had, we covered new topics. I was required to take 4 years of English/Literature. Every year was the same exact thing as middle school, with a slightly higher vocabulary expectation. Read a few books, write a few papers. Done. I can pretty definitively tell you which class was a bigger waste of my time in high school. If they want to get rid of some standard requirements from the curriculum, drop the English classes. If you can't write at a decent literary level after ten years of schooling, you shouldn't be advancing in grade-levels.
Vol~
Most decent developers use so much maths they don't even realise they are doing it due to familiarity with the language.
Korma: Good
One of my mid-level undergrad CS courses was nothing but applied calculus.
A Pirate and a Puritan look the same on a balance sheet.
The type of software you end up making, I used to work for a software company that made applications for lab testing so you needed to know Integrals and Derivatives.
Not everybody does, but I use higher math skills pretty frequently (calc, diffeq, linear algebra, statistical analysis, etc)
These things are tools, and you can only use them if you have them.
To insert the mandatory car analogy, if you only have a small hatchback, you'll probably do just fine. You can generally get where you need to go, and you probably won't miss the things you can't really do. You'll just avoid the stuff that requires something else, like trips to the hardware store, or whatever else.
But imagine you also had a truck. Sure, maybe you use the hatch most of the time, but when you really need it you have a tool that take on some heavier jobs.
These other skills are just like that. You'll get by without them. But if you have them in your back pocket, you can do a lot better than just get by. You won't ever see "Must be able to solve second order differential equations" on a job opening. You won't ever have your performance measured in # of integrals / day.
What will happen is that you will be the person who can solve problems that other people can't.
Some examples from my workplace over the years:
Replaced unreliable/unstable linear fit noise filtering algorithm with one based on FFT and low-pass filter
Multi-variable curve fitting of empirical data to assist designers
3-d field solver to model silicon failure
Detailed statistical analyses for yield prediction
Nobody came and asked us to do these things. They came to us with problems they couldn't figure out and we did.
Understanding why the math works makes the programs work. Understanding probability and statistics make my inline sampling calculations correct. Understaning how spline calculations work make my curve approximation code (or even the use of curve approximation libraries) correct.
Yes, there are a lot of good libraries out there. They are optimized. They are error-correcting. They are correct. And knowing what they do and how they work enables you to use them effectively.
When you talk to your clients (or your bosses) and they ask you about how you did something, the ability to pull the core math and explain it will go very far.
It is kind of like lifting weights. The lifting isn't its own end. It makes the daily (carrying 40 pound boxes of cat litter into the house) mundane. So it is with math. Understanding simple things as polynomial interpolations for higher-order polynomials can make or break your ability to project storage estimates. Understanding O() notation will help you program well.
Don't scrimp on the math. There are enough bad systems out there for other reasons already.
"I'm a high school student who is interested in sex. I've been told by teachers and parents that sex classes are a must for any teenager. I've been dabbling around with the opposite sex for about two years now and have been masturbating for longer than that, but I've never had sex for real. What are your experiences?"
If you're trying to model something that is governed by calculus, then knowing the calc will help you model it. And it doesn't take much for something to need an integral, or differentiation.
The question you're really asking here is "Is it worth all of the hard work to learn higher-level math, or will I be content to just be a low-level code monkey?"
I know of at least one company that opts to hire mathematicians and teach them programming, rather than hire programmers and try to teach them math.
It may look like I'm doing nothing, but I'm actively waiting for my problems to go away.
--Scott Adams
Math is a filter. At least here in Germany. 120 Students start CS, by 3rd Semester 85% of them have left and given up. The lectures move from the auditorium to small rooms where the Prof. makes tea for all and then discusses advanced boolean algebra, logic boards or the neat learning computer he built over the years.
Math filters the cream from the crop. If you make it past the first 4 Semesters, Math disappears, never to be used again. Unless, that is, your joining your CS with an even more hardcore field like engineering or something.
I hate Math just as much as the next guy, mostly because I hate the inherent historically grown ambiguity of its notation standards, but in a way I'm also gratefull. That way, when in about 4 years I get my degree I won't feel like a wuss, but rather like someone who's actually studied something that is - you know - worthwhile going to college for. ... I'm actually reading myself for a late career move into a degree in Business Informatics. And the Math stuff scares the shit out of me. ... Guess I'll just have to grow some balls and man up. It will be tough, and I'll pass my math credits by the skin of my teeth, but I also discovered that the hard stuff is part of the fun.
Of course, wether or not I make lots of money once I have a degree, that is a different story. I'll be continuing my business moves on the side. ... But, as mentioned, also doing a lot of math I've never heard of in 25 years of programming.
We suffer more in our imagination than in reality. - Seneca
I only really use algebra and maybe some trig from high school for the vast majority of what I do as a software engineer working mostly on embedded systems. Without a very strong grounding in those subjects, I wouldn't be able to do what I do.
But that doesn't mean that high school math is sufficient. Without the calculus and discrete math classes I had, I don't think I would have nearly as strong a basis in the "lower" levels of math that I need regularly, even though I remember very little calculus. And to be perfectly honest, I feel at a disadvantage at times in not having a broader knowledge of some of the higher math concepts. That would provide me with a richer tool set from which to pull solutions. But that can be said also for other fields entirely, like biology. Many of the more interesting problem solutions require interdisciplinary knowledge; think about genetic algorithms and such. I haven't the first clue about genetic algorithms so they don't exist in my toolbox, which is unfortunate.
So the question of what math is used by SW engineers on a daily basis won't necessarily get you a useful answer. As cliche as it sounds, the broader your knowledge base, the better able you will be to solve types of problems that you can't possibly anticipate while you're in school, even if you know exactly what field you want to go into. I don't regret a single second of the math classes I took; on the contrary, I wish I had taken more (especially after taking the Crypto class from Coursera).
Absolutely. You always need a math background at least a bit deeper than what you actually use in practice, so that you really understand what you are doing.
Discrete math and statistics are essential. I would never hire a software developer who did not have a good understanding of algorithm analysis (time complexity, etc.) and any kind of technical field calls for literacy in statistics if you are any good.
You will never solve a calculus problem on a software job, unless in a scientific field, but the discrete analog of calculus is called for not infrequently, and so you need to understand what it is you are writing the analog of.
Partly it is a matter of how broad a career you want, how many career options you would like to have, and how high you want to rise in technology (as opposed to management). I am at the top level of my profession as a software/enterprise architect/development lead and I could not have gotten there without a solid, broad math background.
Starships were meant to fly, Hands up and touch the sky - Nicky Minaj
Programmers who don't know calculus (or don't actually understand what it means) constantly re-invent it. Badly. And they don't know they're doing so, so they don't realize they're turning a wrench into a hammer.
Rate of change (derivation) and accumulation of changes (integration) are fundamental calculations that pop up again and again, especially when you're dealing with actual hardware.
How long will this servo acceleration ramp take to get up to speed? Calculus will tell you exactly, for your expected position minus any PID issues, or you could try one of the variety of bad kludges I've seen to estimate it.
Of course I use trig all the time as well, and matrixes are useful tools for all sorts of things (transforms, solving systems).
I haven't found much use for differential equations - I guess my physical processes aren't quite physical enough.
Then again, I'm a practicing engineer. I moved from hard stuff (aerospace) to easy stuff (structural) 'cause I'm lazy and I wanted to live where there were few aero firms.
I use the results of calculus every day, but I don't have to do calculus longhand. I have done basic spreadsheet modeling and a very, very small bit of programming to ensure that I don't have to do calculus - but without learning it and understanding the concepts there's no way I could have built the tools I use. Further, the mere understanding of calculus means that I can mentally estimate faster and realize how the various materials will interact without having to put a pencil on paper. In other words - I can solve most problems in my head, with very few numbers. Now, that may not seem useful in a profession where answers on paper are my meal ticket, but think of it this way: I only have to write down my problem and solution once rather than trying several different options because I already know what the correct answer will look like.
You won't use 99% of what you learn on a day to day basis, but the ability to understand and be able to apply that broad background is the difference between a $30/hr technician and a $150/hr professional. Now, if you plan on managing people or money, your skill set will need to be entirely different, but that 99% rule will still apply.
Is it just my observation, or are there way too many stupid people in the world?
No, I highly doubt you won't use it much in your daily programming life. That being said...
1. Some of the benefits of these courses is not in the content itself, but in the mental exercises in logic and reasoning.
2. Unless you plan to work for yourself, a degree is usually a good choice. It is VERY likely that any CS degree you seek will contain un-escapable upper level math requirements.
In support of a degree.. A degree can show potential employers that you can stick with something, that you can jump through hoops that are outside your area of interest, and that you have made it through one of the most commonly used hiring filters in the industry.
This is mostly anecdotal from my own experience in college but...
I noticed a stark difference when a math course is being taught by someone who's primarily in the math department vs. someone who's in the engineering department (I guess we had a shortage of profs to meet the demand for the higher level courses we were required to take).
Math profs in my experience seemed more interested in just treating the course like an SAT prep class, where they just teach you to a test they're going to give out, while the engineering profs who taught math were more interested in driving home why the concepts they were teaching were important.
So the result was the math profs style lead to a feeling of boredom and pointlessness, whereas I felt engaged the engineering profs classes, and my grades reflected that.
Yes, you need a strong grounding in Math to ensure you understand all of the underlying concepts, even if you don't need to implement them yourself. Like learning the CLI before falling back to the user-friendly GUI. Eventually you want to do something the GUI can't, and you're back at the command line.
Besides, most programmers son't spend their whole life as professional programmers. In fact, some who start out in that direction end up elsewhere. Why limit your choices later in life by short-cutting now? If nothing else, the rigor provided by math will suit you well whereever you go. And while you're at it, please take a statistics class. About 85% of americans couldn't tell you what 85% actually means.
This may be true, but the reason that I think we should still insist on math being a part of a comp. sci. curriculum isn't because you will use it in your day to day work but because learning it reorganizes your brain.
Is there any actual evidence for this, or just speculation and tradition? They used to say the same thing about Greek and Latin, but those were dropped years ago with no perceptible adverse effect.
I build mapping software that is used to perform complex geospatial analysis, predictive models, etc. I use math all the time. "Math" is pretty damn broad though. Usually the business logic catches you way before the math ever does. In general, if you want to be a real badass programmer, you need to make sure your Discrete Math is top notch more so than Trig or Calc.
The only subjects you are guaranteed to use directly, that you learned in school, are the three Rs, reading, ritin', and 'rithmetic. Some subjects change your brain. Forced to do the abstract reasoning required to do higher math, your brain will change to accomodate. I made my kids study music for similar reasons. Some subjects are there to try to make a good citizen out of you, hence history, social studies, geography, government. Some subjects are there to enrich your life, and make you think about yourself, the world, and your place in it. To help to make you a moral person, not just an obedient person. If school were simply about preparing you for your future job, we should all be doing apprenticeships, instead of going to school. However miserably it might fail at that goal, school is supposed to foster thoughtful adults who are able to enjoy more than sex and professional wresting, who are good citizens, and moral people.
If you cannot understand linear algebra, there is no way you can claim to understand things like Big O or algorithmic complexity in general. Any coder who does not grok those types of things will be more trouble than they are worth.
I use math every day.
Frankly, why is math the one thing that gets asked this question so much? You do, of course, realize that math is one of the courses most disciplines require their students to take, yes?
PS: I don't reply to ACs.
Not everybody needs to use a nondeterministic finite state machine every day, and not everybody needs to calculate the transitive closure of a sparse connectivity matrix every day, but these are (simple) examples of reasonably commonplace algorithms that you can't really understand without being able to do the maths.
As an even simpler example, you can't really use SQL effectively without understanding the maths behind a relational database. I know this for sure, because I keep coming across SQL applications that were clearly written by people with no understanding of the maths, and I get paid lots of money to fix them up properly.
I am actually the only programmer where I work who does not have a Phd in Mathematics. Definitely depends on the field, but in my industry, it is essential.
Q1: "Will I actually use calculus and above?" Who knows? Maybe you'll find that it's an enjoyable endeavour in its own right - it may not be a practically useful skill but it will enlarge and enrich your understanding of concepts that you'll not find otherwise.
Q2: " is it just a popular idea that you need to be a mathematician in order to program?" Is it a popular idea? I've certainly never encountered it. A mathematician is not someone who knows a little calculus. Modern mathematics (which, presumably, is studied by a current mathematician) is a wide-ranging and diverse field of which numerical calculus (I propose) is a rather tired and scantly addressed matter. Let's face it, most calculus that you'll probably ever meet would have been cutting-edge say, ooh, 150 years ago (Gauss' theorem of integrating over a surface... to pick an example from the top of my head)
Q3: "What are your experiences?" Programming since age 9, introduced to discrete calculus in programming in second year of Physics BSc (all in FORTRAN), 4 years writing numerical integrator-assisted tools for reusable launch vehicles, Physics MSc (no calculus), Physics PhD (trivial integrators written), postdoc (ditto), self-employed (no calculus).
But hey, why should one study something purely because you hear that it might improve your employment prospects? Do you find it satisfying and interesting? Aren't these reasons enough for studying it or is your schedule really crammed?
Wheather you need continous math such as Calculus depends on if you are programming in a area that uses continous math. Like mathematics, statistics and many others. All programmers use discreate mathemantics, if they know it or not.
I use high level math in graphics. Sometimes to do actual graphics tasks, other times to verify that some piece of code is mathematically correct.
Recently, I had to calculate derivatives recently for splines. I couldn't find a package that did quite what I wanted (with a license that would work for my task) with splines which meant I had to roll my own. Splines are used everywhere in computer graphics and video games, namely for animation. In implementing my own, I found that I had to use a fair amount of calculus and linear algebra to understand a) which spline algorithm met my criteria and b) to understand the math behind the splines well enough to implement them.
If you're interested in game development or computational science, linear algebra is a must. Much of that relies on calculus. I took linear algebra before taking any calculus classes, and the later half of the class was a pain in the ass (so take it in the right order). But all my work has been in benchmark and system software development, and integrals is the only thing I've needed from calculus so far.
For everything else: discrete math, algebra, and statistics.
Really, you can get by programming with just discrete math and algebra, but I've found statistics useful in every day life and in explaining results in simple terms. In any case, put in your time with the higher level math. It's not as scary as it sounds, and you'll be glad you had exposure to it later... even if you rarely use it. And this is coming from a guy who whined "when am I ever going to use this?" during those classes.
If you have an opportunity to learn something, learn it. Everything will be useful at some point in your life, and barring that will still enrich you as a person. More specifically, math-wise, if you're going to college you may as well learn basic calculus, linear algebra, and statistics. How much you will actually use in a CS career is debateable, but that knowledge and especially UNDERSTANDING will help you many times in the long run.
I used to think the same thing when I first came out of college... But actually use math quite a bit in my current job. (Software Architect in a research lab) I use Linear Algebra (which for me, in college comes after Calculus 3), as well as Calculus. You probably will too if you say you want to go into gaming, particularly when you start looking into sensor input. I'm not doing gaming, but I'm looking at sensor input, for things like gesture tracking/recognition, sound analysis, as well as more basic things like looking at accelerometers and magnetometers. I didn't really use Number Theory directly, (graduate course for me, and I flippin' hated that class), but we do have a Math PHd on staff, and I did have to consult with him a number of times.
You CAN program without math. You shouldn't want to. Not understanding higher level math cripples your ability to work on hard / interesting problems, which are the only real problems left. This aludes to a mentality of "what is the least I can do to get by?" which is an immediate turn-off to hiring. Most people can grind out glue code, or marginal UIs [1], but the pool of programers that can is huge. As a competitive advantage, you should always aim to push your skillset out beyond all of your other peers.
For your chosen field, the above course groups are of prime interest. LA is critical for graphical programming, optimization programs (pathfinding for example), or solving large, matrixable datasets (pixelized display fields). Graph Theory also plays heavily in optimization, pathfinding, information flow, decision making, and procedural programming (L-trees, fractal growth, ect..). It also plays heavily with LA. Finally, Calc. is necessary if you ever want to figure out how fast things are happening (trajectories, computational flowfields), for computing numerous types of gradient style lighting effects, or for figuring out how much of something you have (total resource accumulation, ballistics/object movement with time, ect...). In the case of calculus, you may not actually write integrals or differentials, but it is critical that you understand what they're doing, and how they are approximated.
Note [1]: Good UI creation is hard. But that requires almost as much study in human factors and interface design as the math side does
Disclosure: My day job is at NASA, so I'm biased
I've been doing a lot of matrix multiplication and rotates with quaternions lately, for satellite orbit and attitude calculations. Eigen, by the way, is a very nice library to do that stuff with in C++. Prior to this, not so much. Some degree of math aptitude has been helpful to me in many of my programming positions, but very few of them required a lot. My Logic and Analysis classes have come in handy more often, but I took those in high school, too.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
...you're able to think critically, and to discern which evidence is relevant to the case in point. I don't care if you can use the Simplex method to invert a sparse 100x100 matrix in your head, but I DO care, as an employer, that you know what the Simplex method is, when it would be useful to apply, and what class of problems it can be used to solve. So, higher math is just evidence to me, your prospective employer, that you're not prone to take the easy way out, to rely on trusted (but irrelevant) methods, that you can seek out new solutions when they are called for. Without that breadth of background in the "thinking arts," you are doomed to a life of programming what others design. Most of the people who claim certain languages don't support certain advanced math features are just exposing their lack of imagination; they are coders, not programmers.
Your standard business application probably isn't going to use much more than basic algebra
I used more advanced mathematics in graduate level marketing classes than in graduate level computer science classes. I was quite surprised and happy to see that marketing can be based on scientific modeling and not just numbers pulled out of ... uh ... the air.
But it all depends on the needs of the business you are trying to support.
The problem is that when you are in college you do not know the "needs" you will be trying to support in the future. I was once unexpectedly offered the chance to port some of Dow Chemical's polymer analysis software from mainframe to PC. I was working directly with world class chemists. They did not expect me to be a chemist but they did expect me to be scientifically and mathematically literate. Those two quarters of freshman chemistry for general ed and the three years of math for computer science were useful. It opened doors that would otherwise have been closed. That is the point of a university education rather than a trade school education. The trade school can teach a person to be a good programmer, just as good as a university, but the trade school graduate won't have the option to participate in unexpected projects like the one mentioned.
I use a lot of math in my work. From ballparking load estimates using basic math to behavioral analysis using linear algebra to data analysis using calculus, I use it all the time. Set theory, logic, graph theory, statistics, on and on -- it all contributes significantly to getting the job done right the first time. Having a background in a variety of maths also helps to visualize problems and shape solutions. I've added as much to my math skills since becoming a professional programmer as I did in school.
There are fields in software, like interaction design, that don't require a strong higher math education, but if you have a good math background it will give you the freedom to explore more opportunities.
Stop-Prism.org: Opt Out of Surveillance
In the corporate environment, Calculus is very rare. You really only use basic algebra for most programs. Only really specific applications require anything more.
Of course, it is usually suggested to take them (or required in the coursework) because of some idea that it promotes higher level thinking, but I think it really depends on what you need to think properly. For me, I'm terrible at Calculus; but I can still write code without an issue.
You need math to make engines like Unity3D and OGRE, or any programming where someone will pay you more than midway through middle class level. Not that there's anything wrong with middle class pay; it's quite comfortable.
As a software engineer I use math all the time, but maybe not the way we think of traditionally using math academically with chalkboards full of scribbled formulas and equations. Numerical analysis, discrete math, cryptography, linear algebra, statistics are all post-calculus subjects that are fundamental in software engineering. Having a solid education in these subjects will allow you to be a *better* software engineer and problem solver. At the code level it's mostly operator precedence and other trivial math fundamentals, but at the algorithmic analysis level understanding advanced math concepts certainly helps and is even necessary in many circumstances.
Despite my username, I am a mathematician, and I can say doing mathematics definitely affected the way I think. Of course I do math as my job, but I also think of the rest of my life in very mathematical terms.
For instance, to measure my productivity I have created a detailed spreadsheet of my progress and the hours that I work. I view my efforts as a dynamical system, and potentially I can use this to clarify and understand the periodicity in my productivity using differential equations.
I view my purchases at the grocery store as an economic system and I have often come to rational decisions about money management using decision theory.
When I drive I think of minimizing the time of my route using traffic models. I probably haven't gained much on my travel time but looking at everything mathematically has clarified my view of the world.
My point is that every problem I encounter my mind can't help but look at it from a mathematical perspective, and the act of formulating problems in a precise way with all the necessary hypotheses have helped me solve many problems, even those that don't require heavy mathematical machinery. Mathematics isn't just solving specific problems but looking at a question from all perspectives and formulating thoughts in an extremely precise manner. These are things I of course did not do before I started to study mathematics.
The effects on me are pretty apparent because I have been doing mathematics for so long but I believe even a little bit can be very useful.
"What lies behind us, and what lies before us are tiny matters compared to what lies within us." Ralph Waldo Emerson
No, you won't use calculus as a programmer. If you want to more than the most boring and repetative programming jobs, though, you need a sound understanding of discrete math and preferably computational theory. The jobs where these are needed are the fun, fulfilling jobs where you feel like you did more than just rewrite the same form in a slightly different format over and over. If web design is your thing, you won't need as much math as you will need art and HCI skills. But you'll also be doing the same thing in slightly different colors every day for the tenure of your career. It's your call. You can either learn math or trust that the people who did wrote the libraries you are using correctly.
I've gone all the way up to calculus 3 (vectors, multi-dimensional functions, and doing differentials and integrals therein) and I've yet to see calculus applied by any programming. I am curious how one actually implements it though, in what (limited) programming I've done, I haven't seen any clear way to calculate say an integral using something like c++ or c#.
One example. Think back to class and there should have been a discussion on the approximation of integrals. Creating rectangles or trapezoids for subintervals that fit "under" the curve. Using the area of these subintervals to approximate the area under the curve. The more subintervals the more accurate the approximation. Its not hard to match the precision of the floating point hardware in the CPU.
In areas such as Ray Tracing, there is extensive use of Vector Calculus, Probability theory, and Linear Algebra. Where (having learned under Henrick Wann Jensen) the current state of the art techniques are based on random distributions of "photons" being stored in a "Photon Map". The math here can get advanced, from Markov chains to arbitrary Brownian motions started at vector position x (in R^3). So.... Yes, it's there. You just don't see any of it because you're not handling the hard stuff... you're handling API calls. What do you think happens under the hood?
Eat sleep die
"An anonymous reader writes with a question that makes a good follow-on to the claim that mathematics requirements in U.S. schools unnecessarily limit students' educational choices"
That is a bit of a miss-representation of the previous discussion. The question before was about Algebra. Specifically many non-technical people rarely or never use Algebra in the real world. Forcing them to learn multiple years of Algebra is a waste for them.
A simple intro would be enough and then those who are interested and going into fields where it is needed, such as programming, engineering, biology, chemistry, statistics, etc, can then go deeper into the math.
However, there is a lot of math below Algebra. For my wife Algebra was a waste. But she uses addition, subtraction, division, multiplication and percentages on a daily basis. Basic math is key for almost everyone. Algebra for a much more limited group. Calculus for us very few who need or enjoy it.
Learn what you enjoy. Enjoy what you learn. Pick a field of endeavor you'll enjoy. It all flows together and that makes life more pleasant. Don't be a Dilbert.
Any idiot can use a syringe and a scalpel, but if you were in charge of hiring doctors you'd probably prefer the candidates who have their medical skills in order.
Time flies when you don't know what you're doing
From an objective standpoint these are among the worst programming jobs in existence
Yes and no. It depends entirely on the company you work for.
the kids won't actually get to design the games – that's done by completely different teams of people. They're just coding to spec
No. There is a lot of feedback and interaction between designers and developers. At the good companies the "design" comes from individuals of varying backgrounds and roles, including programmers, including QA. Things depend far more on the quality of your suggestions than your job description.
(6 x 7)
US: Math
UK: Mauthe
In undergrad (CS) I did more math than was required, and honours math at that. When I started grad school I was introduced to a transform we were using to analyze medical images. There's an article somewhere where I'm quoted as saying that some smart grad student is going to come along some day and improve the algorithm for calculating that transform so that it's actually practical. It turns out the smart grad student didn't come along, so I had to do it. That involved a lot of calculus, both continuous and discrete. Now I mostly develop new medical image processing techniques and analyze data, which involves fairly high level statistics. Statistics is all calculus and, when you get further on, calculus and linear algebra.
You say you want to be a game programmer? Here are some of the papers from SIGGRAPH this year. Take a read through some of them. This one might be a good place to start... most of the authors are from Pixar. How much math do you see? How much math do you understand? These are the algorithms you'll be working with by the time you graduate. Note that there isn't a lot of continuous calculus in these (but a lot of discrete!). Somebody has already done much of the hard work of discretizing it for you. That's not always the case.
You can probably get away with not learning any math and being a run of the mill code monkey. If you want to be good at what you do though, learn the math.
Daily to the point where I don't even understand how much I use and I'd probably have problems going back to basic Calc 1 and Calc 2 problems.
Top level: I design controllers in Simulink to ... control stuff.
Right off PID controllers. First one is algebra. Second two are calculus. Integrals and Derivatives.
Since these are all driven my microcontrollers everything is in discrete time, so Z-transforms. Which are based on S-transforms. That was Differential Equations 2 I believe, built on DiffEq 1. Built on Calc 3/2/1. And then there are Bode diagrams, system identification.
I've been in computer science for around 30 years. My experience, in order of decreasing importance:
As you suspect, calculus does not come up unless you are doing something very domain specific. Differential equations are bloody useless, even as a math course, at least they way I was taught: trust the cookbook, don't ask questions about why they work. Again, maybe useful in a specific domain.
That said, I found calculus to be useful as a gateway to fun courses in relativity and quantum mechanics, and it can be a useful way to think about some problems (continuous instead of discrete).
Enjoy life! This is not a dress rehearsal.
You can't understand it without Calc 2, therefore you need Calc 2. And if you don't understand Big O notation your not a real software engineer. Hence, you need calc 2 (QED).
No, the point of a challenging degree program is to maintain academic standards. To be awarded a degree you need to have achieved a certain standard. If the sole aim was to limit the number of graduates in a program you would simply limit the enrolment. When we have been hiring IT staff one of the things we have looked for is a degree because this shows that they have some depth of knowledge beyond the basics. Sometimes the confidence that this brings can be very important for adapting to new situations.
I just helped a friend out with a ton of javascript animation for his webcomic (blatant plug: http://www.prequeladventure.com/ ), creating a 3d, semi-interactive environment, all in JS/CSS, and I ended up using a ton of math for it. Simple offset calculations, trig, parabolic arcs, exponential decay, and so on. Ended up giving up some things that would have required finding cubic roots of bezier curves because my math wasn't good enough.
But apart from that, I haven't used any serious math in a long time.
So, it depends... I think the more you rely on interacting or emulating "the real world", the more important math is.
Learning math is like adding an extra tool to your toolbox.
You may never need to use it, but one day, you may come across a problem which you cannot solve or understand, unless you have that tool in your toolbox. You may need to dust off the tool a little, but it is still there, and you can use it.
Personally, I ran into a few instances in business where I had to answer some seemingly basic questions. And without a background in Calculus, I would have never been able to understand it, or to see a more elegant solution.
For example, a coworker shared a problem with me once. If a customer adopts our software product across their enterprise, how long will it take for the customer to get their return on investment (ROI)? This is useful as a sales tool to help convince customers to invest in our product to help make their business more efficient.
This was a problem that I solved using Excel. But I had to use brute-force to solve it, and I created over 1000 lines of formulas to find my answer. Not very elegant, but it worked.
However, I noticed a pattern in the Excel formulas. And the only reason, was because it seemed similar to a math problem I studied in Calculus II, about Series and Sequences.
I found my old Calculus book from college, dusted it off, and re-studied Series and Sequences. Then, I was able to create a solution to my problem using a simplified math formula. Success!!
Next, I plugged in my new math formula into Excel. Now, I was able to solve my problem and model it across different variables. I could modify each variable independently to identify when the customer would achieve their ROI, based on different circumstances.
So, you may not always use Calculus everyday, but one day, it will be a life-saver. And you get to be the hero for your team.
The point of high-level math and physics classes is not because you "need" them in your job as a programmer. It's a way to limit how many CSE degrees are granted. I was told this straight-up by my college advisor ...
Then like some advisors he is a dumb-a**. I've been offered some pretty crappy advice and insight from advisors, don't take what they say too seriously.
You are basically getting into the trade school vs university argument. A trade school can produce as good a programmer as a university. The point of the university is to provide a more well rounded education so that a person has more options.
I too had some chemistry, physics and years of math that appeared to serve no purpose other than to "weed out" people from the program. However to my surprise I once had the opportunity to participate in a project that would port some chemistry software from mainframes to PCs. I would be interacting with world class polymer chemists. They did not expect me to be a chemist but they did expect me to be scientifically and mathematically literate. The general ed chemistry and physics and the years of math for computer science actually turned out to be useful.
It's important to use calculus at every opportunity. It differentiates one from the integral lump that is hoi polloi.
You could probably perform most of the work that would be required of a mid level programmer, possibly even a computer engineer, with the math you already know. But you'll never be very good without advanced topics like calculus, linear algebra, and diff-eq. If you're seriously considering a technical career, I can't recommend strongly enough that you take these courses and put in the effort to really truly learn the material: not just enough to pass the courses, but for the long term. I've been an engineer for about 6 years and I'm constantly finding myself wishing I knew more math, even after having taken all the required engineering math classes and a few additional math classes in both undergrad and grad school.
The various fields of mathematics are like tools to hang on your belt: right now you probably have something along the lines of a hammer, a screwdriver, and a hacksaw. Yes, you can do most of what will be required of you with those, but it's not going to be easy. Why limit yourself? Take the advanced courses and you'll start acquiring skills more analogous to power tools. Honestly, you really can't imagine the kinds of problems you'll actually be faced with in a technical profession until you're actually in one, so it's not surprising if it seems right now like you don't need any more math. For instance, if you're thinking about game design, do you know how ray tracing works? Do you know what quaternions are? Can you do matrix operations for 3-D movement? No, you may not use those things everyday as a game designer, but you'll be at the bottom of your field if you can't at least understand them.
Besides, never mind the actual merit of these topics: you'll never land a half-way decent tech job if you go into an interview and let it slip that you don't know math beyond first year calculus, let alone high school. Unless of course you're planning to go into IT. If that's the case then never mind all of this.
Career aside, there will be a lot of topics that you'll likely find interesting later in your life---when your brain isn't so squishy---that will be out of reach without the additional mathematical background that you're currently lacking.
Slashdot is not a game, Slashdot is not a game. Crap, I just lost points.
Namely vector, matrix and quaternion maths mixed with a healthy dose of trigonometry. Most scene graphs and engines will help you out, but then one day you need more than what your engine provides and then you may have to delve even deeper into the world of maths.
Custom lighting? Need to find the centre of mass of your custom procedural object?
Doing a local to world transform? World to local? Then you even have calculation of matrix inverses. While your library will do it for you, at least have the knowledge to know why it may fail.
If you want to do 3d graphics, know your maths, it will save you grief and get you further, quicker.
If you examine modern papers on realistic graphics you'll see there are simple integrals that need to be solved, eg:
http://hal.archives-ouvertes.fr/inria-00288758
Bruneton, E, Neyret, F (2008), Precomputed Atmospheric Scattering, Computer Graphics -New York- Association for Computing Machinery- Forum 27, 4 (2008) 1079-1086
By understanding more advanced mathematics you will have more advanced options for solving problems, eg. vector cross product for finding an axis to rotate about, or quaternions for a less intuitive way of doing the same, or differential equations for understanding the mechanics or aerodyamics of your game/ragdolls, statistics for understanding why the investment portfolio you are looking at is cleverly masking the reality of the situation. Or Linear Algebra for solving spatial and AI problems iteratively (the way a scientist would optimize, rather than the discrete way a computer scientist would first approach it). The more advanced mathematics you have the more tools you have at your disposal for solving any problem. Just because most people in today's society have a very tenuous grasp on how nature and artificial systems work dosn't mean that you ought to join them - (applied) mathematics is the tool that you use to gain understanding and solve real problems.
I tend to use math most days. Estimation, ballpark figures, cost per ounce etc and I no longer work in the computer industry. Now that being said, is there justification for higher level mathematics in computer programming.
Well, yes and no. The typical programmer isn't working on anything complex, just providing a bunch of criteria for a switch statement or copying information from one location to another, not a big deal, but when you start working with algorithms, not to be confused with (Al Gore)ithms an understanding of upper level mathematics can certainly help. Discrete mathematics is a no brainer since it focuses on logic and proofs which can help a programmer find edge cases and cut down on errors via the processes you learn in discrete mathematics.
Calculus and other higher math is generally useful in making algorithms run more efficiently. Brute force searching algorithms take a lot of time, binary is significantly faster, but using calculus can even improve on the binary search methods in the right circumstances. The thing is, if you don't have the knowledge about high level techniques you cannot use them. For instance, if you don't know sorting routines a bubble sort seems incredibly fast in comparison to sequel sorting however without the knowledge of sorting algorithms you wouldn't realize how ineffective bubble sort is in comparison to say merge sort.
Most programming isn't focused on efficiency and most things can be brute forced within a reasonable timeframe with modern computer systems, however, knowledge of calculus and other higher level mathematics can help quite a bit as techniques can be transferred into computer programs that need them.
I guess you could make the same comparison to electronics, does a programmer really need to know electronics, diodes, resistors, refresh rates and protocols to make a computer do something useful? Probably not, but if you do know those things it can make you far more efficient and effective than the person who does not know them depending on what type of programming you are doing. Whereas most systems are built requiring basic skills or specific study of one area, higher level mathematics provide tools that can be used in a wide range of applications and tend not to be limited to specific cases. With the knowledge of upper level mathematics, when you do run into situations where it can be used, you can pull out a book or do a search to find an efficient algorithm whereas when you don't have the knowledge you'll end up spending a lot of time re-inventing the wheel.
/* TODO: Spawn child process, interest child in technology, have child write a new sig */
-- Yes, improper accounting of the classes I had taken led to a high-school counselor telling me I needed nearly remedial math when I was a freshman in high school (note that it wasn't grades, it was simply a counselor looking at checkmarks, seeing one not checked and ending her assessment of my needs right then and there). So yes, I believe that counselors do retarded things with math requirements and matching students to them.
-- As a result of this stupid counselor (they're all stupid), I didn't even start trigonometry/calculus until college.
-- It turns out I really liked calculus and did extremely well once in those classes.
-- I ended up majoring in and completing 2 degrees in Physics.
-- I still don't use much complex math on a day-to-day basis. HOWEVER, it does save my bacon from time to time, and I enjoy being able to setup solutions for problems.
I swear they give me mod points to shut me up.
I think what a lot of kids miss these days in school is the fact that K-12 isn't preparing you for one particular career. The idea is to give you a rounded education that you can use to pursue any career in college. So many people are still in first or second year of college before they decide on a major, and I know dozens of people working in fields now that have nothing to do with their college degree. My advice would be to learn all you can, you never know when it will come in handy later in life.
As a new product developer, I use math regularly. Most commonly I have used discrete, set, and stochastic maths. I am glad for the intellectual investments I've made in learning math.
Advice: if nothing else, you should ensure you are able to review and understand the academic presentations of solutions and methods or else you will have excellent solutions that you will not be able to take advantage of. Mathematical theories often describe the "shape" of problems and the factors involved with them as well as the challenges and limits you'll encounter. Without mathematics, you will reduce the top-end of what you can do and reduce your productivity at work. Few can identify it but you will cost massive amounts more for the businesses that hire you. On top of your greater cost, you will have to deal with more of the distracting and non-essential coding that composes the (in my opinion) more boring aspects of the field. Meanwhile, you will move more slowly than the rest of the market and loose any advantage you may have over time.
More personally, studying mathematics you will open up types of thinking and give yourself perspectives you might not otherwise have available. Even if your day to day doesn't require mathematics, you will be better positioned in life if you expend the effort to at least get a cursory understanding.
Hi there!
In my case, I continued to use lots of fun math every 12-18 months or so throughout my career. I started doing embedded systems, then moved over to compilers for a couple of years, then back to embedded, system management, scalable systems/networks, and such. Lots of great opportunities for fun math beyond simple arithmetic. In my current project we're working with the scientists at SRI on some cool predictive model stuff that requires understanding math for sample analysis and prediction. Them guys are better at science and math than me and my team, we're better at programming (Java, Scala, Python)... we both grow intellectually and professionally. Last year around this time I was working on neural networks and epidemiology models for analyzing social patterns data. Fun times.
If you go into areas like Big Data analysis, especially if you go toward large social network/epidemic spread analysis, or high frequency trading, or other forms of trend analysis, you'll get plenty of chances to exercise your math muscles with things that you'll learn in calculus, analytic geometry, statistics and probability, and/or differential equations. These gigs (whether as an employee or as a consultant) are also very well paid because you won't be just "coding" and calling APIs blindly. For example, fraud detection is a huge area for people processing lots of credit card transactions -- whether they are the creditor bank or the bank's client. Lots of fun theorems apply (e.g. for something simple to grasp but with profound implications take a look at Benford's Law).
Games... from what I know about the industry, lots of vector calculus, fractals... fun times.
Spend some time learning R programming (it's fun, frustrating, and very, very useful). R gives you a rich tool set for math and graphics that will blow your colleagues or client's mind away if you know how to apply it combined with good, solid math knowledge. Think of it as awk for math instead of text. With a couple of lines of code typed in 30-60 seconds you can analyze a table with tens of columns and thousands of rows, and generate fantastic plots/charts; such thing would blow an Excel expert's mind because the same work would take at least 30 minutes and it'll look like pure magic to him.
Think about it like this: the more you know, the more areas where you'll be able to apply your knowledge. All the guys I know who learned the math and who can apply it are always in demand (recession proof!).
Disclaimer: computer engineer here, not a math major or actuary (nor was I interested ever in being one). As an engineer, I know how to *apply* the math, don't care much about theorems and proofs. When I'm not architecting systems/working on interesting aspects of some project, I'm doing boring stuff like business development and managing development teams. That's pretty boring, though -- having tech + math knowledge helps me move on to interesting stuff quickly when needed.
Good luck in your quest, and I hope that you get a chance to learn and apply math that you find interesting and fun!
E
http://eugeneciurana.com | http://ciurana.eu
I agree with what everyone has said here. You don't need to know advanced math, but it may help you write more efficient programs.
I make business web applications. The bulk of the work is shuffling data in and out of the database and displaying it. Calculations are mainly string comparisons, sorting, and filtering. When math does come into play, it's usually addition ($i++), subtraction ($i--), or multiplication ($interval = 365 * 24 * 60 * 60). And as you can see, you're hardly even doing math. I don't actually do the multiplication, I just need to be able to type it out.
The most advanced math I've done is the use of the modulo operator. I didn't even learn that in school, but it pops up in programming.
Coincidentally, today I used math to figure out just how big the namespace is. If you restricted yourself to just lower-case letters, and 25 characters or less, that's 6 undecillion possible names (26^25). Granted, most of them are of limited use, like xkkxxkl, but it sure makes me worry a little less about name collisions.
Even so, all this talk about math makes me hungry to learn it. I really can't remember anything from my calculus class in college, and this discussion makes me want to pick up a book on the subject. I'm sure it would make me a better programmer just by stretching my mind a little.
*cough*
That's the title they put on the business cards they insisted I have in the US, not even legal in Canada to say that without an actual engineering degree. I was in the faculty of Mathematics at Waterloo, because that's where the computer science department was and I wanted to be where the watfor/watfiv/apl people were, they'd bussed us from high school a few times to play with that stuff for a day there, much better than the ibm 1130 we had.
I'd say you need up to and including a year or two of calculus. And probably some physics. 80% of programming won't require this, but cubic splines, integrals, differentials, trig, queuing theory pops up in places if you're doing systems, embedded, graphics, robotics anything fun will need some math.
Having said that, as a programmer you translate somebody else needs into code and it doesn't matter if it's a uart chip or a complex mathematical formula or model, they'll explain it to you so you can implement it, really you're just translating those steps into cpu steps and at least with math there's a nice flow there, it's a joy to implement.
So, it's nice to have but as long as you can think it's not an absolute requirement. And other than this and very simple Bezier splines that's about all the math I've ever run into and I've pretty much done everything.
Need Mercedes parts ?
And you'll need to understand calculus.
One of the fields where mathematics have definitely intersected with all types of serious programming is runtime analysis of algorithms and programs.
I know that computers today are magnitudes faster than the early days and that most western households have more computing power in their house than was available in the whole world some fifty years ago, but the problems we try to solve have grown even further and yet we expect the response times to be reasonable for everything we want to do.
One problem that just came to mind is navigation: That little box on the windscreen is actually searching through millions of roads to find the optimum route between two points and still we expect it to take less than a minute.
I'm mostly responding to this comment because it has one of my main points.
Computer Science uses several types of math. Logic and discrete math are the fundamental concepts at the core of CS. They are the reason CS is so often found as a degree offered by collegiate Mathematics departments.
Computer science also heavily depends on linear algebra and (mathematical) statistics, the latter of which depends on calculus. Big data is one of the big up-and-coming fields within CS. To understand it, you'll need to understand statistics as well as various machine learning concepts. This involves information retrieval, probability theory, and a number of other advanced mathematical subjects.
The problem is that universities consider calculus to be the end of the math requirements. My CS major required Discrete Math, Symbolic Logic (an attempt at logic and set theory), Calculus 2, Physics 2, EE 1, Probability, and Linear Algebra. It should have introduced new advanced courses and required them, e.g. Discrete Logic 3 (Discrete Math + Symbolic Logic), Calc 1, Probability, Statistics 1, Linear Algebra 1, plus any two electives that require one of those (e.g. Stats 2, Machine Learning, Calc 2, Linear Algebra 2).
Because so many programmers suck at math, many employers will take an applicant with a Math degree (ideally dual-major CS/Math) over a slightly more qualified general programmer with just a CS degree. This is because the CS major is less likely to be able to grasp at advanced mathematical concepts inherent in advanced algorithms, optimizations, etc. It also follows the stereotype of math being "harder."
When I interview candidates on technical prowess, the code portion is just having them tell me what something does. I then give them math problems. When I started doing this, I was surprised at how much the applicants struggled; my current questions start far simpler before winning the harder question (which is about Bayes theory, taken from An Intuitive Explanation of Bayes' Theorem).
(Full disclosure: I do not have a math degree. This is in part because I was not at all interested in taking any more calculus.)
Use my userscript to add story images to Slashdot. There's no going back.
I've found that each higher level of maths I studied made me much better at the previous level.
So algebra made me better at arithmetic. I now saw numbers as systems and modules, and I could pull them apart and put them back together, all in my head. Likewise, high-school calculus, stats, trig made me better at algebra. But because I didn't follow maths after high-school, I'm much less comfortable with the highest maths I studied. But I'm sure, had I gone on to more advanced calculus, etc, then I'd be using basic calculus much more often, to quickly solve problems I now have to grind through (and still aren't sure I didn't screw up.)
I assume the same is true in other areas. Learning basic coding probably taught me more about everyday computing than it taught me about coding.
Science is all about firing a drunk pig out of a cannon just to see what happens.
Some of the coolest apps/jobs are in the gaps between fields. Think aerospace, robotics, advanced sensors, etc. If physics or engineering interest you get comfortable with calculus in at least 4 dimensions, upside down and under stress.
I've been told by teachers and parents that math classes are a must for any technology related career.
You already got your answer. What makes you doubt them?
Some math you'll never need again, some you'll wish you learnt more about. Trouble is that you don't know beforehand which. But you will need math in any tech career.
Assorted stuff I do sometimes: Lemuria.org
But you need the basics.
In my entire career, I think I've only used math once that I hadn't learned in high school (differential equations for a fluid flow simulator).
I've used algebra, matrices, geometry, and trigonometry on a pretty regular basis for the bulk of my career. A lot of that career included computer graphics, which uses matrices and trigonometry heavily.
Example one:
Your backup library has a certain number of drives of a certain maximum throughput. Your backup software divides up the data set into a number of jobs equal to the number of drives, and assigns each job to a drive. But the software can only start one job at a time, so on a graph of collective throughput per unit time, you see the total throughput ramp up to maximum drives, then ramp back down as each individual job finishes. The graph represents collective throughput at a particular time. (Say, in Mbytes/second.) The steepness of the curve represents how fast drives can get online, increasing the collective throughput (Mbytes/second/second) (You can observe empirically that the curve falls off with the same slope as individual jobs complete, which makes sense if the jobs are roughly the same size.) The area under the curve represents the amount of data in the data set. (Mbytes.) Thus function, derivative of function, and integral of function.
Immediately, you can see that the area under the curve for a particular data set size will remain constant, as the size of the data set is fixed. You can change the shape of the curve, which also changes the end time, by improving the rate at which drives can come online. You can also postulate that given a certain rate at which drives come online, and a given drive throughput, there is a maximum number of drives that are practical for a given data set.
The purpose of this analysis (math left as an exercise to the student) was to convince engineers that the best tactic to solving slow performance was in improving the task management part of the backup software, and that given the current conditions, more hardware wouldn't help.
Example two:
A very large, very complex installation is significantly less reliable than than it should be.
The vendor says, each component has an MTBF of thousands of hours, therefore we shouldn't see the failure rate we've been seeing. (Which was in tens of hours.) But assuming every component has to be online to complete the job, and that a failure of any component causes the job to fail, the MTBF of the system is considerably less than the MTBF of a given individual component. Given the monstrous length of the jobs and tremendous number of components, it could be demonstrated mathematically that on average, one job in three would fail. The solution was to redesign the system with "hot spare" components and changes to software to take advantage of them, so that it would take several component failures to cause a job failure. The reason this had not been done previously was the perception that a component MTBF in thousands of hours made the issue of component failure unimportant. (They were also wildly optimistic on component duty cycle, but that's another story.)
The difference between knowing math and not knowing math is (in my opinion) the difference between being an engineer, able to solve problems, take measurements, understand what one is seeing, and draw conclusions, and being a technician, doing basic triage and following rote procedures written by someone else (probably an engineer). If you have engineering aptitude, you may be able to get by without math the same way a carpenter can build a house without knowing how to use a hammer. Mostly, he gets someone else to do the hammering for him.
Oliver's law of assumed responsibility: If you're seen fixing it, you will be blamed for breaking it.
Day to day use of higher-level math? Not really. But the course work challenged me, taught me to think, prioritize and problem solve. The same can be said about a lot of my college course work at GA Tech.
Find a mathematician to do the dirty job (writing the required algorithm), have him/her explain it to you and claim you did it by yourself searching on Google. So you will get "both the money AND the yayo" and you will see the angered faces of engineers whit tons of qualifications but not a clue about how you managed to do it so quickly
if free market is supposed to be able to solve every problem, why do i still need to scratch my balls?
To program like a Jedi, one must be able to think logically like the way you drink water. Thats really what all that math enforces.
tonyaldo.com
A friend of mine came to me with a problem. His grandparents' TV just went out, and they need to buy a new one for their enclosed media center. It was an old non-widescreen TV, and pretty much anything you can buy now is widescreen. Given that the old TV was 20 inches, what size TV do they order that will fit in the cabinet? I'll even give you, the ratio of width to height for old TVs was 4:3, and the ratio of width to height of widescreen TVs is 16:9. (Some allowance has to be made for the bezel as well.) TV size is measured diagonally.
I solved it for him (elementary trigonometry) but I think his grandparents ended up going to the store with a tape measure. That works too, I guess.
Oliver's law of assumed responsibility: If you're seen fixing it, you will be blamed for breaking it.
Learning math teaches you to think. It is very worthwhile.
Facts take all of the premium out of arm waving - T. Reynolds
Maybe if you're a game programmer or working for DARPA, you might need somthing other than the basic stuff taught in 1950's high school, but I worked in the computer industry for many years and really don't remember needing other than very ordinary arithmetic.
I killed da wabbit -Elmer Fudd
I believe that every program that crashes was made by someone who said "I want to stop learning." If you can't handle logical classes like math, Computer Science may not be the correct path for you. So, consider switching to some other field. Perhaps 3D modeling, if you still want to work on games. The world has enough shitty programmers.
Comment removed based on user account deletion
As I said earlier, Dr. Hacker is a fraud. If you want to understand his real motives, listen to the audio interview with him.
He has an agenda, and this agenda is about increasing the number of people studying his subject in college settings and to do this he wants more people to stop studying algebra and other math and sciences.
He is interested in arguing in class for Obamacare and he wants to use statistics and no other math, and he wants this to be the environment for the young kids to learn in.
He is talking about indoctrination and dumbing down and at the end it's about money and power.
As a side note, the guy says that statistics should be taught to look at politician's claims (at school, to indoctrinate the kids) but statistics require algebra.
You can't handle the truth.
I've done 2nd-year uni maths (multivariate and vector calculus), not that I remember any of it anymore ... In my 15 years as a software developer I've rarely needed any higher-level maths. What I have found is that my one first-year uni statistics course (which I paid very little attention to) has helped enormously.
Programmers often have large data sets they need to analyse and need to be able to understand trends, how to spot outliers, etc. If you're profiling or optimising, you need to understand the important of statistical sampling and error ranges.
Statistics is unbelievably boring as a subject. But it's actually useful and interesting when applied to real work.
The bulk of programming jobs have nothing at all to do with math beyond the high school level. Its mostly counting beans and keeping records.
There is the activity of programming or coding, and the activity of software design. Coding by itself requires little behind HS math. Development/engineering, on the other hand, requires the person to have good analytic skills. From choosing the right algorithm or data structure to composing good architectures, they all boil down to understanding convergent and divergent series, discrete mathematics and combinatorics. To get to those fields one needs to have a good grasps of limits (ergo, Calc I). Similarly, every once in a while one has to make some form of probabilistic analysis at some point or another (ergo stats and Calc II).
Knowing mathematics at the calculus level or above does not guarantee a person to be a good software developer. But not having good analytical skills almost guarantee the person will end up writing flat class hierarchies, architectures without layering, writing n-cartesian SQL queries, and loops that execute very expensive invariants.
The error I've seen the most with developers with poor analytic skills is an inability to infer behavior from looking at code. That is, they are completely incapable of doing P->Q inferences. Worse still, they seem to have problems doing divide-and-conquer approaches. They cannot look at one piece of code, they have to look at the whole thing. When testing, they test the whole system in one single shot as opposed to testing and observing behavior of smaller pieces. In other words, they cannot handle complexity. They simply bang it - code it, compile it, run it, don't like the output, change it again, on and on until it prints the "right" thing (or things get hidden under the carpet.)
YMMV, but that has been what I've seen since I started my career in software.
It depends on what type of computer programming you do. I'm retired now, but most of the programs I wrote didn't require the use of much math; however, one application required integral calculus to determine the orbital angular position as a function of time for the Cassini spacecraft as it passed over an optical telescope at Table Mountain Observatory in Wrightwood, California on Earth as it did its "slingshot" around Earth in an Earth gravity assist maneuver to gain velocity on its eventual journey to Jupiter.
9/11 Eyewitnesses to Explosive WTC Demolition 1 of 2
Speaking for myself, yes I use calculus. But I lean towards the EE side of computers. For the pure CS side, discrete math is very important. Followed by linear algebra and abstract algebra. Calculus, not so much. For game programming, I would prioritize it linear algebra, then discrete math, then calculus (for understanding game physics), then *maybe* abstract algebra. You may not use the math every day, but on the days when you *do* need it, the insight it gives you and the power of the tools gives you the "passing power" to solve in short order the kinds of problems that your colleagues will struggle with for weeks. It really depends on how you want to spend your life -- implementing other peoples' ideas, or deploying people to implement your ideas. If you desire the latter, get the toolbox inside your brain well-stocked.
Image Processing - my primary job function - relies on calculus, statistics, algebra, trig, geometry, matrix math, domain transforms, you name it. Look at any image processing function library and you will see functions heavy in math. We need developers with image processing experience and a strong math background is a requirement. This is the stuff that separates the men from the boys.
My job title is Measurements Engineer and you better believe that advanced math is a regular tool. Our company has the largest staff of PhDs, MSxx, and other degreed personnel in the country and math is the tool for solving problems.
Anybody who has ever developed a control system for large industrial format actuators has used an advanced math tool involving calculus. It's called PID - Proportional Integral Derivative - which is an essential tool to optimize latency between command and response and prevent destructive overshoots and oscillations.
Programming isn't all games and accounting.
Eternity: will that be smoking, or non-smoking? I Corinthians 6:9-10
If you don't already know it, you don't realize someone else does. Most people learn it back in school then promptly forget it. You can't measure how much people use things - those that remember it/learned it, will use it. Those that don't remember it will take twenty times as long (or their software will take twenty times as long) to do the same thing, and think "I don't need math."
excitingthingstodo.blogspot.com
For instance, most file formats for storing digital photographs, sound recordings and video clips are based on either the DCT or the DWT. Both these algorithms originate in Functional Analysis, a branch of mathematics that builds on the methods of Calculus.
Most users rely on existing libraries to parse and load multimedia files. However, someone wrote those libraries for you. And I'm quite sure those people knew a lot of math.
There are few things in CS that are new these days, definitively very few since the 80's. Pretty much all we tend to do is rehash the old stuff in a new package. I personally find that pretty boring. One of the questions that I asked myself when I was younger was: how can I be creative? For some reason that it was, and it still is, a very important question to me.
In a field where rehashing is the norm, how do you keep being creative?
You need to challenge all that is given, ask yourself: why do we do things like that? Who decided? When? Does it still hold true today? Can I do it differently? Would it be worth it? Many times we do what we do just because we have always been doing like that. Pure habit and resistance to think out of the box.
What do we need to think out of the box in a world of numbers? Math.
Without a deep understanding of the mathematical foundation of the methods and algorithms we use, there is no way of ever do anything creative in this field.
So, it is up to you: What kind of programmer you want to be?
When you design database schema, you need set theory, relations, cross product, etc. When you model and meta-model you need relations, sets, classes, rings and a lot of other math stuff you probably never had in a US high school. If you work on monitoring systems for performance or other properties, you need statistics, algebra, Markov chains, and more in that direction. You definitely need graph theory (to some degree). And for the software of the near future graph theory will become more important. When you analyse social networks, you need graph theory, set theory, and a lot to understand different types of filters. If you use logic, set theory is a logical choice. Also other concepts are required such as proof by induction and deduction.
You could say: computer science is a special section of applied mathematics.
If you model simulations, integral and differential equations are useful. When you develop domain-specific or other programming languages, APIs etc. you need formal languages, which require a lot of math as well. And actually when you are programming you use math as well, ypu just don't know it.
I won't go so far as to say that anyone who hasn't done advanced math *can't* be a good programmer, but I will say unequivocally that it's highly unlikely.
But more importantly, being a really good programmer absolutely requires that you be *curious* about algorithms. It's mind-boggling to me that anyone sufficiently curious about algorithms to be a good programmer would even *ask* the question "do I need all this math?". Who cares? Why don't you *want* to learn it?!?!? Hint: "Just for the joy of learning it" is the right answer.
If your content to use 3d packages like Unity, you can probably get by with little more than a strong understanding of matrix and vector math.
If you ever want to implement any of the following more directly, you need significantly more
3d Physics: requires calculus for certain ballistic calculations.
Low level rendering: requires knowing how to interpolate a normal value across mulitple verticies
collision vs true curved surface: if you want to use spline curves to represent geometry, you need to know how to calcuate an exact location on it to determine a collision normal.
Or what happens if you want to use a 3rd level plugin for Unity that only works with Quaternions and all you have are the Vector / matrix based positions?
You cannot always depend on an out of the box solution.
Think of it this way: You do not need to be an architect to build a house. Any idiot can hammer together some walls and a roof. If you want the damn thing to actually look good or do something no one else has done yet, you need more. Any idiot can buy a 'just add water' cake mix and make a chocolate cake. But the guy who can make one from the raw ingredients is probably going to make a much better goddamn cake.
Also, if it comes down to hiring an employee with high school level trig vs a guy with university level calculus, and the job involves working with those concepts even indirectly, than high school guy loses every goddamn time. Even if your not using it directly, your still going to be better off going with the guy who has a deeper understanding of what the hell is going on.
END COMMUNICATION
Yes I have a many points of my life used Calculus and Discrete and Dynamic and other types of math and related theories. Luckly I don't have to crunch the numbers (or show all the steps) like in university as I write programs to do that. I do use math in programming - manually figuring out things on paper and/or in excel and/or other programs. Often thing are complex at first - write a function to work with the problem to derive the answer - then reuse that function or modify it for similar problems. Short answer - you need to KNOW how to do calculus - you may or may not have to actually perform it like you did in highschool/collage/university and may never crunch it like that..... but when given a set of data - you know how to formulate the equation and when given the answer - you should UNDERSTAND if that is correct or out in left field and totally is wrong!
One: if you want to look at what divides high-powered innovation, look no farther than the ability for those who are designing systems to understand high-level mathematics. There are all kinds of solutions out there to be applied in creative ways, but the problem is often in how to even comprehend the information that exists out there (relatively) freely in academic papers and demonstrations. Two: if you wonder what use math is, you probably need more of it. The interesting part of a mathematics education is that it teaches you the respect of its application. I never understood just how important linear algebra is until I had to start playing with it. Now, I realize just how much of the massive data flood we wade through is filtered and explained through such powerful methods. I've got an extensive mathematics education in my engineering degree and I never have had a good reason to regret a minute of it (after the initial gnashing of teeth, of course).
I like losing arguments, it just means that I can take your point and make it my own.
It is probably true that there are many programming jobs where you don't use the kind of advanced math you are talking about. However, there are some that do, and the kicker is those tend to be the most fun ones. Why limit yourself by passing up a chance to not only gain some knowledge that might help your career, but also understand more about the world? It is absolutely true that math is the language of nature. I promise you will never regret taking more math classes, but you sure might regret not taking them.
Machine learning these days is all about multi-variate calculus. Anything statistical is going to require the use of calculus to understand it properly. If you do any engineering other than CS, you'll need calculus. If you happen to go into any application programming domain that needs calculus (see sciences and/or engineering), you'll need calculus. If you do scheduling work, you'll at least need to understand convolution (which requires calculus to understand) to get error bars on estimates of serialized tasks. Christ, are college kids this lazy these days? Now GTF off my lawn.
That is all.
I'm sort of curious about this too (and don't feel like reading through 700+ posts and aggregating the responses).
For myself, 99% of the time its fairly basic math (add, subtract, multiply, divide, etc) but on occasion I have gotten fancy enough to use some trig and statistics. I was pretty happy recently when I came up with a pretty clever trig formula that replaced a large block of code with a single math formula. Never had to use calculus or anything of the sort. I think the theory is that math is logical and therefore gives someone practice as logic and problem solving though I'm not sure I buy it.
Unless your programming is for some very specialized fields it is most likely that the need for very advanced mathematics are few are far enough between, that by the time you need it you will likely need to look it up and refresh your memory anyhow. So long as you are able to learn/re-learn it, you are nearly just as well off learning it as you need it.
(If at first you don't succeed, do it different next time!)
I worked in video games and yes: logic, discrete math, linear algebra are all musts.
More importantly, as a current math teacher it's literally freaked me out in the past few weeks how many former high school classmates have gotten in touch with me and all said something very similar along the lines of, "I really wish I knew more math; it's holding me back at my job that I don't know more; I have to hire people to do this job for me". In the past few weeks, they have been: an Artist, a Photographer, a Business Web Developer, a History teacher, etc.
We know where leadership by an anti-intellectual "strongman" who scapegoats minorities and likes boisterous rallies goes
You almost certainly won't use Calculus.
Even math professionals rarely use it.
You are much more likely to use linear algebra and statistics. Focus on those.
-- Tigger warning: This post may contain tiggers! --
Shader gurus do function calls to do any calculus, so it's pretty much a waste of time after say Calculus I.
Heck, almost anyone coding is mostly just calling something somebody else wrote. Reinventing the wheel (e.g. a new calculus function) is almost always a massive waste of time, when most of your cycles are spent on other things that are far more important.
-- Tigger warning: This post may contain tiggers! --
Don't wanna do the math? The art department is over there, I won't miss you.
If your the type of person who hates math then your not going to be very happy programming. Solving equations and programming are very similar mental processes. The fact that you want to avoid advanced math is red flag that programming might not be a good fit. Of course I could be talking out of my ass. Does anyone know of someone who hates math and is happy as a programmer?
This whole thread reads like this bash.org quote :
----------------- :') so true..
#152037 +(3230)- [X]
dm> I discovered that you'd never get an answer to a problem from Linux Gurus by asking. You have to troll in order for someone to help you with a Linux problem.
dm> For example, I didn't know how to find files by contents and the man pages were way too confusing. What did I do? I knew from experience that if I just asked, I'd be told to read the man pages even though it was too hard for me.
dm> Instead, I did what works. Trolling. By stating that Linux sucked because it was so hard to find a file compared to Windows, I got every self-described Linux Guru around the world coming to my aid. They gave me examples after examples of different ways to do it. All this in order to prove to everyone that Linux was better.
* ion has quit IRC (Ping timeout)
dm> brings a tear to my eye...
dm> So if you're starting out Linux, I advise you to use the same method as I did to get help. Start the sentence with "Linux is gay because it can't do XXX like Windows can". You will have PhDs running to tell you how to solve your problems.
dm> this person must be a kindred spirit of mine
-------------
Really...most questions are answered with: "so you are lazy and don't/won't try to figure X out, so you come to Slashdot for us to do your job" and so forth. But look at this thread. TONS of useful answers whatnot. This is why I love /. :)
Slashdot. Unreadable news to annoy nerds. - wonkey_monkey
If you are talking college, don't think of a 4 year Computer Science (CS) degree as anything to do with computers. Instead, think of it as a specialty field of mathematics that should have been called Computational Theory. True, you can learn about how to program your own compiler, make your own database engine, program your own operating system kernel, and other things related to computers - but there is going to be a lot of discrete math that requires calculus, and a lot of complexity theory and proofs to do also. So, yes, if you want a leg up get as much calculus out of the way and make sure you are taking a math course every semester to keep your skills sharp. (Trust me, I waited over 10 years before going back to college and even with "cramming" all the math in my brain before enrolling, I am far behind in my math skills.)
Along with CS is Computer Engineering (CE), which is more of building hardware. Circuit design, pathways, and all that stuff one intro course made me not care to do - and a lot of optimization is done in that field. Of course, any engineering field is going to be math heavy, so no real change there either (and also master your calculus based physics).
What you are probably looking for is a Software Engineering degree - which, as an engineering degree, will require mathematics also but focus more more on programming and software design.
Note the trend? 4 year college means lots of mathematics no matter what - and if you aren't in an engineering school but in a college of letters and sciences, then be prepared to have a liberal arts education (read: basic biological studies, basic natural science studies, an ethnic study, literature courses, humanities courses, and social science courses that will be at least 1/6 of your total credit load... as a coworker of mine said "a lot of BS work that I will never use". I disagree with him, my most useful courses have been english composition, contemporary art courses (which gave me a new frame of reference to draw on), and my environmental studies courses. They introduce new ways of thinking... and CS is all about thinking of new and efficient ways to solve complex problems.
The only way to avoid heavy mathematics (namely, at the calculus level and above) is to opt for a vocational/technical college. You know, 2 year degrees with titles like "Web Programmer" or "Database Administrator". Also, there are multiple fields to choose within the computer industry.
Of course, I don't want to discourage the 4 year route. It is hard, but worth it... and if you find you like academia, there are graduate programs that will open up a whole new way of learning. Heck, UW-Madison has imitated Cornell and implemented a Games, Society, and Learning program... its serious business, but their lab consists of a PS3, X-box, 5 networked computers, a library of video games, and tons of obscure board games - and something like that is most likely where I will be once I complete my undergrad (if tuition doesn't skyrocket... so if you are going 4 years, my advice is do 2 year transfer at a 2 year college that is less expensive and has significantly smaller class sized... Chem I and II or Intro Calc Physics I and II is much better in a class of 40 than 300.)
I've had the pleasure of fitting models to some interesting data. This required non-linear fitting... differentiation and linear algebra.
Fun stuff!
If you undertake a career as an engineer the more math you know the more problems you can solve.
The more problems you can solve the higher your pay will be.
It's that simple.
between CS, MIS, IT, and (whatever degree is appropriate for a web or enterprise code monkey). Math above algebra is a nice-to have rather than a necessity for everything but the first.
#6495ED - cornflower blue
When I'm working with someone who's designed a horrible database system and they can't grasp the concept of exponential increases in difficulty (and therefore search time), it's a problem. I myself have implemented PID controller loops in systems I've developed. I may not have needed 3 years worth of calculus to do it, but I at least had to understand what I was doing and the significance of errors rather than blindly guessing why I didn't have it "right". Most common example of a PID controller people have seen is cruise control in a car. It's not as simple as "if speed preset, press gas harder, else ease off". Now, that said...where I went, you didn't need any truly hardcore math to get a CS degree...a basic calc class and discrete were about it.
Its hard to say what the future of programming is, but more and more I see voice recognition, computer vision, self driving cars, data mining, and other applications of AI.
While you may not need too much math for basic business oriented software fields that apply AI, that estimate the future, that analyze data may often need quite a bit of math.
Math is basic knowledge that a Software Developer is expected to have. Some may get by without it, lots of us may not use it day to day. But certainly to understand the underlying principles behind algorithms math is very useful. One example is the law of limits for Big-O complexity. Understanding how continuos functions work and how to reason about things to the limit helps you write more scalable software.
Mostly because I've been writing software to dynamically generate problem/answer sets for First Year Calculus Based Physics. In my previous 15 years of writing software professionally, before starting that project, I've used juicy math just a few times. The first poster got it right, computer programming is mostly about counting beans and keeping records.
I'd even go a bit further. (Completely ignoring some obvious questions begging in the topic about work in programming.)
Every job worth doing has interesting things about it, if you know how and where to look.
The math teaches you how and where to look.
And you can do a much better job at any job you are interested in.
Admittedly, there is a dangerous down side to that. If you get too interested in the stuff that isn't on the project goals, you may end up getting fired for playing instead of doing your job.
But, if you're slinging burgers and you have the math, you can keep a running estimate in your head of which supplies are being used at what rates on what days of the week. That's a key to anticipating customer demand. And the only way you're going to make a living slinging burgers is to be a manager.
Maybe you need to apply strategy when you talk with management about the things you notice, because managers can get paranoid when their employees seem to know more than they do, but the math opens options. It's up to you how you use those options.
Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
You may not have been aware of using calculus, but you were using calculus.
Applied calculus is not always obviously calculus. You may not need to recognize it to use it, and there is a certain degree of luck, or instinct, in getting the calculus right when you don't know that's what you are doing.
But you were using calculus. And a bunch of other higher math, too.
Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
The foundation of statistics is calculus.
I encourage you to dicsover the calculus which you have been using without even realizing it.
It will make your job more interesting, and will give you more options in improving your work.
Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
and for a few years afterwards. I would strongly discourage it. Oh, Math! my bad.
Question for you:
When did you take the discrete math -- before or after calculus?
Unless you are an exception, you took it after.
Go back and look at the tools for reasoning that you use to understand discrete math. Where did you learn most of those tools?
Well, I know that in jr. high school, there were kids who instinctively understood set theory. I was one of them. But even for me, there were dark corners that I could not pierce until I had calculus, and it was getting light in those dark corners that made it possible for me to understand programs beyond the most rudimentary level of sequences, conditionals, looping.
Even writing a function, without the tools I learned in calculus, I would have a much harder time defining the function, deciding what to include and what to put elsewhere, determining what should be parameters, etc.
I don't consciously use derivatives and integrals, but I use the same tools that I learned to use when learning those. And calculus really is not just derivatives and integrals.
Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
All three of his personalities at work use math.
Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
In my opinion, programming is putting mathematical concepts/theories/hypothesis into practical use based on a particular problem, and it depends on which programming language you're using and what mathematical concept you're using to solve a particular problem. Consider the usage assembly language as an LLL -- Low-Level Language; you'd use boolean algebra for not only coding, but also to interface a circuit under some circumstances, or just to understand the computer organization and architecture like those of VNA --Von Neumann Architecture. As for other HLLs -High-Level Languages like C/C++, Java, JS, C#, or Python, the picture becomes clear that you don't need to deal with the machine/low level specifics as such in the assembly language to manipulate binary digits. Instead, you use basic logic and algebra to reach your final goal from the source code. What I'm trying to state here is that the degree of the programming language determines the level of math and the type of math that you need to use to accomplish your desired task. Unfortunately, highschools have specified plans by the department of education, so it's no wonder that they're forced to stick with that plan. I mean, it is important to understand, for example, boolean algebra to understand the functionality of logical circuits, but it would seem absurd/weird to put that into the education system in schools. But culculus and linear algebra are being taught since childhood, and they're still being taught in colleges/universties. So, the question that pops into my mind right now; "How do we improve the mathematics classes in order to provide coverage for major fields that puts mathematics into practice?" To me, I don't know, but if I was a highschool student, I would either study whatever is given to me and keep up with the educational changes, or just get more information by reading external materials other than those presented in the highschool, of course if I'm interested in learning rather than waiting for the class bell to ring.
I don't think I can even make a game without using vectors. I'm sure it's been done, but not by me.
Look, people are always going to complain that math is hard and shouldn't be necessary. Suck it up and learn the fucking math. It's not poison; it won't kill you. Even if you don't ever use it, since when has learning math been a bad thing?
Sum of a series.
Nobody is going to pay you to literally count beans in jars all day long.
Stuff beyond that requires the ability to work with sums of series that some people understand intuitively, and the rest of us learn in calculus.
(And, actually, those of us who understood it intuitively generally discover later how much we missed because we thought it was too easy.)
Yes, we use math even if we don't understand that we do. That includes higher math, and discrete math is actually part of the higher math.
You generally take calculus first because most people don't have the tools to work with discrete math until they have taken calculus. Many of those tools are actually part of calculus, even though they can be understood and used intuitively by some people.
Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
It largely depends on what sub-field of computer science you go into. If you do any DSP work (or more specifically, image processing/computer vision) there's going to be a ton of math. Some of those papers will make your eyes bleed. More to the point, if you're implementing some algorithm, even if you're using a library to perform say, an FFT in the actual code, you still have to be able to grok the paper to know what to do, and that will require some strong math skills.
I think every one uses it at some level. There are many abstract ideas in math that apply everywhere. Like the concept of transativity. Addition is certainly used by everyone. You add in combinding things. Learning computer science has brought me to a new understanding of what math really is. Math is more than number and symbols. Some of us see it better in numbers and symbols and computers certainly can only really understand things as binary represented numbers.
One complication -- if you start applying higher mathematics to calculate the battery life, don't you end up decreasing the battery life because you're invoking more processor intensive (and therefore power-intensive) calculations to monitor it?
Most recently, I've found calc and lin algebra valuable in applying machine learning techniques (neural nets and clustering analysis with big data) and earlier in my career in understanding adaptive audio/video networking protocols. I don't think I've ever 'implemented' calculus in software directly, but it was necessary in formulating the solutions that were eventually coded up.
Obviously, some domains (game programming, genetics work, etc) are naturally more math intensive, and I've been doing spare-time work related to space and rocketry, and found I've had to go back and study my old math materials (and even learn some new stuff) to even begin to make progress in the field.
A lot of programmers I know who are content to just build web sites, intranets, etc. have very little use for anything over algebra, honestly. But that's a different kind of job than I think most people graduating with cs or ce degrees are interested in.
Because the kind, generous people who have been helpfully cutting you student loan checks for the past 8 years are starting to get sick of your bullshit, that's why.
If you're independently wealthy and have no need for something so banal as a job to pay the bills, then you're right, studying forever so you can simply learn everything there is to know is an excellent course of action.
Try not to take me more seriously than I take myself.
As someone who does computational geodynamics (mantle convection, tectonics, tidal dissipation), I use math(s) all the time. I'm doing trig, vector calculus, complex (real and imaginary) analysis, PDEs, and linear algebra all night and day. Sometimes I even bust out the spherical harmonics, why not? I don't use things like combinatorics, number theory, or topology, though the last is relevant for setting up meshes for finite element models. I don't use a lot of statistics, but my colleagues who perform more data analysis are all up in there.
The PDEs and the like are discretized for numerical integration, but I need to know the underlying continuous mathematics in order to do that. It's true that routines already exist for many standard problems, but if I want to add more physics or solve new problems, then I have to be able to do that myself. I also need to be able to solve simpler problems analytically, so that I can verify that the numerical models are actually giving the right answer.
I should note that my educational background is in the physical, rather than computational sciences (specifically geology, physics, and astronomy). This involved a lot of mathematics classes. A major in physics comes with a free minor in mathematics. My computer science background is relatively week. I've only ever taken a couple programming classes. I picked up most of my computing skills in grad school or on the job.
I went to college (for the 3rd time) at the age of 30. I had a hard time with Calc etc. and hated the first two semesters of Comp Sci, but got over that. I literally had to ask the Prof in 101 where the switch was on the machine.
My first job was with a government tax department. One of their biggest problems was that small businesses kept changing their names trying to escape from last quarters' tax bill. I got assigned to write a routine to track business names - really to invent a way to track businesses changing their names. This led to designing an artificial key for a business, and assembling a list of all their names and date the changes.
Then after some work I found that some of the businesses randomly changing their names would reuse a name eventually. Not smart if you're fleeing debt associated with that name, but what can I say? That created a closed loop that would circulate endlessly, or until a main frame operator got suspicious and stopped the job; or until I wrote code to escape a closed data loop.
Making a really long story a little shorter, you will need math, and the skills learned working on math, no matter what kind of work you do, unless you are just a code monkey coding things with all the complexity designed by a systems analyst with 2 degrees in math.
If that's all you want, to be a code monkey on a system you don't understand large parts of, then you don't need a degree in Computer Science. If you want to be any kind of scientist, or systems designer, like those who build gaming engines or rastor graphics programs, or tracking genetic variability in organisms being studied in labs in Research Triangle Park, NC; or at C-M University, in Pittsburgh; or Cal Tech where they just landed a curious robot on F'Ing MARS, then don't get a degree, don't study math, stay ignorant.
That kind of work is actually going on everywhere now, not just these examples I pulled from my a**, I never left my home state to have a good career doing important work. I didn't use Calc every day, but I knew that I could if I needed to.
"You can cure ignorance, but there is no cure for stupid."
Think of the Irony!
The question is not whether you'll spend all of your time applying math. The question is whether there will come a time where strong math knowledge will help you solve problems which others cannot solve. There are any number of specialties which this applies to. Do you really need parsing abilities? Database abilities? Filesystem abilities? Network abilities? Image-processing? No, of course not - except that if you have them, you will find them helpful at unexpected times.
Unfortunately, it is usually not the case that someone will be weak in a subject AND they will still be able to identify that their skills are not up to the problem. Rather, what usually happens is they just keep hacking away, oblivious to what they're missing, spewing bugs in all directions.
I have lived on both sides of the fence, having written code for 35 years having failed second quarter calculus and thus the entire university program. After 35 years, I took a break from work, went back to school, passed 4 semesters of calculus and many other courses, and came out with a BS in Physics at an amusingly advanced age.
In the course of my first-segment career, there was were a couple of projects where I had to rely upon someone with greater math background and an expensive MATLAB DSP application package.
The first project was a low-jitter timing subsystem, where a device needed to synchronize to timing derived from a signal from a master device. I coded it, then used a combination of fragmentary digital filter experience that I'd picked up on a couple of silly personal projects over the years, and partially informed intuition, to run the filter algorithm at two different rates: a high (but CPU-expensive) rate for acquisition (where the abstract design failed), and a lower rate, exactly according to the abstract design, for tracking.
The background that I received from 4 semesters of calculus (that included a skeletal introduction to differential equations) might have helped here, but it would not have been sufficient.
The second project was a digital payload processor / modulator. I initiated and functionally specified much of the project (which mostly was an implementation of certain published standards), but it required contributions from 3 PhD researchers with evolving expertise in CIC filter design, to make the implementation feasible in a modern FPGA with integrated multiplier/accumulator blocks.
My contribution consisted mostly of generic software, but there was one area where I had to quickly try to teach myself some mathematics, and it was mathematics that would not be taught in undergrad physics, and most likely is not universally taught in other than cursory treatment, in undergrad comp. sci. programs: finite field arithmetic (error control coding). The objective here was to examine whether a legacy implementation whose design rationale had not been adequately documented, was truly equivalent to a published standard (it was, but I discovered a subtle gotcha), and to validate a proposed implementation against the standard.
What arguably has been most valuable after emerging from even a late and rudimentary education in a scientific discipline, back into software work, is having been exposed and held to a scientific standard of rigor. This stands in devising a sufficient and feasible scheme of measurement, in collecting sufficient data, in formulating claims that are supported by data rather than mere belief, and in making clear when the line between data and belief must be drawn and crossed. At times it turns me into an organizationally inconvenient holy terror. It also allows me to deeply examine and locate defects that are potential product and reputation killers, to endure hypothesis-destroying experiments, and to emerge with a clear understanding of the nature of the defect, and how to cure it.
I do wish that I'd had time and energy for more math: a practical course in statistics and design of experiments, preferably one designed to teach students who are well along in some field of study, rather than as an early weed-out for weak students in oversubscribed majors. The introductory statistics course at my university, which mercifully is not required in the physics major, is of the latter type and is generally reviled, even by the capable.
I just thought you should know you're wrong.
but not the way you think. You can get away with game development now without knowing how physics works. Get a game engine like you mentioned and just treat every object as a Newtonian solid body and let it's physics system handle the math. Or you could go for calculus overkill and let wind affect every bullet in a shooter game by treating them as particles and integrating up from delta-delta v (change in wind acceleration). More likely, you'll want to know the calculus, some of the simplification like a parabolic arc, and know some of the mathematical estimates of the multivariable equations; and you will mix and match to meet the requirements you have. If you don't know the math for any part of that, then you are missing that tool in your mind and can't use it.
What math for what parts of a game? Calculus based physics for physics engines, obviously. You could do algebra based and discrete time steps, but try it with anything past a 2 body problem and it's a simulation, not a game. Someone else mentioned and I'll second quaternions for graphics; learn to love them because lots of the hardware is accelerated for them and Euler angles will screw you when you least expect it. Graph theory for space partitioning, which shows up in both graphics engines and AI. Statistics shows up anywhere, from simulations to helping you figure out where and why programs crash (simple example, a function that handles random numbers in a game crashes 1 out of 36 calls when called by some part feeding it the results of 2 six sided dice. Write your test case for 1 and 12.)
So if you are comfortable using tools from other people, and writing code that glues pieces together, you don't need a ton of math. You may not spot problems as quickly, and your code may not be optimized as much, but it will work and sell. If you want to write the engines that other people use, or want to add things in to other engines, then you need a lot of math.
You need to use vector math to figure out Big O complexity? Maybe for a specific application like some vector math based functions, and proving the complexity of a specific function operating over N-dimensional space, but the principle doesn't require anything past knowing functions and exponents.
OK, I'm not your typical engineer - I have a doctorate in Chemical Engineering and I work at a National Laboratory.
There is a common meme that engineers just plug numbers into formulas. Let's suppose that is true - who develops the formulas? That's the job for those (supposedly) over educated engineering nerds like me.
I use calculus about twice a week, and about four times a year, I have a really interesting problem using advanced differential equations or advanced statistics.
i just want to point out that there are occupations for which mathematical skill is essential..
Learn English and write quests. That's story telling. Are you good at writing a good story?
Take Art classes and make skins and Landscape. Can you paint with oils?
If you want to do graphics You had better know how to wield a rotation matrix! That's Linear Algebraical. You did not take that in high school. At not in the US. Perhaps some other countries teach that in high school bu not here.
At my collage a renown grad student said Calculus taught programers symbolic manipulations, I think any good programmer should cope with that. Math will not hurt you if you have any smarts at all. But perhaps you should learn to paint.
I for example us a great deal of differential equations when I'm developing audio and video filters (FIRs, IIRs etc...). I don't even have a math education past trig, the rest is from books and websites.
:) Even when I was working for a web browser company, I'd find myself writing a JPEG decoder which isn't really hard math, but it's at least somewhat advanced.
There are cases where I'd chose to perform real-time filter calculation for adaptive filters (things like calculating the points of an FIR without knowing my desired frequency response before hand), it's not terribly common outside of for example echo cancellation where I'd want to design the shortest possible filter with the desired effect for the current environment instead of just using a long filter with good response in all frequency ranges.
I generally do most of my math work in a tool like Matlab (sometimes Mathematica if it's more mathy and less computery) and then when I have the coefficients I desire for a formula, then I'll code it in C or C++... oddly sometimes in DSP assembler.
That said, another example of where I'm using calculus, though not terribly advanced calculus is that my 8 1/2 year daughter, 10 year old son and I are writing a platform scroller for their phones. The girl is doing pretty well with coding the object structure, my son is doing much of the artwork. I'm working mostly on things like motion. In the case of motion, I make use of rate of change calculations and apply them using simple physics. For example, if the user holds the right arrow for X amount of time, I increase the positive moment energy. If they press the left arrow it applies negative momentum energy, if they simply let go of the arrows, then at a given rate, the horizontal momentum energy reduces towards zero. For jumping, when the user presses space, depending on the duration, upward energy is applied until a peak is reached which will fight gravity. Gravity however works as expected 32feet *...
I also have used math a bit in producing a TDR for cable length detection.
Math is VERY useful in programming so long as you choose to work on projects where math is interesting
Several years ago I wrote an octonion calculator using javascript. To compute exp(X) for a general octonion (a type of eight dimensional number) I had to use a power series expansion and test for convergence. This is calculus. To see the code, just view the page source:
http://jwbales.us/rpnOctonion.html
Perhaps I shouldn't let the secret out, but my son makes some pretty big bucks for his programming-experience-level precisely because he can do the heavy lifting in the math department. He was a physics major in college, which anyone who reads XKCD knows is the highest form of applied math (in terms of being the applied math that is closest to pure math). For his undergraduate research work, he worked on software that processed data from one of the neutrino telescopes operating in Antarctica. So, yeah, he had to use some pretty high end math to design his software. Now he does business analytics. He is on the leading edge of a technology that will drive the future. And I don't mean "technology" as in some nifty, new programming trick which will be obsolete next month. Or a programming language that looks slightly easier to read. I mean Technology (with a capital T) which applies across all fields from biology, to marketing, to astronomy to how to best manufacture the tires on your car. Every EFFING thing you will ever touch or do anything with for the rest of your lives. Analytics and it's cousin, Modeling, will play a part in it. Even the keyboard you type on all day required some pretty high-level math just to design the springs to give it just the right feel so you can keep tapping away all day thinking you aren't using any math.
Now, perhaps the reason most of you programmers out there don't think anyone will ever use any math in programming is merely because YOU will never use any math in programming, because YOU don't know how to do it. And I am not talking about just taking a course in calculus, maybe getting an A, but then moving on and forgetting what you learned. (Admittedly, exactly what I did.) If you really want to learn and KNOW math you gotta beat your head against it for years. Practicing more and more and never giving up even when your brain has gone into nuclear melt-down for the fifth time today. Taking more advanced courses and courses that require the use of that math all the time, not just a couple of times a semester. Perhaps, if you actually still knew any of the math you were forced to sit through, you would have been offered jobs where you would use that math and then you would be singing a different tune.
Has everyone forgotten that Google is based on a mathematical algorithm, not just a lot of fast servers or fancy programming. How do you think they calculate the trajectories for Mars missions and make real time adjustments, taking into consideration the lag time between when the message is sent and when it will be received, as well as the relativistic factors considering how fast the vehicle is moving now and how fast it will be moving when the maneuver is finished..... I guaran-damn-tee you that they don't just do a hash-table lookup and then do an x++.
So, if all you ever want to do is write more code to push more HTML and bits and CSS out to browsers, like a bajillion other programmers, then stay in your comfy, mathless world. Just keep in mind, that it is easy to train billions of Indian and Chinese programmers to do the exact same thing. Soon, there will be software that does it almost automatically. However, if you really want to participate in the most exciting parts of computer technology that are coming up in this century, then I highly recommend that you double-triple down on that math.
Now, I know I am getting a little braggy and preachy. But hey, people ask questions because they want opinions. And all I saw was a bunch of boring answers based on a limited, dead-end view of the future. And, I am really proud of my son. So there!
Maths isn't directly necessary in most programming. But ...
Is history necessary for most people's jobs? What is the practical value of learning about literature, religion, ...? You don't need them if you are hammering nails all day, or writing programs, but they give you a background that is often valuable in other circumstances. Do you need to know about golf to do your job? Of course not, but if your boss plays golf, it can give better contact to him because you can talk about a shared interest.
In order to learn mathmatics you need to learn a certain way of thinking and solving problems, which is very useful in general and in programming in particular. So, you do need your maths.
Pretty much all engineering can be described as, "will solve second order differential equations for food."
Advanced mathematics is critical in certain spheres. However, in greater than 95% of software development positions you will rarely do anything beyond advanced algebra. The fraction of time you'll do anything beyond the simplest algebra will be well below 1% of your time.
What most programmers do involves a lot of string parsing and handling/formatting data from databases; these completely eclipse all forms of mathematics in business software. If you ever end up in web development you could easily go for months to years without touching anything more complex, mathematically, than incrementing a variable. For example: I built a fairly large web interface package that has no math of any kind. None. It parses strings and reads/writes files, chooses what to return to the browser based on header data (string parsing), etc. A later version had simple iteration of a couple values. It has a lot of regexes for data validation and processes/juggles some crazy arrays of strings. Eventually it needed to support a binary protocol, which required the most complex mathematics in the code: a modulo 256 checksum. Whatever pays the bills, I guess.
Trust me, either way you'll suffer on one side or the other. If you have the skills you'll end up on a series of projects where you never use them. If you don't, someone is sure to throw a problem at you that requires mathematics you don't know.
This is, sadly, the bleak reality in store for most software developers that must develop business software to pay the bills.
so the chance of you seeing this one is minimal. But, for what it's worth, I use math.
I'm an engineer. Qualified as a computer systems engineer, but work in control systems software for large machines. Actually it's not that often that I need to sit down with a pencil and paper and figure something out. It happens - occasionally someone wants to express a control function as continuous-time parameters and I have to implement it in discrete time, and then I have to sit down and do the bilinear transform myself and code it up. But it's pretty rare.
The vast majority of the time the work I do is based on some math, often involving linear differential equations, time to frequency domain transforms and back, s- or z-domain frequency response assessment and so on, but I don't need to have all the details in my head. What is much more important is an intuitive grasp of what the math means. If someone says to me, "That frame has a natural frequency of 1.25Hz," I don't need to be able to sit down with a pencil (or some other tool) and show that they are right or even be able to figure out how to write down what they've just said in a precise mathematical form. But I do need to know how that feeds in to the control design and then into the structural design.
I think that this intuitive grasp can only be gained by having sat down for a few years and studied the math underlying it in detail. I can't just write down all the math now, but when I was studying I could, and given a couple of hours I could do it again.
Slashdot - News for Nerds, Stuff that Matters, in ISO-8859-1 Has just realised that beta makes this signature redundant
I wonder how the original poster is handling the flood of impressive comments from many highly qualified respondents?
Which respondent you have read so far speaks to your condition?
Which respondent sounds to you like what you will say and do regarding mathematics in five years from now?
I have an idea for the original poster. Print out the single item in this Slashdot column that you regard as the advice you want to take. Come back to Slashdot in five years and tell us (might not be me) how your next phase in math learning worked out.
You don't know what mathematics is then.
A fourier transform is just a tool. Mathematics is understanding what the data is and what operations you need to get the information you want.
...but not in the sense that most people think...
I don't use much math per se, I almost never have the need to calculate anything by hand. But, learning math taught me the very important, and constantly needed skill of abstraction thinking and how to use symbols to represent just about anything.
This skill has, among other things, paved the way for learning programming, a skill used in my daily job.
I'm just finishing my PhD in mathematical epidemiology (and before that I did an MSc in applied maths).
Yes, I use calculus: it forms the basis of almost everything I do. I've used systems of ordinary differential equations (ODEs) to model disease spread, and the effects of culling. I've also used spatial stochastic models to examine the effect of space and small population sizes, which are based straight from the ODEs.
Partial differential equations (PDEs) are also commonly used to study spatial effects at both large scale (e.g. spread of disease at country level, waves), and small scale (e.g. tumour spread).
Programming is pretty important for me. My models range from simple (100 lines in GNU Octave to examine long term effects of changing parameters), to intermediate (2,200 lines of C for the spatial stochastic framework examining population based models), to huge (for the stochastic individual based models that I'm looking at next). My supervisor (whose supervisor's supervisor was Peter Higgs) started out as a physicist, and still uses Fortran 77. Some people I work with aren't big on coding, and just start with someone else's model and adjust it, although they usually have problems if they don't understand how it all works.
Just look what a perverted meaning "liberal" now has and you know that dropping Latin and Greek perhaps wasn't such a good idea after all. ;-)
I hate to say this, but computer science is applied mathematics. If you're not up to taking higher level math courses then you're not going to be a computer scientist. If you really want to go into gaming but don't want to learn math, then I hope you can draw as concept artist may be your only other hope to get into the design side. Otherwise, you're going to have a good time in college trying to figure out what you're gonna be when you grow up. Or, you just won't grow up. Either way, mission accomplished and you get to choose how much math you take. Enjoy!
I can't get through my day or even an hour without my ability to apply numbers to lifes situations, factor in numerical modifiers and spit out ratios and percentages of probable outcomes and their forks. I find it keeps me about 10 steps ahead of the less evolved monkey boys around me.( I've shoved a few grifts down more than one confidence mans throat). I don't seem to be able to quantify my method well enough to teach my daughter though, and it makes me sad. Perhaps this will pop up in further generations as my contribution to mankind, perhaps it belongs to me alone. Any of you, thus afflicted?
*Repent!Quit Your Job!Slack Off!The World Ends Tomorrow and You May Die!
After reading all of the comments thus far, I see the discussion is stuck in a head-butting stalemate.
Much like religion, mathematics will always have people arguing over the issues of its relevancy rather than actually working to find a true solution. No pun intended.
I actually don't use a lot of geometry in my job, but I use the basic skills of logic and proofs that I learned in geometry. I don't often solve algebraic equations but I find myself tutoring my employees in the logic of intervals. Calculus was a drudge and I almost never integrate a function, but the concepts I learned about functions I use every day. I'm not sure you can use functional programming without exposure to calculus. Almost every math subject has an ulterior motive. Geometry is there to teach you logic. Pre-calculus is to teach you about functions. Calculus is the first math where you're introduced to infinity and infinitesimal entities. Without that math I'm not sure your mind has expanded enough to work for my company.
I don't expect programmers to solve differential equations in front of me, but I doubt their technical literacy if haven't done it at least once. You don't have the tools to manage complex projects without knowing about diff Q. Likewise, you can't be a computer scientist without discrete math -- you just wouldn't have the mental tools to address the subject. Sure, you could stumble along, but you would just be depending on someone else who did the math.
When I got out of school, I got into computer systems design (things like the Commodore Amiga 2000)... not a great deal of complex math in there. But I actually did double major, EE and Mathematics, so I had that toolbox of stupid math tricks available, once things got a little more demanding than just calculating worse-case timing and power budgets.
Which they did. One thing I did, which many folks think is cool (and it is, particularly if you don't care about getting paid that well)... I got into startups. When you're at a startup, you find you wear just about any hat that fits, and you also get pretty good at tailoring those that don't. Having a proper background in math will definitely help you at this. And it's not unusual, particularly if you're a hardware guy at a small startup, that you're expected to solve EVERY possible hardware problem... or at least know it well enough that you can solve things with the occasional help of a consultant.
So since Commodore, I've done control systems and sensor systems (robotics), digital radio systems (R/C cars, more robotics, general purpose mesh routers). I wrote an NTSC decoder for a software radio.... all sorts of different math in there (FFTs, filters, etc)... and knowing math well enough is critical to building things like this well... you can find dozens of books on the analog TV signals, but doing that all in software, you really need to understand things. I've also been working in cryptography, more SDR, and other kinds of signal processing... even wrote a few audio plug-ins for my own use, which may one day get released somewhere.
Of course, with great tools like MathCAD, you may not find yourself actually "doing" the math they way you might have back in school. No pencil and paper, you have tons of primitives that do complex things for you. But you need to understand how it all works to able to use such tools.. and without that knowledge, you'll be unable to adapt. The other guy who wants that cool new job won't have that limitation.
And in fact, the very best thing I learned out of my more-expensive-than-Dad-had-budgeted college (and those extra ten years of monthly payments) was the ability to adapt. The specifics we learned in the early 1980s (Pascal and LISP programming, TTL logic, etc) all but vanished. The big ideas don't. An education shouldn't worry too much about today's specifics... you have no idea today what kind of engineering you'll be doing in 5, 10, 20 years. Even if you don't change jobs, the nature of the work can change out from under you. I went from HW design last summer to a software project (and the need to learn three new languages), then back to hardware this summer -- with some pretty deep mathematics in the mix now.
-Dave Haynie
Games sure. But also embedded control systems. Robotics. Cryptographic systems. Signal processing: digital video, digital audio, software radio, etc. I think the need for "real math" is on the rise.
-Dave Haynie
It due to the retention factor.
You won't use the higher math, but having to pass it, means you reuse the lower math ALOT till it's 2nd nature and you can do it in your head. That's what is necessary to do most of the jobs.
I am retired now, but as a computer scientist (by degree), programmer and analyst and sysadmin (by functional activity), math higher than algebra does come in useful.
Even if I didn't directly use statistics or calculus but once every few years they provided a great understanding of what I saw in information I had to analyze to solve workplace problems.
Yes, there were the programmers around me that thought it was all 'hocus pocus', but they were also the ones that brought their problems to me to 'do my magic' whenever the analysis was above their level of understanding.
Even digital systems design allowed me to develop of optimization algorithm's for tax problems for a couple of fortune 500 companies during my career. It took a couple of months to come up with a couple of lines of code (and 20+ pages of explanation so others could maintaining it after I was gone).
Even after marrying a geologist/geophysicist who now teaches horseback riding to beginners, we have found education adds to the tapestry of life. Whether it is math, history, theology, music theory, rocks, or anything else. All education is good. ... Much of it will not generate a $$ of income. Some will pay off better than any slot machine you have ever seen.
I have found teaching my kids that posing problems that they are interested in solving and let them get frustrated helps. Then introduce 'tools' (whether it be math tools, or a screwdriver) that help them solve the problems. A few times of this, then they start learning that learning about the 'tools' it takes to address lifes problems isn't so 'dry' after all. ... Thankfully we found a college that uses that concept for my son. He now is a MechEngr, is in a couple of 'startups' but has a 'job', and is a partner in a coffee concern in the Boston area. ... I attribute part of it to luck, part of it to training, and most of it to learning to love learning about so many areas.
Once again, learning is never lost. Education can't be taken away even if you are 'fired'. All education adds to the quality of life. ... Oops ... sorry about preaching. But this is obviously important to me. I hope it helps someone else make good decisions for themselves.
... "When you pry the source from my cold dead hands."
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.
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.
I do make occasional use of Algebra, Trig and Geometry even in daily life. But I've never once used MLA or Chicago citations outside of school. And being that I absolutely despise writing essays and reports on subjects I care little about, and in the real world I hire people to do that crap for me on the rare occasions I need it. It was the biggest limit to my education as I actively chose courses with as minimal writing requirements as I could and avoided writing intensive courses like the plague.
Math doesn't unnecessarily limit student's educational choices. It's the structure of degree programs where half or more of the required coursework is irrelevant to the field the student is studying to enter that limit people's educational choices and most of the skills learned will never be used. Math is just the most prevalent example. If someone is bad at, or dislikes math, they're most likely going to choose a degree program and elective course work as light in math as possible or avoid college entirely. Ditto for those who dislike writing, public speaking, history, science or some other task. That all degree programs are filled with such courses and requirements is the biggest limitation to education.
Either 0 or 1, depending on what I'm doing. Usually 0 but occasionally 1.
Protip: Always write to a singular audience. If you want to pluralize the audience, use first-person ("How many of us...?").
Here's a problem I've seen asked several times:
Calculate the number of office hours between two given times. Office hours are Monday - Friday 8.00 - 18.00.
How would you solve this in an efficient way? Actually, knowledge of integration might be useful.
You haven't had enough math. To solve integrals, Fourier series (also called Fourier Integrals) are commonly used. Pi, sine, cosine and other trigonometric values are computed using Fourier series. A Fourier series is a discreet incremental integral. I don't know these reductions off the top of my head but I know where to find them and how to implement software for them. You are not likely to find general Integration functions in any language. You have to know the math. If you are doing UI, you probably don't need to know this stuff. Even for games, this stuff is there, in the libraries (especially physics libraries). Fourier series (and other methods, I would guess) can calculate these Integrals to any number of decimal places that you would like. This can also be done with pencil and paper but it is extremely tedious.. Fourier converts an Integral into a series of discreet computed values. Granted if you need to solve an integral that has no Fourier solution, very difficult.... A good reference for this is the "CRC Chemical Book". Not sure of the title or even if it is available any more. I've had mine for decades.
I have more of a robotics/embedded systems/physical computing background, but I can tell you calculus is all over the effing place there.
The PID controller is an integral (pun intended) part of everything from autonomous cars to thermostats - it stands for Proportional, Integral, Derivative. Calculus is a very cool part of these things, although, when implemented in programming, it won't look very much like calculus. A knowledge of the concepts really informs your understanding of how these things work, though.
Also, if you ever want to program an application that does significant motion control, think wiimote or smartphone apps (and you don't have a nifty library that does all the thinking for you) you'll need to know calculus to be able to turn your accelerometer readouts into velocity and position information. Same thing for turning gyro data (roll rates) into rotational position or acceleration data. Missiles, UAV's, spacecraft and a bunch of other things use these principles - look up IMU (inertial measurement unit) , or AHRS (altitude and heading reference system).
You can see here that calculus is a very fundamental part of understanding physical motion and behavior, so I imagine that if you ever get into the dirty work of designing a physics engine of any level of realism calculus could be extremely helpful. Even if you don't explicitly take a derivative anywhere, it helps you have a better understanding of things that change continuously, and even just be mindful of the way various forces operate.
Finally, Calculus is just goddamn beautiful. I'm no expert at it, but if you've got any interest in things like programming, math, and science, it is something you ought to be familiar with just because it is such an elegant and astonishingly simple way to understand so many really complicated things.
The activity of programming is the art of solving problems. This ability is learned by math. In fact a program is a theorem..... so learning to prove help find algorithms and programming. Many others aspect of programming are related to math : abstarction, logic, modeling, deducing, ....
The above poster is correct.
Please do not listen to anyone here telling you that you do not need *any* knowledge of mathematics to be a programmer. Critically, you should have knowledge of a branch of mathematics known as discrete math. Discrete math includes everything from probability theory to advanced algorithms. Knowledge of algorithms is extremely important. If you do not know anything about algorithms, chances are you will have a hard time advancing your career. You can always learn on the job, but it is a subject you should start learning immediately if that is the path you want to go down.
The misunderstanding here is the question: Do I need a Computer Science degree to become a Software Engineer?
The answer is no, but- it helps a lot.
Additionally, if you plan on doing graphics and/or physics engine work as a game designer, you need more than discrete math and you should also be versed in multivariable calculus and linear algebra. The theory of computer graphics (cameras, rotations, and all that) is grounded in those branches.
You also implicitly ask a question: which degree is better for me, being interested in OGRE and Unity3D? And I'd say the answer is Computer Science. There are excellent game design programs but if you're interested in engines you are better off with a computer science degree. Many schools have clubs where you could contribute to those projects with other students on your own time.
Most programmers are doing low level programming works which may only require high school level math. However there are high level programming works that require not only college level math but also graduate school level math.
...etc.
They are graduate school or even beyond graduate school level math.
..etc) are programmed with advanced math.
The simplest trading model: momentum trading is based on the second derivative which you can learn in Calculus.
..etc.
You can see why.
For example, if you try to program a good way to compress images and videos. You try to get the best compression ratio so you can have a smaller file to save storage space (think how much it can help Youtube). You try to send the best compressed video to a remote location and decompress it with near original quality (think of Apple Facetime or Skype video). To do well on image compression you need to know a lot advanced math such as Fourier series, Wavelet,
Many Wall Street algorithmic tradings (robot trading, high-frequency trading,
Many firms like to hire Math Ph Ds and then teach them how to do coding. They don't hire high school coders and then teach them Fourier series, Wavelet,
As a high school student who is interesting in programming, you can:
1. Get a programming job after high school, stop learning college and graduate school math. You maybe able to find a job and happy with your life for a while. But when you are 40, you can be easily replaced by some young high school graduates.
2. You learn a lot math including graduate school math. Do some high level programming with your advanced math knowledge. You may invent some new computer chips, get some patents, and retire at the age of 45.
It is your call.
One of the adages I feel has the greatest validity in technical business is, "The key to sustaining and advantage is to go where others can't." It's true that programming certain popular things doesn't require an understanding of much math. It's also true that math is critical tool for modeling phenomena in the real world. You have to ask yourself whether you want to be someone who CAN'T do that. Modeling phenomena in the real world isn't just for scientists. Its part of finance, operations, geography....
Why would anyone look at how much easier it can be to learn in today's world and chose to learn LESS fundamentals than their predecessors? How do you think we lost the engineering knowledge of the Romans and the medical knowledge of the Greeks for 1000 years? My bet is that someone looked that a trivial moment in their culture and said, "Why do we need to know that?"
Every rule has more than one consequence.
Most mathematicians and professors have always done a wonderfully horrible job at presenting the direct applications of maths. This applies directly to every single maths teacher I had. Every so often a pupil would ask "why do we need this" and was greeted with "stop asking me that question" or (combined with) "you don't know enough to understand yet" ; highly arrogant and unhelpful.
That created a lack of interest and drove me to that part of computer science where maths simply isn't that important : specifications, requirement engineering, web and UI development, script writing and bug fixing in network driven applications. I leave the maths to the mathematicians and those that understand it. I stick to what I do well.
"The only time it's really appropriate to stop learning is when you're dead." I suspect they mean "when can we stop doing 10 hours of schoolwork every day".
I used complex variables to do circuit analysis when I worked on a software GPS receiver and also used Fourier transforms and vector math. In addition, I've used numerical methods to extrapolate data. But in both these cases, it wasn't computer programming that required me to use the math; rather, it was the nature of the subject area.
Check out Chad's News
...particularly involving dynamic systems or electricity... calculus, partial fractions, laplace/fourier transforms, etc are a must
I've used calculus and trigonometry for UI animation with some regularity. Sinusoidal easing makes for very comfortable and natural interaction, for example, and it takes a combination of calculus and trigonometry to code it properly. For that matter, it requires familiarity with both to even think of using the technique. So, yeah, it's worth knowing your math even if your CS work is just polishing user interfaces.
It seems people miss the point of calculus quite badly. Calculus allows you to prove or simplify quite a lot of trigonometry. Numerical calculation methods also depend heavily on it. Your entire computer is the work of calculus being applied to physics. So do pay some attention to it and you might learn a useful thing or two. On top of that your game engines also need realistic physics. Good luck doing that well without a three dimensional field of vectors.
But where advanced mathematics really show their real value in my personal opinion is in electronics. Analog electronics, especially high frequency and RF systems can't be described or even approached without it. All the "rules of thumb" find their backing in advanced math. Even something as simple as the Fourier transform requires calculus to explain correctly. And lets not forget about our friend Maxwell...
In short, in the current society where electronics play a major role in almost any device it might be a good idea to be able to approach the subject. But you need calculus for that. A nice bonus is that calculus has helped me the past few years in reducing the amount of taxes I pay. Cause calculating an optimal solution to a problem is also something calculus is an excellent tool for.
so, dont take it as professional advice, i don't know how much actual math you need when using libraries but if you were to do some 3D you'd need a serious chunk of matrices and geometry at least before you get a single dot in screen where it has to be
Free speech was meant to be free for all... how can anyone grow up in a nanny state ?
at university they tell you something similar... "when you get out in the workplace you will remember less than 10% of what we teach you here, but what you really learn here is how to learn and track down information yourself when you need it"
from my own experience, and depending on how you learn (i'm more a visual learner), i forget a lot of stuff from uni, but when i need to know something i google it and it comes back to me much easier than it would if i'd never seen it before. i think a lot of understanding from school and uni is retained in something like your unconcious
Most of the math in the world is arithmetic, a little algebra and geometry helps a lot.
Higher than that, is seldom needed in normal things in life, but I have found calculus and understanding 3D geometry very useful in programming for companies that don't even know they have problems that are more easily solved using techniques from those spaces.
IMHO, education is never lost. More education even if I 'never use it' is still better. Sometimes it just helps clarify what others view as noise or 'magic' in the world.
In high school I almost gave up on math in Algebra I. After taking a graduate level statistics class as an under grad at a good college, math finally got through that I had had enough, both mentally and practically. But it still adds to my quality of life as a retiree, I still work on projects out of my comfort zone, just to keep expanding my interests.
... "When you pry the source from my cold dead hands."