Answer by David Koh:
I did pretty well at MIT, and there's a few things that I did there that haven't been mentioned yet.
The most important thing is to keep track of how good your understanding is of the material. I saw a lot of people thought that they understood what was going on in a class, but could easily get tripped up by the basics even after the class had moved onto more advanced topics. Having a thorough understanding of the basics is particularly key, because most advanced material is really just an extension of the basics.
For most mathy, computer science topics, there's really two parts to understanding. The first is intuition, which for me always meant being able to build a mental model of whatever I was studying in my head. Usually, working out examples helps with the intuition. The second is knowing how to formally reason about the topic, which usually involves being able to work through examples step by step using logic and/or algebra, and is especially key for proofs in math and algorithms. Most good students learn the rules for formal manipulation fairly well, but without a good intuition it becomes harder to deal with more complex problems, where the correct path is not immediately clear.
Another important thing, especially at top schools, is time management. If one class just clicks for you and you get it easily, and another class is really hard, you should be able to spend less time on the first in order to spend more on the second. Good students study smart, not hard (great students usually do both).
Here's some tips broken down by part of the class:
- I find that in lecture, one of three things happens for me: (1) Everything goes too fast and I get lost. (2) I can follow what the professor is doing and I understand what they're talking about. (3) The professor is going kind of slow, and I can usually get a good idea of where they're going before they say it.
- In case (1), it usually means that I'm going to need to do extra work beforehand and afterwards in order to get anything out of lecture. This usually means doing the readings beforehand, and going over the lecture notes afterwards until I feel confident I know what the professor was talking about. Office hours and recitation are also great places to ask to have something explained again, and hopefully this time in a way you can understand.
- In case (2), I usually don't worry too much about doing readings beforehand, but I will go over the lecture notes, since usually there are some things I didn't realize I missed. The key thing to know here is that I never really feel like I understand the material yet at this stage, since I usually know the 'how' but not the 'why'. The 'why' typically comes with problem sets.
- In case (3), I may skim the lecture notes, but otherwise I'm usually good. Case (3) usually only happens when I've seen some of the material before anyway, so I usually have a pretty good idea of how well I know it.
- One last tip that I think is really key for lecture is to try to understand how the professor thinks and where they're coming from. For instance, my math professor for Real Analysis always thought of the concepts he was teaching in terms of metaphors and visuals, and he would always start with that, and then tie it into the rigorous math. From that, I knew what the structure of the lecture would be and also that I would get good intuition from the professor (but he might leave out some of the rigor). In contrast, I had another professor in Probability who did everything through equations, which meant I got most of my intuition about topics from the book.
- Problem sets are usually the best place to find out how well you actually understand the material. Always start them alone, because if someone else gives you the key intuition for a problem right at the beginning, they've just prevented you from finding a hole in your own understanding you didn't know was there.
- Here's how I typically do problem sets. First, read the whole thing, and then start on the easiest looking question. Work on it until you've either solved it, or you're stuck and not sure what to do next. Then move to the next easiest question, and so on, until you've tried all of them. Which questions you can do and can't do right off the bat are good indicators of how well you understand a certain topic.
- Once you've done a first pass of the problem set, take a short break, and then double down again on the problems, one at a time. If you get really stuck on a problem, skip it again, but I'll usually only do this if I spend more than half an hour without getting anywhere. You may try lots of things and hit lots of dead ends while working on problems this way, but that is good, because you are learning what doesn't work, which is something you can't usually learn in lecture (and is very important on tests).
- Finally, once you've given all the problems a good, honest try, go and find help. Friends and classmates, TAs and professors are all good options. Hopefully, they can help you get unstuck on the problems you're still stuck on. At this point, you should be able to understand the solution they gave you, and if not, keep bugging them until you can.
Studying for Tests
- First thing I always did to get ready for a test: Find a practice exam, and do it cold, before you study at all, no notes or helpers. This will give you a very good idea of how well you know the material, and is likely to be an hour or two well spent. Make sure you skip things that haven't been covered yet, if the test is from an older version of the class. If you can't solve a problem, note that down and move on.
- Review the test and see what you didn't know. These are the things that are most important to study. The other key thing to do is see what topics weren't covered on the test, and make sure you study those as well. If you can find another test that did have a problem on that topic, I suggest doing that problem as well, to test your understanding.
- Another good technique is to make a list of all the topics on the test, and see how much the class has covered those topics. This gives you a good idea of how hard the problems on those topics will be. If you've had a lot of problems or lectures on a topic, the test will probably have more advanced problems about it, but probably fewer. Conversely, if you've only covered a topic a couple times, the test will probably give you easier problems, but there might be more of them. This is just a rule of thumb and is sometimes completely off, but it is often helpful to guide studying.
- Non-trivial problems – I consider test problems that require an extra insight which was not necessarily taught in class to be a special class of problems. There's not one good way to prepare for them, since you don't really know what's coming, but having a really solid intuition of the basics is usually really helpful. Also, a good understanding of general related topics can be invaluable, which means just being a good all around student will probably help you on the hardest tests.
- Help other people study! Explaining concepts you think you understand is a great way to find out where the gaps in your knowledge are. If you don't know anyone who needs help with the class, find someone who already knows the material and "teach" it to them. They will be able to tell you what you didn't talk about, or things that you got wrong, and they may be able to ask questions you don't know the answers to (and then answer them for you)
- You can probably find tons of test taking tips elsewhere, so I'll stick to the basics here. Read the whole test beforehand, start with the easiest problems first, followed by the ones that are worth the most points (if you know how much they're worth).
- If you get stuck on a problem, make sure you show work up to where you are, and go to a different one. Partial credit on everything is good.
- If you get stuck on a non-trivial problem which is really hard (and you're done with everything else), trying something that you're not sure if it works usually doesn't hurt, and sometimes the professor might give you partial credit if you were kind of close. If it feels good to your intuition but you can't justify it formally, you're probably not far off.
Finally, one last note: If you feel like you're starting to get overwhelmed by a class, don't lose hope! Go back to the basics, and learn them again. If the class is moving too fast for you, you have to go back, put in the time to learn it at your own speed, and build up your understanding piece by piece. Often, advanced concepts are built up one simple step at a time from the basic concepts, and if you missed some of the steps in the middle, it's easy to feel like nothing makes any sense anymore.