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.
If you are a typical programmer, you'll be using libraries that already have the difficult math-y stuff worked out. If you can understand simple arithmetic, you've got all the math skill you need to be a programmer.
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
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
Highly subjective - and it's not unreasonable to say that if the above holds for the field of computer science, then it pretty much holds for most other fields also. To do some truly interesting work, math skills are essential. Substitute your prefered value for "truly interesting".
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.
Do you mean programmer? Or script kiddy who can kludge together a crap program for windows or the web?
One WILL need math skills... Guess which.
> after all linear algebra is no help when building database driven websites.
I bet you're one of those people who sat in English classes going 'ugh, when is *this* ever going to be useful?'.
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.
Whether the actual math knowledge helps or not, the act of learning the math imparts knowledge you'll need. Learning to learn is a skill.
...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.
I have a math degree and worked many years as a programmer without using any math at all. But in the past year or two I've had to use quite a lot, including hitting the books (well, the web) and learning a bunch that I didn't know before. The issue is large data collections, social networks, high volumes of web server logs, etc. Sure you can run logalyzer and find your most popular pages, but if you really want to figure out anything about user behavior, you've got to start using more serious statistical/machine learning methods, and if you want an advantage over the other guys, that means you have to be doing stuff that they're not, so you can't just run some canned package. You don't have to have the Google/AT&T/Microsoft research department at your fingertips, but you've got to be able to put through some mathematical analysis that applies to your own situation. By using just a bit of imagination and some home-cooked math from wikipedia, my underfunded 3-person group was able to beat the results of 100-person teams of corporate java monkeys. I think that is going to become more and more typical. Day to day programming work now hits problems with lots more mathematical angles than in the old days.
Want to know one of the hardest real world math problems that a regular programmer should care about? Look up "Netflix challenge".
'Higher math' in the traditional sense may not be a requirement, but discrete mathematics (http://en.wikipedia.org/wiki/Discrete_mathematics) has long been and continues to remain a highly-valuable (if not crucial) skill for any number of reasons. Many of its concepts map directly to programming constructs. Writing conditional statements based on boolean values? You're enjoying the wonderful world of boolean algebra. Want to use those randomly-generated numbers correctly rather than naively throwing them at a problem? An understanding of set-theory/probability subjects such as the principle of inclusion/exclusion is key. Do you need just one enumeration, or do you need a set of flags? Well, that depends on whether the group of characteristics you're differentiating between form equivalence classes (dividing your input into disjoint subsets) or not.
tl;dr mathematical concepts typically form the underpinnings of even programs that don't manage a single numeric variable.
Fond memories of the optimization-course I took based on Luenberger's "Linear and Nonlinear Programming", I think my mind was beneficially shaped by that although I've never directly used that knowledge for coding.
On the other hand I once took a course titled "Functional Analysis" which kicked off with discussions of countability and the Cantor set - IMHO a total waste of time, I'll never get those hours back.
To develop algorithms, Yes, you will need math skills but that will not be sufficient. you will need also the knowledge of the dataset you want to process. You do not analyse Facebook data the same way as Afganistan images from UAVs or LHC events.
So you will have specialists that will tell you how the data need to be analysed.
You as IT specialist will need the basic math skills to apply what they told you to.
Math is not sufficient in most cases.
The best mathematician in the world will not be able to tell you how to simulate a galaxy or how to go from a diffraction pattern to the structure of a protein.
If it is these stuff that you want to code. CS is not the major you should have chosen.
I have no more than basic math skills. I don't do much programming, aside from the occasional butchered-together script. I can grok SQL, parse C, and write some shell script and Perl, but only infrequently do I find a need to.
But then, I only know what my job needs me to know, and that changes daily. I don't consider myself a programmer, but those around me in life seem to disagree.
That being whatever it is: Discuss.
Kid-proof tablet..
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).
No one's going to argue that you need to understand arithmetic, basic algebra, maybe even some geometry, statistics, and trig depending on what you're doing. That's true frankly not just for computer science and IT, but for any even semi-technical field. But integral calculus? Differential Equations? Nonsense. But yet most colleges require two to three years of calculus for CS majors. A lot of this is probably because CS is part of the Engineering department and it's easier to just make the core requirements the same, and I'm sure a lot of it is just plain greed.
Math skills are undeniably important; but there's no denying that, as with a lot of things, many universities take it to illogical extremes, which is more likely the origin of any math antipathy in the CS community.
I aint never taken much to cypherin but it t'aint stopped me hankerin to be a brain surgeon and that's whats I'll be, soon as I finish the fifth grade!
Signed
Jethro Bodine.
For graphics you obviously need trigonometry. Lots of things we used to develop earlier is now available as free libraries. Much more important then advanced mathematics is, IMHO, having good estimation of how will certain solution or algorithm perform in various situations. This is developed in programmers head with time.
839*929
Even if you don't end up doing any actual high-level math, the ability to work with complex problems in a mathematical fashion is essential.
What the fuck, computer science is the purest application of math! Software engineering is the usage of computer science to construct practical applications! YES, IT IS GOD DAMN NECESSARY!!!
linear algebra is ONE PART in mathematics, but handling quantity operations (like on a database) is also an area of mathematics, so no matter what you do - math skills will help while programming !
Many unskilled people do make this mistake, so don't cry but keep learning.
Since 99.8% of the "programmers" out there seems to get code monkey jobs where they have to translate an algorithm from one language (or diagram) to another, those don't need many skills at all. Especially not when protected by schemes like MISRA, code reviews and QA.
The other 0.2% wouldn't get the job unless they had skills. I hope. And math is probably included there somewhere.
(Figures totally out of the air.)
I think the correct answer is "it depends". Programming can cover an immense range of possibilities, some of which certainly use high level math and a lot of which don't. However it is also true that anything that requires a substantial amount of really high level mathematics should be written once as a library and then re-used.
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.
As usually, the answer is "It depends, what exactly do you want to do?"
Just two examples for Programming where you need to know your math:
Scientific calculations / simulations -- definitely yes.
Computer Graphics -- here you need basic linear algebra
Strictly speaking, you can survive without being able to do basic arithmetic by yourself,
but then you will get the boring, stupid jobs that have no need for brains...
If you want to learn something, grab yourself a book on discrete mathematics, the stuff contained in
there will be mostly useful.
Remember: if you program something, and then try reason about whether it does what it's meant to do,
under any circumstances, you essentially use mathematics. That seems like a rather useful ability
for a Programmer to me...
From my experience I found the understanding of Mathematical Logic to be absolutely essential for any programmer.
Hack your mind out of its sandbox.
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.
Oh magnificant one, what is this "interesting stuff", and why is the stuff I'm currently doing (which isn't very math-heavy) not interesting? Seems rather subjective to me. For example, I like games, I like to play games.. A lot. That doesn't mean I want to labor all day building a game. What is "truly interesting" to you may just sound plain ol' boring to others.
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.”
I can answer this honestly, I've been 'programming' nearly 30 years now, I make a very comfortable living, and I actually consider myself to be one of the best at what I do. But I have absolutely horrible math skills.
My math history consist of failing pre-algebra in 9th grade, having to suffer thru remedial math in 10th, an advancing all the way back to pre-algebra again in 11th grade. Where I went to school (GA in the 80's), the only required class in 12th grade was English, so no more math I took. Not that I was dense, I was actually in the gifted programs until I stopped caring about what school was teaching me, and was way more interested in what I was doing in my spare time on the computer.
Now I get paid to solve problems. Mainly big business problems that are worth millions of dollars to my clients. This rarely involves much math. My expertise lies in automating processes, integrating existing systems, and creating simple interfaces for people to work efficiently, with even less skills then myself.
I did eventually spend quite a bit of time teaching myself all the things I missed out on, like geometry and trig, but this was purely for personal reasons, I never use that kind of math in a business environment.
From sorting data efficiently, to calculating statistics, to drawing geometric shapes.
Programmers should cherish the mathematics and abstract thinking - it's the only part of our expertise that is guaranteed to remain useful until retirement, when all our favorite languages have become either obsolete or unrecognizable. (And visual interface design has been rendered obsolete by brain implants. :P )
That's a good way of putting it. I'd also point out that programming and math are very similar- they're both formal languages for discussing abstract concepts. I'd think if you're one of those people who see a line of math and have to puzzle out each symbol individually, you'll have problems with programming. If you can actually think in terms of those symbols, you'll be able to do the same in $LANGUAGE_OF_CHOICE.
I still have more fans than freaks. WTF is wrong with you people?
The thesis in TFA is that developers are mostly busy building CRUD code and 'websites' and that if you don't want to get completely tired of it 5 years down the road, you need to do other things, possibly just for yourself (because at work you only are building CRUD/websites) and then come up with problems where math is King, and this is so that you will get more 'respect' like those great software guys like Dijkstra, Knuth etc.
Well, I'd say if you are only doing CRUD/websites now and that's it, you should be concerned about your job 5 years down the road, that's the kind of stuff that gets automated/outsourced eventually. You are right, do something more than that.
The question really sounded like this:
I am bored with my job. Will it help me to get into heavy math and math related projects to fight this boredom I am experiencing at my work?
Answer:
Who knows? Will you find it personally satisfying getting into some heavy math stuff so you can be like Knuth and Dijkstra? Are you looking for recognition as a 'great' programmer or are you really interested in building stuff for yourself? Sounded more like you hate your job and you want to be famous to me :)
Maybe you should quit this and become a professional rock star; that will fix the boredom problem right up, if you are good of-course.
Or maybe you need to find a better job, so you don't work on CRUD/websites all the time?
Or maybe you should realize that working, having a job is kind of boring, it's not there to entertain you, it's there so you can make a living?
Or maybe you'll involve yourself in an interesting project, learn some math or whatever and become like Knuth or Dijkstra or Woz? Or like Gates? Who knows. But my gut feeling is that you are not really a math kind of guy if your primary motivation to learn more math is that you are bored of CRUD/websites job and not math itself :) so don't be too disappointed if any project you involve yourself into will degenerated into CRUD/websites kind of project quite quickly and not too much explicit mathematics will be used.
You can't handle the truth.
I've been a programmer for 29 years now. First in BASIC, then PASCAL, MODULA II, C, C++, SQL, C#, and the usual web technologies.
In all those 29 years I have never once needed math skills beyond what an education to Year 12 in Australia provides. It's true I did do the math classes, so had exposure to differentials, matrices, vectors, and other mathy stuff - but none of that was ever needed.
What I did need was logic, algorithms, an understanding of how an algorithm executes on a given piece of hardware, and the ability to convert business requirements into lines of code.
I worked on a range of software which included custom written software for businesses, event driven presentation software, high availability online applications for the London Stock Exchange and FTSE, and tools to manage and value instruments for financial markets.
The financial market tool took the longest to release (1.5 years to phase 2) and had the most intricate math requirements. Of course, all the actually tricky math was in a library with came from Bloomberg, so the hardest part was coming to terms with the various instruments, storing them, linking to the library to get values out using curves, Black-Scholes, or whatever.
As for the best programmers being mathematicians, the single worst programmer I have ever worked with was on this project and he had a masters in Maths. His code was sloppy, poorly written, badly documented, and make itself dependant on an extra framework he decided to add to the program because he always used it. He was also spectacularly boring as a person. This was the first project I have ever asked to be removed from.
Seems like the writer of the article likes maths and is trying to come up with conclusions from there.
All those moments will be lost in time, like tears in rain.
I am a C programmer for an equities clearing company. Basically we just work with a lot of data. Higher math skills are completely unnecessary. To go against the programmer stereotype, I don't have a great interest in math. Math, so far as I've seen, is only necessary if you work in the game development world.
that's teh shizzle bizzle
Set theory (what you need to understand to make effective databases, for your "database driven website") is still mathematics. There's more to mathematics than linear algebra or differential calculus.
Oolite: Elite-like game. For Mac, Linux and Windows
People who are good at math tend to be good at logical thinking.
Similarly, people who are good at logical thinking tend to be good at math.
Relevance? To be a good programmer you need to be really really good at logical thinking - without it, you'd take way too long to "crack" a problem or devise a new algorithm or plan an inheritance hierarchy, etc. A strong background in math is therefore advantageous, but is not an absolute necessity.
It boils down to what exactly you are coding. If you are writing a specialised statistical tool or engineering software or..... no doubt math skills are essential. Otherwise, as several others have already pointed out, there's probably already a library that does the basic things for you.
Case in point: Let's say average Joe programmer is working on a GUI that displays statistics in the form of fancy looking 3D charts. Someone with really good mathematical knowledge of graphing techniques (not to mention the math involved with the 3D bits) created a library that has all the graphing functionality in it. Joe programmer comes along, with a relatively rudimentary knowledge of math, plugs the library into his GUI, and has to figure out how to use its API - overall, the task is quite easily accomplished.
However, let's say that Joe programmer was just a GUI that merely displays the statistics, but one which actually understands it and even does some highly specific detailed analysis of said statistics - then the situation would be completely different - Joe programmer would need to acquire the necessary math skills, before even being able to competently code the application.
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'.
Count the loop nesting, look up any well-studied algorithms, and don't be a dummy about computation/storage hidden behind layers of object-oriented obfuscation. It's easy.
Seldom does anybody need to determine things down to the last byte or CPU cycle. You can't do that anyway unless you use something like assembly. In the time you might spend improving your estimate, computers will get faster and your software project will get later.
Just doing rough estimates puts you way ahead of everybody else, allowing you to avoid severe stupidity. BTW, remember that any libraries you depend on may become worse in future revisions, and you're screwed if you don't have the source code to fix it.
For work (e-commerce website), I've used statistics, linear algebra, calculus, differential equations, category theory, operations research, and a bunch of other things that have been so internalized in the course of a comp sci degree and a decade of employment that I don't consciously think of them as math.
I'm pretty sure I haven't found group theory useful for anything yet, but who knows how long that will last.
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
I think more important ability than being good at math is having a very active imagination than can be focused and having the ability to think outside the box. Personally, I have a very active imagination and an open mind and I found them very useful so far in my software engineering.
What I would like to know is what are the best resources to learn math? I find wikipedia's math pages are written in such a way that they are pretty near impossible to read, they are all technical accuracy and no explanation.
Are there better resources that don't involve taking 3 years off work to go back to university?
Next month marks my having worked professionally as a programmer for twenty years.
That is all.
How can understand database properly if you don't know Set Theory and Boolean Predicate Logic?
Many of you are operating under the assumption that there isn't a need for lower-rung programmers.
Much of programming is understanding workflow, UI design and other things that don't involve complex math.
I'll take the guy who understands the APIs and doesn't know math over the guy who understands math and doesn't get the APIs.
Yes, you will have to have *some* understanding of math, but how much and what kind is really dependent on what you are developing. If it is a database fed, scripted web page, the required calculus won't be that much compared with a missile guidance system or a 3D rendering engine / driver (because it is a completely different problem domain).
In most development cases you have to break down complex problems to many simpler ones to make it maintainable. This breaking down strongly reduces the math complexity in most cases. Writing maintainable code is often more important than fiddling around with the fastest algorithm (but there are exceptions, few).
Programming is not a monolithic field. It depends what you do. Obviously, if you work with large datasets, then there are some statistical things you have to do. On the other hand, in my field, embedded software, you don't usually get much further than simple multiply/divide loading estimates. If there is a complex algorithm, it comes from the field specialists. That said, I had to dig into the maths a bit to implement Raid6 - but it was still a matter of understanding someone else's work.
Consciousness is an illusion caused by an excess of self consciousness.
You can go on for ages about how maths is the "universal language". I sound like a university recruitment brochure, but it really is true about writing something along the lines of $\int f(z)/(z-a) dx=\ldots$ and being understood as well in Moscow as in Washington as in Brazzaville.
For example, the TCP protocol is hopelessly broken for any real time communications yet countless real time applications use it. Same with the use of blocking IO models.
DROS - Open-Source Robot Software
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.
There are two very important parts of computer programming: the ability to follow a logical process; and the ability understand maths well, to at least high school level. The first enables you to write a program that flows and the second means that you will be able to work with (e.g.) arrays without creating overflows. Put simply, computer science is a branch of applied maths.
It partially depends on the definition of "Truly interesting work".
The point of math skills is mostly that they are problem solving skills. You want programmers to have those skills.
I think the point of 'ever larger data sets' is moot. Sure- someone will have to be on the forefront and develop the truly interesting algorithms- but for handling large data sets, this has already been taken into consideration long ago: heap sort will perform in O(N*2log(N)), quicksort will run in O(n*log(n)) but can be run in parallel to run in O(n). It's a done deal. Truly interesting work may not be to reinvent the wheel once again, but instead to just use libraries and actually get neat stuff done.
One could argue as easily that the "truly interesting work" does not involve a lot of maths but electronics instead.
Visit http://ringbreak.dnd.utwente.nl/~mrjb/growingbettersoftware to download your free copy of the book
Skorks says that if you want to do interesting work you need mathematics skills.
But isn't it only interesting to those who are interested in maths? In which case you'll have the skills already.
...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.
The issue of programmer's lack of math skills is perhaps one of the biggest reasons of the sorry state of Linux audio that's existed pretty much to this very day.
It seems as if very few FOSS coders know how to write even the relatively simple signal-processing code that's needed for playing some files while doing any necessary sample-rate conversion or mixing, and while maintaining sync with the record-in. And the ones with the skills are too busy working and getting paid to apply those skills to other people's problems. (This isn't meant as a snide remark against coding for money - heck we all need to eat somehow - but more as a recognition that one of these days I owe it to myself and to the community to find the time and use these skills to improve the software I use and enjoy.)
So the article is saying that in some fields of programming it might be better to have good math skills? That's pretty ground breaking.........
Here's the secret to immortality:
isn't a bit of mathematics handy for working out complicated expressions to put into your computed gotos?
If you don't understand the difference between a O(n) sorting algorithm and a O(n!) one, you're pretty much screwed as a programmer. If you don't know much math in general, *at least* learn time complexity for different algorithm operations. Perhaps this is why software is so slow nowadays? ;-)
Mathematics is essential so that you can spot when things will break, and how to fix them. You can't program solid algorithms without it.
[Intentionally left blank]
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
The whole reason computers were invented was so that humans WOULDN'T have to do maths in their heads any more...
Maths is about as useful to programming as knowing how to ride a horse is to driving a car.
Has anyone ever see what a LTD company in the UK has to do to generate a VAT invoice. For eCommerce stuff maths is very important.
Where I'm working, I started out as a generic software developer. Having some math competency permitted me to lead a really interesting software project in acoustic modeling. I'm not developing the mathematical models, but I need some math fluency to be able to communicate effectively with the acousticians who do develop the models.
So at least for me, knowing a little math enabled me to be part of the best project of my career so far.
Obviously your mileage may vary, especially for more routine business information systems development.
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.
With only three years in the programming field with the backoffice of one of the top software companies in the world, I have got the feeling that most of the jobs do not require much mathematical skill. Especially in my kind of setup in this part of the world, because if you have the most rudimentary logical skills, then this is all you ever need to get your job done. Our team maintains a product which was developed five years ago by handful of people who have all moved on. Since this product has become so stable that the most of the requirements seldom requires us to cut into the muscle to fix anything. So our team spends all its time doing work which pretty much can be done by a high school grad or an arts student with little or no knowledge of, or inclination towards, mathematics. But does that give me a reason to think that Maths is not necessary at all for programming? No, because I know I can not go very far with where I want to go if I don't have strong logic and mathematical skills, and the desire to learn.
Although some of the programming I've done has involved mathematical calculations, I've never specifically needed a knowledge of real analysis or differential geometry in my programming efforts (which is a good thing, since I've probably forgotten 95% of what I learned in those classes). Where my math background becomes useful is in developing algorithms. Developing an algorithm is like creating a math proof. Those who can do the latter well should be able to easily do the former. The converse is not, in general, true.
Geology - it's not rocket science; it's rock science
I currently work with bioinfomaticians (I am the database guy in the group, and the only one that has had a job outside academia). A lot of bioinfomatics seems to involve fairly complex statistics these days. I try and tech them how to use a database, but they are more interested in using flat files than learning a few lines of Perl code to connect. Hardly any of them uses a debugger (not because they are so smart that they don't need one, but because they can't be bothered with the learning cure of setting up a project in Eclipse).
Sure most of them know more Maths than me, but hardly any of them could build a reliable scalable system.
Logic and formal reasoning are essential for programmers. Mathematics is like programming based on the two.
Real mathematics skills like writing down a mathematical proof is only a hindrance.
The reason is that Mathematicians are kind of sloppy when writing down a proof, its not formal at all.
Programmers need to be ultra precise in their reasoning and cannot permit to jump a very detailed (but boring) part of a proof (or program).
So in general programmers excel in logic and formal reasoning and Mathematicians are bored by it.
J.
I suspect that there are plenty of people who have sufficient aptitude for logic and problem solving, but flunked math at high school or college - which tends to be about memorizing definitions and rote learning of set-piece party tricks with numbers and simple algebra, wrapped up in the language of faux "not even wrong" rigour to make it look superficially like "real mathematics".
You're not going to get far in programming without some skills in elementary mathematical modeling - but most college/high school courses won't guarantee to teach you that anyway (unless you get a good teacher who cares about more than test scores).
Whether you need any knowledge of the mathematical foundation of computing is a different matter - I'd say you only really need that for the proverbial Google database, but what half decent programmer isn't going to be at least curious? Mind you, the math behind that is hardly recognizable as high school/college math (or even undergraduate physics math), even when it uses terms like "calculus" or "algebra".
I was slightly lucky to be educated in England, in the 70s, when they were experimenting with "modern maths" and introduced set theory, group theory, matrices and lots of number bases in the equivalent of high school. All gone, now - but then it wasn't very well taught and I suspect only the nerds who were already messing with programmable calculators and computers got anything out of it (learning how to solve a pair of simple simultaneous equations with matrices must seem bloody pointless unless you realize how easy it makes the problem to program...)
In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
Saying programmers don't need advanced math is like saying your doctors don't need to take anything beyond 12 grade high school biology. While emergency room physicians and trauma surgeons need to have a rich knowledge base of the anatomy and physiology of the human body, your ophthalmologist can probably get by without knowing much about cardiac output or fluid resuscitation volumes.
But they still need to know ALL of the human body because their actions, while localized in some fields of medicine, can have effects on other areas of the system.
I had a client a few years ago that needed incredibly configurable dials as part of the project's display and print capabilities. Due to the nature of the client, no 3rd party software was allowed because they required that the software had to be evaluated line by line for security reasons. I never took trig in H.S. or college. In H.S. my highest was general math. In college my highest was algebra II. The nature of how the dials and needles needed to be displayed was so complicated from a visual perspective that using any existing arc/gradient/line functions in the api were out so I had to build a customized library that worked at the pixel level both for screen and printer devices. I spent a week of doing nothing but learning the parts of trig that applied to my issue. If I were to go back 25 years, I'd take every advanced math course H.S. had to offer, and in college I would have continued to be more math focused. After that experience I've always wondered if I could have solved other problems more elegantly because I'd be equipped with a better toolbox.
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
Many fundamental programming elements require a firm grasp of math. Otherwise you are just cutting and pasting code you don't understand.
Further, math enhances the ability to logically and efficiently organize code and a coding project.
Finally, the more I have delved into coding the more I realize how now-forgotten math skills would help me solve problems. I remember what those skills could do, just not how to do them.
Any serious programmer also has to have some serious mathematical skills.
You missed the point. The question is: do you need math to do truly interesting work? The answer is: only if you are only truly interested in math. Otherwise you will find something else truly interesting.
If you mod me down the terrorists will have won
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.
"Math Skills for Everyone - Necessary Or Not?" ...and I'll even answer the question: necessary.
I often hear programmers saying Math is not important, and from my observations, it is often the programmers that are weak in Math. Sure there are probably good programmers that aren't advance in Math, but when big critical, hard to solve problems occurs (field issues, bugs, etc), it is often those who are strong in Math that need to step up. This does not even mention the fact that enhanced Math skills helps approach problems in different ways that sometimes leads to better success.
The broad-based American educated candidate will win over the specialised European candidate in both the short and the long term. Math, psych, philosophy, writing, all are necessary over the long term.
I'm a professional programmer who has worked for one of the largest department store chains in the U.S. for more than 11 years. I've never really needed anything more than very basic algebra and bitwise operations. I've written hundreds and hundreds of programs, mostly in C, C++, C#, Java, VB6, and VB.NET. I've worked with Informix, Microsoft SQL Server, and DB2 databases in my programs. I've written code to process credit card transactions, print complicated multi-part receipts with multiple control breaks, and calculate tax. I've been part of a team that has created brand new point-of-sale systems. I've created numerous back-end processing programs, some of them even CICS programs. I've written a messaging platform that handles the interaction between the cash registers, customer-pickup kiosks, and employee wireless hand-held devices. I've built stand-alone web servers. I've built tools that help us do Windows workstation builds. I've built tools that completely automate the creation of the VirutalServer VirtualMachines. I've built performance monitoring tools that display 2d graphs. I've built signature capture code. I've built rudamentary encryption/decryption routines These are just some examples of the things I've done in my 11 years here. I have never needed anything other than basic algebra for all of that. The only time I ever needed more math was when I dabbled in game programming as a hobby. I used linear algebra (which I had in school, but had to mostly relearn) and some calculus for 3d programming. The linear algebra was for the transformation and rotation matrices and the calculus was for things like calculation the normal of a triangle so that light would be calculated correctly. I didn't get real far with my game programming, but I did build a simple 3D engine that loaded my own 3D model format, rendered multi-level tesellated/textured terrain, had parallax scrolling sky billboards and a few other eye candy things. I also wrote 3 different model exporters. One for Lightwave 3D, one for 3D Studio Max, and one for Milkshape 3D. Am I great with math? Absolutely not. Do I have a lot of mathematical training? No. Did I need a lot of mathematical training? Not really. I did have linear algebra in college and Calculus I. I also had 1 statistics class. I didn't do well in Calculus class because my professor was absolutely the worst teacher I've ever had. I have a B.S. in Computer Science, if you are curious. Just my 2 cents worth.
Anyone who cannot cope with mathematics is not fully human. At best he is a tolerable subhuman who has learned to wear shoes, bathe and not make messes in the house.
i just graduated from school. the math classes that would directly relate more than any other were two discrete math courses. much or the second course applied principle to many computer science problems such as traveling salesman, Dijkstra's shortest path, and big O notation. was a neat additional viewpoint from a mostly pure mathematics perspective. it was a little odd that not everyone in the department had to take it though. it was required for software engineers but not for computer scientists. I don't find many integrals or derivatives or much other calculus in my day to day programming
But integral calculus? Differential Equations? Nonsense.
Once you do any kind of simulation, you'll need differential equations.
A lot of this is probably because CS is part of the Engineering department
Where I studied, CS was its own department, but I still had to do math. Also I never regretted it. Math is way more useful than most of the sh*t they taught us in the software-engineering classes.
Math educaton goes deeper than proficiency with math aparatus. Disciplined mind is really useful when you have to think abstract and uknown. Something you do when doing anything software.
http://opencm3.net, http://www.nongnu.org/gm2/
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.
I was educated in CS and operation research 20yrs ago, it didn't make me a genius but it did give me the ability to match a problem to the solution that a real genius had discovered in the past. Most people could work on the GP's problem for a lifetime and still not independently reinvent the kirkman and reiß wheel.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
I Disagree. A good developer needs much more than math, and you spend on a University too much time with irrelevant (to the generic developer) things like integral calculus and Differential Equations as example.
Honestly, I would have been happier if they had spent the two years of advanced mathematics that forced me to do on more useful things such as finance, design and advanced programming techniques.
And note, now I am a full developer with many systems running, and my work never had to use any advanced math.
Religion: The greatest weapon of mass destruction of all time
... mathematical skills are not necessary for programming. You can implement 'Quicksort' and 'Ray Tracing' very well after going through the complete works of Shakespeare, if not Anne Rice.
Fundamentally math is not about memorizing equations, math is about developing problem solving skills. All educational systems teach math functions and some apply those functions in story problems. Very few teach or explain that all math developed from a need to solve a specific problem. Most of those problems developed from economics, trade in resources. Many problems developed from engineering, construction, manufacturing. In every single case the math was developed to solve a specific problem. Computer programming is a problem solving profession. Like mathematicians, programmers take a problem and develop a solution for that problem. The three basic skills taught, reading, writing and ‘rithmetic, are to receive communications, transmit communications and solve problems. One of the huge problems with education in the United States is that our educational system focuses more on socialization and receiving communication than it does on transmitting communications or developing problem solving skills. You cannot program without developing problem solving skills and mathematics is the primary methodology for training in problem solving skills.
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
Anyone who says that maths isn't needed for a programmer is utterly kidding themselves - or working at the low end of the food chain.
I agree wholeheartedly with your assertion regarding the importance of mathematics to the programmer. On more than one occasion I found set theory particularly helpful; documenting relational database queries is much easier with set notation, and representing and manipulating data for another project led me to implement an internal language for the application based on the mathematical concept of a set. Even statistics has come into play during a few projects where estimating data and/or log storage requirements were necessary.
I got a Ph.D. minus epsilon in Math, but never took a statistics course prior to dropping out during the dotcom boom to start a software company. I would trade most of the math I know (which I rarely use) for a solid background in statistics, which comes up all over the place, from the performance of data structures and algorithms, to dataflow analysis, to mining databases, to projecting performance failure rates, etc. This is not just basic statistics (which I managed to pick up on the street), but a deep knowledge of statistics can make a big difference. I just co-authored a paper on a very simple data structure for which the key step in analyzing its performance is to apply the Kolmogorov-Smirnov distribution.
There's no reason that "most programming work" and "truly interesting work" would have anything in common.
In a well-known story, when Carl Friedrich Gauss was a little boy, his schoolteacher asked the class to add up the numbers from 1 up to 100 (1 + 2 + ... + 100). Like many programmers would have done nowadays, his classmates sharpended their pencils, sighed deeply and started adding up: 1 + 2 = 3, 3 + 3 = 6, .... To the teacher's surprise and annoyance, Gauss came up with the correct answer right away, by re-ordering the numbers like this: (1 + 100) + (2 + 99) + ... + (49+ 52) + (50+51) = 50 * 101 = 5050
Gauss clearly made use of his budding math skills here, and would have been a superb programmer had he been born two centuries later. But he hardly used mathematical "theory" to create this 200-year old "programming pearl"
Here's a related question that I run into more often, being on the math/engineering end of things:
Are programming skills required for math-types?
At least in engineering, the view seems to be that if you know your basic math and engineering principles, then all you need is some basic declarative programming commands, and everything else will follow. Long story short, it ends with people solving optimization problems with exhaustive searches and letting programs run for a week or two that, done properly, should take a fraction of a second. Data structures are generally out of the question. It scares me to think that so many people don't realize the true status of their programming skills, but at the same time there generally isn't room in standard curricula for any more programming. Am I being unrealistic to think that people need these programming skills? Is it just survival of the fittest?
I've been a professional (and quite successful) programmer for nearly 30 years, and am not too shy to admit that my math skills are practically non-existent. However, that being said, an equally poor memory has polished my *logic* skills to the point where I'm quite adept at designing and understanding computer software (particularly those written in C and assembly language). Although these days, I have the most success (and fun) writing "impossible" SQL queries.
So, I suppose the lesson here is that you can't really generalize that math is vital for computer programmers. Unless you include *logic* as math (and I never have -- it's really a very different animal IMHO). After all, that's why God created computers in the first place, right? To do the math *for* us.
"My country, right or wrong; if right, to be kept right; and if wrong, to be set right." --Senator Carl Schurz (1872)
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.
That is where this story falls down...
(for the web developers != means not equal to...)
There are lots of jobs where knowing an additional thing or two would be useful. Yes - if you are a book writer, being a great editor would help you a lot ( and vice versa), or if you are a car driver, it would be great to be a fabulous mechanic too. But, if you werent, it is absolutely ok, since the other fields keep progressing, and there are specialists.
You are a programmer - not a guy who specializes in planetary motion. If that is all you plan to do - that would be great, but then, you would not be able to understand fast fourier transforms for signal processing. Just cos you 'work with numbers all day' doesnt mean you gotto understand all math!
Specializing has its virtues, but saying you want to know everything in the world cos you are a programmer is just plain dumb. Programming is a skill - and a science. So why not stick to being good at something - and taking input from others for areas you are not good at,rather than learn everything ?? If more programmers were like you - we would be stuck with crap everywhere due to people who are masters of nothing, but learning everything.
The answer to this question hinges entirely on what sort of programming you want to do. Do you want to do game design? Do you want to model complex 3D visualizations? Do you want to program networks with sockets?
I personally got into web application development years ago because it's a pretty even split between design and computer programming. Also, while I'm not bad at math, I've never particularly enjoyed it. As a web developer (I swear it's still programming), I code Python, MySQL and Javascript everyday, and rarely, if ever, run into math tasks. While I must admit we've never had a client with incredibly math-heavy needs (some algebraic calculations here and there), I can honestly say I've never required any knowledge past high school for what we do. But we're not exactly in the business of computing Pi.
Define "programmer" and you'll have your answer.
Having a large toolbox has worked quite well in my career.
that's what she said
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.
You don't need math skills to do most kinds of programming. In fact, contrary to what they tell you in middle school, you don't need math skills in life at all anymore. Everything is calculated automatically for you these days. Don't waste you time with any more math classes. Now finish making my latte, bitch.
Really, I cannot believe that this is even open for discussion. Math not necessary!?!? The only one who would consider this opinion as viable is one who does not have good math skills or does not really understand what their responsibilities are for developing a report, user interface, application, operating system or technical gizmo of any kind.
May not need Calculas, may not need high level physics or an engineer's level of calculating ability, but one had darn sure be good at Algebra, Logic, Basic Accounting and Statistics. The most absurd look is that of a software developer at any level (usually the higher, the better the look) when you explain to them for the tenth time that the total value of the column has to be the actual total of the numbers in the column.
Totally absurd.
For about 10-20% of the programming positions - sure.
But there are other skills that are much more important in the majority of the positions:
Stop the brainwash
Hi Bill,
Yes, good programmers still need a solid back ground in math. Unless you are talking about web page developers.
Later,
Mike
Maths (especially algebra) teaches you how to think abstractly. That skill in turn creates good problem solving skills which combined with good linguistic skills and good code knowledge is what I look for in a programmer. Linguistics are the same as maths - it teaches you a way of thinking and reasoning.
As long as the programmar had mad skillz, math skills are not needed.
Unless the web site is totally trivial, you definitely want math skills. Any programmer who can't estimate the runtime of an algorithm (say, several interacting, nested loops) doesn't get a place on my project. And combinatorics & graph theory are a very good idea for any interesting web software. And how the heck can you build a data structure of any complexity without understanding how fast you can insert, delete, and find members?
I'm sure there are thousands of mediocre developers who don't think about these issues and just build stuff that seems to work.
Programmers work 50+ hour weeks, need to spend time maintaining skills they may not be using in their current job (to be ready for the next one), and need to spend time acquiring new skills (or else risk becoming obsolete). Add to this time for sleep, meals and the occasional shower.
So the question for me, as an early-career programmer, is: do I spend the 15 free minutes I have per week re-learning Linear Algebra, or studying Zizzmo++?
And please don't make the obvious lewd suggestion about how to spend 15 free minutes -- I do that in the shower!
"In designing an operating system one needs both theoretical insight and horse sense. Without the former, one designs an ad hoc mess; without the latter one designs an elephant in best Carrara marble (white, perfect, and immobile)."
-- Needham & Hartley, 1969
Applies to everything else, too, in my experience.
If you want a good programmer, pick the one who knows math. If you want a good software designer, pick the one who can lie convincingly to damagement.
Hope this helps.
N.a.J.
XKCD says it all.
No trees were harmed in the posting of this message. However, a great number of electrons were terribly inconvenienced.
Programming is everywhere! (tm)
For the last 30 years, 90% of the our new hires were EEs.
We do mostly embedded programming, so reading a schematic and a chip spec is just as important as math.
Basic (no pun) math skills are a daily need, but higher math is rare.
The other 10% employees handle the hairy math and hairy programming, the rest of us are clean shaven (/pun).
Never trust a man wearing a coat and tie!
I spent 2.5 semesters taking calculus, none of it was useful for me.
I'm now almost 6 years into my career and have never needed any of it. Good design skills, languages and knowledge of patterns are way more useful as practical money making skills. If the math interests you, by all means pursue it, if it doesn't, I'd try to get out of it.
Unless you want to get into a field where higher math is prevalent, and you'll actually be writing your own instead of using existing libraries written by people smarter than you, you probably won't need anything any mathematical operations but +, -, / and *. However, discrete math is very useful in basically all aspects of computer science because the computer is a discrete machine. And a lot of data fits well in concepts you'll learn there. It's also a lot easier than calculus.
Question everything
There are cases where the math to model something predated the thing that math was later used to model. But (more often probably) the math was invented (or discovered, not getting into that one), in order to model what was desired. It is my understanding that Newton's formulation of calculus was driven by the need to model his laws of physics in a formal fashion. As need is almost always the driver of invention/discovery this is not surprising.
refactor the law, its bloated, confusing and unmaintainable.
math is essential skill for any programmer, i have found myself quite a few times lacking the math skills to make something work. week(s) of mathematical brainfuck usually follow when it happens. i really wish i had better understanding of maths
At least, for much of what passes for professional programming. But in my very humble experience, the guys that brag the loudest that they've never needed any math to do any real-world programming are the ones who end up getting assigned stuff that involves very simple calculations---often just the correct use of libraries---and still manage to bung it up.
"if you want to do truly interesting work in the software development field, math skills are essential"
A lot of programming tasks don't require much math. But it's up to each programmer whether these tasks are interesting. The work that I find most interesting does require a lot of math, but would a person withouth math skills find the work interesting? Probably not, since there is a reason why these people lack math skills. They lack the interest.
Interested in math => good at math => likes to solve math problems => finds programming work involving math to be interesting
Not interested in math => not good at math => doesn't like to solve math problems => doesn't find programming work involving math to be interesting
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.
Negative Ghost Rider.
The logical order my brain works (which I'd argue makes me a decent programmer and a pretty good trouble-shooter) wasn't developed from math.. in fact the reason I didn't end up in the Marines is because I failed Algrebra ][ in high school.. (that summer, I took Geometry and aced it though.. I blame my Algebra on two things:
a- I don't do homework unless it's trying to solve a problem, in which case it's called 'research'.
b- My math teacher at the time was also one of the schools head coaches.. so his teaching style (which since I don't do homework, I learn from instruction better) was lacking.
I attribute the fact that I basically started `having to program` at an early age, both on a computer (1983 generation C=64s with a tape deck means you end up typing in alot of programs from Compute! and then realizing you can tweak this bit or that bit and make it do different things), and Legos/Linkin Logs/Erector sets, which definately teachs you to parts-of-the-sum style thinking.
I think aside from some college required stuff to get my AS, the highest math being a basic Stats course (which was all done on lab computers or calculators, so I didn't actually learn much math, rather I learned button pushing, which I was already proficient at).
Back to the OP:
I think the level of math required for programming depends highly on what you are programming.. not all programming is equal. Now I mostly program tool set front ends and system scripting.. there's not alot of advanced math there. If I was developing a new physics engine for a 3d world space, that'd be more complicated, but most of the math has already been worked out these days. Obviously if you're programming for academia, the need will vary based on which school you're working for. (The English Lit department might not have a high math requirement, until they ask for you for some 1-off off-the-wall project).
----- The internet has given everyone the ability to have their voice heard equally as loud.. even if they shouldn't be
With any form of navigation software (try coding coordinate transforms without a maths background), any form of signal filtering, any accounting type programming, any statistical analysis, any audio / graphics processing etc etc etc.
--- Users are like bacteria -> Each one causing a thousand tiny crises until the host finally gives up and dies.
For example, calculus hasn't been of great use to me in programming with large data sets. Anything pertaining to patterns and iterations, on the other hand, has been invaluable. Especially when trying to get run times down to something usable. A slow process is nothing; a slow process repeated over 100,000 record while matching each record against a different data of 40,000 records . . . that's a pain in the ass.
I scream. You scream. I assume that means we're both acquainted with the problem. We proceed.
Usually it depends on the nature of work you are doing. Some programming tasks are more math related.
neccessary? Arguable but maybe not.
Extremely useful and a competitive edge over others? Absolutely.
I double majored in math and CS. Getting good grades in math on my resume made me very competitive and helped me get interviews. Occasionally I use some of the things I learned in my math classes. The one thing that has been a constant help is the mathematical maturity I gained from taking the courses. It filters in to how you think and makes you a better problem solver.
I thought Slashdot was against redundancy??? We've gone over this before. Programming is a result of math so if you can't do math, well you're retarded, but you can't do programming either.
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.
What do they have in common? Why should a skier spend all that time in a gym lifting weights when all he/she wants to so is ski faster than the other guy? The mental excercises and thought discipline it takes to get through a math class qualify a person as capable and enhance his prospects in a career which requires similar skills. I don't use the math per-se, but I the skills learned help me adapt to the needs of maintaining my career.
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.
While much of the time I think that mathematicians are just off in their own imaginary worlds (http://www.maths.ox.ac.uk/groups/analytic-topology, no wikipedia article even!), I have found in my engineering studies that often we stumble upon a problem that has had a solution in math for a long time and is well understood even though it is (physically) "new".
I remember a story about the first electrical engineer to find an efficient method to find important (large) eigen-values for complex systems with many eigen-values, he "discovered" the solution by reading it in a math book. The solution was there just waiting for an application and so circuit simulation was pushed forward quickly because the problem was solved (hundreds of years before I think). (Sadly I don't remember enough details of the story to remember who it was or even exactly why these values needed to be found.)
>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.
Mathematics includes non absolute topics such as Chaos theory, fuzzy logic, & Markov chains. All behave according to the initial inputs, and two of them developed using computer-based research.
You don't need carpentry skills to build a chair, either, just the tools. It will, however, be a piece of junk. It will be wobbly, ugly, dangerous, and short-lived.
Like the above poster says: math comes in flavors. Choose the right ones I've worked at small niche-tech companies, and big companies including Google and Amazon. In my experience, calculus and statistics are of *minor* use, but discrete mathematics, combinatorics, graph theory, big-O, etc are *ESSENTIAL* to being a top-tier contributor as a programmer. My degree required 3 semesters of calculus and 2 of statistics. They have been of almost no value at all on a month-to-month basis. I took 3 semesters of "elective" math in other areas (discrete/linear-A/combinatorics) which have helped me on a DAILY or HOURLY basis as a programmer. I'm confident that most of my peers would agree.
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.
... the one with more knowledge of hydrodynamics is the one you want. You're conflating math as a measure of intelligence with math as a requirement to get the job done.
Math skills above the high school level simply shouldn't matter to a coder. A programmer assembles existing algorithms into a cohesive whole. He/she does not create fundamental new work. If that's what you are interested in, you should be in computer science, not spending your time writing C# or Java code.
Even worse, a programmer with a bit too much knowledge is dangerous. You might think you have a really cool (and much faster) alternative to the library hash functions, but from a professional mathematician's viewpoint, you're the equivalent of a chimpanzee who just figured out how the controls on a power drill work. And don't even get me started on statistics - of all the good programmers I've met, maybe 10% understand what confounders are and have some vague idea of how to deal with them.
I'm not knocking programmers here. But in general, they are the information era equivalent of plumbers. You don't want a hotshot plumber who has his own system of joining pipes to maximize flow volume. You want someone who does it the same way as the other million plumbers. In coding, you just need to understand what formula to plug in and how the components handed to you work. But if you're writing something that requires a high level of intelligence to produce, you're doing it wrong...
Support microSD: in a post 9/11 world, it is unwise to carry your data on media that you cannot comfortably swallow.
I am always amazed when people understand recursion without having studied inductive proofs. I did not truly understand recursion until I wrote numerous inductive proofs in my second year discrete mathematics class. Everyone studying computer science needed to take this course at my university. I think the ability to understand and apply mathematics is what separates computer scientists from programmers. I have been both, and being a computer scientist is more fun to me. I actually believe that math can hinder some programmers - if you know a lot of advanced mathematics and you are being asked to change colors around on a web page, that seems like it would be a hindrance to me.
I would rather be using interesting math to help me with my programs than not.
-Brian J. Stinar-
Never paid much attention in Diff Equ's class and I wish I had. Or rather I wish the material was presented in a much more practical applications way. Every time I went to a SIGGraph course or paper presentation on dynamics, the speaker would say something nebulous like "We implemented a 4th order adaptive Runge-Kutta solver" or "We implemented the Navier-Stokes equations". Sure you did. Let me see the damn source code, smartass.
I have a BSME degree, and had to learn lots of math to get it. But out in the real world, no one uses math, it is all done on the computer, so learn the math, and get busy programming, slave, or the we will return to the stone age!!
As far as a Computer Science degree goes, yes you need math. If your job plans are to write webapps or something like that (which is what I do, it's a valid career) I can't say you need math most of the time, or even a CS degree.
CS != programming. I know I'm slightly offtopic but too many, even in our field, conflate the two. I know I did while at university.
The "math" is easy.
My programming rate with 12 years post-secondary mathematics and 25+ years math use and interest is >> your rate without a good math background.
I get some jobs because I have the background no one else (available) possesses. Being able to program is the necessary expression of the problem being solved.
In one of my first jobs, I was asked to learn and apply mathematics to do some satellite orbit modeling. The Chief Scientist of the company was very pleased I was willing to take on the work, but to my surprise mostly because the company had joined the bandwagon of companies in the late 70s and early 80s in their enthusiasm for Comp Sci grads. Only later, he explained, did they realize that most were trained to apply algorithms in problem solutions, not to create solutions (especially those that required some math work). This was driven home when a colleague asked me for the solution to an orbit problem he had been asked to solve. I said sure, it's easy, and here's the mathematical approach you can use -- his problem was for a satellite we had not yet worked with. He totally balked and insisted that I must have a pre-coded subroutine available he could use?
Anyway, I'm happy that (at times) my interest in math has paid off in getting me work that others can't. And I get a premium because of the common feeling that "math is hard". This is especially true of management who can neither program or solve math-related problems and are scared to death and willing to pay :-)
Of course, to be fair, I'm no great whiz at database, client-server, and other more "traditional" programming challenges, so things kind of even out ;-)
Order of operations, operator precedence, variables, matrixes, trig, geometry, boolean math, and even calculous are everyday events for programmers who actually write useful software. Sure, you can create a basic app while being ignorant about math, but to do something useful such as write scientific, financial, or entertainment software, you will most likely need to know at least some algebra. But, here's the real reason to learn all the math you can: it conditions your brain for solving complex series of problems which is exactly what programming requires.
In my experience the one you want is the one that can read cryptic undocumented code and third party un-documentation. Math comes in handy sometimes but is frequently very domain driven and can be picked up as easily as picking up the rest of the data structures and algorithms needed for the task. Somebody that can figure out that when interfacing to a complex proprietary third party system the docs say to do X but really you need to do Y is more useful. Not that the two skill sets are exclusive.
At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
"Skorks contends that if you want to do truly interesting work in the software development field, math skills are essential"
"Interesting" is very subjective. I contend that truly interesting work in the software development field requires as few math skills as possible. Frankly, math isn't all that interesting to me.
I've realized recently that I now have a problem in my math classes. I think part of it is that I haven't had to do any math in a few years... another part is that I'm extremely lazy and the math doesn't interest me so I don't put effort in, and unlike say, my ethics class... I can't just BS my way out. But the final problem is greek, I don't recognize it, if it was rewritten in a programming way I would be able to do most of what I have to look at. But a single greek symbol means nothing to me. Math's terseness confounds me.
Given that all logical equations are also mathematical equations I would say very clearly, if you can't do math you can't write software. Also, just because your calculus skills are not up to snuff does not mean your Boolean algebra skills are not top notch.
I got through 2 years of calculus.
I've now been in the field for 30 years, of which about 2/3rds was as a programmer, and the rest as a sysadmin, and the highest-level math I ever used was when I wrote a database system, back in the mid-eighties... and that was logs.
mark
A solid foundation in maths is critical to everything, and it teaches you to _think_.
As I have pointed out before, logical constructs ARE math. Boolean algebra in most cases. The following bit of code is a prefect example of code that is both code and a mathematical equation:
IF (bob == true) Then
doSomeThing()
Else
doOtherThing()
End If
As a result, if you can't handle mathematical/logical constructs, you are pretty much worthless as a programmer. The opposite is also true, if you CAN handle logical constructs you ARE good at math. (You just don't know it. =P)
a language. Programmers are linguists. Just like garbage in = garbage out, the quality of the code is directly related to the quality (mathematical skills) of the coder.
Lately I've been reading a lot of ACM articles. A while back I noticed they started this same argument with a number of articles, one concerning the hypothetical solution to the P vs NP problem and one that is more real, concerning US Computer Science students.
ACM blasted the US educational system for their lack of trained computer scientists. They stated that US Universities are training Java api users and not computer scientists. They pointed out that a number of companies had been outsourcing their work because the US school systems weren't teaching the correct mathematics that an employee needed to be useful. According to ACM a number of companies even posted something along the lines of "US Applicants Need Not Apply."
In my personal experience, I would not have my job if I wasn't a dual major in Applied Math & Computer Science. Every company I applied to only looked at my Math degree when matching me for jobs in programming or software/systems engineering. 3 potential employers stated something that was eerily similar, "You can teach a mathematician to program and design software, but its nearly impossible to teach a computer scientist mathematics because they think they don't need it."
I'm not really stating a case against or for the topic. I'm stating the trends. Unless you just want to be a programmer for your entire life, I suggest learning more mathematics. Even if you don't feel its necessary now. You may find in the future that it is necessary or that you wished you had learned these mathematical concepts as they make life easier when designing complex systems.
My statements are more geared towards computer science students/professionals and not people who just like writing code.
Computer Scientist? Yes
Working on computer programs that are used in mathmatics? Yes
Writing a desktop application? Not really needed.
The Kruger Dunning explains most post on
Math teaches you how to think abstractly and see the patterns in what seems like unrelated pieces of data. I observed that programmers who know a lot math are great software designers - they can abstract common things in what seem like disjointed pieces of code. Abstract math is the ultimate illustration of the DRY principal (DRY == Don't Repeat Yourself).
...richie - It is a good day to code.
As an undergrad, one of the schools I went to tried to sell either a Mathematics dual major or a minor to the computer science students... The argument was that mathematics classes aren't necessarily going to be useful in what you do, there are many jobs where solving a differential equation does not matter.... But that by solving the math problems you learn to pay attention to the details and to analyze things breaking complex processes into pieces. The physics teacher used the same argument for physics saying it makes you better pay attention to detail and problem solve.
Anyway I don't know if any of that is true or not. I had a mathematics major friend who claimed that by locking himself away for a few years and solving some proof, somehow it would magically increase his analytic skills and make him more employable. I don't know about that...
I have a math minor, I'm not sure it helps that much. I have a "normal" programming job. And looking on the various job sites, most programming jobs seem to be linking some type of data to a database, either processing it, creating a web front end for it, etc... basic corporate development. Mostly it doesn't require more than high school algebra on the math skills. I see a lot of people considered "good programmers" who don't even understand Big O notation. But it's good enough for most stuff. Many of them intuitively know that a hash table is fast for lookups, and a sorted list is good if you need fast lookups and an order even though they don't know BIG O notation. In my jobs, the only really "advanced" math skill I pulled out was topological sorting for dependencies because I made a calculation engine. Also once I saw some code for a bisection method, which was mislabeled newton's method and obviously cut and pasted online. But an awful lot of the numerical methods have the formulas posted online with directions, so it seems like even the occasional numeric method is no problem. Most people's business reports are full of averages and percent increases which are all easy to do...
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).
As the article says, you can be a valuable developer without being exposed to or needing much math but you will be confined to certain areas. Normal developer work is mostly applied mathematical logic, but advanced math is normally not needed.
I think I belong to this group. I'm a chemist turned programmer/consultant and I now mostly work as a consultant for a company providing UML tools. I had my fair share of advanced math in school and during my chemistry studies, but those courses don't compare in any way to the math lectures provided in computer science. This were (introductory) courses in linear algebra and analysis and they were "pure math". Hard proofs and all instead of calculating or solving equations.
I'm nevertheless thankful for these lessons. They taught me consistent and recursive thinking as much or more so as real programming did.
Nonsense. It depends on the job at hand. If the program requires heavy math problems to be solved then possibly the one with more math... but math geeks often make terrible programmers since they focus too much on the math and not enough on the quality of the rest of the program.
I've written engineering programs for bridges and buildings and I'm not a civil engineer and only have high school math plus what I've studied on my own. No calculus, but I've written bezier curve objects that make awesome curves. I worked with a civil engineer who had epic math skills, actually epic practical math skills. In fact I taught him how to use object oriented languages to upgrade his programming skills which were cut on early Fortran systems of long ago lore. The parts that needed math he did but I checked his programming work.
Some of the best programmers I know don't have any advanced math skills at all. Most of the best mathematicians I know don't have any good programming skills. Some do. It's hit and miss.
When working on a project or product it's important to get to know the skill sets of the others on the team and for the team members to leverage each others skills. Thus the entire premise of this article posting is bogus since it asks the wrong question. It depends on what the programmer will be doing and if they have the rest of the range of skills that you need for that person to be doing for the tasks at hand.
Take more math. Everyone should. English majors should. Art students should.
The world would be a better place if more people understood math, in particular statistics.
I often hear programmers saying Math is not important, and from my observations, it is often the programmers that are weak in Math.
Isn't that obvious? I'd hazard a guess that the vast majority of programmers claiming that math is an inextricable core of programming are strong in that area. I don't see how the nature of the proponents of either side bear any relevance on their arguments.
You can read and write. That implies you can count patterns of symbols and use them. Combinatorics right there, and hence Number Theory, Set Theory, Number Theory, Group Theory, Number Theory, Logic, and Number Theory. And of course Number Theory. Did I mention Number Theory?
A bit of background. I studied Art as my major through school and breezed into Art College. I'm good. But I was also curious about stuff, and read philosophy, and got curiouser. And then I realized I'd never be able to _really_ understand patterns of any kind without Math. So I went and got a degree in Math and Physics (a highly recommendable combination). Golly did it change how I see the world.
I lament the poor teaching of the subject, the deplorable notation, the effortless and almost justified intellectual superiority of Mathematicians, and most of all the general ignorance of the subject and so the silly questions as to its utility.
But someone interested in programming asking if Math is useful? Gee, is being able to make marks handy for writing? Is the sensory perception of sound waves good for vocal communication? Is eyesight in any way a contributory skill for comprehending body language? Sure one doesn't need to understand physics to use all three but it helps (and Physics uses Math ubiquitously, expressly, and inescapably).
Programming _IS_ mathematics*. It uses different languages to get the points across to a dumb computer, but without it we wouldn't have computers! Yes it's great we've all these high level languages (Go LISP! Go Haskell! Go Prolog and Python!) Yes, it's marvellous we've an incredibly rich set of interoperating libraries ("set", Uh huh huh huh!). Yes we've got bleedin' amazing dev tools (emacs and vim :). But you simply can't pretend to use them without Math. Seriously, you can't. I don't care if you're a HTML+CSS+JS drone in a cubical, or a script kiddy, or a logo-learner, you're using Math.
Want to be a better programmer? Learn more Math**.
A bit more background. I'm doing a lot of programming now, and most of the hard work is in learning the new Math I need to express my whims, and figuring out how to use the libraries to do so efficiently ( http://en.wikipedia.org/wiki/Exergy_efficiency - Warning: Contains Math). Paper and Pencil are essential tools at this stage. The rest is a test of my concentration, short-term memory, and typing skills.
So here's some advice. Before making daft comments about well-established disciplines study them and their applications carefully. You will spend less time being thought of as an ass. You could do worse than start here: http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming
Math for the win!
* Which is why patenting software is execrably idiotic.
** I'd almost say "Want to be a better person? Learn more Math." Except that one can, and some do, learn Math in isolation from other subjects, and it can sometimes help them little if at all in comprehending life in general and their own life in particular. I know many sad stories in this regard. But still, it's good gear.
science in government
>As a Mechanical Engineer you might want to reconsider your career choice.
I have been doing mechanical engineering-related work for nearly 20 years now. I started as a draftsman and have worked as a mechanical designer ever since, with a very brief stint doing CAD system administration. I am listed on several patents through my work with fiber-optic interconnect devices.
While it is certainly true, especially in very serious engineering endeavors, that mathematical calculations are essential, and highly complicated. If you are designing aircraft, or rocket engines, or bridges, I'm sure there is a lot of mathematics involved.
But there is still lots of room in mechanical engineering for good old-fashioned mechanical intuition, and I have put it to good use over my career. My father, who is an actual PE in mechanical engineering, confirms that he has never used calculus since he left college, and he did and continues to to groundbreaking work with small internal combustion engines.
My work has revolved mostly around ruggedized electronics enclosure design for the last 10 years. I have used tools like Finite Element Analysis and hand-calculations to do my job, but generally nothing more sophisticated by hand than simple statics and basic algebra. It is true that I suffer from not understanding how to do FEA by hand, and thus one becomes very dangerously close to putting garbage in and getting garbage out and not knowing it, but fortunately the electronics tools are getting so simple that doing simple analysis are relatively easy and good mechanical intuition can usually tell you if you are getting good results or not, and testing will bear it out.
I can say that I have keenly felt my lack of true engineering background on occasion over the course of my career, which is why I am remedying that situation.
>Calculus III is the most tangible of Calculus for one to VISUALIZE seeing as we're dealing with boundaries in 3 dimensions that
>allow one to determine the Volume, Torsion, Angular Acceleration, externally applied forces in Pressure and internally
>expanding forces in Temperature of thin walled pressure vessels, Sheering Stress/Strain, so on and so forth.
I agree, and interestingly, I understand the CONCEPTS extremely well. I can see exactly what is being done and how it applies mechanically, and in fact I comment on this all the time to my fellow students who are kids with no real-world experience. I do Computer Aided Design every day so the entire course has basically been, for me, especially with my CS baground, a behind-the-scenes look at how such software functions to calculate end render and analyze 3D models. My failing comes from not being able to look at the mathematics and map it easily to the concept.
I've gotten a B in Calc I and II, and will probably do so in Calc III also, maybe even an A. I only have one more math class to take - Differential Equations.
Most of the problem in my early college career is that I was hell-bent to see how little effort I could put into my studies and squeek by passing. Much later as an adult it dawned on me that it is a million times less stressful to put in four times the effort and ace the class. For example, when I took Latin, I simply memorized all the vocabulary and the entire appendix of Wheelock's Latin. When I sat down to each test, I wrote out the appendix, and then used it as a decoder to translate Latin. It was a bitch memorizing the appedix, but tests were an absolute joke and not stressful at all.
A work that expires before its copyright never enters the public domain and thus enjoys eternal copyright protection.
There is a difference between "not knowing math", "not understanding math" and "not doing well at math."
I am horrible at math, and I've been bad at it all my life. I failed Pre-Algebra THREE TERMS IN A ROW in High School. I suck at math, period.
But, I am a successful programmer and developer and I've written a lot of code that does really complicated math... so how does that square?
The difference is that even though I can't do math, I know *what I can do* with it. I know what an Interquartarial Mean will do for me, but I have to look it up in a book every time I use it to know *how* to do it. In this case, yes, it is obvious that I would have a _better_time_ if I knew how to do this stuff without looking in a book, but I've fared pretty well. Lacking math skills doesn't mean I'm a suck programmer, it just means I may have a harder time with code that uses a lot of math.
Someone above posted "Two candidates, one knows math and one doesn't, you want the one who knows math"; that's true if all else is equal, but you never have two candidates for a job you are identical except for one thing. You buy the whole package and if you think their other qualities outweigh their lack of math skills then that's one you choose.
Hilary Rosen's speech was about her love of money and her desire to roll around naked in a pile of money.
One major component of mathematics is Set Theory and database programming uses Set Theory for unions, joins, etc. So yeah, Math knowledge is needed. On the other hand, mundane programming doesn't really need too much Math background, especially of the formulaic/formula-driven part of Math. What is needed is a sound understanding of Boolean algebra (which is what Digital Electronics --> Building blocks of Electronic computing needs), and thereby Logic. Do you need too much math background to do bubble-sorting, etc? Perhaps not.
Applications that are calculation intensive (statistical programs, scientific applications etc) do need Math background, but not necessarily beyond basic University level (provided there are statisticians, scientists who provide the underlying Math to the developer).
== true
How did I do?
Wow, it must really kill the evening when you find out your date has the bigger toolbox.
I've seen many many posts talking about "you need logic but not really mathematics"
I'm not really sure what the confusion is about why mathematics would be separate from logic in any respect.
Symbolic Logic is Mathematical Logic. Principia Mathematica clearly makes the case that math and logic are the same thing. As did many works around the same time and since. So how can you need logic for computer science or programming yet somehow not mathematics it just doesn't make any sense to me.
In 1964 when I started programming there were no Computer Science degrees and programmers of the day were split evenly between math and music majors. The ability for abstract thought was the basic requirement then. It was a different world. There were no "industry standards" like "C" or "*nix", everything was unique.
Thank a veteran -- George
I disagree. Math is not essential for a programmer, unless the program to be written requires math.
In my 12 year career my math comes down to some percent calculations for some basic stats.
"Freiheit ist immer auch die Freiheit des Andersdenkenden" - Rosa Luxemburg, 1871 - 1919
And if you don't know enough mathematics to know about the peculiarities of integer, fixed-point and floating-point arithmetics, your program will screw up some of those calculations in the most horrible way, and be somewhat less-than-accurate in others.
At the high school level, tying math into physics would be a win.
I had a colleague, a math major, who also taught physics at the high school I worked at.
I asked him why he didn't teach calculus and physics in the same course? He looked at me strangely.
"Look, velocity is the derivitive of position with respect to time. Acceleration is the derivative of velocity."
He had never thought of it that way.
Lots of high school physics is a lot easier with calculus.
In general lots of kids have real problems with abstract ideas. Even in college you run into students who learn better from getting the concrete exampels first, then the theory.
As to programming: While there is a bunch of abstract math that is likely unnecessary to most programmers, having a good sense of number is crucial. I've run into students who had no clue that four level deep nested for loops with 10 iterations each meant that the inside loop executed 10,000 times, or were completely unaware that their calculations were garbage because they overflowed large int.
There's something to be said for a course in formal logic too.
Programmers need math:
They don't need the same math that physicists or engineers do.
Third Career: Tree Farmer Second Career: Computer Geek First Career: Teacher, Outdoor Instructor, Photographer.
:P
Please don't get the wrong impression from this thread. I've been searching for programming jobs lately and the vast majority of them are the sort of thing the blog post is talking about: databases, business rules, and user interface, where the UI is mostly web these days. Note how the posters in this thread who say higher math doesn't get much use are speaking from personal experience, and those promoting it are talking in the abstract. Yes, there are jobs where you need to know advanced stats, linear algebra and calculus, but it's really the minority of programming jobs. And even then stuff like physics simulations are likely to be filled by someone with physics expertise who can also program, rather than "pure" programmers who know calculus. (Bioinformatics may be another story.)
My CS department in college required three semesters of calculus and two of physics. I'd done enough real-world programming by then to know it wouldn't make a better programmer. I did okay, but they certainly weren't my favorite courses. And y'know, I've never gotten paid to use any of that knowledge. I once had a discussion with a coworker about polynomial and exponential functions, but that was so he could draw a particular shape of curve in the UI. Calc and linear algebra have been essentially for learning computer graphics, and I recently got a hand-derive a function to interpolate smooth motion (calculate displacement as the integral of a quadratic velocity curve). But I haven't succeeded in getting anybody to pay me for that stuff.
The best way to find out if you're a decent programmer is to write a lot of programs. It really does seem to be a skill that you either have or you don't, to the extent that people from non-technical backgrounds will wind up falling into programming positions. I know a pretty good developer whose degree is in theater, and great one who dropped out of a biology PhD program. (Though the latter guy may have decent math skills, I dunno.)
So please don't discount a CS degree if that's what you really want. They may have some tough math requirements, but CS curricula are not very in touch with the real world. Even most academic computer science is discrete math, which is quite a bit different than calculus and may be more your sort of thing. That said, I'm not sure any of that will be useful for you if what you really want to do is system administration. (I'm not familiar with the formalities of that job market but it seems to me that the best sysadmins are self-taught, to an even greater degree than programmers.) But if you're considering a career in software development and only switching to sysadmin work because of math, you've got the wrong impression of software development.
Go out and do some open source work if you want a sense of real world programming. And maybe consider a software engineering degree. I'm skeptical of how many software engineering programs are really in tune with reality, but at least they'd probably have less pointless math requirements.
fags...
Anyone who's taken DISCRETE MATH (specifically, induction & recursion portions of it) actually "learns that", in a real way.
E.G. -> You learn how to build an algorithm, in mathematical terms + using multiple variables (often in substitution for other terms) for solving various problems.
E.G.=> "Is 1n + 2n + 3n + 4n ... N ALWAYS divisible by 5?" type questions...
These can be built into a computer algorithm, albeit in math/algebraic terms first, in essence, by using Discrete Math's INDUCTION techniques...
No - It's NOT easy - well, getting your base/case-basis usually is, but once you have your base case/basis?
The hard part's "proving it" via patterns tests, first, & then WHERE you build your algorithm substituting in diff. vars for terms prior to the "..." in my example above!
That's to "generalize it" into an "engine/algorithm" in mathematical terms, first, & then? Then you can apply it to a program!
It works!
APK
P.S.=> I think that DISCRETE MATH & LOGIC (Symbolic logic) are 2 of the MOST interesting courses you take in comp. sci/CSC, but also 2 of the most difficult (especially IF you've never been exposed to them before)... they teach you, imo @ least, to "think in the abstract", & far better than you would most likely, without having taken them! I also feel that those 2 courses make later HARDER Comp. Sci./CSC courses like DATASTRUCTURES (one of my favs, ever), easier to do also... apk
No more slashdotting articles with more than three sentence fragments masquerading as full sentences, or from "writers" who don't know the basic mechanics of the language.
"I don't care about the Constitution!" --Bill O'Reilly, November 17, 2009
In my opinion, the most fascinating aspect of computer programming is user interfaces and user interaction. While math certainly still applies, I feel that training in design and psychology would serve you better than mathematics.
I always ask whats that mean? What do I use it for? Most of the time the teacher doesn't answer.
How the hell do you remember knoweldge, practice knowledge, if you have no idea what to use it for. Its like a stupid dog trick.
What a Algarithm?????
no scripting language has any difference in there. neither perl, ruby, php, etc has that.
And seriously knowing the difference between int and float and bigint, etc has nothing to do with math. That is something you learn in CS classes.
"Freiheit ist immer auch die Freiheit des Andersdenkenden" - Rosa Luxemburg, 1871 - 1919
I bet you can screw up adding fifty floating point numbers in any of those languages. Heck, even Excel can't do it right.
And seriously knowing the difference between int and float and bigint, etc has nothing to do with math. That is something you learn in CS classes.
It has everything to do with math. That's why they teach it in CS classes.