Math Skills For Programmers — Necessary Or Not?
An anonymous reader writes "Currently, the nature of most programming work is such that you don't really need math skills to get by or even to do well; after all, linear algebra is no help when building database-driven websites. However, Skorks contends that if you want to do truly interesting work in the software development field, math skills are essential, and furthermore will become increasingly important as we are forced to work with ever larger data sets (making math-intensive algorithm analysis skills a priority)."
Looking at whether math is necessary to be a good programmer could be like putting the cart before the horse. I think it's more likely that good programmers are usually good at math because that's they way their brain works.
No sig today...
here is an interesting video with leslie lamport ( http://en.wikipedia.org/wiki/Leslie_Lamport ) : http://channel9.msdn.com/shows/Going+Deep/E2E-Erik-Meijer-and-Leslie-Lamport-Mathematical-Reasoning-and-Distributed-Systems/ "When you understand something, then you can find the math to express that understanding. The math doesn't provide the understanding." “The mathematics of computing; things like sets and functions and logic, are to computing what real numbers are to physics.”
most of programming inevitably consists of creating logic constructs in algorithms. if this happens it has to be that, but also if that happens with that and it also has to be this and that and so on. they constitute the backbone of programming. anyone lacking understanding of logic would have a hard time. the rest, can easily remedied - we have innumerable libraries, classes, frameworks performing many complex mathematical operations. its better to have very strong logic, and make up for the rest with this approach, and efficient. furthermore, you can receive interdisciplinary help, hell, even help from internet in that regard, if you come up with some problem that has to be solved with a math equation. a mathematician can also help you with that. but the rest, the logic part, you gotta be sharp at that.
Read radical news here
The much more important item is that with a hard math background you are already well trained and prepared for abstract thinking.
While most programmers might not need to know how to prove that a holomorph transform maps an open set onto an open set (except if the transform is constant)
the amount of abstract thinking skills this kind of background provides makes a very superior programmer to a java-ape that cant think outside of his ide.
It is no coincidence that all big/good/important programmers have been matehmaticians and not computer scientists. (Knuth, et al)
Reminds me of a quote by Gene Fowler, "Keep the company of bums and you will become a bum. But hang around .with rich people and you will end up by picking up the tab and dying broke".
Especially given this kind of survival of the assholiest when it comes to who gets to be a CEO in the first place: Is Your Boss a Psychopath?
Don't assume that these guys care about you just because you married their daughter. Not about that daughter in the first place. Or about anyone else than themselves, really. If they did, they wouldn't qualify as psychopaths in the first place.
Though it might be a start if you just want to be their pet sycophant. But then again, if you wanted to be someone's sycophant and were any good at it, you wouldn't need that daughter to rise through the ranks. And you'd have probably become an MBA not a math nerd or a programming geek.
A polar bear is a cartesian bear after a coordinate transform.
t in the LONG RUN?
The first who marries the CEO's daughter.
"In the long run" would suggest it to be the _last_ one to marry her...
...which often benefit from a fruitful relationship. That said, I would point out that in my experience programming and mathematics are two distinct disciplines, and neither requires the other. You really can be a professional programmer without knowing anything beyond the most basic arithmetics.
Programming is application of pure logic, the latter isolated from the all but basic mathematical concepts. Mathematics is application of logic in a specific manner which springs from simple arithmetics and has evolved into own world, not in the one of the most important "worlds" we have.
One important remark would be that programming is often APPLICATION of mathematics, which is one case where the two disciplines cannot, for a time being, be separated. In that case, one obviously needs a programmer who is also a good mathematician.
Also, obviously, given two programmers with equal programming skills, pick one with the better math skills over the other, if no other qualities affect the choice. It is like picking any other job candidate - you pick one with more qualifications, even if these apply only remotely to the field of work the company does. And since mathematics is a close cousin here, the choice should be obvious.
Same length of commercial coding, and I hit maths problems every day - people problems, not so much. It depends on the field - space industry ground segments for me; you?
Help children born unable to swallow - www.tofs.org.uk
Those are all things I did as a CS undergrad, but there was also huge importance put on proofs. Everyone is talking about writing good code doing useful things quickly, but (and this is especially important in real time applications, such as autopilot on planes), if you can't prove that the code you have written is going to do what you want 100% of the time or its not 100% accurate, then really what is its worth. Maths is vital (ok not if your connecting up a website, although it does have applications in scaling and databases) and should be being used in the design phase even before the programming starts, that way people might be able to cut out buggy crappy software. I'm not sure how many people on my course got to grips with it, not many I think as most of then changed over to software engineering in our final year. I know I never did and I regret it.
I've seen great maths/physics experts who were lousy programmers, and some self taught people who were brilliant... and naturally I've seen the opposite too. What you really need is a person with a skill set that is appropriate for the role that they are to fill. Myself, my math skills are basic at best, while my application of logic is quite solid - or so I've been told, and in my personal case, I work with Physics PHD's who understand the math way better than I do, but make the most elementary design mistakes if left to manage a project by themselves, this in spite of their having 6-10 years of programming "experience". My role largely involves writing APIs, and is very people-oriented, so I find that I don't need the same level of math that my colleagues need. Their role is to design algorithms, and yes, to dumb them down somewhat so that I and others in the team can make better use of such things so that our work integrates well with what our DSP engineers do. I wouldn't be suited for something as math oriented as game theory, whereas I think my colleagues would actually be better suited to such a role. I can however design and build relatively complex information systems, which tends to benefit more from a skill set where logic and people skills are more prominent. It really is a case of "It depends". If you're unsure and would like to keep your options wide open before you dive into the programming deep end, then yes, I'd suggest you delve into the maths a bit, and see where it leads you. If you already know where your career is going, you can always learn more as you go, pick up the skills you need along the way to make yourself more marketable. For my own roles, I've wished I studied more psychology (never thought I'd actually ever admit to that!!)... but that's just because of the nature of the type of products I've worked on.
the sociopathic management will get to her first...
Balderdash!
I dare to disagree. Programming is basically putting algorithms into a form a computer can understand. Nothing more. And where do these algos come from?
It baffles me to no end every time I see "programmers" apply who consider math as some sort of secondary skill. It's not. It is the primary skill for a good programmer.
.
Absolutely. And an old dog like me can even provide a classic example: older OS's like DOS and CPM had to cram a lot of functionality into a relatively small amount of memory. They also had to perform decently on small, slow (by today's standards) processors. The approach that they used was the vector table.
Simply put, the functions were numbered in order: get OS version was typically the first (function 0), and successive numbers were for all of the other important functions: open file, write file, get system time, and so on.
Now: can you imagine how inefficient that would be if the original programmer had used a "switch" statement (or the assembly equivalent, with a bunch of "compare and jumps")? Instead, the function number was left shifted (equivalent to multiplying by a factor of two), then used to find an index in a vector table that contained the addresses of all the functions. Neat, compact and lightning-fast.
This technique is still used today in small embedded processors that suffer from similar low speed and limited memory problems. I used it myself on a small controller in a contract job back in the 1990's. It allowed me to cram everything (read keyboard, activate relays, check temperatures, and more ... even including a quick and dirty "config" option ... in a PIC micro with 2048 bytes of memory. :)
I have never met a really good, really world-changing programmer who wasn't also good at math. Not necessarily with high-end math, but just good at the fundamentals of algebra, and with the ability to "think" in numerical calculations and offsets.
Cogito, igitur comedam pizza.
I believe programming in itself is just glorified typing.
Just kidding, but yea, programming in itself does not require any math skills or to know much about nothing, actually. But programming is always done in some particular context, and that context may require knowledge on other fields. In that sense, what I think he means is that more and more, every application you do will require you to know some math. I work in bioinformatics, and there is a lot of statistics there, and some molecular biology as well, but mostly statistics.
It has something to do with CS been a transversal field
I've got many years of c and c++ experience, very good skills in every math category you mention, and no job. While I agree that software often suffers due to developers' poor math skills, I don't think that math is necessarily very helpful from a career standpoint. It's my niche, being the only one I'm cut out for, but it's a narrow one.
Mathematics is a huge field with lots and lots of small ramifications.
You may want someone who understand statistics for your SEO stuff.
You may need someone who knows calculus for a physics simulation.
You need someone who knows a lot of linear algebra if you want to write a search engine.
You probably need someone who knows about concrete mathematics for almost all the rest.
For everyone who thinks that they do not use maths when programming: what do you think regular expressions are?
We are Turing O-Machines. The Oracle is out there.
Spoken like a true wonderboy. If you are the only one on your team that can understand your algorithms, then the problem is not with your team. Why? Well, the "inferior" skills of the others on your team would imply that you are not working on software that requires the most efficient algorithms. In these cases, maintaining the software is more important than reducing memory footprint or a slight performance benefit. If you were coding critical paths, then that would be different, but then you would probably be on a team that understands this. Who knows, maybe you are and you are too arrogant to understand that others may know more about the situation than yourself.
Actually, he understood the math behind the physics and derived E=MC^2. Math is the language used to speak about physics. Physics cannot be done without math. Math can easily be done without physics.
Einstein did not find out what he found out by calculatign[sic], first he understood the physics behind it after eh calculated for us the formula E=MC^2
Man, you have no idea what you're talking about. Einstein was having severe problems with General Relativity until his mathematician friend, Mercel Grossman, looked at what he was doing and pointed out, "hey, you need to describe this using these things called tensors.": look here
Before that, Hermann Minkowski, a mathematician, had looked at Einstein's Special Relativity and thought, "hey...if we describe these things in four dimensions, these equations become really elegant." Yes, Minkowski space was derived from the physics, but the math dealing with higher dimensions than just three was around long before.
Having been a programmer now for ~10 years or so. I started off not caring about math that much (aside from a little geometry to draw custom controls). I was making $45k a year and most of my programming time was doing web development (database, basic logic, front end HTML etc). Tying records with class objects via auto incrementing ID's and massive JOIN statements. However, I started getting into 3d programming and multitouch applications and found the more math you know, the more versatile your UI's and windows can become. I recently finished up a product called Glo (globible.com) and found we couldn't have done ANY of that without advanced math knowledge. Now I make twice as much as I was making doing web back ends and I owe it all to mathmatics. When interviewing software programmers, anyone who hasn't had a little trig gets a good kick towards the door.
Sometimes, we can understand the physics conceptually first. Other times, the math derivation explains the physical phenomena.
Partial differential equations began as a branch of Physics. The derived equations gave conceptual meaning, not numerical values. Here Are two examples:
The Wave Equation, Uxx = Utt, has the solution U(x, t) = F(x+t) + G(x-t). This describes two waveforms, single variable functions F(s) and G(s). I pluck a guitar string, and two waves go out in opposite directions.
The Diffusion Equation, Uxx = Ut, describes how a dye concentration U(x, t) spreads out over time. The Uxx term describes a "diffusion" based on the "second derivative rule" for "Maxima & Minima" problems. Where Uxx > 0 (concave up), the function U(x, t) wants to add material to smooth out the curve. Where Uxx 0 (concave down), the function U(x, t) wants to lose material to smooth out the curve. This is diffusion leading to a steady state time, when all points x have the same value.
>My personal largest problem, though, has to do with literacy. Though I'm quite skilled with language, excessive comma usage
>notwithstanding, I find that when trying to read about advanced math or physics principles on Wikipedia for example, I'll see
>a theorem written using symbols and functions that I know were covered in the math classes I had in high school but I can't
>look at those same symbols and functions and turn them into words that accurately explain or describe the principle I'm reading.
>Perhaps I'm alone in that situation, but attempting to read advanced theorems and math does give me insight into what text must
>look like to illiterate people who still know their ABC's.
I share your exact sentiment.
I have been a definite non-traditional student. I started school in 1988 at Georgia Tech, and failed out after 2 years. Some 17 years later, I finished my BS in Computer Science.
I have taken and retaken math classes many times. When I was at Georgia Tech I got a C in Calc I, and then in Calc II I got W, F, D, F, and finally passed with a B. Then I moved to another state and had to take Calc II yet again. A few years ago I started working on my Mechanical Engineering degree, which requires Calculus III, so I took Calc I and II again to brush up. I got a B in Calc I and a B in Calc II and got a D taking Calc III. I am currently re-taking Calc III.
My problem is, I believe, that I have strung out my mathematical education over so long a period of time that I am not FLUENT IN THE LANGUAGE OF MATHEMATICS. It is, exactly as you state, a LITERACY PROBLEM. I firmly believe, as you seem to, that MATHEMATICS IS A LANGUAGE. Moreover, I believe, as you seem to also, that people who are fluent in mathematics actually "SEE" mathematical equations.
For example. I believe many people when they look at x^2 + y^2 = r^2 instantly recognize the equation of a circle. Now I have finally gained that understanding, BY ROTE, of that fact also. But I believe that people who are mathematically literate see more than just the pattern recognition that that equation means circle. I think they see equations and actually see WHAT IS GOING ON. I never do. I have to sit down and plug in values of X and Y and see what comes out. It's very tedious.
I think your last sentence was exactly dead-on. I liken the problem to handing an encyclopedia to a 5-year-old and asking them to read a passage. They will be focusing so hard on each word that they will not know what they have read at the end of a sentence. That is exactly how I feel trying to do Calculus. I am focusing so hard on the basic mathematics that I find it very difficult to put it all together to see the big picture.
It is very much a literacy problem, and I find it confounding. The only thing for it, I'm afraid, is to do more and more and more maths until one gains the familiarity one has just as one does with reading. The problem is time. I just don't have the time, with a full-time job and a family, to do it.
I haven't been able to help but think, over the years of taking higher-level math classes, that there must be a better way to learn this stuff. The science of Calculus is some 400 years old, some parts much older. Yet the way it is taught has not changed hardly at all. Now maybe there is no better way to learn it than doing it over and over until knowledge turns to understanding, but what keeps coming to me is that there must be a better way to VISUALIZE the abstract into something more concrete.
Example. The other day in Calc III we were talking about minimums and maximums, and how they might occur on the surface or along the surfaces boundary. So I said out loud, "So, the surface can either be a volcano or a potato chip but either way there is a high or low spot somewhere on it." And half the class said aloud, "Aaaaaahhh!" - they got it because they were able to VISUALIZE the abstract concept as something concrete.
There has got to be a better way to con
A work that expires before its copyright never enters the public domain and thus enjoys eternal copyright protection.
I went back to school, about a year and a half ago, with an original plan of taking some community college courses, then transferring to a four-year school and getting a computer science degree, and an overall plan of working as a system administrator. In general, I'd found most of my classes ranging from easy to effortless, but I found calculus incredibly difficult. Calculus took up 90% or more of my study time, and I was still doing poorly. I concluded that if a computer science degree required that much math, I just wouldn't be able to do it.
My current plan is to finish up a certificate program in system administration, try to find work, and perhaps get a degree in technical writing later. My guess is that I'd be good enough at light-weight programming -- hooking up the pieces with Perl and so forth -- but I wouldn't be a first rate coder in any case.
I did find it puzzling, though, that the programming courses I've taken were almost painfully easy, by contrast with the math courses. It also struck me that while there was a wide range of ages in the networking and programming courses I took, the students in the math courses were almost all 19 or 20.
I have a hammer, and wrenches, and screwdrivers, and many other tools in my shop. I have over 100 books on mathematics and many more on applied mathematics (physics, engineering, comp sci, etc.).
I have TOOLS.
Making an analogy between Mathematics and a hammer is like saying I have only hammers in my shop.
When you have only one analogy in your life, all like looks like your analogy :-)
I learned Boolean Algebra for a CS degree. The application the University intended for its use was for designing hardware circuits.
As a programmer, over the years I have had many cases where I had to write programs that did different things based on a list of inputs and their values. My knowledge of Boolean Algebra has helped me make the code simpler because I could reduce the input values to the lowest equivalent. My resulting code therefore has less conditionals (if..then..else and switch statements).
I think people are looking at the problem wrong.
Programming is programming; it's a discipline independent of anything else. It involves logic, but not math. (Unless you include logic in math, in which case the answer to this question is "duh" and there's no point in having this discussion.)
If you're writing a program in a domain where math is important, for example calculating spaceship orbits or rendering 3D graphics, then math is important. This is also kind of a duh.
But here's the fun part: if you're writing a program in a domain where accounting is important, then the principles of accounting are far more important than anything else. If you're writing a program to run a coffeemaker, knowledge of making espresso is more important than knowledge of math. If you're writing a front-end to a database, then you need to know the principles of good GUI design much more-so than math.
Math isn't something fundamental to computer programming, it's simply a problem domain like any other. You can write a program to do accounting, you can write a program to schedule meetings, you can write a program to make coffee-- each of those problem domains are perfectly valid, and yet don't include anything like linear algebra in them.
Last time we had a discussion like this, I mentioned that colleges would better serve their students by teaching them GAAP (Generally Accepted Accounting Principles) rather than advanced math, because the number of graduates working with money is an order of magnitude higher than the number working with, say, calculating orbits. I stand by that.
Comment of the year
That's interesting, because I always considered combinatorics to be fundamental in my college program. I do find it very relevant when talking about software, because even having the ability to compare control-flow paths makes a difference. Code littered with poorly-organized conditionals makes my eyes melt, and it all boils down to counting.