Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Apologies if this sounds like a blog.

I'm currently completing tertiary eduction in order to be accepted into a CS course at university, and I would like to know what options are available to me to improve my knowledge of programming and mathematics at home.

I did not finish high-school, and have a pretty basic understanding of mathematics though I've never struggled with it. I'm not sure what level of mathematics I am at, suffice to say I would struggle with solving complex algebraic equations.

I've never had any formal education in programming, but I've been doing it since I knew what it was. I'd say that I have OK practical knowledge, but next to no understanding of anything advanced.

To improve my mathematics knowledge, I need a list of topics which should be covered, starting from the level of an average 16/17 year old. I'd also need to know which topics to cover before others. My first thought is to buy a highschool maths textbook to start with.

I'm not sure what I should be doing to improve my programming knowledge, but I sure know that I am far, far off from answering questions such as: "Using only line drawing primives, construct a wireframe 3d car demo where the player can drive the car." (to use an example from a pretty out-there job application task).

I'm not sure what I am expecting in the way of answers, perhaps just advice from people who have been in similar situations. I've got a year before I enter the CS course and I want to come in with all guns blazing.



migration rejected from stackoverflow.com Oct 23 '13 at 10:48

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

closed as off-topic by gnat, GlenH7, MichaelT, Dan Pichelman, Yannis Rizos Oct 23 '13 at 10:48

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – gnat, MichaelT, Dan Pichelman, Yannis Rizos
If this question can be reworded to fit the rules in the help center, please edit the question.

projecteuler.net –  Artelius Jan 20 '11 at 10:05
It does depend a little on which CS course you're going into and even what type of programming you want to get involved with. Strong mathematical knowledge is always a plus, but there are certain branches of mathematics that are more geared towards CS than others (graph theory, discrete to name a couple). –  Martijn Verburg Jan 20 '11 at 10:11
It also depends what country you are in. The difference –  Loki Astari Jan 20 '11 at 11:01
comments disabled on deleted / locked posts

6 Answers

You'll find people who tell you programming and mathematics go hand in hand, and others who tell you that they never use more than the simplest mathematics in their programming.

I belong to the first group. Perhaps my vision won't suit you. But here it is.

Computer science is about understanding the ways that data can be manipulated according to the rules of a machine, as well as orchestrating manipulations that achieve a desired result.

Mathematics is about understanding the ways that statements can be manipulated according to the rules of symbol system, as well as performing such manipulations in order to obtain a desired result.

There is a strong connection between the two. Getting experience in one helps you with the other, sometimes directly, sometimes more subtly.

I would suggest you start with mathematical logic. Consider the statement "If A is True and B is True, then A is False."

Note that A and B aren't variables; they're placeholders for statements which are either true or false. For instance "If I am a cat, and I am a dog, then I am not a cat."

If you learn the techniques of mathematical logic (and convince yourself that they make sense - which isn't hard), you understand the main mechanism in mathematics. So I would suggest you start here. This kind of stuff is often taught in first year CS, sometimes as part of "Discrete Mathematics". You may find something like this book useful.

After that, let your interests drive your learning. Algebra is extremely useful, but if you find it tedious then it will probably be easier if you pick it up whilst doing something else - be it geometry or number theory or financial stuff or physics simulations.

I liked to explore the things I learned in maths by writing programs. More recently I learned how to analyse programs mathematically (both from a performance perspective and a correctness perspective). Check out projecteuler.net.

On the programming side, know that there is no magic in any program. I learned how to program by saying "I bet I could do that myself". I started by generating prime numbers, and then it was a GIF decoder, then a chat server, then an OS kernel. (Among much else.) Doing something without being told how, without reading about it first, is a great way to improve your problem-solving and critical thinking.

If you don't already know any fancy sorting algorithms, try to come up with one yourself. Could it sort a million items in reasonable time? Once you've had a few attempts, read about the topic and evaluate what you did. Or do a similar thing with compression.

One last thing: I would suggest learning the Haskell language. It has strong mathematical overtones and is - I believe - challenging and rewarding.

+1 for Haskell and basic category theory (which seems to have unusually deep implications to programming). –  9000 Jan 20 '11 at 13:55
add comment

As Artelius said, understanding mathematical logic is a good thing, and being able to construct syllogisms helps you reason in a more methodical manner, even in other areas of life.

I'd add to that:

Finally, after you've been programming for a while I recommend you to look at some design patterns. I could only appreciate the usefulness of some patterns after I have already written some code that could be better if I had known a pattern for solving that problem already existed. That's how it worked for me to understand what the fuzz about design patterns was without embracing them in some esoteric fashion, without understanding what they're for.

God bless

add comment

you can hadle to understanding math. I suggest a website that http://ocw.mit.edu/courses/mathematics/ . There is a lot of online video math course. And its to be very useful to you.

add comment

"Concrete Mathematics: A Foundation for Computer Science" would be a book choice if you want an idea of a book that could probably cover a lot of basics that could be quite helpful.

The preface would be a way to see some of the style of the book if you want a peek behind the cover. The book was a textbook for an advanced Graduate course I took called, "Asymptotic Enumeration," though we did skip many chapters of the book to get to that part.

add comment

Learn design patterns they're the one theoretical concept you really need to know that will shape your programming for years to come

add comment

There is a lot about theoretical computer sciences, but I don't really understand how can they be useful for a non-researcher.

Subjects that are just mind blowing are file compression algorithm, encryption, graphes, computability (the O(n) notation), and other bits that mortal programmer will never have to code themselves. I can assure you that you are saved from those evil things.

There are, other than those subjects, topics that requires mathematics, but where you need to make your own wheel. A good example is3D game programming: 3D matrix transformation, quaternions, simple algebra with powers, exponentials, parametric curves, simple solid & point mechanics, physics law for light emissions, etc.

Another hard subject that you may have to deal with, is differential equations (1st and 2nd degrees). Those are the most important mathematic tool, and rightly represents that simple enough maths can be daunting enough to get along with.

This might make you understand that even if you don't deal with "cool maths", when you are in computer sciences, you don't really deal with those research-abstract-impossible-to-read stuff.

I disagree with your view about encryption, graphs, computability, and O(n) notation. Some programmers won't need them, but many will find them useful. Compression and encryption are best left to the experts, although any programmer who is significantly reliant on encryption must appreciate how it works, otherwise security holes result. Personally I find compression and encryption much easier and more interesting than differential equations. My main point is that everybody is different, and should let their interests guide them (without being blind to everything else). –  Artelius Jan 21 '11 at 6:38
well I agree with me –  jokoon Jan 21 '11 at 8:04
add comment