tags:

views:

1419

answers:

38

For example, math theory, graph logic.

Everyone around tell me that math is necessary for programmer. I saw a lot of threads where people say that they used linear algebra and some other math, but no one described concrete cases when they used it.

I know that there are similar threads, but I couldn't see any description of such a case.

+35  A: 

Computer graphics.

It's all matrix multiplication, vector spaces, affine spaces, projection, etc. Lots and lots of algebra.

For more information, here's the Wikipedia article on projection, along with the more specific case of 3D projection, with all of its various matrices. OpenGL, a common computer graphics library, is an example of applying affine matrix operations to transform and project objects onto a computer screen.

Welbog
I've personally had to use Calculus in vector graphics in particular.
blesh
Linear Algebra, to be exact.
Sev
I certainly use a lot of vector and matrix operations, meaning trigonometry and linear algebra, when making neat visualizations of stuff.
mquander
Why not provide an example or two to drive home your answer?
ChaosPandion
No point giving code for neat visualizations without being able to look at them, but you can look at someone else's nice code together with videos here: http://mndl.hu/hackpact
mquander
It is unclear to me why you mention me in your post. I am sure that many SO users would like some concrete examples.
ChaosPandion
@ChaosPandion: Eh. I figure it's really easy to find examples with quick searches, especially since I've listed a common library used to accomplish this task. The Wikipedia article itself has a bunch of links to examples and documentation. The fact is there's simply too much of it available for me to just pick a chunk of it and paste it in here.
Welbog
+3  A: 

I was using co-ordinate geometry to solve a problem of finding the visible part of a stack of windows, not exactly overlapping on one another.

There are many other situations, but this is the one that I got from the top of my head. Inherently all operations that we do is mathematics or at least depends on/related to mathematics.

Thats why its important to know mathematics to have a more clearer understanding of things :)

Infact in some cases a lot of math has gone into our common sense that we don't notice that we are using math to solve a particular problem, since we have been using it for so long!

Thanks

Mahesh Velaga
+7  A: 

Given a list of locations with latitudes and longitudes, sort the list in order from closest to farthest from a specific position.

All applications that deal with money need math.

I can't think of a single app that I have written that didn't require math at some point.

Jay
How about pure API calls application?
Dr. Xray
What kind of interesting application would be "pure API calls?"
Ken Bloom
Dr. Xray: Why didn't you just say "How about an application that doesn't require it?" if that's what you really meant.
Wayne Koorts
+9  A: 

In graphic world you need a lot of transformations.
In cryptography you need geometry and number theory.
In AI, you need algebra.
And statistics in financial environments.
Computer theory needs math theory: actually almost all the founders are from Maths.

Dr. Xray
+5  A: 

I wrote a parser compiler a few months back, and that's full of graph-theory. This was only designed to be slightly more powerful than regular expressions (in that multiple matches were allowed, and some other features were added), but even such a simple compiler requires loop detection, finite state automata, and tons more math.

Eclipse
+4  A: 

Implementing the Advanced Encryption Standard (AES) algorithm required some basic understanding of finite field math. See act 4 of my blog post on it for details (code sample included).

Jeff Moser
+5  A: 

I've used a lot of algebra when writing business apps.

Simple Examples

BMI = weight / (height * height);
compensation = 10 * hours * ((pratio * 2.3) + tratio);
ChaosPandion
That's not algebra, that's little more than arithmetic. Algebra would be about calculating one or more unknown values from a set of equations.
duffymo
+2  A: 

As an engineer, I'm trying really hard to think of an instance when I did not need math. Same story when I was a grad student. Granted, I'm not a programmer, but I use computers a lot.

Arrieta
+1  A: 

One time I was writing something for my Commodore 64 (I forget what, I must have been 6 years old) and I wanted to center some text horizontally on the screen.

I worked out the formula using a combination of math and trial-and-error; years later I would tackle such problems using actual algebra.

