This document describes some recommended strategies for studying for CSE 121 exams. We’ve split them into two categories:
- TA Tips: TAs were students more recently than Brett & Matt and have great tips on taking exams!
- General Exam Advice: from the course staff over the years, with some justification (and interesting education research)!
TA Tips¶
Our awesome TAs compiled a list of strategies and test-taking tips, so be sure to say thanks next time you’re in section!
Preparation Tips¶
- SLEEP, EAT, REST! Take care of yourself so you can do your best! An hour more of sleep is better than an hour more of studying, and your brain needs food so it has energy to study. We are also most productive when we mix in time to relax with studying.
- Practice! There are a lot of practice resources such as the previous lecture and section examples, problems from past quizzes and finals, and problems on Practice-It. When practicing, feel free to post on Ed or come to office hours to ask questions! We are here to help!
- Practice Under Test Conditions! This can help you get familiar and comfortable with the testing environment. Some conditions you could practice under include: completing problems under time pressure, handwriting code, checking your solutions without the compiler, and using the reference sheet we will provide!
- Time Yourself! Try one practice problem and time how long it takes you to complete it. Then keep practicing until you are able to comfortable solve a problem within a 10-15 minute range. Alternatively, give yourself 15 minutes to work on a problem and see how far you get along. Keep working on solving problems regarding that material until you have aced the 15 minute mark.
- Identify Your Strengths and Weaknesses! When preparing for the exam, take note of your strengths and weaknesses. This can help you judge how to spend your time preparing. Everyone has their own areas of the course that they feel more or less confident in, so use the time to reflect and practice what you feel less comfortable with.
- Notice Common Patterns/Problems! There are some patterns with data structures that are fairly common. Getting familiar with these patterns can help you prepare for what may come up in an exam! Take some time after solving a problem to think about how it is similar/different from other problems you solved. Many problems have similar themes (e.g. traversals, finding a minimum/maximum, indexOf) and it can be useful to identify the basics behind attempting each of these problems.
- Create a cheat sheet! Rather than waiting until the night before to create a cheat sheet, creating the cheat sheet early can be a very useful form of studying since you are condensing all information you need to know into one sheet of paper. A cheat sheet can also be very useful for writing down some information you may forget.
Test-Taking Tips¶
- Solve Problems in Your Order! Scan the questions first to understand what the exam will be about. This will help you be able to flip back and forth between problems more easily too. It is okay to skip a problem and come back to it later on! Use your time wisely! Some people like to tackle problems they find harder first, while others like to start off with problems they find easiest. Find out what makes you most comfortable on an exam!
- Annotate! You can mark up the specs for each problem as much as you would like, so be sure to annotate as you are reading through each problem so you are both actively reading, and making plans for how to tackle the problem. Spend a reasonable amount of time understanding the problem before writing the bulk of your code.
- Check Your Work! To check your work, you can use the examples provided in the problem write-up. Then, you can test your code against edge cases.
- Leave Extra Space Between Lines of Written Code! It can be helpful to leave extra space between lines of written code in case you want to add more code later on; It is also okay to use arrows and clearly identify where code would go!
- Use code quality that works for you. We are not grading on code quality for tests like we do for assignments, so it is okay if some indentation is off or some variable names are not descriptive. However, code quality also helps you as you check your work, so using braces properly (with adequate spacing), good indentation, and descriptive variables names can make this much easier.
- Use the Reference Sheet! Hopefully, self-explanatory!
- Write What You Know! If you are stuck, write what you know! For example, if you are stuck on a coding problem, writing header methods or writing a solution to solve part of the problem is a great place to start! This also helps you get context if you come back to the problem!
General Exam Advice¶
Start studying early and often¶
Cramming technically helps you learn, but the learning is pretty shallow and quickly forgotten. It is far better to study a little bit every day rather than trying to fit all the studying into the late hours before the exam. It might be a bit more work, but the payoff is worth it!
Stay healthy¶
It’s really easy to be overwhelmed with the stress of all your classes and put taking care of yourself on the back burner. This is not a good thing and you should still prioritize being healthy while studying for exams. Your brain is part of your body — so keeping your body healthy also keeps your brain healthy! This means making sure to stay hydrated, eat a balanced diet of things (other than chips and Oreos!), and maintain a normal sleep schedule.
It’s also important to give yourself some mental breaks every once and a while to make sure you aren’t overexerting yourself (likely to cause you stress or fatigue). Try to do some mindfulness exercises for a few minutes every hour to give yourself a well-deserved break! Fitting all these things in your busy schedule can be tough at first, but making them a habit makes it easier in the future.
Study like you test¶
Students often make a crucial mistake of not adapting their studying to the needs of the test. For example, in our case the exam is going to be on paper — so it’s really important that you practice writing code by hand, so that it’s not a brand new experience when you take the actual final. While our brains can store a lot of information, it’s extremely conditioned on context. Learning a skill in one context (coding on a computer) and never practicing it in the other (writing on paper) can potentially hinder the knowledge you’ve gained.
So if you want to study like you are taking the test, what should you do?
- Do the problems by hand with pencil and paper
- Once you have a solution, simulate the code to verify if it’s correct. You should at least try it on the sample input but then you might want to consider edge cases mentioned in the spec.
- Now that you think you have a working solution, type it up on Ed and run it on the sample input to see if your solution si right.
- If you were right, that’s good!
- Now you have found a mistake in your ability to check your code (i.e. forgetting to handle the empty case). Make sure you check those cases in similar problems in the future.
- Only after getting everything you can out of the problem should you look at the solution (and see if you missed anything). Once you look at the solution, the problem becomes less useful — since you can’t “unsee” the solution.
This process can be slow, but very helpful for your ability to solve problems and check if they are correct.
Remember to include checking your answers as part of your test time!
Try to find connections between the problems¶
For example, compare and contrast array problems to see how they are similar and how they are different. Trying to figure out these “higher-level” features of the problems will help you see common patterns in solutions. Knowledge is made from connections so forming high-level connections between the problems you solve will help you learn how to solve new types of problems. Reflection is a form of practice that helps you understand the material in a deeper manner. You should reflect on what you found easy and what you found difficult to help guide future practice.
Mix up your practice¶
Mixing up the types of problems you practice increases long-term learning.
One well-known study* focused on college students learning calculus and computing the volume of different solids (spheres, cubes, cones, etc.). One group of students practiced by first doing all the cube problems, then all the sphere problems, and so on; this practice strategy is called “massed practice”. The other group of students practiced by mixing up the problem types and doing them in a random order. This type of practice is called “mixed practice.” Right after finishing the practice problems, the students were tested on their knowledge.
Before showing their test results, the students were asked how effective they thought their studying was. The students who did “massed practice” reported at a higher rate that they felt their studying was effective. The students who did “mixed practice” reported they felt slowed down by having to switch between contexts for each problem.
Which one do you think performed better? Turns out the students that did the “massed practice” or a problem type at a time did better when tested immediately! But what about if you test them a week later? The mixed-practice students do much better! What gives?
Massed practice is like cramming. While it provides short-term gains, it doesn’t translate to long-term memory. It also only requires you to learn the material at a shallow level. When working between problem types, you can compare and contrast the aspects of the problem that you worked on, and then apply that deeper understanding to future problems. It does a better job of forming connections between the information rather than treating them as completely separate silos of knowledge. It also has the added benefit of fitting the context of real life a bit better — since you don’t know right away what type of problem you’re working on before you solve it!
This is not to say that mixed practice is “faster” than massed practice. It turns out that learning using mixed practice feels a lot slower because of the context-switching. But the learning is deeper and longer lasting than the fast way. So the students’ responses were right! They did feel “slower” but that was actually a sign they were learning better!
(*interested in the research? one great starting point is the paper “The shuffling of mathematics problems improves learning”, which this section discusses)
Embrace difficulty¶
Don’t just do easy problems. Do problems that challenge you because it’s a sign that you have somewhere you can improve. This plays into the concept we talked about earlier in the quarter called a “growth mindset” rather than a “fixed mindset”.
People who have fixed mindsets believe their abilities are fixed at birth (i.e. you’re either a CS person or not). Because of this, people with fixed mindsets don’t like to be challenged because it is a sign of inherit weakness to them. People who have a growth mindset believe they can improve their abilities with practice. This means people with growth mindsets see challenge as an opportunity to learn since they can eventually overcome that challenge with enough practice.
Having a fixed mindset can be very difficult emotionally, but it’s something that can change with intentional practice! You have to catch yourself when you are saying “I’m not smart enough” or “I’m not cut out for this” and instead think “I don’t get this yet” or “Something isn’t working right now, what do I need to change about my studying to see improvement?”
Conclusion¶
Have any questions or suggestions? Post on Ed!
This document was last edited by Elizabeth Shirakian. It was written by many 12x and 14x instructors and TAs over the years!