Doing well in your courses

a guide by Andrej Karpathy

Here is some advice I would give to younger students if they wish to do well in their undergraduate courses.

Having been tested for many years of my life (with pretty good results), here are some rules of thumb that I feel helped me:


All-nighters are not worth it.
Sleep does wonders. Optimal sleep time for me is around 7.5 hours, with an absolute minimum of around 4hrs.
It has happened to me several times that I was stuck on some problem for an hour in the night, but was able to solve it in 5 minutes in the morning. I feel like the brain "commits" a lot of shaky short-term memories to stable long-term memories during the night. I try to start studying for any big tests well in advance (several days), even if for short periods of time, to maximize the number of nights that my brain gets for the material.

Attend tutorials or review sessions
Even if they are bad. The fact that they get you to think about the material is what counts. If its too boring, you can always work on something else. Remember that you can also try to attend a different tutorial with a different TA.


Considering the big picture and organisation is the key.
Create schedule of study, even if you dont stick to it. For me this usually involves getting an idea of everything I need to know and explicitly writing it down in terms of bullet points. Consider all points carefully and think about how long it will take you to get them down. If you don't do this, there is a tendency to spend too much time on beginning of material and then skim through the (most important) later material due to lack of time.

Always try to look at previous tests BEFORE starting to study
Especially if the past tests were written by the same professor. This will give you strong hints about how you should study. Every professor has a different evaluation style. Don't actually attempt to complete the questions in the beginning, but take careful note of the type of questions.

Reading and understanding IS NOT the same as replicating the content.
Even I often make this mistake still: You read a formula/derivation/proof in the book and it makes perfect sense. Now close the book and try to write it down. You will find that this process is completely different and it will amaze you that many times you won't actually be able to do this! Somehow the two things use different parts of the memory. Make it a point to make sure that you can actually write down the most important bits, and that you can re-derive them at will. Feynman famously knew this very well.

Always try to collaborate with others, but near the end.
Study alone first because in the early stages of studying others can only serve as a distraction. But near the end get together with others: they will often point out important pitfalls, bring up good issues, and sometimes give you an opportunity to teach. Which brings me to:

Don't only hang out only with stronger students
Weaker students will have you explain things to them and you will find that teaching the material helps A LOT with understanding.

Go to the prof before final exam at least once for office hours.

Even if you have no questions (make something up!) Profs will sometimes be willing to say more about a test in 1on1 basis (things they would not disclose in front of the entire class). Don't expect it, but when this does happen, it helps a lot. Does this give you an unfair advantage over other students? Sometimes. It's a little shady :)
But in general it is a good idea to let the prof get to know you at least a little.

Study well in advance.

Did I mention this already? Maybe I should stress it again. The brain really needs time to absorb material. Things that looked hard become easier with time.
You want to alocate ~3 days for midterms, ~6 days for exams.

If things are going badly and you get too tired, in emergency situations, jug an energy drink.

They work. It's just chemistry.

For things like math: Exercise > Reading.

It is good to study to the point where you are reasonably ready to start the exercises, but then fill in the gaps through doing exercises, especially if you have many available to you. The exercises will also make you go back and read things you don't know.

Make yourself cheat sheet.

Even if you're not allowed to bring it to the exam. Writing things down helps. What you want is to cram the entire course on 1 or more pages that you can in the end tile in front of you and say with high degree of confidence "This is exactly everything I must know"

Study in places where other people study as well, even if not the same thing.

This makes you feel bad when you are the one not studying. It works for me :)
Places with a lot of background noise are bad and have a research-supported negative impact on learning. Libraries and Reading rooms work best.


Optimal eating/drinking habit is: T-2 hours get coffee and food.
For me, Coffee or Food RIGHT before the test is ALWAYS bad
Coffee right before any potentially stressful situation is ALWAYS bad.
No coffee at all is bad.
I realize the coffee bit may be subjective to me, but its something to think about for yourself.

Study very intensely RIGHT before the test.

