Search CompSci.ca

Subscribe

Education

How to study for Computer Science exams

What started out as a question on University admission marks has brought forth a topic of gaming the educational system. And while in Canada it’s not as obvious as studying for SATs, or similar standardized tests, the schools still come with enough rules and misplaced goals to create a game for students who see it as such. When Universities look at just admission averages, it becomes a game of numbers, and there are certain moves that can be performed to increase those numbers without increasing what the numbers represent — the knowledge of the subject.

Of course this topic is a vast gradient of gray, as some forms of gaming are so common-place that such are even encouraged. Though others recognize them for what they are.

McKenzie, a high school Computer Science teacher starts off the discussion with an example:

Is it OK to study before tests?

I went to school with a guy who would never study before tests because it was gaming. You are artificially raising your knowledge before the test in a way that will not permanently increase your skill/knowledge.

Studying before the test in ways that will not permanently increase your skills or knowledge is foolish. In the case of a final exam, you may get the credit, but you will be underprepared for the next course. In the case of a midterm, it is a little like drinking a lot of water before going to see your doctor for a checkup so that you will “pass” your blood test. Midterms are supposed to expose weaknesses that you can fix before the final.

Later in life when I was writing and giving tests to my own students I wondered just how good the tests were evaluating what students really knew. One of the things that complicates cramming for students of computer science is that everything builds on everything else. A student needs to know everything they were taught in the first week of class in the last week in class.

Still, most students study and for the most part it’s indeed ok. Unless it’s Computer Science.

I never understood the process of studying for a Computer Science exam — the best one can do is memorize, but “such static regurgitation of a memorized fact serves little practical value.”

One can’t memorize how to write custom code — that takes practice.

One can’t memorize how to find bugs in code — that takes understanding.

The way to “study” for technical fields, like Computer Science, is to review your understanding of the material and practice to cover your weaker areas. Though much of the basics are expected to become a habit, so such need to be in constant practice over the duration of the course. Crunch time, a week before final exams, does not form habits, or even offer understanding — it just artificially raises your “knowledge” of the test, for the duration of that test.

For my last CS exam I found more benefit in relaxing, enjoying some music, and reading blogs. Though maybe I’m missing something. What does everybody else do for their exams?

Discussion

I just do the assignments as they are assigned. But I make sure to do them in detail and to understand everything I write down. This gives me a lot of practice, and as you said that is the only way to study for Comp Sci exams.

As for the day before the exam, I am usually on MSN explaining concepts to my friends who are trying to do some last minute cramming. That way I don’t do any hard core studying, but I still reinforce the material.

I am one of those people who always studies before a test. I’m not stupid or anything, I’m one of the smartest kids in my class. Although for one test I did this year, while I was studying, it was like I had never learned a thing. I still got 90% on the test, and I can still remember about the unit.

Here’s a tip: you’ve done all of your assignments as assigned. Now, take some time, using the knowledge you’ve gained to revisit them all. Go back to that first assignment and approach it anew. Read the description of the problem and all instructions.

You’re accumulating a lot of skills and knowledge in your typical computer science class; make sure that the stuff you learned in the last half of the semester hasn’t led you to forget some of the small details from the first half.

wtd hits it spot on with the kind of pre-exam review I would recommend — have all of your assignments done on time, and then do them again to re-enforce the concepts. Doing the same assignments the second time around is not (or at least shouldn’t be) as bad as it sounds. Having done it all before, and learning newer techniques in the later part of the course should speed the process up.

I was never fond of the Marine Biology case study, but then again I’ve done it on my own as an independent study, without much structure to it.

Keep in mind my original quote referred to ALL exams, not just CS. Most CS classes are skill-based, so there is not too much you can do to study. There are however a number of different style of Exams. A basic breakdown is:

1. Closed book, on paper.
2. Open book on paper.
3. Open book on the Computer.

If the test is closed book it is important to know key terms and make sure you can explain them properly. If I ask “what is Dynamic Programming”, don’t expect to get full marks for “the thing where you use the table.” even if you are pretty good at doing basic DP problems. If you are writing large sections of code on a closed book test then memorize key algorithms that you will probably need (highest in a list, bubble sort…) if you don’t know them by heart.

Open book tests are more of an issue of organization, and as wtd said, practice. In general the problems you get will be similar to problems you’ve seen before, so it is important to be intimately familiar with your own code. Typically these style of exams are asking you to solve bigger problems. You don’t have time to be searching through your code for that one obscure command you can’t remember, you need to know exactly where to look.

Now, this is pure gaming, but you need to customize how you prepare for your exams based on your instructor and the way he/she evaluates. Just because playing Starcraft all night before an exam has worked in the past doesn’t mean it will work for this exam.

I’ve found that the main things I need to study before a test in CS is definitions (I often KNOW what something is, but have trouble repeating them, especially if it’s expected to give the formal mathy definition), and little details that would take 10 seconds to look up if I ever needed to it in the future. For example, all the different ways to traverse a tree (I always mix up the names ).

Other than that, I often find that tests are just ways to make sure you’re not paying someone to do all your assignments. At my uni, you need to pass the assignment portion as well as the exam portion to pass the class, and both aspects are usually about 50% of the grade. (For example, 5 assignments worth 10% each, as well as a midterm and a final.)

During my time in college I realized that the only way to both pass the test and actually learn is to repeat the material daily. Not all, just what was covered during last classes. This way you will truly UNDERSTAND the topic.

Oh, and utilize the fact that humans are social animals. Get together with a bunch of classmates and go over it together. They’ll know stuff you’ve forgotten or never really understood in the first place, and vice versa.

Plus, you’ll be challenged to intelligently compose your thoughts, and that will probably be the greatest benefit of all. Knowing the material doesn’t mean anything going into an exam if you can’t put it coherently on paper.

@odzyskiwanie danych: Our teacher always tells us to review our science note every night, like what you said. No one every really does though. I should start, so then I won’t have to study and cram so much for a test.

@wtd: It does work a lot better talking to your friends about the material. Even for projects that might help you get ideas. We had a Geography project where you had to research your native language. Me and one of my friends native languages were English, so we did “Evolution of North American culture.” I walk with him back from school, so once we talked about what we were gonna write, what topics, how much we would write, etc etc. It helped me think about what else I can write, and also helps reassure me that I know what I am doing.
We had a Water Filter project too. It helped to talk to people about materials that you were gonna use. Great for ideas.

When I had exams in my high school CS class, the questions were all structures as ‘What is the result of the following code: ‘, or ‘What is the correct usage of *something*’. The tests were very syntax orientated, and that made me a little disappointed on the basis that we were forced to just memorize and regurgitate. Whereas in the programs that we were writing we were focused on applying what we knew.

It was confusing to have to switch between the two.

I’m going to assume college is going to be pretty much the same thing.