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
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.
> 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.
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.
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.
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.
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.
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.”
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.
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.
Day to day programming work now hits problems with lots more mathematical angles than in the old days.
I have the opposite opinion and experience, if you go back 15-20 years and look at the state of software development back then it involved a lot more math for "day to day" programming, platforms where drawing a line across the monitor required writing your own function/subroutine which did the drawing and antialiasing where still quite common, these days you just do "import System.Graphics.Routines; Surface srf = new Surface(width,height); srf.DrawLine(x1,y1,x2,y2,color, width);" or something along those lines. This was of course just an example but it's true for a lot of stuff, back then you had to spend a lot more time optimizing your code as well, these days premature optimization is generally considered a bad thing (since in most cases it ends up being a waste of $500 worth of programmer time to squeeze out a performance gain that $50 in hardware would've have gotten you.
Greylisting is to SMTP as NAT is to IPv4
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.
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.
This was of course just an example but it's true for a lot of stuff, back then you had to spend a lot more time optimizing your code as well, these days premature optimization is generally considered a bad thing (since in most cases it ends up being a waste of $500 worth of programmer time to squeeze out a performance gain that $50 in hardware would've have gotten you.
If you're planning to sell a million units containing both hardware and software, then "wasting" $500 of programmer time to save even $0.01 in hardware per unit is a really sweet deal.
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.
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.
True, but that's assuming it would then be $500 of programmer time and not say, $50 000 (ten developers earning $60k per year spending an extra month developing the software because they focused on optimizing it), at that point a $0.01 saving per unit would require 5 000 000 units to sell in order for the investment in time to pay off.
You also need to consider that a lot of development takes place in-house where you basically have a handful of machines that will be running the software, and in those situations one dev spending a week trying to accomplish what another 4 GiB stick of RAM could've handled just doesn't make sense (but you see it all the time because managers don't want to "waste" money on hardware).
Greylisting is to SMTP as NAT is to IPv4
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
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.
How deep would I have to dive into the intricacies of audio hardware if I wanted to have a look at it?
I guess at that stage it's the _MANAGERS_ who will be required to have math skils and....
Oh dear... Oh... I see where this is going and _IT'S NOT PRETTY_!
- These characters were randomly selected.
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.
Hands up everybody who's been in that situation.
How about the legions of programmers who write the code for your computer peripherals, cellphones, toys, appliances, medical devices, cars, etc?
Fact is: Stuff containing a "computer" of some sort (even if it's just a 4-bit microcontroller) is manufactured in the millions or even billions. The software for all this stuff doesn't write itself. Saving even a minimal amount on hardware cost by using better software pays off quickly if you're manufacturing a couple of hundred thousand units a year.
$0.01 in hardware is basically nothing. A few resistors or capacitors, maybe. Now, if you can use a smaller processor and save even just $0.50 per unit, then even spending $50000 on those savings can pay off pretty quickly if you're selling upwards of a hundred thousand units per year.
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 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.
But most developers aren't coding for an integrated platform where cutting down the number of cycles used by 0.003% means manufacturing costs over the course of the next year will go down by $n, they're writing code that will either be sold to customers or used in-house on off-the-shelf hardware where for the most part features, stability and maintainable code are all things which are more important than the end user (be it Joe Sixpack or the corporate sysadmin) not having to spend another $100 or so on hardware.
Greylisting is to SMTP as NAT is to IPv4
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.
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.
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
I believe programming in itself is just glorified typing.
Just kidding, but yea, programming in itself does not require any math skills or to know much about nothing, actually. But programming is always done in some particular context, and that context may require knowledge on other fields. In that sense, what I think he means is that more and more, every application you do will require you to know some math. I work in bioinformatics, and there is a lot of statistics there, and some molecular biology as well, but mostly statistics.
It has something to do with CS been a transversal field
I 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.
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.
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
It would have been good if a few people with mathematical skills had been employed as auditors for the financial systems of the various financial institutions that used esoteric mathematical formulae to legitimize their absurd risk-taking.
To have a right to do a thing is not at all the same as to be right in doing it
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.
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.
I have been. About $500 of effort to find a simple error (not my error) in XML parsing code (yuck it up you guys, I need to eat too) that sped the code up by a factor of 4. That's 3-4 years in Moore's Law. A similar amount of effort found another speed up that, if the project had lived long enough (its death, as you can guess, wasn't much of a surprise), would have sped up the program initialization by a factor of ten or more. These were simple almost trivial errors, but someone had decided not to go looking for them because they believed in premature optimization.
IMHO there is no such thing as premature optimization. There is such a thing as spending too much effort in optimization. The distinction is relevant.
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.
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.
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.
Having been a programmer now for ~10 years or so. I started off not caring about math that much (aside from a little geometry to draw custom controls). I was making $45k a year and most of my programming time was doing web development (database, basic logic, front end HTML etc). Tying records with class objects via auto incrementing ID's and massive JOIN statements. However, I started getting into 3d programming and multitouch applications and found the more math you know, the more versatile your UI's and windows can become. I recently finished up a product called Glo (globible.com) and found we couldn't have done ANY of that without advanced math knowledge. Now I make twice as much as I was making doing web back ends and I owe it all to mathmatics. When interviewing software programmers, anyone who hasn't had a little trig gets a good kick towards the door.
Sometimes, we can understand the physics conceptually first. Other times, the math derivation explains the physical phenomena.
Partial differential equations began as a branch of Physics. The derived equations gave conceptual meaning, not numerical values. Here Are two examples:
The Wave Equation, Uxx = Utt, has the solution U(x, t) = F(x+t) + G(x-t). This describes two waveforms, single variable functions F(s) and G(s). I pluck a guitar string, and two waves go out in opposite directions.
The Diffusion Equation, Uxx = Ut, describes how a dye concentration U(x, t) spreads out over time. The Uxx term describes a "diffusion" based on the "second derivative rule" for "Maxima & Minima" problems. Where Uxx > 0 (concave up), the function U(x, t) wants to add material to smooth out the curve. Where Uxx 0 (concave down), the function U(x, t) wants to lose material to smooth out the curve. This is diffusion leading to a steady state time, when all points x have the same value.
>My personal largest problem, though, has to do with literacy. Though I'm quite skilled with language, excessive comma usage
>notwithstanding, I find that when trying to read about advanced math or physics principles on Wikipedia for example, I'll see
>a theorem written using symbols and functions that I know were covered in the math classes I had in high school but I can't
>look at those same symbols and functions and turn them into words that accurately explain or describe the principle I'm reading.
>Perhaps I'm alone in that situation, but attempting to read advanced theorems and math does give me insight into what text must
>look like to illiterate people who still know their ABC's.
I share your exact sentiment.
I have been a definite non-traditional student. I started school in 1988 at Georgia Tech, and failed out after 2 years. Some 17 years later, I finished my BS in Computer Science.
I have taken and retaken math classes many times. When I was at Georgia Tech I got a C in Calc I, and then in Calc II I got W, F, D, F, and finally passed with a B. Then I moved to another state and had to take Calc II yet again. A few years ago I started working on my Mechanical Engineering degree, which requires Calculus III, so I took Calc I and II again to brush up. I got a B in Calc I and a B in Calc II and got a D taking Calc III. I am currently re-taking Calc III.
My problem is, I believe, that I have strung out my mathematical education over so long a period of time that I am not FLUENT IN THE LANGUAGE OF MATHEMATICS. It is, exactly as you state, a LITERACY PROBLEM. I firmly believe, as you seem to, that MATHEMATICS IS A LANGUAGE. Moreover, I believe, as you seem to also, that people who are fluent in mathematics actually "SEE" mathematical equations.
For example. I believe many people when they look at x^2 + y^2 = r^2 instantly recognize the equation of a circle. Now I have finally gained that understanding, BY ROTE, of that fact also. But I believe that people who are mathematically literate see more than just the pattern recognition that that equation means circle. I think they see equations and actually see WHAT IS GOING ON. I never do. I have to sit down and plug in values of X and Y and see what comes out. It's very tedious.
I think your last sentence was exactly dead-on. I liken the problem to handing an encyclopedia to a 5-year-old and asking them to read a passage. They will be focusing so hard on each word that they will not know what they have read at the end of a sentence. That is exactly how I feel trying to do Calculus. I am focusing so hard on the basic mathematics that I find it very difficult to put it all together to see the big picture.
It is very much a literacy problem, and I find it confounding. The only thing for it, I'm afraid, is to do more and more and more maths until one gains the familiarity one has just as one does with reading. The problem is time. I just don't have the time, with a full-time job and a family, to do it.
I haven't been able to help but think, over the years of taking higher-level math classes, that there must be a better way to learn this stuff. The science of Calculus is some 400 years old, some parts much older. Yet the way it is taught has not changed hardly at all. Now maybe there is no better way to learn it than doing it over and over until knowledge turns to understanding, but what keeps coming to me is that there must be a better way to VISUALIZE the abstract into something more concrete.
Example. The other day in Calc III we were talking about minimums and maximums, and how they might occur on the surface or along the surfaces boundary. So I said out loud, "So, the surface can either be a volcano or a potato chip but either way there is a high or low spot somewhere on it." And half the class said aloud, "Aaaaaahhh!" - they got it because they were able to VISUALIZE the abstract concept as something concrete.
There has got to be a better way to con
A work that expires before its copyright never enters the public domain and thus enjoys eternal copyright protection.
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.
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.
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.
Ok, if you want to map it to the CRUD world, those optimizations could very easily save a farm of 5 $25,000 servers. And most of the time optimizations come for "free"*, one just needing to call the right function for the situation.
* That is not really free, since a developer that knows how to do that will earn a bit more. But there doesn't need to be any productivity lost, often it even increases, sometmes faster than the paying amount.
Rethinking email
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.
Um... mathematicians CAME UP with those same esoteric mathematical formulae - having a mathematics degree used to be one of the best ways to get into that kind of institution.
"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.
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
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)
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.
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.
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.
This was of course just an example but it's true for a lot of stuff, back then you had to spend a lot more time optimizing your code as well, these days premature optimization is generally considered a bad thing (since in most cases it ends up being a waste of $500 worth of programmer time to squeeze out a performance gain that $50 in hardware would've have gotten you.
If you're planning to sell a million units containing both hardware and software, then "wasting" $500 of programmer time to save even $0.01 in hardware per unit is a really sweet deal.
You can tell GP is also of the "math isn't important" camp.
"I don't care about the Constitution!" --Bill O'Reilly, November 17, 2009
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
Premature optimization is the act of optimizing an algorithm that (usually) achieves no appreciable benefit to the overall application from the optimization. For example, if you have a function that takes 0.5ms to complete and it is only called once in the lifecycle of the application, there is essentially no benefit in optimizing it to run in 0.1ms.
What you did is exactly what those against premature optimization advocate. Write the software first, then go back and identify the bottlenecks and optimize those problem areas as needed. Do not spend hours optimizing an algorithm that does not slow down your application in any meaningful way, it is a waste of time.
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.
Premature optimization is the act of optimizing an algorithm that (usually) achieves no appreciable benefit to the overall application from the optimization. For example, if you have a function that takes 0.5ms to complete and it is only called once in the lifecycle of the application, there is essentially no benefit in optimizing it to run in 0.1ms.
That's not what "premature" means. It means doing something too early.
What you did is exactly what those against premature optimization advocate. Write the software first, then go back and identify the bottlenecks and optimize those problem areas as needed. Do not spend hours optimizing an algorithm that does not slow down your application in any meaningful way, it is a waste of time.
These were errors that vastly slowed execution of the program. They should have been caught much earlier than they were. I was an outsider who was trying to make the code work so my group could study it. It was dog slow so I ran a profiler on it and picked up these errors rather quickly (for example, 75% of the program's time was spent in the XML parser). Point is this program was running slow enough that it had to be greatly harming the development process. Sure, some code had to be developed in order for this error to even exist. But the developers didn't need to write the whole program first in order to profile some of the high demand stuff they had. The program was still far from finished when I had my crack at it.
Again, that key and subjective term "interesting" rears its ugly head. Is writing another office suite really "interesting"? The answer depends on who's answering. Is writing code for the newest, sleekest phone's new embedded OS and wringing out that extra 0.003% of performance in the kernel's paging code interesting? It probably is to most CS and EE types.
The fact is, people who use software development as a tool for communications and commerce often have a different idea of "interesting" from people who write the software everyone builds their stack above. The guys writing models of EM radiation they should be seeing from distant galaxies, testing those models with real-world data, then looking for different wavelengths because they're not finding what they expected have an entirely different use for the computer from eBay, Microsoft, Nokia, or Novell. They're probably not interested too much in military cryptanalysis, but both the physicists and the cryptanalysts are using some serious math. The guys at Motorola, Nokia, et al might be using some serious math, too. You can be sure the folks at Google, AMD, Intel, nVidia, IBM, TSMC, and the like are.
Obviously most developers would agree that writing "real" code is a lot more fun than cranking out yet another CRUD website, but there is also plenty of work which is interesting to a lot of developers and which doesn't outright require heavy math skills. That said, I generally prefer working on backend code myself since that's where the interesting problems tend to be (spending a couple of days trying to code around browser bugs for a webapp seems to make any reasonably skilled developer feel the same way).
Greylisting is to SMTP as NAT is to IPv4
No, I believe math is interesting and important but the original statement was that "day to day" programming these days increasingly required math skills. My experience is exactly the opposite of this, these days most of the boring stuff that previously still required math skills to solve can now often be done simply by calling the right library function.
Greylisting is to SMTP as NAT is to IPv4
I was a web app developer once. I'd say there are two good ways of working around browser bugs when working on the front end. One is to use a library on which someone else spent the time fixing the special cases. The other is to have as little in the front end JS as possible -- just enough to get new info from the back end and display it without munging it in the client too much. Oh, and avoid any MS browser for any part of the site to which the general public doesn't absolutely need access.
Now I'm looking into getting back into a non-development IT role or going back to school for something not so much related to computers. I'm kind of burned out on the industry churn.
When I develop something at home because it interests me, sometimes it needs a good deal of math and sometimes it doesn't. If it does, I usually ask for some help. I know some basic matrix algebra, some simple statistics like standard deviations, and some elementary functions of calculus.
I can still do quadratics in my head, but I was never that interested in math even though I didn't have any particular difficulty with it. I'm more of a language guy. My standard college entrance exams point that out quite nicely. I did enjoy word problems and geometric proofs, though. That's part of why I enjoyed programming at first. It's all word problems, as far as the mind can see.
Maybe if I had more math background I'd still be really interested in the field, but simulations and games have always been more fun to run than to write for me. Accounting, for me, sucks big sweaty donkey balls, and so would writing accounting software. I really enjoy writing software to help people communicate, like my old dial-up BBS, telnet BBSes, talkers, forum software, business/client relations sites, NFP websites, and stuff like that. I really hate many web clients, though, as most think $1200 per year for a phone book ad is more reasonable than $2400 just once for a site that actually tells their customers something and can even close a sale without tying up a salesperson. People balk at spending per year for a web presence what they spend a month on billboards. That's why there's so much shitty web code out there, and so many burned-out web programmers. The good clients are out there, but good luck finding enough to keep a shop open. The hard math in independent web shops is figuring out how much money you'll be able to draw month to month.
I'm still thinking about doing my own online store or some niche-target blog/forum with ad support. I just am really sick of dealing with writing and customizing software for other people's businesses. In the meantime, though, I think I'm going to see if another career path might suit me better. Maybe law, or hell maybe construction. That pays well enough for my modest needs and I won't have to worry about non-competes or intellectual property issues if I develop something in my spare time.
Exactly what I said; optimizing an algorithm before it is shown to be a bottleneck or have any significant impact on application performance is premature optimization.
If it is discovered to be a bottleneck, it should be optimized. It seems the guy before you didn't believe in optimization at all.
No, I believe math is interesting and important but the original statement was that "day to day" programming these days increasingly required math skills. My experience is exactly the opposite of this, these days most of the boring stuff that previously still required math skills to solve can now often be done simply by calling the right library function.
Was a joke. I was referring to your failure to realize that the $500 expenditure on development was a one-time cost while the $50 savings on hardware is a per-unit savings, so it only takes 10 units sold to make up the difference. Simple math. Ha ha. Joke.
"I don't care about the Constitution!" --Bill O'Reilly, November 17, 2009
Exactly what I said; optimizing an algorithm before it is shown to be a bottleneck or have any significant impact on application performance is premature optimization.
You can't show that an algorithm needs to be optimized, if you don't look. If you are looking, you are attempting to do optimization. The point is that even looking for optimization was considered "premature".
If it is discovered to be a bottleneck, it should be optimized. It seems the guy before you didn't believe in optimization at all.
He believed in "premature" optimization.
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.