r/math•
cfm76

What are the steps to learn and become fluent in Mathematics?

Backstory: I wasn't interested in mathematics as a child and I've managed to go through highschool and college without a strong foundation in mathematics.

Now I have a ten year goal to become a professional freelance programmer. I've tried my hand at several different programming/script languages:

(C, C++, Java, Bash, Perl, PHP, Javascript, CSS, HTML)

and understand a great deal of the rudiments of programming. However I am stuck at some plateau that I can't fully explain.

I don't know how to identify it, but I think that I am stuck because I don't have a solid foundation in mathematics.

Let's pretend that I've just arrived on this planet without any concept of mathematics. What type of curriculum would you recommend I follow? I've done a google search and have downloaded a school curriculum but I'd like some imput from the hive mind :) .

What I am looking for is a sequence of steps to follow, I am sure that if I tried to learn Trigonometry I would first have to be fluent in (Algebra II???). A sort of flow chart of types of math would be helpful (1. Arithmetic, 2. Geometry, 3.Basic Algebra ....). I would appreciate any advice, though advice from someone who has experience teaching math, and knows the underlying problems one faces when trying to self teach would be greatly appreciated.

In any case, I've been an avid user of reddit, I've contributed advice to some and hope that this question is answered with the care and empathy one would want when in a genuine search (more like "quest") for deeper understanding.

Please help, and thanks in advance.

Edit: (I'm not sure this is the right way to edit, sorry if it isn't).

Wow, I'm glad that so many people took the time to comment on this post. Sadly, though, I haven't had an opportunity to read them yet :| . I've been grading tests all morning (I'm an English ESL teacher living in Poland). I'll reply to comments soon. Thanks again!

Posted Feb 4, 2011, 12:09 PM UTC · edited

123
martank•