Jason Orendorff
I don't mean to imply that this is the last time I used math in a program. I'm pretty sure I also used it sometime in 1983 to simulate a lunar lander. Details fuzzy. ;)
Jason Orendorff
+1  A: 

Drawing, moving, and guidance of missiles and guns and lasers and gravity bombs and whatnot in this little 2d video game I made: wordwarvi

Lots of uses sine/cosine, and their inverses, (via lookup tables... I'm old, ok?)

smcameron
+1  A: 

Any geo based site/app will need math. A simple example is "Show me all Bob's Pizzas within 10 miles of me" functionality on a website. You will need math to return lat/lons that occur within a 10 mile radius.

K_T
+4  A: 

I wrote some hash functions for mapping airline codes and flight numbers with good efficiency into a fairly limited number of data slots.

I went through a fair number of primes before finding numbers that worked well with my data. Testing required some statistics and estimates of probabilities.

Carl Smotricz
+13  A: 

I think that a lot of programmers use more math than they think they do. It's just that it comes so intuitively to them that they don't even think about it. For instance, every time you write an if statement are you not using your Discrete Math knowledge?

Jason Baker
Reminds me the book 'The Math Instinct...' which deals with instinctive math http://www.amazon.com/exec/obidos/tg/detail/-/1560256729/literatinet
Liran Orevi
+2  A: 

Games and simulations need lots of maths - fluid dynamics, in particular, for things like flames, fog and smoke.

Jeremy McGee
Unless you're writing a physics-based fluid dynamics engine, you aren't doing much math there. The guy who wrote the engine did. The phenomena you cite are incredibly complex. To do a truly physics based solution for even simple problems would be beyond a game console. I'd bet those are heuristic models being used. Realistic? Yes. 100% faithful to the physics? No.
duffymo
+5  A: 

A few years ago, I had a DSP project that had to compute a real radix-2 FFT of size N, in a given time. The vendor-supplied real radix-2 FFT wouldn't run in the allocated time, but their complex FFT of size N/2 would. It is easy to feed the real data into the complex FFT. Getting the answers out afterwards is not so easy: it is called post-weaving, or post-unweaving, or unweaving. Deriving the unweave equations from the FFT and complex number theory was not fun. Going from there to tightly-optimized DSP code was equally not fun.

Naturally, the signal I was measuring did not match the FFT sample size, which causes artifacts. The standard fix is to apply a Hanning window. This causes other artifacts. As part of understanding (and testing) that code, I had to understand the artifacts caused by the Hanning window, so I could interpret the results and decide whether the code was working or not.

John R. Strohm
+2  A: 

As an e-commerce developer, I have to use math every day for programming. At the very least, basic algebra.

There are other apps I've had to write for vector based image generation that require a strong knowledge of Geometry, Calculus and Trigonometry.

Then there is bit-masking...

Converting hexadecimal to base ten in your head...

Estimating load potential of an application...

Yep, if someone is no good with math, they're probably not a very good programmer.

blesh
+5  A: 

I've used tons of math in various projects, including:

  • Graph theory for dealing with dependencies in large systems (e.g. a Makefile is a kind of directed graph)
  • Statistics and linear regression in profiling performance bottlenecks
  • Coordinate transformations in geospatial applications
  • In scientific computing, project requirements are often stated in algebraic form, especially for computationally intensive code

And that's just off the top of my head.

And of course, anything involving "pure" computer science (algorithms, computational complexity, lambda calculus) tends to look more and more like math the deeper you go.

Daniel Pryden
And curry. You can't talk about lambdas without mentioning curried functions.
Ben Voigt
A: 

I primarily develop applications that perform financial calculations and projections. Can't avoid math.

Chris W. Rea
+5  A: 

In answering this image-comparison-algorithm question, I drew on lots of knowledge of math, some of it from other answers and web searches (where I had to apply my own knowledge to filter the information), and some from my own engineering training and lengthy programming background.

Peter Hansen
+3  A: 

-Graphics (matrices, translations, shaders, integral approximations, curves, etc, etc,...infinite dots)
-Algorithm Complexity calculations (specially in line of business' applications)
-Pointer Arithmetics
-Cryptographic under field arithmetics etc.
-GIS (triangles, squares algorithms like delone, bounding boxes, and many many etc)
-Performance monitor counters and the functions they describe
-Functional Programming (simply that, not saying more :))
-......

Aggelos Mpimpoudis
Hey: Don't think that you can mention functional programming to the exclusion of the math involved in imperative programming. Imperative programming also requires math -- with the type inference used in type-checking, and the loop invariants that ensure the program does what it's supposed to.
Ken Bloom
YES of course!! Imperative programming is a default one! Using abstractions, iterations, queries on objects like LINQ (this has a highly mathematic background), closures, all are based at mathematical concepts! Thanks for mentioning though ;)
Aggelos Mpimpoudis
+2  A: 

