Introduction

Many modules or skills that require some form of practice (math, essay writing, programming, art, sports even!) require this. This is one of the fundamental skils to master. I do this for most of my modules. Here is what you need:

  1. Completing a high quantity of high quality problems
  2. Problem Solving before memorising - Jump into non-graded quizzes straight away, not at the end.
  3. Doing poorly on many of your practice tests - this is crucial and I’ll explain why
  4. Targeted practice problems - This is very crucial. In all high level sports or learning a new skill, targetting your weak and strong areas are key.
  5. Understand the fatigue-performance-growth graph - Fatigue is directly propertional to growth, but inverse to performance. Our aim is to keep fatigue high during training (before exams), hence inducing high growth but low performance. 1-2 weeks before exam, we deload and aim to reduce fatigue to 0. Our growth is now 0, but our performance is maximal.

We recognise practice-focused modules with modules that usually have some form of problem solving aspect. This could be, but is not limited to, the following:

  1. Programming lab-tests
  2. Math modules (math proving etc)
  3. BPAS finals
  4. case interviews

These type of modules can usually be tackled using deliberate practice.

Quantity and Variety of Problems

First, it is important that you tackle a breadth of problems. For my modules, I ensure that I try to complete every single question of practice that is given. You can never practice too much. One key example is for IS111 - Introduction to Programming. I’ve never programmed before, and I knew it would extremely challenging for me to pick up. Heres what I did to achieve breadth:

  1. Complete every single in-class exercise
  2. Complete every single problem from practice papers
  3. Even for questions I got correct, so long as I was slightly unsure, I would run code to understand the output
  4. Sourced for more in-class exercises from friends (from other professors) and completed all of them
  5. Sourced for more practice papers from friends (from other professors) and completed all of them

You can already see how much hours I put into 1 subject. I was learning how to code about 3-6 hours daily without fail throughout my entire first semester.

Essentially, breadth is very important because of 3 reasons:

  1. You cover a wide range of problems. This means that you’ll likely see similar problems that will come out.
  2. If you see a new problem, chances are that you can draw links between problems that you did before and deduce a solution during the exams. Trust me when I say that small techniques you learnt from somewhere else will help to solve novel problems in exams.
  3. By doing a lot of problems, it also acts as a form of memorisation. If you see the problem again, you’ll be able to tackle it immediately from memory, saving you a lot of time.

It’s also important to do a variety of problems. For example, going back to the IS111 analogy, it wouldn’t help you much if you do 100 qns on arrays vs 10000 questions on arrays. More importantly is to do 100 qns on arrays, 100qns on linked lists, 100 qns on dictionaries, 100 qns on graphs etc.

Quality of Problems

Next, once you have breadth, we start to focus on depth. Again, there is no point doing 100 easy questions on arrays. As a rule of them, if you’re not struggling during your study, you’re not working hard enough. See Techniques for Hard Work to understand more. It should be tiring and challenging to do these practice problems. The first 30 qns could be easy questions, and you might be challenged. But once you understand them, doing 30 easy qns isn’t going to challenge you any longer. You’ll no longer be introduced to newer comcepts and you’ll just be re-iterating what you already know.

The goal is have multiple levels of difficulty while doing problems. Maybe 30qns of easy, 20 qns of medium, 3 hard qns, back to 10 qns of easy, 10 more medium, 3 hard qns, and so forth. You will find that you will constantly be struggling during your practice, but you will eventually end up scoring well during the exams. This is provided that you muscle through the problems, and don’t give up. It is paramount that you deliberately do these difficult problems and learn the techniques used to sovle them. Will you always be able to solve them? Definitely not, and on to my next point.

Scoring Poorly in ungraded-tests / homework

The more poorly you score in ungraded quizzes, the better your exam scores will be. When you score poorly, it means that you’re learning something new, simply because you don’t know how to solve that particular problem in hand. If you do many problems, and continuously score badly on them, it means one of 2 things:

  1. You didn’t take the time to understand the problem and focused on memorising the answer (which is not what you want to do!)
  2. You are doing more challenging problems.

Most of the time, it will be (2) and not (1) if you are putting in the time and effort. This is good because it means that you’re actively learning something new. As reference, I usually just jump directly into doing ungraded practice quizzes straight, and I usually get something like 4/10 etc. I then slowly do a review of each question one by one. When I was studying for my Solutions Architect Associate Certificate, I jumped into practice papers, and scored around 60%/100%. It took me about 1.5h to finish each practice paper of 60 qns. However, I used about 4-6hours per paper to review and understand each and every question that I was wrong, or unsure. It took a lot of time and it was very challenging, but after each review I knew I learnt something and never got that question wrong again.

Targetted Practice Problems

Another fundamental tip for deliberate practice is to practice with an intent, aka practicing deliberately. You must know why you’re doing a specific problem. E.g if the exam won’t test you on Java, and you’re doing Java problems for your exam, you’re doing something wrongly.

It is very important to understand the grading criteria. Scoring for exams is not only about practice, but also about technique, which I’ll go through in another post. The simplest example I can give is for group projects. I used to just do group projects blindly, and even with a framework I wasn’t scoring well. Up until one day I read a blog on how some top scorers combat projects and it goes something like this:

  1. Look at the grading criteria for an A+
  2. Go through the checklist 1 by 1.
  3. For each point, ask yourself if you have hit the specific criteria or not. E.g if the point says “create 5 unique features”, but you only have 4, you know you have work to do.
  4. Ask the professors at the start: “What dos it take to score an A/A+? Do you have sample projects that have scored well? What made them score well?”

