2B CS Course Review/Term Retrospective
This is a collection of what I thought about each of my 2B courses, as well as my overall thoughts on the term.
- CS 246 - Objected Oriented Software Development: OOP in C++. This course started with some of the basics of C++ (e.g. pointers, classes) before going into topics like design patterns and various idioms. As I had previous experience with C++ through ECE 150 and ECE 250, I didn't find the majority of the content super difficult. It also helped that our instructors were good and very active on Piazza. For assignments, the structure effectively forced you into writing your test cases before your code via separate due dates for each component. I guess this wasn't the worst thing in the world, as it ensured that you actually ensured what each question was asking before attemping an implementation. The exams were pretty fair, so the hardest part of this course for me was definitely the final project. While I was reasonably confident that I could finish one of the projects by myself, I thought it would be nice to find a group to distribute work and attempt to meet more people within CS. I ended up finding two really great teammates who knew what they were doing, which made working together a lot more enjoyable. I dropped the ball pretty hard in the end by forgetting to check our final presentation date, so I ended completely missing it. Thankfully, our TA was chill and didn't really mind, so our group did really well in the end.
- CS 245 - Logic & Computation: Theoretical CS stuff. The first half of the course focused on the syntax and semantics of propositional logic, while the second half covered first-order logic and various applications of it. I thought this course was fairly average in difficulty, as the assignments weren't too hard for the most part and the exams were generally fair. I wasn't really a fan of how this course was taught via slides, I won't complainn much since our prof explained things pretty well.
- CS 241 - Foundations of Sequential Programs: An introduction to the inner workings of compilation/machine code. We started with a look at machine code/assembly before moving into high-level language concepts post-midterm. The first half was relatively easy, as I took ECE 222 previously which taught ARM assembly. The second half was a bit confusing at times, especially with the various parsing algorithms, but thankfully the course notes were extremely helpful in walking through the concepts. The assignments came in the form of a question every week or two, which made the course pretty light in terms of workload there. The projects tended to be quite a bit more time consuming, but our instructors gave stepping stones for each portion of the project which turned most of them into figuring out implementation. Regardless, it was still really rewarding to see the finished product at the end of the course, that being a compiler for a stripped-down version of C/C++. The exams were fair, and I found that tutorials for this course were extremely helpful for understanding the content and going through examples.
- STAT 230 - Probability: Various probably calculation methods and distributions. This course went over some basics of probability before diving into various distributions. I found this course pretty boring for the most part, as a good portion of it was taught back in IB Math AA HL. The midterms were relatively fair, but the final exam was probably the most challenging one of this term.
- ECON 101 - Macroeconomics: An intro to econ. I would say more about what this course, but I legitimately forgot all of the content from it. I took this course online and I did not put much effort into it. Usually I would spend 2-3 hours going over each weekly module before each quiz. The midterms and final were all multiple choice and open-book, so I just constantly looked at the course notes. I actually forgot the day of the final until the afternoon of the same day, so I practically spent no time studying for it.
- CS 136L - Tools & Techniques for Software Deveopment: A lab course about various dev technologies like Bash and Git. While some parts of this course were actually helpful (I actually learned how to use GDB from the console!), since I had previous experience with the majority of the content from my co-op terms at BMO, it ended up being pretty free. I skipped every lab session around 3 weeks into the term and did not lose anything for it. I feel like instead of taking up a slot on the timetable, this course could be made entirely online with office hours of some kind.
In terms of the schoolwork, I found that while a lot less time was spent in class and labs, the assignments tended to be a lot more time consuming. Here's a comparison of my 2A and 2B schedules for reference:I honestly prefer this tradeoff, as the alternative is lab hell, which is what my friends in 2B ECE went through. The final thing I think is noteworthy is the different in co-op. As I was in CS, my schedule was flexible, so I could choose whenever my co-op term happened. As such, I didn't have a lot of the usual stress from constant job-searching throughout the term on WaterlooWorks. I did most of my applications via external job boards, which led to many rejections and probably more ghostings. This was pretty frustrating, but I guess this was a taste of how searching for jobs would be like after graduation.
In conclusion, while this term had a fair amount of work for my first term in CS, I definitely enjoyed it by virtue of actually liking my current program and being invested in a good chunk of the content.