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)."
The one with more math is the one you want.
Math KNOWLEDGE may be debatable, but Math skills are essential.
If you don't have the ability to break up and solve mathmatical formulas, how do you expect to be able to solve complex programming tasks?
Plus linear algrebra is awesome. And everytime I do anything even remotely 2d or 3d related, I always wish I had paid more attention in Geometry.
But more than anything, its good to know that there's an equation for that. Even if you don't remember what it is, or how it works, having the simple knowledge that it exists to look up is more than worth the time of taking the class.
Another person who is ill defining mathematical thinking. I consider mathematical thinking not only Linear Algebra, Infi et al, but everything that requires exact abstract thinking and has the properties of consistency and a formal and defined "language" to represent ideas.
For that matter, I think that mathematical thinking should be defined more broadly, such as conceiving design ideas and representing them with, say, UML or DFDs as mathematical thinking as well.
So yes, mathematical approach is a must in programming.
Just my 0.02c of course.
4Z5TX
OTOH if you can't understand stuff like big-O notation you'll never be a good programmer.
No sig today...
It really does help to have math. There have been times when a software solution became ten times easier because I recognized it from a college math class.
Contrawise, when I work on software that uses math beyond my ability, I have trouble debugging it, and constantly have to rely on the math person I'm working with for help.
I would hope that if you are in the computer programing world you understand that cranking out solutions to formulas is way more suited to computers than it is to humans.
If you want to solve a bunch of math problems then boot up maple, matlab, or any number of programs.
Doing a bunch of calculus or whatever is _not_ the reason that you want mathy people to be computer programmers. Analyzing and quantifying problems, applying appropriate algorithms, optimization, etc are all areas where someone who understands the math behind a problem can far outshine those who don't.
To be honest though I think most software devs are into math anyway.
...but it's not the kind of math you might be thinking about, like calculus, etc. Rather statistics, discrete math, combinatorics, etc. are becoming essential skills if you want to be better than average.
Why not? The pay is good. The hours are reasonable. The work is easy.
There is a lot more to life than your job.
Math is necessary for programmers but also for life. That wasn't the best thing in TFA though. The most insightful nugget in this piece was that we should think strategically about what we choose to learn. One the one hand, a programmer can chase the buzz...Rails, Struts, and the Twitter API and get jobs with the cool kids. Far better is to learn general tools that will be around a long time. This is why I like free software and gnu/*nix. The community has built a core set of tools(scripting/database/web) that stands to be around for 20-50 years or more. Just something to think about as you build your programmer/sysadmin toolset (assuming programming/sysadmin work isn't just a temporary thing for you).
You need to understand it, but how often do you actually analyze non-trivial algorithms (one that require more than counting the number of loops and multiplying by known algorithm times)? In a 10 year career I don't think I've ever done more than that. Not saying more math hurts, and its interesting in and of itself. Unless you're doing 3D graphics (which require trig and linear algebra), you rarely use more than basic algebra and some discrete math concepts. I honestly say I've never used calculus or differential equations professionally.
I still have more fans than freaks. WTF is wrong with you people?
If you have to even ask that question, then you won't get a programming job that requires math skills. You'll be the bottom of the barrel in your programming group, and then a few of years later promoted as their manager because you can't do any of the technical stuff but are great friends with the boss, or you'll end up doing system support swapping out tape backups and fixing printer jams.
The question of whether a computer can think is no more interesting than the question of whether a submarine can swim.
Asking if math-skills are necessary for a programmer is kind of like asking if people-skills are necessary in the field of law. Some lawyers find success by performing in the courtroom and for the camera, while others find success in their skills with research, interpretation and analysis.
"Programming" is a massive category. Some programmers need incredible math skills to do their jobs. Some programmers convert thousands to hundreds with broken substring operations, then keep their jobs, and make good money doing it. So there's a spectrum.
But if I had to hazard a guess, I'd guess that the majority of programming jobs out there don't require very much mathematical heavy lifting. And often times if you do run into something that could be tricky, it's already been solved by someone else, complete with copy and paste source code.
Yet many programming jobs do require serious math skills, and probably (hopefully) always will.
TBH I don't know if some of the best software engineers I've met are any good at math. They're good at interpreting API documentation, good at structuring code to meet the strengths of the language they're using. Good at project planning, time estimation, and risk analysis. Good at understanding how computer and network systems work and -- often more importantly -- how they fail. They understand how users interact with software, and what users expect and want.
The truth is, software development has become as broad as life & human interest itself, and generalizations about the practice are becoming more and more meaningless.
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.”
Heck, perhaps my favorite college course was the one where we proved the equivalence of various math and programming problems. The more ways you learn to think about problems, the less details like the "language of choice" matters, and the more you can think in terms of "what's the right tool for this job".
Plus, as Feynman noted, if you merely have a different toolbox than those around you, people wil think you're a genius, as you can often see immediate solutions to problems they've been struggling with for a long time (and the fact that the converse is true only comes up if you let it). Having a large toolbox has worked quite well in my career.
Socialism: a lie told by totalitarians and believed by fools.
You don't need math skills for programming work.
You do need them for theoretical computer science, and in turn, you need theoretical computer science to invent something new that you could program. Most programmers don't do theoretical work themselves, and most theoretical computer scientists don't finish their software ;-) It's a completely different type of job.
A coder with great math skills can write some really slick algorithms. However, more often than not, despite how well their algorithms are documented, if they're working with a team of developers they are usually pushed to dumb down their code so as to accommodate the skills of everybody else on the team ('team' more accurately meaning 'project manager') to make it more 'readable'.
If you are a typical programmer, you'll be using libraries that already have the difficult math-y stuff worked out.
If you don't have any clue about what these libraries actually do, then they're basically as useful as a typewriter to a monkey. You don't need to reinvent the wheel every time, but at least you need to have a clue about how and why a wheel works.
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 documentation says what the libraries do.
I assure you, reading skills are critical to programming. To just about any job, actually.
This was of course just an example but it's true for a lot of stuff, back then you had to spend a lot more time optimizing your code as well, these days premature optimization is generally considered a bad thing (since in most cases it ends up being a waste of $500 worth of programmer time to squeeze out a performance gain that $50 in hardware would've have gotten you.
If you're planning to sell a million units containing both hardware and software, then "wasting" $500 of programmer time to save even $0.01 in hardware per unit is a really sweet deal.
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.
I think you need some statistics training :-)
To have a right to do a thing is not at all the same as to be right in doing it
...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.
without profound knowledge of math, you are a tinkerer. you program off the top of your head. To really, deeply understand what you are doing, you need math!
The MAFIAA is a bunch of mindless jerks who will be the first up against the wall when the revolution comes
You need to understand it, but how often do you actually analyze non-trivial algorithms (one that require more than counting the number of loops and multiplying by known algorithm times)? In a 10 year career I don't think I've ever done more than that.
Yes, but you at least know of big-O notation and what it means. You know that the "cost" of an algo can be measured and calculated. And that it's important.
There are far too many "programmers" out there who don't even know that.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
people who are almost universally respected in our field as great programmers are also great mathematicians. I am talking people like Donald Knuth, Edsger W. Dijkstra, Noam Chomsky, Peter Norvig.
I don't think these are great programmers. My respect for programmers goes to Phil Katz, Steve Gibson, the author of the Dark Avenger Mutation Engine and generally the people who consider their work to be an art form of elegance, minimalism and speed.
linear algebra is no help when building database driven websites
Oh for [whatever]'s sake, who on this earth started spreading the "wisdom" that all apps are database-driven web applications that do nothing more than displaying user-input two-line texts with images and videos?
I could list dozens of algorithms - even from my day-to-day use - that nobody on this earth would be able to correctly and efficiently implement without proper math skills. And even the term math is too broad, natural language-related stuff, image/video/vision content processing stuff, simulation stuff, overall machine learning stuff plus ai-related fields, control systems - and I could just go on forever - don't come without their associated - sometimes fairly deep - math topics.
The social web will come and go, but apps and algorithms that do something even remotely useful, won't ever be accomplished by math-knowledge-lacking code monkeys.
I am putting myself to the fullest possible use, which is all I can think that any conscious entity can ever hope to do.
the bottom line is: yes, you can use libraries (for this, you don't need much math), but to be a GREAT programmer, you need to be able to program things yourself (for this, you need math). If you can only piece together other peoples code (which you don't even remotely understand), then you are a tinkerer. It will be complete coincidence, when your code works reliably and fast.
The MAFIAA is a bunch of mindless jerks who will be the first up against the wall when the revolution comes
Just yesterday I wrote a short article ( http://goo.gl/dko2 ) after reading about how Facebook are using Mathematics to help with Failure rates in their datastore clusters.
There is a 24 page presentation by Avinash Lakshman and Prashant Malik, which describes (page 17 onwards), how the company are using Probability Theory to help them detect failure in a datastore.
Probability Theory is just one area of Mathematics, and degree level Mathematics would usually include at least one or two modules in Probability.
If I were an Operations Director or Development Team Leader at a large Social Networking company, I would certainly view University Level Mathematics as +1 for anyone applying to join the team.
The short article is here and the clickable link in that article should take you directly to somewhere (slideshare, etc) where you can view the 24 page .pdf
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.
I write a lot of software for experimental physics applications, statistics is absolutely vital for data analysis software... Calc is essential for PID control methods as well. It really depends on what you want to do, but having higher level math skills will make you a better programmer in the long run.
There's no reason that "most programming work" and "truly interesting work" would have anything in common.
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.
People are saying two things here, and thinking that they're mutually-exclusive. Some point to areas of commercial programming beyond basic CRUD operations, saying that math would be a big help there. Others point out that for standard CRUD and gluing together pre-written software libraries, math skill doesn't much matter either way.
Hey, they're BOTH right. However, the trend is moving toward the latter type of programming job. Forget high-level math... I seldom use my COMPUTER SCIENCE skills on the job. I vividly remember participating in a code review session around 5 or 6 years ago. I started to point out why a particular function was inefficient, and wrote some O notation on the whiteboard. There were 8 Indian developers in the room, and they had no idea what O notation even was. There were three other Americans, and they had only vague memories of having seen it at one point back when they were in school.
That was the day when I finally just "gave up". I now approach my professional life as the job that it is. I integrate Spring and Hibernate with your legacy system. I don't get too excited or worked up about it. I leave promptly at 5:00 each day. I'm well-paid for doing what feels like very little work. Most of all, I look for my intellectual stimulation outside of work (mostly on the clock... typical jobs let me spend half the day goofing off online). My point is that I have to disassociate modern programming from real intellectual pursuits, or else I'll get depressed over how trivial and boring this line of work is. If I DID know PhD levels of number theory, it would just be something else going to waste and I'd have to avoid being depressed about that too.
Having a lot of math knowledge in most programming environments today would be like an experienced patent attorney posting on Slashdot. You'd be surrounded by people who LOVE to talk about your field, yet generally don't have a clue what they're talking about. They misstate basic ideas and rules constantly, and it irritates the hell out of you. However, they all THINK they're experts... and in fact know more about the field than you do.
No thanks... I would pass.
Basic math (i.e. 1+1 = 2) is obviously an absolute requirement.
Algebra too is mostly a requirement (though if you did programming first, you'd probably find algebra alot less difficult cause you'd dealt with representative values).
But thats where it ends for almost 99% of programmers. Programming is really about shuffling bits of data around and so you can get by with only those two skills. However, the rest are very useful depending on the field.
For example trig and calculus are infinitely handy in any kind of spatial programming, but knowing vectors and transformations are often essential if your getting into 3d coding (though u can get by without it, if your using a library).
The rest are usually straight forward and dependant on you already having the math skills. I.e. if your going to be coding something that deals with statisics, that you obviously need to know statistics.
Ultimately, any math you know is to your advantage, but not really essential unless you dealing as a coder in a pure math realm (i.e. trying to implement a math algorithm within code). There are indeed many things you could code that are based on math without having to understand the math behind it.
For example using rand() is easy, is based on math and you can use it without understanding it. You can also learn to understand the difference between random number generators without understand the theory of their operation, and indeed understand what the difference between strong and pseudo random number generators really is - again, without needing to know the maths of their operation and be a very effective coder.
Another example if neural nets - its easy to understand their operation in terms of a pure coding exercise if your using someone elses neural net library - their operation is quite simple. Writing the library would require a reasonable amount of math intelligence though.
There are huge numbers of example where these things are fundamentally true, things you may build on that are based entirely within the math realm but understanding their mathematical operation is fairly irrelevant (but useful).
What alot of people do think (and it annoys me no end) is that you should be able to reinvent the wheel constantly. This is a time waster. If your writing some program that uses a neural net, the only reason to know how to implement your own is if the several out there cant do exactly what you need. This is what most people do anyways, "gimme that library" and reuse peoples work - its the backbone of how we code and ultimately the world as we know it would be alot different if we didnt just use the library that does the thing we want rather then implementing our on constantly.
But as i said, it depends on what you want to be as a coder. I would say having high-school maths in your head is going to cover 90% of coding jobs easily (i.e. 1+1=2 and algebra). I really dont know too many coders who need more then that myself.
>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.
You choose 'quicksort' because it says 'quick' on the label. Your data is mostly sorted already, so it should be really fast, right?
I am TheRaven on Soylent News
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).
== true
How did I do?