It’s funny. I’ve written all these posts and I kept on thinking I’ve exhausted all the possible topics, yet I’ve never written a post on how to do better in class.
How do you do better in a CS class? Well, since we’re programmers, let’s treat this as a debugging question. When I debug, I ask myself a series of questions to help diagnose the issue. If I were tasked with debugging a student’s poor performance, I’d ask these questions:
Are you actually doing badly?
Grades are harder to compute than you’d expect. Classes can be curved a lot; professors aren’t consistent and students can be overly hard on themselves.
Do the math on your grade. Compute your total grade according to the rubric. Figure out how much work is left in the semester. Schedule some time and discuss with your professor how you’re doing. Speaking of…
Have you talked to your professor?
Your professor is the ultimate guide on your course performance. Talk to them about how you’re doing. If you’re not doing well, work with them to get on the right track. Don’t try to swindle, beg or cajole them into giving you better grades. Just talk to them and figure out what needs to be done.
Who determines your grade?
Generally with CS courses your professor will determine your grade. However this is not always the case. Sometimes you’ll have a TA who does most of the grading and assessment. If that’s the case, talk to them.
Have you talked to other students?
Other students can be super helpful. You can gauge your approximate standing in the course and gain some potential study partners. Beware of outwardly cocky students though. Just because someone appears to be doing well doesn’t mean they actually are.
Are you studying with other students?
Working with other people can be helpful in that you can learn what you don’t know. For me, a mixture of collaborative and solo studying works well. I study with other, smarter people, figure out the gaps in my knowledge, then fill them in on my own. Make sure that you’re studying with people who are above or at your level and productive.
Do you understand what’s going on? How much?
If you’re completely lost, you’ll need a lot more guidance. Schedule some meetings with your professor, follow the above advice on collaborative studying. Get other people to help you—you won’t be able to do it alone.
If you’re following the work but just not doing well, you might be able to fix this with some tweaks to your studying routine. Of course, you should still consider seeking help from other people.
Be honest with yourself. It doesn’t help to delude yourself on how much you understand. If you’re not following the material, you’re not following it. There’s no shame in that.
Have you been attending the lectures?
Surprise surprise, lectures are important. For those of you who may not be familiar, lectures are the real-life, interactive versions of those YouTube videos you speed through at 2x speed and pretend to understand.
Lectures are great because you learn both the subject and your professor’s approach to the subject. This is important because assessments are usually a combination of these two. A professor will emphasize certain areas and these will likely show up on the test.
Pay attention during the lectures. I’ve definitely attended lectures where my eyes glazed over. Taking notes can help you stay engaged. Do not try to keep up with 2x speed recorded lectures. All you’re doing is creating the illusion that you understand the topic.
Do you ask questions in class?
Asking questions is a really great way to learn and get the professor to recognize you. If your professor remembers you as an engaged, curious student who asked questions in class, they’ll be far more inclined to boost your grade.
Don’t be afraid to ask dumb questions! Some of the smartest people I’ve met were habital dumb-question askers. Sometimes the dumb questions turn out to have fascinating answers.
Especially with online classes, asking questions will definitely ingratiate you with the professor.
How much time are you devoting to this class?
Interestingly enough, there’s two bad answers to this question: too little and too much. Too little time is an obvious one. You need to spend a requisite amount of time to learn a topic. If you’re not studying or doing homework, you’re not learning.
However too much time is equally bad. If someone tells me that they’re studying for 8 hours a day, every day, I’m gonna assume they’re either procrastinating a lot or studying extremely inefficiently. No class should require 8 hours of studying per day. Take breaks, do fun stuff and figure out a way to study efficiently.
When are you devoting time to this class?
The time distribution is also important. If you’re devoting 10 hours a week, but these 10 hours are all on the day before the problem set is due, then you’re not using your time effectively. Lots of courses work better if you distribute the work throughout the week. You can think about problem sets for a few days. You can use spaced repetition for your foreign language vocab.
With programming tasks, you should start them almost immediately. Programming requires a certain amount of downtime for mulling over the code. You can’t do that if you’re rushing at the last minute.
How are you studying?
A lot of students never learn effective studying habits. I certainly don’t have perfect habits.
If you’re studying for a test, do problems. You can read and watch all you want, but ultimately simulating the actual test is the only way to determine that you’re doing things correctly.
When you do problems, don’t look at the answer when you get stuck. You won’t have an answer key on the test.
Aim to hit all of the major topics. I often make the mistake of trying to study in depth and only making it through the first fraction of the course. Get through the entire course at a shallow level, then go back for more info later.
How is your problem solving abilities?
This might be worth an entire blog post, but I strongly believe that problem solving is what separates the good programmers from the not-so good. Often times if you’re not getting good grades and struggling with assignments, it’s due to lack of problem solving ability.
How do you get better at problem solving? Check out How To Solve It, a classic book on problem solving. Practice writing and debugging code. Take some math classes and do math problems.
Is this a professor issue?
Again, be honest. Most people who do badly in courses will blame the professor. Sometimes they’re correct. Other times they’re looking for somebody to blame.
If your professor is truly to blame, keep following the above advice. However you’re gonna need to put in extra work. Start figuring out ways to teach yourself the material. Such as…
Do you have a copy of the textbook and have you looked at it?
I highly advocate getting international editions of textbooks. They’re pretty easy to find for CS textbooks and way cheaper. A physical copy is great because you can flip through it and not get distracted by Facebook or Reddit.
A lot of CS textbooks are quite good actually. Most NYU courses use fairly standard books like CLRS for algorithms or OSTEP for operating systems. I’d recommend at least skimming them.
What other sources have you used?
There’s so much programming/CS material on the internet. I’ve learned a lot about various areas just from random StackOverflow questions, various talks online and blog posts. They’re designed for your average programmer to digest, so they’re usually quite accessible and less academic.
Have you been to tutoring/office hours?
Having someone help you is so much better than working on your own. A lot of students were straight-A students in high school and aren’t used to tutoring. That’s a mistake. Everybody needs a little help now and then.
Have you asked your professor about notes or previous homeworks?
Get as much info as you can from your professor. Obviously there’s a limit to how much you can demand from your professor. But as long as you’re clearly using these resources to learn more, I don’t think most professors would be offended at the request.
Have you considered pre-studying?
I learned early on in my CS career that if you take a peek at next week’s material, you can appear like a genius when the professor covers it. Even if you don’t fully understand it, that small peek can help you significantly the second time around. After all, some things need to be learned twice.
Is there prerequisite or prior knowledge that you’re lacking?
This is super common. Maybe you weren’t there on the day when they covered basic Terminal commands. Maybe your professor didn’t teach it. Maybe you didn’t learn it the first time around. Whatever it is, don’t be ashamed. Just go to tutoring/office hours/ask a friend and get help! It’ll make your life a lot easier.
Professors don’t design their curriculum with the students’ previous and future courses in mind. There’s almost always gaps.
Is there anything other than school affecting your performance?
This is the ultimate one. And look—right now we’re all being affected by a lot of things that are not school. It’s totally understandable if you’re not performing at your best.
Sit down with your professor or with a therapist and discuss anything that might be going on in your life. The course and your grades are ultimately secondary to your mental and physical wellbeing.
Also, this doesn’t have to be something major. Diet, exercise, allergies, etc. can all play a big role in your grades. Take care of them.
Get enough sleep. That alone will determine your performance significantly.
Tough Versus Terminal
If you’re reading this because you’re struggling with a course, don’t worry! You can and will survive. With some coordination with the professor, hard work and perhaps a little bit of generosity, you’ll do just fine in the course.
However, if you find yourself reading this list a little too often, or you find yourself deeply relating to the parts about procrastination, perhaps you should analyze whether you truly like CS.
It’s totally normal to have a couple courses that are a struggle. It’s less normal for most courses to be a struggle. If you’re truly going through this for the majority of your classes, you might not want to be a CS major.