How can I prepare for an introductory CS college course?

I am currently in Grade 12 and next year I will be studying Computer Science at a university in South Africa (syllabus is here). However CS has a very high dropout rate here in South Africa, more than any other course, and I'm nervous because of that. My experience with programming is limited to Java in the Net beans environment. I understand the basics of programming (loops, arrays, methods and classes, reading and understanding other languages, etc).

My question is how can I be more prepared? I'm willing to learn new languages or take online courses or anything that can help me next year.

  • 2
    $\begingroup$ Unfortunately it is probably hard for us to give you advice about how to prepare for your university's curriculum, because people here won't be familiar with your university's curriculum. This question would probably be better posed by asking someone at your university. On the other hand, if you wanted to edit your question to ask "how can I prepare for an introductory CS college course?", that might be a better fit for this site. $\endgroup$ – D.W. Aug 26 '14 at 6:21
  • $\begingroup$ Thanks, i'll edit that. I put a link to the curriculum though. $\endgroup$ – HristoM Aug 26 '14 at 6:22
  • 3
    $\begingroup$ A good command of high-school mathematics and general affinity to logical/structured thought is probably more important than programming skills. (This misunderstanding is in my estimation responsible for most drop-outs, at least over here.) $\endgroup$ – Raphael Aug 26 '14 at 8:39
  • $\begingroup$ maybe its worth looking at why students "drop out". some switch to other majors after finding CS is not for them after getting more of a direct taste. note that college involves a lot of dropping out and switching majors almost no matter what the major. if you are already programming that may be more preparation than a lot of other students. preparation could involve talking to students/ teachers if possible & looking at textbooks to see if youre really interested in the material & could picture yourself really engaging with it. $\endgroup$ – vzn Aug 26 '14 at 15:40
  • $\begingroup$ see also what is CS (meta) re CS vs programming, future directions after CS graduation etc $\endgroup$ – vzn Aug 27 '14 at 17:04

A lot of the other answers seem to be pointing in the right direction and get to the gist of things. I will give you a more pointed and concrete answer since I think it will be useful.

In my opinion, you are best served learning a bit of discrete maths and logic. The courses in the syllabus appear to either assume you know it or might skim over it when needed. A lot of CS students have a hard time with these topics. I have seen a good number of "elite" programmers entering university that hit a wall, here. On the other hand, I have seen others sail right through without an issue. I don't know anything about the high dropout rate in CS within South Africa, but difficulty getting past the discrete maths material does weed people out.

The primary goal is to learn how to think analytically and problem solve. I think this material is one of the best approaches to going about this.

Checklist of Topics:

  • Combinatorics (Counting principles)
  • Formal Logic (aka Boolean Logic)
  • Basic Set Theory/Algebra
  • Theorems and Proofs (Proofs by contradiction, Proofs by induction)
  • Graph Theory

Since your goal is preparation, you probably only need to focus on the basics. By this, I mean focus specifically on the easy, introductory material. You're looking for a strong conceptual framework concerning how to think.


Textbook: Discrete Mathematics Lecture Notes \ \ This is just a decent set of lecture notes I found online. Googling around might help you find others.

Video Lectures for Discrete Maths: Are there any good Discrete Mathematics video online? \ \ (I really like the Arsdigita stuff)

  • $\begingroup$ This is a follow up after my first year. Discrete mathematics was extremely interesting but not too difficult. What weeds people out is the integral calculus. Our highschool mathematics is horrible so people struggle with the university maths so much as it trys to cater to an international standard. $\endgroup$ – HristoM Feb 16 '16 at 2:06

I'm not well aware of study pattern in your region, but I can advise you according to my own experience of 6 years in this field. I am in post graduation course. One of the many things you need to know is CS is not all about programming, although most of the concepts you can relate to it and easily understand. Most importantly, its useless to learn every language, but mastery in any one language would be very helpful. Slowly you'll start understanding that all you need to understand is declaring variables, loops, functions and some built-in or library functions for a language, and it'll do most of your basic work.

Secondly, theory alone is of little use, except in the field of algorithms. From programming to digital and networking, you need to understand the practical examples. You need to start from "How will I do this?" then go for "what are the problems in my ways?" and then you'll almost always end up with adopting standard ways of doing things, this methodology will give you a lot of help.