I used Combinatorials to stuff 20 bits of data into 14 bits of space.

Zan Lynx
A: 

I'm working on a rate calculation program for an insurance database now. There's some fairly involved statistical modeling involved. Most of the heavy lifting has already been done for me, but it still helps to have an understanding of the underlying math in order to accurately translate the formulas into code.

Jason
+1  A: 

This is primarily a question whose answer will depend on the problem domain. Some problems require oodles of math and some require only addition and subtraction. Right now, I have a pet project which might require graph theory, not for the math so much as to get the basic vocabulary and concepts in my head.

If you're doing flight simulations and anything 3D, say hello to quaternions! If you're doing electrical engineering, you will be using trig and complex numbers. If you're doing a mortgage calculator, you will be doing discrete math. If you're doing an optimization problem, where you attempt to get the most profits from your widget factory, you will be doing what is called linear programming. If you are doing some operations involving, say, network addresses, welcome to the kind of bit-focused math that comes along with it. And that's just for the high-level languages.

If you are delving into highly-optimized data structures and implementing them yourself, you will probably do more math than if you were just grabbing a library.

MetaHyperBolic
+3  A: 

In machine learning: we use Bayesian (and other probabilistic) models all the time, and we use quadratic programming in the form of Support Vector Machines, not to mention all kinds of mathematical transformations for the various kernel functions. Calculus (derivatives) factors into perceptron learning. Not to mention a whole theory of determining the accuracy of a machine learning classifier.

In artifical intelligence: constraint satisfaction, and logic weigh very heavily.

Ken Bloom
+1  A: 

I develop mostly applications that have to do with decision analysis and financial forecasting. In that frame, math is a key component of most of my development work. In no particular order, on top of my head:

  • Run simulation of the possible outcomes of a project, generate cumulative distributions and analyze the distribution (probability, statistics, simulation)
  • Compute the optimal allocation of supply to demand over time on a market (algebra, optimization)
  • Model the prescription decision physicians make, based on an attribute model and the results of a survey, to determine adoption of new products (algebra, micro-economics)
  • Model the evolution of patients through a disease (graphs, markov chains)

In general, I am using a small subset of what I learnt in math / quantitative methods. Usually straightforward algebra, with the occasional probability usage, is sufficient - especially if your application is mostly about record-handling...
On the other hand, I found that knowing a wide array of mathematical techniques or ideas help you think better about problems, see connections, similarities and dissimilarities, or know better what to look for.

Mathias
+1  A: 

Part of being a good programmer is being familiar with the domain in which you are programming. If you are working on software for Fidelity Mutual, you probably would need to know engineering economics. If you are developing software for Gallup, you probably need to know statistics. LucasArts... probably Linear Algebra. NASA... Differential Equations.

The thing about software engineering is you are almost always expected to wear many hats.

tbischel
A: 

When solving some depth-first searching problems (e.g., sudoku puzzles) I've leveraged Knuth's Dancing Links algorithm, which falls under the graph theory and logical deduction categories.

fbrereto
A: 