I see many people give up before the test and claim to "take a break". Short term memory is a wonderful thing, don't waste it! Study as intensely as possible right before the test. If you really feel you must take a break, take it about an hour before the test, but make sure you study really hard 30-45 minutes before the test.


Always use pencil for tests.
You want to be able to erase your garbage "solutions"

Look over all questions very briefly before start.

A mere 1-3 second glance per question is good enough. Just absorb all key words, and get idea of the size of the entire test.

On test, do easy questions first.

Do not allow yourself to get stuck on something too long. Come back to it later. I skip questions all the time... Sometimes I can complete as little as 30% of the test on my first pass. Some questions somehow become much easier once you're "warmed up", I can't explain it.

Always try to be neat on the test.

Surprisingly few people actually realize this obvious fact: A human being will mark your test. A sad human being gives low marks. I suspected this as undergrad student and confirmed it strongly when I was TAing and actually marking.

Always BOX IN/CIRCLE the answer

Especially when there is derivation around it. This allows the marker to give you a quick check mark for full marks and move on. Get in the mindset of a marker.

NEVER. EVER. EVER. Leave test early.

You made a silly mistake (I guarantee it), find it and fix it. If you can't find it, try harder until time runs out. If you are VERY certain of no mistakes, work on making test more legible and easier to mark. Erase garbage, box in answers, add steps to proofs, etc.
I have no other way of putting this-- people who leave tests early are stupid. This is a clear example of a situation where potential benefits completely outweigh the cost.

Communicate with the marker.
Show the marker that you know more than what you put down. Ok you can't do a particular step, but make it clear that you know how to proceed if you did. Don't be afraid to leave notes when necessary. Believe it or not the markers often end up trying to find you more marks-- make it easy for them.

Consider number of points per question.

Many tests will tell you how many marks every question is worth. This can give you very strong hints when you are doing something wrong. It also gives you strong hints at what questions you should be working on. It is, of course, silly to spend too much time on questions worth little marks that are still relatively hard for you.

If there are <5 minutes left and you are still stuck on some question, STOP.

Your time is better spent re-reading all questions and making absolutely sure you did not miss any secondary
questions, and that you answered everything. You wouldn't believe how many silly marks people lose this way.

Congratulations if you got all the way here! Now that you are here, here's my last (very important advice). It is something that I wish someone had told me when I was an undergraduate.

Undergrads tend to have tunnel vision about their classes. They want to get good grades, etc. The crucial fact to realize is that noone will care about your grades, unless they are bad. For example, I always used to say that the smartest student will get 85% in all of his courses. This way, you end up with somewhere around 4.0 score, but you did not over-study, and you did not under-study.

Your time is a precious, limited resource. Get to a point where you don't screw up on a test and then switch your attention to much more important endeavors. What are they?

Getting actual, real-world experience, working on real code base, projects or problems outside of silly course exercises is extremely imporant. Professors/People who know you and can write you a good reference letter saying that you have initiative, passion and drive are extremely important. Are you thinking of applying to jobs? Get a summer internship. Are you thinking of pursuing graduate school? Get research experience! Sign up for whatever programs your school offers. Or reach out to a professor/graduate student asking to get involved on a research project you like. This might work if they think you're driven and motivated enough. Do not underestimate the importance of this: A well-known professor who writes in their recommendation letter that you are driven, motivated and independent thinker completely dwarfs anything else, especially petty things like grades. It also helps a lot if you squeeze in at least one paper before you apply. Also, you should be aware that the biggest pet peeve from their side are over-excited undergrad students who sign up for a project, meet a few times, ask many questions, and then suddenly give up and disappear after all that time investment from the graduate student's or professor's side. Do not be this person (it damages your reputation) and do not give any indication that you might be.

Other than research projects, get involved with some group of people on side projects or better, start your own from scratch. Contribute to Open Source, make/improve a library. Get out there and create (or help create) something cool. Document it well. Blog about it. These are the things people will care about a few years down the road. Your grades? They are an annoyance you have to deal with along the way. Use your time well and good luck.