Study Gale.

How to pass CSCI2122

18 May 2023

The Systems Programming course is often labelled as the hardest course required to be taken in the department. While this course is not easy by any means, it is possible to do well. You should have no trouble passing the course, if you apply yourself and do not have chronic test anxiety. Again, this does not mean that it’s easy to pass this course when putting minimal effort. On the contrary, my friends and I have struggled hard in class, each one receiving an unexpected blow throughout the semester. Of the required courses, this is the first one where slacking off and cutting corners will seriously disadvantage you during the assessments. Other first and second year CSCI courses are generally easy in the sense that the material is straightforward and the course curriculum isn’t incredibly demanding. This allows students to do not show up to class, cram before assessments and leave relatively unscathed. CSCI2122 is not a course like that. It requires genuine effort and provides an outlook to what is expected from students moving on to the similar upper-year courses.

Section 1 – How to go to class

Anyone that tells you that it’s unnecessary to attend lectures is, quite frankly, wasting their money. Skipping lectures can negatively affect your grades. The only ones who don’t lose marks are the ones who are good at playing the academic game, but don’t let that fool you. The hidden cost to skipping lectures lies in your emotions and well being. Humans aren’t built to process the uncertainty well, and there is a lot of uncertainty in classes that you don’t attend. The scope of the material, what is expected of you, your grasp on the material, and a bunch of other factors are unknown to students that aren’t engaged throughout the semester. This can lead to more unnecessary stress. Save yourself the trouble and go to class – and listen.

You go to class to learn, and going to class is still self-directed learning. A lecture is an expert providing knowledge concerning a topic at the audience. So, it is up to you to extract what is valuable from it, no matter how dull. If your only goal is to extract the information needed to pass the assessments and forget them at the end of the semester. You are leaving with nothing. Self-directed learning is also susceptible to forming bad habits. When you go to class, you are allowing the opportunity to engage in the material differently than if you were at home by yourself. This can be in the form of the professor mentioning something that contradicts what you know, or a peer pointing out a mistake you weren’t aware of. When you go to class, you allow for serendipity to take place.

What happens to any structure with poor foundation? It topples over. The same can happen to your body of knowledge. No, you will likely not be coding in assembly, or even C, and consider the cache when you’re writing the next big thing. In my experience though, what you learn in these classes appear in unexpected places. The easiest examples I can think of is in the languages and projects docs. Why should I use the Integer datatype instead of Int8 in Haskell? Int8 is a signed 8 bit integer type, which can easily cause overflow issues. Why does javascript return a bunch of two-digit numbers when I read a buffer? It’s because they’re hex representations of the characters. I only know this because of CSCI2122. No, Systems Programming didn’t help me create the next “disruptive” start-up, but it did make many things that would be appear to be cryptic and magic much more intuitive.

Now onto lectures themselves. This may seem like I’m stating the obvious, but a university lecture is not the same as lessons you find in other programs and institutions. The professor is not there to solely teach you the material. In fact, some professors structure their lectures to not teach you the material at all. Instead, they are there to teach you how to think about and approach the material. This is the reason why some, if not most, professors expect you to read the corresponding readings before attending the lectures. The kind ones structure their lectures as if you didn’t read them. The good ones do not. Haven’t you read the Associate Dean’s signature? “Setting high expectations is the most sincere form of respect.” That’s true.

To gain the most out of lectures, you need to address them in a certain way. You have to view lectures as an abridged version of the textbook. The lectures provide few very important details needed for success in the course. First, they highlight what the professors deems to be the most important information to know (or the information that they felt comfortable including in an 11-week course). If you choose to skip lectures, you are essentially leaving yourself to waste time deciphering the lecture slides and notes to find out this information. This can be deceiving, just because there may be a lot of writing on the slide does not necessarily mean it is the most important. You have no sense of which material and slides the professor spent most of the lecture time discussing.

Not attending lecture is a huge waste of time. You have three hours of lectures per course in week. Most of the students that skip lectures are not being productive in another task. So, not only did you add an 60-90 minutes to your busy schedule to catch up on the material, you did not make it up by completing another task that frees up your time. This means that you are essentially doubling the amount of time that you block off in a week to study the material. When you go to class, even if you are completely lost about the material, you are still gaining exposure to the material. When you go back to review you will be able to recognize the terms and topics that were discussed in class. You will be able to remember which topics the professors stressed on the most – That is, if you paid attention in class rather than watch a stream of league of legends or chess (please stop).

Section 2 – Learn to read the textbook

It is common to be assigned whole chapters to be read in conjunction with the lectures. This may seem unreasonable, but keep in mind that they are not tasking you with reading every word and memorizing it. Reading textbook follow a different approach than you would with other mediums like an article or a novel. We’ll talk about two important things to keep in mind when reading the textbook.