Statistics comes up at times where I work, e.g. what % of site visitors are using IE7 or Firefox, etc. There can also be times where I have to take raw data and compute sums, averages or other aggregate functions.

Boolean Algebra is commonly used in conditionals that I'd think is a concrete case.

JB King
A: 

Doppler shift is logarithmic. Promoting a mathematics education or textbook. Or any leverage, ratio or advanced project. And logic has other definition. Where market industry standard and leader team programmer with designer. I'd choose team programmer with mathematician.

LarsOn
+1  A: 

More or less anything having to do with finding the best layout, optimization, or object relationships is graph theory. You may not immediately think of it as such, but regardless - you're using math!

An explicit example: I wrote a node-based shader editor and optimizer, which took a set of linked nodes and converted them into shader code. Finding the correct order to output the code in such that all inputs for a certain node were available before that node needed them involved graph theory.

And like others have said, anything having to do with graphics implicitly requires knowledge of linear algebra, coordinate spaces transformations, and plenty of other subtopics of mathematics. Take a look at any recent graphics whitepaper, especially those involving lighting. Integrals? Infinite series?! Graph theory? Node traversal optimization? Yep, all of these are commonly used in graphics.

Also note that just because you don't realize that you're using some sort of mathematics when you're writing or designing software, doesn't mean that you aren't, and actually understanding the mathematics behind how and why algorithms and data structures work the way they do can often help you find elegant solutions to non-trivial problems.

PfhorSlayer
+2  A: 

