Succeeding in CSE 220

CSE 220 is a difficult course, and, if you started your educational career at UB or many other institutions, probably the first time you are encountering the computer at such a low level. Worrying about the layout of bytes in memory, managing resource usage explicitly, fussing over the layout of bits in integers … it may seem overwhelming. This page gives you some advice on succeeding in the course.


Succeeding in CSE 220 comes down to a very small number of basic points:

  • Start your assignments when they are assigned and work on them daily.
  • Learn your labs, don’t just do them.
  • Attend lecture and pay attention.
  • Ask questions if you have them!
  • Read the required readings before the exam.

If I could give only one piece of advice to help you improve your grade, it would be to start your projects when they were assigned. I can nearly guarantee that this is worth at least a grade letter for a student who would otherwise receive a C in the course.

Course Structure

I (and quite a few other people) have worked very hard to structure CSE 220 to help you succeed. Skills learned in lab activities precede assignments that use those skills, which precede lab exams that test them. Lecture topics are scheduled to coincide with lab and programming assignment activities. Theory and practical knowledge are intermixed throughout the lectures to keep the theory and its application together. Take advantage of this structure by keeping on top of the course material as it is presented, and you will do better in the course.

That said, there are constraints beyond my control (such as the length of the semester, timing of breaks, conflicts with other courses), and the material is simply difficult.

Start Assignments Early

As mentioned above, if I could give only one piece of advice, it would be this. Many students get poor grades in CSE 220 because they start their assignments late. The reasons for this are varied, but the excuses (note: not reasons) usually boil down to things like:

  • I was working on another course’s homework (typically CSE 250)
  • I didn’t think I’d need more time
  • The last assignment was easy
  • I read the handout and I thought I knew how to do it
  • I just had one bug I couldn’t find

All of these excuses are bogus; I’m not saying you should spend more time on the assignment, I’m saying you should start it earlier. This will often result in more points, even if you don’t spend any more time actually working on the assignment. Working on the assignment for a longer period of calendar time allows your brain to work on the assignment for you, even when you aren’t — how many times have you had an epiphany in the shower, or while walking or driving? — resulting in a more complete and correct solution with no additional active effort on your part.

If you are taking two or more difficult project-based courses at the same time, plan to work on both courses, a little at a time, every day. Do not get in the habit of working on one course right up until the deadline, then switching over to the next course until its deadline, in a vicious cycle.


Lab assignments are intended to be solvable within the two hours allotted to labs, including any time taken up by TA presentations. If it’s taking you longer than that to do your labs, you are behind and you should be talking to me or the TAs to figure out how to catch up.

Furthermore, you should not be simply banging your labs out of the way to get the points; make sure you understand what you did in lab, and why you did it. The lab material is almost always directly useful for your projects. If you don’t understand how you can use what you did in lab in your projects, then you didn’t understand the lab as well as you should have — again, come talk to us!


It is well-established that students who attend lecture do better in courses, as well as that students who use devices in lecture perform more poorly. If you’re not already getting perfect scores on everything in the course, then I highly recommend that you show up to every lecture, put your phone and your laptop away, and pay attention.

I do provide lecture recordings, but these are intended to be for additional review or to make up lectures missed for specific exceptional reasons (illness, professional travel, etc.), not so you can skip!


Ask Questions

If you find that you have questions, either during or after lecture or while working on course materials, ask them! Ask in lecture, in instructor office hours, or in TA office hours. If you let things you don’t understand slide, you will find that you get farther and farther behind and it becomes difficult to catch up.

Note that it is very easy to ask questions and get one-on-one time with the instructor and TAs if you start your projects early and attend office hours during the first few days of an assignment. There will (sadly) be very few other students there, and you will have time to get the help that you need in a personalized fashion.

Required Readings

It is tempting to think of the required readings as “just theory” and read them before the exams. However, they contain a lot of practical knowledge that will help you in your implementations and lab exams. Plan to keep up on your required readings, and consider even reading ahead a little bit so that you are more prepared to receive lecture material.

Preparing Ahead of Time

Students frequently ask how they can prepare for CSE 220 in the break prior to the course. The best thing you can do is understand your prerequisite material thoroughly. It is probably too late to make significant progress in that in the few weeks prior to the course, but certainly it is worth revisiting any topics or assignments that you had trouble with from your prerequisite courses. You will probably find that, given a little more experience, they are more approachable!

Next to prerequisite material, the second best preparation is probably to read the first two chapters of The C Programming Language by Brian Kernighan and Dennis Ritchie (a required text for the course) and work through the exercises. These chapters will be assigned as required reading in the first couple of weeks of the course, so you will literally be getting ahead in the course.

Many students find the programming projects to be the most challenging part of this course. Programming experience builds on programming experience, so writing programs is another good way to prepare. Consider doing some small programming challenges (in a language of your choice, or, if you have time to pick it up, in C!) to brush up on algorithmic thinking. An example of a good, quick project – other than the exercises in K&R – might be this first Advent of Code challenge from 2021. The programs you write do not need to be large or difficult, they just need to get you thinking about solving problems in the way the computer understands them.