well, regarding math in computer science, you want to learn discrete math. Trig and geometry, while interesting, will not be of any serious help. Counting, logic, sets, arithmetic, algebra (linear algebra, matrices), statistics, and calculus (diff eq's) are the most important, probably in that order. The first four of those subjects can be understood (not mastered, but have a functional grip on) within a month. They're also a great foundation for understand what math is and how to approach further applications. They're a little more abstract and difficult to learn, but that's not due to math pre-requisites-- you can just about learn them from scratch.

3
devcmacd•

Learning the history of Mathematics often gives you a deep insight into how it really works. It will at least help you appreciate what you learn even more.

2
willis77•

Check out the sidebar over there ->. You'll find lots of free resources and more appropriate links

http://code.reddit.com/wiki/help/faqs/math#HowdoIlearnmathWheredoIstart

2
Sparling•

The link is really invaluable as a lot of good people have made serious contributions to exactly what you want to know.

One of the big problems that I see with providing a concise n-step list is that mathematics is so BIG. Once you get just past calculus and into some introductory analysis math opens up to be this big untackle-able subject so you will have to pick a field to work towards. Even experts have fields that they specialize in and fields that they know very little about.

That said, before you get to that point my biggest suggestion is TAKE YOUR TIME. Don't look at a section in a book and say 'Oh, I know that stuff...duh' and skip on. It's all important. Do all of the problem sets you can find. At first you may only be able to do a type of problem by following the examples. Keep doing more until you get past the rote memorization of steps and into being able to think about why you are performing each step.

1
drmomentum•

I am obliged to note that the idea that simply repeating working through problems "by rote" will eventually get you to a conceptual understanding is not supported by emiprical research in mathematics education.

Yes, working problems has value. But there is no scientific basis for advice to do many problems by rote rather than, say, to explore one problem in depth for a long time and discuss it with peers and more advanced people.

1
[deleted]•

You say you've done a bit of programming in different languages, but how much time have you spent learning just about algorithms? That's where the crux of a good programmer really comes in, how efficiently they can solve problems, particularly when this is relevant to whether the problem can be solved in a realistic time frame. When you sit down to solve a problem, you don't want to get bogged down in the syntax of a particular language, you should be solving the problem intuitively on paper, a good programmer will then select the best language (tool) for the job.

Once you've picked up a language or two, it shouldn't be too hard for you to pick up the syntax for similar languages. Eg. C, C++, Java, C#, etc. really aren't all that different, but I still refuse to ever use Java, and if you know a couple of those, Python is fairly easy to pick up on the go, and worth learning before if you don't. If you want a challenge there, go learn something like Lisp, Haskell or Prolog, they will give you new ways of approaching problems.

Some people seem to try and learn programming from books and/or online tutorials. I have never found that particularly fun/efficient, except for learn you a haskell (haskell still confuses the hell out of me, but I'm slowly getting there). If you ever get stuck, google is your friend with finding out how to do something. Eg. I mostly use c++, there are a couple of good reference sites that just list the functions available for anything in the standard library, if I forget the syntax for something or simply don't know it, it's very easy to look it up.

There are plenty of resources on the internet for doing simple programming projects where you will both learn a lot and have a heap of fun. For example:

  1. Project Euler has a bunch of maths problems (with increasing difficulty) for people to solve, most of the time you write a program to solve the problem, although occasionally you will get the whole problem out on paper, other times you will at least come up with really neat simplifications for the problems.

  2. There are plenty of websites with general programming problems designed to be solved by various known algorithms. ACM contests specialise in problems like this, you can find a bunch of such problems on sites like this.

  3. AI contests are a lot of fun, although sometimes quite repetitive with how awesome game trees are. My favourite of the bunch that are available are the Google AI Challenges. There should be a new contest up in a month or so, and it's usually fairly easy for people to get started in their favourite language, you communicate with the engine using standard input/output and basically get to go to town with your strategy implementation, constrained by the time limits of course.

You don't need to know a huge amount of mathematics to be a good programmer, however there are some things you really ought to know. Having said that, the more maths you do learn, the larger your toolbox for tackling problems to which you can't see a simple solution.

Learn some combinatorics, it's all about counting things (and efficiently), which is something programmers do quite often.

Learn what matrices are (they're just table's of elements with given dimensions, indexed by [row][column]), and at least the common operations (addition and multiplication), you should really try to get the idea of what the inverse of a matrix is and how that is used to solve a system of linear equations. If you want more of this, go and learn some linear algebra, a simple rule of thumb is that anybody interested in something vaguely relevant to mathematics can never know too much linear algebra.

If you ever want to do some computer graphics, with a bit of linear algebra and trigonometry, you've pretty much covered your maths pre reqs for understanding the concepts.

2
Datamite•

Well, first, there's a subreddit for this: /r/learnmath

I also strongly suggest Khan Academy for online learning. Click "do exercises" there and log in with your google or facebook credentials, and you'll be presented a set of challenges starting with basic arithmetic and moving up through calculus, in exactly the sort of progression you're looking for.

2
two_if_by_sea•

A good really basic book to start with is Arithmetic and Algebra Again. You could also try watching videos on Khan Academy. Or start with Introduction to Algebra from artofproblemsolving.com.

1
[deleted]•

http://hbpms.blogspot.com/

All you need to know.

1

I'm an engineer, so I had to take 4 semesters of calculus. I'm a tutor for a circuits class, and I've found the biggest problem with students is their algebra skills.

I don't personally think algebra is hard, but I think that it is where people screw up the most. I would spend most of your time learning algebra. Supplement that with some trigonometry. Once you master all of that, study rates of changes and limits (essentially pre-calc).

IMO, you don't need a LOT of math for programming. I program just fine, and I don't think I've ever used calculus to program, although I'm sure the practice in calculus made me a better problem solver. It's all really arithmetic and algebra.

Programming follows a slightly different order of operations than mathematics when it comes to mult, division, powers, addition, etc. I'm not sure off the top of my head what the differences in the two are, but I remember there being something. I'm sure there are specifics to each given language too.

But, keep in mind, I've heard that pure theoretical computer scientists are essentially mathematicians. It's all about algorithms!

EDIT: Actually, now that I think about it, I had to write some programs in MATLAB to do numerical integrals and derivatives. So there's a little bit of calc, I suppose.

1
AngelTCNoncommutative Geometry•

I dont' personally think algebra is hard

.

.

.

It's all about algorithms!

I know its just semantics but ... ಠ_ಠ

1

Elaborate, please!

1
AngelTCNoncommutative Geometry•

Well.. to a mathematician, "algebra" it's not the usual arithmetric tricks to manipulate polynomials,etc.

Also, algorithms are important, yes... but its not "all about", there are important theorical stuff that might be critical in some problems.

1
drmomentum•

Could you talk more about why you think mathematics is what's holding you back in programming? If you don't mind me asking, I'm studying mathematics education and mathematical thinking and practices interest me.

Is it because of specific tasks you're trying to accomplish for projects, or is it because of some difficulty you're having in understanding in programming in a more general sense?

What situations do you find yourself in when this plateau occurs to you?

What do you usually do to try to get around the plateau?

1
G-BrainNoncommutative Geometry•

I was in a similar boat. I'm fairly proficient in programming (I'm already a freelance programmer) and I am an undergrad in math.

The mindset in programming is breaking problems up into steps, etc. In math, the mindset is that of logical reasoning. Obviously you are familiar with that, and I'd say in some way the mindset of programming is contained in the mindset of doing math. Reasoning in math is usually more general and abstract, and I think the first step of learning math is to familiarize yourself with that, learning some mathematical theories in the process.

Start with logic: propositional logic and predicate logic. Being a programmer this should be especially good to follow. You don't even have to get that deep into it. Just learn how to use logical operators, implication, if and only if, predicates, and the universal and existential quantifiers. This should also get you used to seeing symbols.

After that you need to learn to do mathematical proofs. This is using logic to prove mathematical statements. The thing is that you'll need a topic to prove things about. I have a few recommendations: number theory, graph theory and linear algebra. You will learn to do direct proofs, proof by induction, proof by contradiction. Every theory will be based on some assumptions, and by using definitions and logic to prove theorems (logical statements about the subject) and using more theorems that are based on other theorems, the entire theory is built up.

There should be elementary books and internet resources on all the subjects I mentioned.

So learn what logic is, learn what proofs are, then learn some theory to get practice using logic and writing proofs.

This, I think is the way to learning real mathematics. Good luck.

Edit: Note that if you go the way of logic, proofs, graph theory you hardly even have to know multiplication. Math is not just about numbers, and I think my post conveys that pretty well. The way of thinking that goes with mathematics is a very healthy one I think, and it should benefit you as a programmer and a human.

Edit 2: Also learn basic set theory.

1
hbetx9Algebra•

Do not think that just because schools attempt to teach mathematics linearly that it is best learned linearly. Also, do not think that this will be an easy or forgiving task. I would recommend, given your background, to start reading a discrete mathematics textbook, for example M. Rosen's is a standard (and far from the only or best one). When you get to something you do not understand (even just a line in an argument) think about it for a good bit but don't get too derailed. After this, move on to whatever topic seems interesting.

I highly doubt your programming obstruction is due to a lack of knowledge of High school algebra or trig. Its much more likely that you need exposure to abstraction. "Quest" after this.

1
drmomentum•

What about schools makes you describe their teaching methods a "linear?" What is it that is linear about them?

1
hbetx9Algebra•

Most curriculums attempt to lay out a standard linear model at the beginning Algebra -> Trig -> Calc I, II, III -> Diff Eq -> Lin Alg. so some variant there of. I argue that Lin. Alg. helps understanding of Calc III and that portions of Diff Eq. can be taught integrated with Calc I for example. Not to mention the numerous subjects that require simple "mathematical maturity", like topology or abstract algebra and so forth. My whole point is that math is connected, every object you study can (and should) be studied from many points of view and the "subject" lines are a lot more blurry than any curriculum could portray.

1
drmomentum•

Ok, I see by "standard and linear" you're describing what you feel are commonalities among the curricula you're familiar with.

There are curricula which have attempted to make important connections. Heck, there's one called "Connected Math." What leads you to conclude it is outside the capability of a curriculum to make important connections?

Even if it were outside the capability of a curriculum to be structured in such a way as to help a student make those connections, does a teacher have a role in how a curriculum is used? Teachers have quite a bit of leeway in classrooms in choice of material and in implementation.

Edit: I want to clarify that I'm asking because I'm interested in how people view mathematics and curriculum.

1
hbetx9Algebra•

I don't think you quite follow my point. My point is that when one is learning mathematics, one is naturally lead to topics in a nonlinear fashion. Say one is looking at cryptography. Quickly, one sees that many current methods are based on elliptic curves, which properly are studied as projective varieties. Now after the 6 months or so of hard reading about algebraic geometry one is puzzled by motivations. One possible motivation comes from the study of complex analytic functions, where one is also lead to the notion of fractional linear transformations and modular forms and the like. However, elliptic curves over the complexes are fairly easily structured and again have their roots from the study of complex analytic functions. It turns out, that theory of complex analytic functions mirrors that of projective varieties (and there are good reasons it has to!), and that one can associate to projective varieties something like a zeta (or more generally L-)function which again leads one back to modular forms and this type of run around occurs often! You can't simply take a few courses and expect to gain deep understanding!!

I don't get my perspectives from the "curriculum to which I'm familiar". The curriculum I describe is standard fare among american colleges/universities as far as undergraduate requirements go. Yes, instructions have some "leeway" however, at the end of the day, if you don't teach the standard material in say Calc III, the engr. in the course will have less of a chance to make it through Diff Eq. later on. Naturally, the math majors essentially relearn this entire course in more formal language later on in their study.

One cannot simply learn math linearly, because math is not 1-dimensional. For each subject, there are hundreds of possibilities.

What is the reason for your interest?

1
ellenjanuary•

Set theory... everything is set theory these days... nevermind... it's all algebra. Begin with the order of operations, get into the groove of substituting letters for numbers; after that... should be good to go.

Here's a simple link: <a href="http://www.math.com/school/subject2/lessons/S2U1L2GL.html">math.com</a>

There's a mindset for doing mathematics; if that is unavailable, all one can do is work the problems until the conceptual framework builds in the mind.

0
AngelTCNoncommutative Geometry•

Category theory... everything is category theory these days

FTFY

1