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.

I am currently a College Student in a Systems Analysis (3 year course). I am about to finish my course and would like to enroll in Computer Science at a University near me. I have a deep interest in learning sorting algorithms, measuring time complexity, cryptography, systems programming and security research. I am bored by the typical, high-level knowledge; java and general algorithm knowledge. I have absolutely no problem learning and utilizing new programming languages, mentalities and syntaxes.

My only worry with regards to entering this course is what Mathematical knowledge is required prior to entering. I have done linear algebra but not quadratic equations; I have not done Calculus, nor have I done any Big-O notation. I plan on enrolling in 1 (one) year, so this gives me one year to prepare. I would like to know what I should be studying and reading to prepare. Books, worksheets, videos and any sort of advice or opinion(s) would be greatly appreciated. I have a great passion for efficient computing/programming and solving problems in the most efficient manner. I'm just trying to figure out if I would be in over my head entering Computer Science. Some people have said that I am to old, 22 this year, I would love to hear the opinions and advice of the Stack community.

Thanks To All In Advance,

share|improve this question
2  
Which country? Oddly, it might make a difference :0) –  forsvarir Apr 14 '11 at 18:48
    
Speaking of time complexity - it's not "measured" but proven to be such and such, which is a mathematical problem. If you're interested in such things, you must not be afraid of a bit math. –  Ingo Apr 16 '11 at 18:54
add comment

migrated from stackoverflow.com Apr 15 '11 at 2:13

This question came from our site for professional and enthusiast programmers.

8 Answers

Concrete Mathematics would be a good book covering various Math topics that tie into Computer Science. Rather than knowing specific course material before you take the course, I'd advocate understanding how you learn best and what kinds of Math interest you in terms of what kind of upper year courses may suit you better,e.g. Number Theory, Group Theory, Combinatorics, Analysis, or Topology to name a few topics.

share|improve this answer
add comment

How much math you need depends on the type and rigor of CS program you're entering. If it's a theorectical CS program, you will need some math. At minimum, plan on mathematical logic and proof, set theory, basic algebra, basic calculus, combinatorics and probability. In addition, I found graph theory and abstract algebra to be extremely helpful, especially in upper level courses.

share|improve this answer
add comment

A (good) three year degree in Computer Science will include a course on "Discrete Mathematics" which should cover the basics. If that's not part of the one year course you intend to take, see if it is available as a once off ... or try to get hold of the course materials and textbook and do it yourself informally.

Some of the topics that you mentioned may require deeper maths knowledge and skills, and it is not possible to predict whether you will learn the depth of knowledge in a straight CS degree / post-grad course. Serious cryptography for example probably requires a PhD in Pure Mathematics.

I have a great passion for efficient computing/programming and solving problems in the most efficient manner.

That can be dangerous ... if not moderated. Usually, it is more important that you get the program finished on time, that it works, and that the next guy (the one who takes over when you get hit by a bus) can maintain it.

share|improve this answer
add comment

From a CS graduate: algebra (a must) + function (domain of a function etc...) + discrete mathematics + solving inequalities + arithmetics + some calculus (limits & derivatives) + logarithms & exponentials + discrete probabilities + combinatorics

If you know the above, you are good to go for most courses.

share|improve this answer
    
Good list. The only things I'd throw in are predicate logic and a basic foundation for making proofs (induction, proof by contradiction, etc). –  Michael Apr 16 '11 at 19:09
add comment

If you want a head start, learn Discrete mathematics else Algebra will be fine. They'll teach you Calculus which you'll more than likely not use directly. But DeMorgan's Law is the law all IF / THENs are governed by and a very common oversight by developers.

You can find an example of this fact here

share|improve this answer
add comment

Age is not a factor.

Ultimately your current mathematical skills along with a DESIRE to learn is more than enough.

And dependant on your location/area of development you want to get into. CS may not be nessecary... many companies (in my area atleast) would rather see experience/certifications over class room time.

share|improve this answer
add comment

You are definitely not too old. I completed my degree in Computer Science last year at 24. In general, you will want to study beginning and intermediate Calculus. For research purposes, you definitely want to study Linear Algebra and Differential Equations.

EDIT: Typically, the more math you know, the better off you will be in the development world since it is all math based.

share|improve this answer
    
what "development world" is "math based" ?? pls explain –  Ritwik G Apr 15 '11 at 4:32
    
@RYUZAKI : Aside from the fact that everything in a computer down to its last register has a mathematical basis, databases are built upon relational algebra (i.e. a division of math). Languages are built upon context free grammar and finite state automata, each of which are mathematically based. All computer encryption is based upon mathematical algorithms. If we look back upon all the great computer scientist, they had a strong mathematical background. With that being said, development is inherently mathematical. –  user22601 Apr 15 '11 at 6:23
    
"development is inherently mathematical" OMFG. i am speechless. and as to your comments about --- 1. Relational Algebra (it doesnt need any special math experience. you can learn it in your course itself. it is not a pre-requisite) 2. Languages (i really dont think our OP is gonna"develop"any language on his own..nor are you..nor am i..so its a vague reason to have specific math skills) 3.Encryption (Yes; you are correct here. but Cryptologists have PhD in math.Math is their main course so that does not regard our OP)And lastly OP dont wanna be a computer scientist,he wants to be a developer –  Ritwik G Apr 15 '11 at 9:07
    
i would advise you to not say just beacuse you want to argue with somebody. everything you say shud have a clear rationale and be backed up by some experience. you seem fake.Eg. what does the following statement have to do wioth software development " Aside from the fact that everything in a computer down to its last register has a mathematical basis". all that part is a black box to a developer. it belongs to branches of Engineering called VLSI design and Embedded Systems , etc –  Ritwik G Apr 15 '11 at 9:10
    
@RYUZAKI : You're right, for the most part the hardware is a black box to a developer. On the contrary, mixing disciplines together yields better results if not just for the knowledge alone. –  user22601 Apr 15 '11 at 16:21
show 2 more comments

Just go in!!! And good luck! You are not too old, and you have the passion. You don't need to have done calculus or big-O notation before you enroll in CS. Advanced complexity analysis requires calculus, but you don't need that to become a very successful programmer, data structure designer and algorithm architect.

I've done calculus, theoretical complexity analysis, discrete mathematics, cryptography and what not but I haven't needed them in my work too much. In my opinion what matters most is

  • Capability to visualize data structures and algorithms in your mind
  • Transcending beyond the syntax of programming languages and seeing the "essence" of algorithms
  • Understanding practical algorithm complexity and how to reduce it
  • Passion for elegance and correctness
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.