There are many strategies used that focus on either increasing reading comprehension or speed. There are things like using an epub reader and increasing the margins to lower the number of saccades your eyes make across the page and avoiding internally speaking the words when reading. These sorts of hacks may or may not work for you, but they are just a google search away if you’re interested. However, the most important advice that definitely isn’t hackish is to scan through the chapter multiple times before actually reading the book. There is a process for this and is easily found online, just google “how to read a textbook”. The variations all do the same thing, they develop an outline of the content in the chapter before you actually begin understanding the material.

There are many benefits to getting a summary of the content before learning. First, we aren’t build to process the unknown very well. When we face a topic that we don’t understand (especially when an assessment is coming up) we tend to become bogged down by our emotional responses. We may be stressed and anxious from the upcoming assessment and are more worried about failing than actually learning. If you read a chapter or go through the lecture without having a clear idea of what the main topics are. Every time you encounter a new key term that you don’t know, it will elicit a genuine fear response in you. Getting a summary of the content beforehand helps you prepare for what’s coming so there are no suprises. Reviewing the content before will also allow you to one get a sense of what are the most important take-aways from the chapter and help you avoid getting caught up in small or irrelevant details. Who knew that the learning objectives at the start of every chapter is actually useful for something.

You should try them out and figure out what works for you if you’d like. Last piece of advice for CSCI2122 specifically, do the textbook questions. This may vary slightly depending on the instructor, but it is highly likely that most of the questions that come up on the quizzes and assignments will be very similar if not idetical to the textbook questions. On most of the quizzes, I landed above an A, except for one. For that one quiz I didn’t have the time to review any of the material and ended up getting 22%. When reviewing for the final, I realized that every question on that quiz was as close to a copy paste to the questions in the textbook. If you think that this indicates that you don’t need to attend the lectures, reread section 1.

Section 3 – How to not fear practicums

Honestly, I did not perform the best on the practicums. However, you can learn something from someone’s mistakes, and I’m here to tell them. First, it’s good to know what the practicums are intended to test. They’re meant to ensure that you know how to code in C. That means that you’ve actually completed the labs. Second, practicums test a bit about your problem solving skills. The tasks asked in the practicum shouldn’t be that big of a leap compared to what you’ve done in the labs. This generally means that if you’ve truly completed the labs then you’re ready to go.

I will take a moment to address an important topic: students are experts at lying to themselves. It’s very easy to look at material that you’ve just read and say “That’s easy to understand, I’m sure I’ll remember it for the exam.” – you won’t. Always test yourself on the material to ensure that you truly remember things. I found myself stuck during the practicum, because I kept getting syntax errors when accessing elements in an array. Sounds dead simple, but the problem was that I always reviewed my notes right when I encountered a syntax error and never remembered the compiler message and why they occured. When you’re doing the lab you have your notes and the internet to fall back on to understand error codes, debugging the problem quickly makes it harder to remember for later. In the practicum, you won’t have anything but the compiler messages. While doing the labs, try to remember how you’ve completed your tasks and why.

Speaking of compiler messages, the most important skill that you need to ensure that you do well is to know how to debug you’re code. Better yet, how to avoid bugs in your code. There are classic cases that lead to some hard to solve bugs. I have spent 5 hours of my life solving a segfault (a type of memory access bug), because I was checking if a variable’s field was null and then whether the variable itself was null. Consider that the variable truly is null, I first check it’s field, leading to a compile-time error for trying to check something that doesn’t exist, which is at a memory location that you don’t have access to. Knowing how to properly write Null checks and avoiding common practices that lead to segfaults will help you not waste time debugging during the practicum. A good thing to do is learn how to use Valgrind from the start of the semester, because you’ll surely run into segfaults way before they teach you how to use it.

The best way to prepare for the practicum is to learn how to calm down in a stressful situation. If you are faced with a random bug and you have ten minutes left in your practicum. Not being frantic and avoiding tunnel vision when you’re reviewing your code will be necessary to fix any issues that come your way. If this happens, don’t be afraid to ask one of the TAs for help!

I have heard of some students that choose to do the labs in VSCode instead of vim. I think that is a recipe for disaster, because you’re essentially avoiding all the practice you get from using the vim text editor. There is not much that you need to learn how to use it effectively, and being comfortable in your testing environment is far more important than being comfortable while doing your labs.

Last thing, read the lab docs. If you’re spending hours trying to figure out how to complete a lab, just know that all the answers on how to solve the requirements are written explicitly in previous pages, probably under the bolded headings. Yes I know that it’s 20 pages long. Yes, that is completely fair in a university course. Especially given that most of the information are things you already learned in previous courses. It won’t take that long to skim through as a review and to pick up the few pieces of new information such as using pointers and makefiles.