With this framework, you not only know that you are working towards the right goal, but you also know when to stop. This is extremely important. Many times I see people stuck in “tutorial hell” or “study hell” where you just re-read your notes, re-do tutorials, or even just continue adding features to a project that won’t increase your marks at all. This is a big time waster and we should try to eliminate such scenarios.

You’ll also want to take note of areas you’re strong and weak at. We are usually very comfortable doing things we’re good at, but that where our learning stops. Imagine this on an exam:

  1. 60% questions are tested on arrays
  2. 40% questions tested on dictionarys
  3. You are extremely strong at arrays but very weak at dictionaries.

Sure if you just focus on arrays, you’ll only score 60%. Someone who is good at both could go on to score 80/90%. The trick is to be average/better than average at most things, very good at some things. In this scenario, don’t forget to do targetted practice on dictionaries. If you’re exceptionally week at that, start off by tackling the super easy problems. Don’t even think about doing anything above easy. Once you get the hang of it, transition to adding in 1-2 medium problems, and in no time you’ll be able to do your first hard dictionary problem.

You can’t study forever. How do I know I’m done studying?

Bringing me onto my next point, you have a finite number of hours and infinite things to do. The goal really is to try our best to not study at all. We want to have good techniques such that we’ll minimise our time spent studying, and we can use those hours to do others things that we love, be it going on walks, going to the gym, spending time with friends etc.

To achieve this, you’ll need to know when to stop. See my previous point on escaping “study hell”. But that aside, here are some guidelines you can follow:

  1. Understand what will come out for exams. If 80% of the exam tests you on arrays, don’t spend 100h on dictionaries.
  2. Have a “stop point”. For me, it’s when I’ve studied all my flashcards. Once I study my last flashcard for that specific module, I know I’m done and I stop. For deliberate practice mods, it’s when I’ve done every single practice question and practice paper that I can find.

Fatigue-Performance-Growth Graph

Saved the best 2 for the last. They apply to many different domains, not just studying. I’ve used this while learning many different things and they have all worked out. First is the fatigue-performance-growth graph. You can see this post for more information.

Essentially, this is what it means:

  1. As fatigue increases, your potential increases.
  2. Fatigue decreases exponentially, but potential takes some time to decrease. It decreases at a slower pace than fatigue. However, it does decrease and that’s why if you stop doing work for months, you need time to work your way back up.
  3. As fatigue increases, your current performance decreases

As you train/study/work, you are growing your potential, but also incurring fatigue. Too much fatigue (studying without breaks) will cause a breaking point. You need to add breaks (take a deload) in order to exponentially drop your fatigue, but still reaping the benefits of high potential. You are most performant (at your peak) immediately after a deload.

Using this principle, here is what my strategy (at a macro level) usually is:

  1. Intense Study for 4-5 weeks straight, recess week slight break
  2. Study for 2-3 weeks, slight break
  3. Study for 2-3 weeks, study week before finals big break (still study but much lesser than before)

I study the hardest at the start and incur a huge amount of fatigue. I take a short break to avoid burnout. I continue studying but at a slightly lower intensity depending on how I feel. I take a short break to avoid burnout. I push during the project submission week and take a big break during the finals study week. This drops my fatigue all the way, which allows me to reach peak performance.

This is a macro strategy and does not go into daily study etc, but the principles are the same. Study the hardest at the start, and taper off during the day. Willpaper is a finite resource, and is at its maximum in the early hours of the day.

This method has been used in many training plans as well.

In marathon running, the final week is never the toughest run. It is a deload week with very light runs, and your km/week run drops exponentially. In bodybuilding, the final week is always the carb load week where you stop your fast 1-2 days before the show and eat up on carbs. In powerlifting, the final week is usually your peak week where you drop your total training volume drastically but push up on the intensity, taking a lot of rest. In mountaineering, the final week before your ascent is never a tough mountain climb, but always an easy warmup at low training volumes.

This is exactly the same in studying. The day before the exams should be easiest and most relaxing. If you’re cramming the day before, it is probably not a good sign.

Performance tuning and doing the mundane

The last point is on performance tuning. Most of our day to day training should be mundane. In a sense, you should spend most of your time practicing easy-medium problems. The famous quote “run slow to run fast”. Aerobic training involves running at a very slow pace for majority of your training. Even the world’s best sprinters don’t just sprint 24/7. In fact, they rarely sprint but focus on running slow for the majority of their training. You can take a look at Zone 2 Training for Athelete.

It is not the speed, but the time in zone 2 that mattes.

Similar to studying, we don’t sprint but rather deliberate adopt a slow-and-steady approach. We do constant levels of easy-medium work throughout the semester, and sprint (doing extremely difficult and targetted practice problems) during the peak seasons. It is the time we spent constantly putting in easy-medium level work throughout the semester that matters. To give an example:

  • Effortless: Just reading notes
  • Easy: Doing your in-class exercise
  • Medium: Facing a problem in those exercises and thinking of a new way to sovle it
  • Hard: Going on to find out of scope exercises that are challenging

Conclusion

This was quite a long post, but I hope you learnt something from this.

If you haven’t, you can check out the other posts in my series on the strategies I used to score well. As usual, all the best and happy studying!