CS111 Learning Summary
What I Learned in CS111
Coming into this class I had written some JavaScript before, but most of it was copy-paste code I barely understood. By the end of the trimester I could sit down, read a file I had never seen, and actually know what it was doing and why. That shift felt significant.
The biggest thing the class drilled into me was object-oriented programming. Writing classes, extending them, overriding methods, chaining constructors — all of it started clicking once I was working in a real game codebase rather than toy examples. Seeing a Player class extend a Character class that extended a GameObject class made inheritance feel obvious in a way that textbook definitions never did. The same goes for instantiation: once you have ten coins on screen that each have their own position and state because you called new Coin(x, y) ten times, the point of a class constructor stops being abstract.
Control structures were something I thought I already understood, and mostly I did, but working with nested conditionals and loops inside a game loop forced me to think about them more carefully. A wall bounce is just an if statement. A multi-ball power-up is a for loop over an array. The logic itself is simple — what takes practice is chaining it correctly so nothing breaks when three things happen at the same time.
Data types and operators are easy to underestimate. I spent a while chasing a bug where coin counts kept concatenating instead of adding, and the fix was a single parseInt() call. That one moment taught me more about how JavaScript stores strings in localStorage than any amount of reading would have. Small things like that stuck.
I/O was the section that felt most like real software development. Fetching from an API, handling the response asynchronously, parsing the JSON, updating the display without freezing the game loop — that whole pipeline was new to me and felt genuinely useful. The async/await pattern in particular went from confusing to natural once I wrote it enough times.
Debugging is probably the skill I will use most going forward. I went from adding random console.log calls everywhere and hoping for the best to actually using the DevTools Sources tab, setting breakpoints, stepping through code, and checking the Network and Application panels when something felt off. The hitbox visualization work was also a turning point — being able to see exactly where a collision was firing made problems that seemed impossible to trace suddenly obvious.
Testing felt like the most grown-up part of the class. Writing a function, then writing a separate function that checks whether the first one works correctly, felt like a different way of thinking about code. The integration test for the leaderboard — where I had to verify that a score submitted from the game actually appeared on the leaderboard and wasn’t just returning a 200 status — made me realize how easy it is to think something works when it doesn’t.
Documentation was the part I probably took least seriously at first and ended up finding most useful. Writing JSDoc comments forced me to actually understand what each parameter was for. The mini-lesson posts made me explain things out loud in writing, which always revealed gaps in my understanding faster than anything else.
Overall, CS111 gave me a foundation I feel confident building on. The projects — Pong, Snake, the adventure game, the leaderboard — were not just exercises. They were real things that worked (mostly), and working on them made the concepts land in a way they would not have otherwise.