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...
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.
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.
>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.