tags:

views:

1393

answers:

10

Even though I consider myself one of the better programmers on my CompSci course, I am fascinated by people who are really good at math. I have to say whenever I had a math-type assignment or exam my approach has been very formulaic, i.e. if I encounter a problem that looks like A I must use method B and the result should look like C, or else I made a mistake. I only really know how to solve the problems I revised.

I'd really like to devote some time this summer to understand mathematical problems and their solutions better in order to dive deeper into fields of algorithmics and computational complexity.

Any tips?

A: 

I think it depends. One book that I've enjoyed reading -- which starts with a maths revisit -- is Matt Buckland's Programming Game AI by Example.

A quick google produced this book, but again it depends on what sort of programming you're doing or plan on doing.

I personally don't think you can go wrong with a good understanding of physics and algebraic math.

atc
+2  A: 
  1. Practice Practice Practice
  2. Use the tutoring services that are generally available at most universities (this will usually be free and paid for using your tuition money).
TheTXI
+16  A: 

It sounds like you have decent math skills -- you understand the mechanics and maybe a little bit of the intuition behind what you've learned -- but that you're a little short on good problem-solving skills, especially since you say "I only really know how to solve the problems I [previously encountered]".

To fix that, I'd take a look at Project Euler. There is definitely no prescribed way to solve these problems, and they often require a synthesis of multiple knowledge areas to tackle each one successfully. You'll have your cake and eat it too -- becoming a better programmer/mathematician and a better general problem-solver, by seeing how to bring many things to bear against a particular problem. And you'll gain deeper insights into how things that seem completely different can actually fit together in a unified whole. (This is particularly true of many areas of math.)

Finally, kudos to you for your desire to become a better practitioner of your craft! If everyone displayed the same level of ambition, I can't help thinking that software in general would be a lot better.

John Feminella
+1 for the ProjectEuler link. i've been looking for something like this for a while.
wtfsven
A: 

Reminds me of grad student days. I quickly learned it was easier to pose a mathematical problem and find a numerical or monte carlo solution than it is to solve the problem analytically (i.e. the way the computerless math professor would on a blackboard). This works for numerical problems and generally will not help you so much as pass an mathematical economics exam.

The other way to do math on the computer is to use Mathematica or the like, but that makes many math problems so easy to solve you don't really learn anything. Integration of arbitrarily complex functions by hand is rocket science. Integration of arbitrary functions (analytically!) in Mathematica is no more difficult than using calc.exe

I recommend re-inventing the wheel and writing an open source, self contained library in the curly brace language of your choice aimed at your favorite branch of applied mathematics, be it primes or linear programming. Math API libraries are famous for devilishly hard to write black boxes that no one will be able to touch again. An example is the statistics plug in in Excel, which it doesn't look like anyone has improved in decades. Who ever writes a math library will learn a ton.

MatthewMartin
A: 

If you want to understand software, study category theory

egaga
+1  A: 

I would go with these fields:

Discrete Math, Linear Algebra, Combinatorics, Probability and Statistics, Graph Theory, mathematical logic.

This would give you a grip on most fields of CS. If you want to go into special fields, you have to dive into some areas especially:

Computer graphics -> Linear Algebra
Gaming -> Linear Algebra, Physics
Computer Linguistics -> Statistics, Graph Theory
AI -> Statistics, Stochastics, Logic, Graph Theory

You will of course have found these entries: blogs to freshen up my math in practice and math programming and learning. They will have some advice.

Other then that get yourself some good basic books on linear algebra and logic. Sedgewick has some good books on algorithms with the basic math concepts. John Vince has one on match concepts for computer graphics.

Ralph Rickenbach
A: 

Goto www.projecteuler.net web site. You will find challenging problems. Try to solve them and you will be proud of yourself one day. good Luck

+4  A: 

Ultimately, you need to "spend some time in the saddle" and pick something of interest and then learn how to use it. I was interested in game programming math and picked up the New Riders book on the subject - don't remember the name at the moment. It had concepts and exercises and as I progressed through it, I felt that not only did I understand the concepts and theory but how to put it into practice.

You might take a look at some of these related questions. There are some good answers there. They might not all be applicable in your case, but some will be.

http://stackoverflow.com/questions/824679/how-can-i-learn-the-math-necessary-for-working-with-computer-vision

http://stackoverflow.com/questions/720993/how-to-learn-mathematical-notation

http://stackoverflow.com/questions/651865/basic-math-book-for-a-programmer

http://stackoverflow.com/questions/570029/learning-applied-statistics-with-a-focus-on-r

http://stackoverflow.com/questions/568899/user-friendly-math-textbooks

http://stackoverflow.com/questions/509488/recommendations-for-discrete-math-resources

http://stackoverflow.com/questions/488502/best-language-to-program-some-math-free-fast-easy-cool-etc

http://stackoverflow.com/questions/487352/learning-game-programming-part-2-math

http://stackoverflow.com/questions/466820/math-resources-for-c-c-programmers

http://stackoverflow.com/questions/420500/helpful-math-classes-for-programmers

http://stackoverflow.com/questions/415537/math-programming-and-learning

itsmatt
A: 

Implement. A Lot.

Calculus and Linear Algebra is a bad way to go. Numerical methods will help you (they were made to be implemented in computers), because if you can implement them, you can implement anything math-related with a bit effort.

Here are some subjects that i recommend you start looking for. I have implemented at least one kind of each and they helped me understand not only mathematics, but how to actually program some difficult math problems.

Root finding. Solving Linear systems and other Matrix manipulation (like LU decomposition and efficient determinant algorithms). Solving Non-linear systems. Least square method (Continuous and Discrete). Interpolation (Lagrange polynons mostly, and simple matrix interpolation.) Numerical Integration (i think this one is is the easiest... Newton–Cotes, Chebyshev–Gauss, Gauss–Laguerre, etc) Numerical ordinary differential equations (RungeKutta and multistep methods)

Now, some non-numerical subjects:

Operational Research/Linear programming/Optimization: start with Simplex with Matrix notation(i personally call this Complex), Then try a BranchAndBound and adventure yourselfinto Dynamic programming..

Number Theory have some interesting applications, specially security and criptography

Implement a Vector3D class yourself.

Also, Have fun with graphs, including most shortest path algorithms and searches. I consider this the most important data structure.

If you want a challenge for yourself, dig deeper into the Optimization: Queue Theory. Decision Making. Ant Colony Optimization.

I Hope i gave your some insight and didnt't scare you away! :)

rprandi
I think this is a really decent answer and not -1 worthy, although it could be shortened. Learning how to solve mathematical problems via computations can give you a lot of insight into the problem itself. Computing is about insight, not numbers.
temp2290
A: 

Practice, Practice and practice is the answer. My kid had a problem with math and I was able to overcome this problem by making it a habit that he practices math almost every day for 30 minutes, which is less than the half of time he spends playing Wii games. This practice was accomplished with this tool from www.ourflashcards.com. I'm not advertising for the tool and I promise that you will feel the same way about it.

a. hamdan