CSCI 104 at USC was simultaneously the most challenging and most rewarding class I’ve ever taken. At times, it made me feel like a powerful, capable programmer who could solve any problem. At others, it made me question my abilities as an engineer. In the end, I realized that I learned more in that class than any other. The learning curve was steep (nearly vertical), but I made it through and gained invaluable skills along the way.
When entering the class, I hadn’t taken CSCI 103, the typical prerequisite class for 104, so I took the challenge exam to waive the requirement using my knowledge from a summer class. After passing, I thought I’d be well equipped to handle CSCI 104. I was not.
I quickly noticed the gaping holes in my understanding and the depth my summer course had neglected to go into. I didn’t know what a linked list was and had barely even seen the phrase “memory allocation.” Pointers were a mystery to me and I had virtually no understanding of how multiple files link to execute a program.
Unfortunately, our first programming assignment was to implement functions for an unrolled linked list by dynamically allocating memory for each node. I had to learn fast how all of those things worked. I spent hours in office hours talking to CPs and TAs, trying to clarify my understanding. I spent every free minute Zooming with classmates, writing test cases, and debugging. By the end of the 2 weeks (where in the first one, I had pored over and submitted a tedious runtime analysis assignment), I was absolutely exhausted. I soon realized that this was going to be the quick pace and extreme time commitment of the class.
Despite this, I was determined to master it. I had talked to previous 104 students who always advised me to start the assignments early. I’d start them the day they were released, writing out pseudocode and working through the written portion of the assignment. I built my schedule around attending office hours and waiting in the online queue for my turn to talk with a CP. I’d come with questions, diagrams, explanations, and misunderstandings, spending valuable time with them to work through each assignment.
The class was beyond frustrating at times. The infamous AVL tree assignment took me upwards of 40 hours, most of them frustrating debugging sessions where I drew tree after tree with rotations and pointers and arrows all over. My stress level peaked during the two weeks of this assignment. Even though I had started early, I still felt behind, anxious when I scrolled through other students’ complex questions about the final part of the assignment, and honestly didn’t know if I’d be able to finish it. Since each part was dependent on the previous one, I couldn’t even begin part 3 until the day before the deadline. It was a struggle until the very end but I finally was able to find my bugs and turn it in on time. Weeks later, I learned that my code had passed all the tests.
In this class, I learned about C++. I learned about recursion and graph induction. I learned about binary search trees and amortized runtime analysis. But the most important thing was that I learned about discipline. I learned how to ask questions in a constructive and meaningful way. I learned how to manage time effectively and strategically approach problems. I learned how to use my resources and make connections with people. I learned how to be a good computer scientist.
I will never forget the incredible friends I spent hours testing code with on Zoom. I will never forget the panicked GroupMe messages before and after our midterms or the day before our assignment due dates. I will never forget the dedicated CPs who helped me survive through this class, patiently introducing me to concepts and helping me strategize through my problems. It was a roller coaster of a semester, but I enjoyed the process and can’t wait to continue developing my skills.
Above: covers of the three 20+ page reference sheets I put together for each exam. Each contained an extensive overview of each topic covered in lecture along with handwritten examples and helpful visuals.