Modern communications would completely collapse without math. If you want to make your head explode sometime, look up Galois fields, error correcting codes, and data compression. Then symbol constellations, band-limited interpolation functions (I'm talking about sinc and raised-cosine functions, not the simple linear and bicubic stuff), Fourier transforms, clock recovery, minimally-ambiguous symbol training sequences, Rayleigh and/or Ricean fading, and Kalman filtering. All of those involve math that makes my head hurt bad, and I got a Masters in Electrical Engineering. And that's just off the top of my head, from my wireless communications class.

The amount of math required to make your cell phone work is huge. To make a 3G cell phone with Internet access is staggering. To prove with sufficient confidence that an algorithm will work in most all cases sometimes takes people's careers.

But... if you're only ever going to work with this stuff as black boxes imported from a library (at their mercy, really), well, you might get away with just knowing enough algebra to debug mismatched parentheses. And there are a lot more of those jobs than the hard ones... but at the same time, the hard jobs are harder to find a replacement for.

Mike DeSimone
+1  A: 

In years of webapp development I didn't have much need with the Math API. As far as I can recall, I have ever only used the Math#min() and Math#max() of the Math API.

For example

if (i < 0) {
    i = 0;
}
if (i > 10) {
    i = 10;
}

can be done as

i = Math.max(0, Math.min(i, 10));
BalusC
+2  A: 

Examples that I've personally coded:

  • wrote a simple video game where one spaceship shoots a laser at another ship. To know if the ship was in the laser's path, I used basic algebra y=mx+b to calculate if the paths intersect. (I was a child when I did this and was quite amazed that something that was taught on a chalkboard (algebra) could be applied to computer programming.)
  • calculating mortgage balances and repayment schedules with logarithms
  • analyzing consumer buying choices by calculating combinatorics
  • trigonometry to simulate camera lens behavior
  • Fourier Transform to analyze digital music files (WAV files)
  • stock market analysis with statistics (linear regressions)
  • using logarithms to understand binary search traversals and also disk space savings when using packing information into bit fields. (I don't calculate logarithms in actual code, but I figure them out during "design" to see if it's feasible to even bother coding it.)

None of my projects (so far) have required topics such as calculus, differential equations, or matrices. I didn't study mathematics in school but if a project requires math, I just reference my math books and if I'm stuck, I search google.

Edited to add: I think it's more realistic for some people to have a programming challenge motivate the learning of particular math subjects. For others, they enjoy math for its own sake and can learn it ahead of time to apply to future programming problems. I'm of the first type. For example, I studied logarithms in high school but didn't understand their power until I started doing programming and all of sudden, they seem to pop up all over the place.

JasDev
A: 

a short list: .. statistical analysis of sales data for report generation .. sales trends within customer regions .. user utilization reports from the database logs

Hardryv
+2  A: 

The recurring theme I see from these responses is that this is clearly context-dependent.

If you're writing a 3D graphics engine then you'd be well advised to brush up on your vectors and matrices. If you're writing a simple e-commerce website then you'll get away with basic algebra.

So depending on what you want to do, you may not need any more math than you did to post your question(!), or you might conceivably need a PhD (i.e. you would like to write a custom geometry kernel for turbine fan blade design).

EdwardGarson
+4  A: 

General Mindforming

Solving Problems - One fundamental method of math, independent of the area, is transofrming an unknown problem into a known one. Even if you don't have the same problems, you need the same skill. In math, as in programming, virtually everything has different representations. Understanding the equivalence between algorithms, problems or solutions that are completely different on the surface helps you avoid the hard parts.

(A similar thing happens in physics: to solve a kinematic problem, choice of the coordinate system is often the difference between one and ten pages full of formulas, even though problem and solution are identical.)

Precision of Language / Logical reasoning - Math has a very terse yet precise language. Learning to deal with that will prepare you for computers doing what you say, not what you meant. Also, the same precision is required to analyse if a specification is sufficient, to check a piece of code if it covers all possible cases, etc.

Beauty and elegance - This may be the argument that's hardest to grasp. I found the notion of "beauty" in code is very close to the one found in math. A beautiful proof is one whose idea is immediately convincing, and the proof itself is merely executing a sequence of executing the next obvious step.

The same goes for an elegant implementation.

(Most mathematicians I've encountered have a faible for putting the "Aha!" - effect at the end rather than at the beginning. As have most elite geeks).

You can learn these skills without one lesson of math, of course. But math ahs perfected this for centuries.

Applied Skills

Examples: - Not having to run calc.exe for a quick estimation of memory requirements - Some basic statistics to tell a valid performance measurement from a shot in the dark - deducing a formula for a sequence of values, rather than hardcoding them - Getting a feeling for what c*O(N log N) means. - Recursion is the same as proof by inductance

(that list would probably go on if I'd actively watch myself for items for a day. This part is admittedly harder than I thought. Further suggestions welcome ;))

Where I use it

The company I work for does a lot of data acquisition, and our claim to fame (comapred to our competition) is the brain muscle that goes into extracting something useful out of the data. While I'm mostly unconcerned with that, I get enough math thrown my way. Before that, I've implemented and validated random number generators for statistical applications, implemented a differential equation solver, wrote simulations for selected laws of physics. And probably more.

peterchen
+1  A: 

Machine Vision or Computer Vision requires a thorough knowledge of probability and statistics. Object detection/recognition and many supervised segmentation techniques are based on Bayesian inference. Heavy on linear algebra too.

Rock and or Roll
+1  A: 

If you know your math you can use it in many places witch aren't obvious, even advanced math.

Story: A few years back a friend of mine asked me to write an application which would create a photo-mosaic (it was in a time when we couldn't find any free ones, I'm not sure if they were downloadable back than). It took only two days in Delphi, but only because the idea could be easily reduced to a Topological problem. Topology is a rather abstract part of mathematics which among other things are interested in metrics - functions which define a distance between elements of sets/spaces.

So quickly dividing the pictures into, if i remember, 10x6 squares, and measuring the average brightness of each of them, i got, simplifying a bit, arrays like [0,4,5,2,...] which can be treated like vectors. And when you think about the photo-mosaic, you want the vector of the small picture to be as close to the vector of the part of a picture as it can. The only question was finding a nice metric - a nice function that would tell when two pictures did actually look-alike. But the whole algorithm took less than an hour to write down, and after that it was mostly playing with the metric function.

Robert Bak