Nothing is too difficult if you work hard and follow right approach. Computer science is a field where either you'll understand things or you won't. There is little to no use of understanding half things. You can't know half algo. You can't know OSI architecture upto 3 layers. You'll forget things if you do them that way. But once you have struggled enough, things would start relating so nicely that you'll easily be able to forecast solutions to a problem in one subject due to your experiences from other subjects.

My advice would be to go for the course if there is some curiosity in you when you think how facebook works? How Windows work? How am I connected? Why is everything 0 or 1? WHAT is 0 and 1? All the best.

  • $\begingroup$ The algorithm is actually quite different from what you say. At school, you will still get lot of partial credit (especially in theoretical courses). In other courses, you are at the mercy of the auto-markers. That's the way it works in the US and similar system. But upvote for you so you can chat then. Please just chat though. $\endgroup$ – InformedA Aug 26 '14 at 10:51
  • $\begingroup$ @randomA : I meant knowing half algo is useless in the sense that you learn almost nothing in comparison to when you know full algo. E.g. there is almost no use of knowing that in sorting we need to run one for loop from start to end, if we don't know what next loop is. I made point in context of understanding CS, not in context of marks. Thnx for your upvote though. $\endgroup$ – vish213 Aug 26 '14 at 15:29
  • $\begingroup$ marks were designed that way so it can reasonably reflect understanding. Your example above is also not correct in my view, but let's say agree that we have different views. $\endgroup$ – InformedA Aug 28 '14 at 5:19

HristoM, I've read your syllabus, and as I can see, you will study mathematical courses. Therefore, it's necessary to be familiar with logic: you have to be able to construct correct reasoning and to evaluate it's correctness. I think, it's much more useful to study in university than knowledge of various programming languages. So, the best way to study logic is to prove mathematical statements.


For computer science, one thing is very important, Maths. Computer science is not just programming, it provides solutions to complex problems by using algorithms, maths, data structures and design patterns. The more strong you are in problem solving, the more you will be good in CS.

Making your maths strong in practical problem solving will help you during your CS study, but please note that you have to understand Maths and you should apply it to real world problems so that you get command on problem solving. If you are not good in Maths, then i think you should consider another course. And never try to force yourself to play with Maths if you are not naturally good in it, as understanding Maths and Programming are God gifted, not human developed :)

  • 6
    $\begingroup$ I strongly disagree with your last sentence: maths and programming are skills, like any other, that any intelligent person can pick up with practice and guidance. Also, it's important to note that the mathematics that is used in computer science is often of a rather different flavour than high school mathematics. Mostly, CS uses discrete maths: combinatorics, graph theory, logic, probability. Some areas, such as signal processing and machine learning use more of the continuous stuff. $\endgroup$ – David Richerby Aug 27 '14 at 20:38
  • $\begingroup$ There is no such thing as God gift. Enough hard work can always overcome this "god gift". Not a thing to be discussed here though.Also mostly your interest lies in the things which are well understood to you. If you can understand basics of maths, you'll develop a taste for higher maths too. $\endgroup$ – vish213 Aug 28 '14 at 3:24
  • $\begingroup$ Yes, you are right and i may be wrong. I saw very intelligent and hard working people who were good in every other subjects except maths and programming. And i saw people who did not studied CS and they are very good programmers. $\endgroup$ – Altaf Hussain Aug 28 '14 at 5:15

I think a good starting point would be reading a book about theoretical computer science as it teaches you to think in structures and formalisms, which are the cornerstones of computer science.

Have a look at Sipser's book. Read the book slowly from cover to cover and try to understand every definition, theorem, and proof (May take some time).

  • 1
    $\begingroup$ I disagree with trying to understand everything in Sipser's (or anyone's book, really) especially if you are just an upcoming undergrad. Instead why not just skim it over, read interesting things here and there, try to develop a feel for what kind of things are studied, why they are important, what kind of applications they have, what kind of theoretical tools are used, and so on. $\endgroup$ – Juho Aug 28 '14 at 7:31
  • $\begingroup$ I think Sipser's book is very approachable even to high school students. I can tell from my own experience that reading Sipser's, or any other approachable TCS book, before coming to university is very beneficial to train abstract thinking, and getting used to mathematical formalism and notation. $\endgroup$ – Christopher Aug 28 '14 at 22:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.