CMU Course Reviews

I saw all the cool CS Majors at CMU were making these course reviews (Exhibits 1, 2, 3), so I thought I’d throw my hat in the ring and make my own.

Honestly, I feel there isn’t too much I can add about a lot of the courses I’ve taken that hasn’t been said by another blog already, but feel free to read on if you want to hear my personal take on my time here!

Also note this page is very much a work in progress. I’ll try to eventually get everything filled in but no promises on when I get around to it.

Spring 2023

Courses:

  • 15-251: Great Theoretical Ideas in Computer Science
    • Content: 15-251 covers a wide range of topics in Theoretical Computer Science including Turing Machines and Decidability, the P=NP question, and various miscellaneous topics such as randomized algorithms and basic graph theory. I’ve heard from people who’ve previously taken the course that the professors are slowly removing some content such as approximation algorithms (a topic we did not go over in depth), though I can’t confirm this. There’s also a lot of proof-writing involved.
    • Structure: 15-251 is famous among CS kids for its unique structure, particularly since its homeworks are submitted during 80-minute ‘writing sessions’, where students answer a subset of the assigned problems in a test format. I know a lot of people who despise this format, but I personally really appreciated having to understand homework well enough to answer it on the fly. Rather than being able to half-understand my way through a difficult problem, I truly felt the looming writing session each week forced me to actually understand what I was writing in preparation.
      • Besides the writing sessions the course is really well run; the 251 staff go out of their way to make the learning process as streamlined as possible from the online textbook to some of the most helpful TAs I’ve encountered. The exams in the class also felt difficult but not outright unaprochable, a theme I noticed and appreciated throughout the course.
    • Overall Thoughts: I was a little nervous about this course after hearing horror stories about it from previous semesters, but I really liked it overall. The content felt challenging but Ada and Gupta both put in a lot of effort to make the topics seem approchable in lecture, and the TAs were also really helpful. I also appreciated the heavy emphasis on group work in this course, something I feel is lacking in most other introductory CS courses. If I wasn’t already a 15-210 TA I’d probably consider applying to TA this course.
      • The one piece of advice I have is to chose your group members wisely; a lot of the homeworks that I found doable would have been much more difficult had my group been less supporting and hard-working.
  • 10-315: Introduction to Machine Learning
    • Content: Goes over basic Machine Learning concepts and techniques such as various methods of regression and classification. This particular iteration was also very math heavy, with a lot of concepts being introduced in the lens of multivariable calculus and linear algebra.
    • Structure: The class was fairly disorganized overall, though not quite as badly as 36-218 last semester. Lecture consisted of Pat giving an overview of some topic in the course, though he almost always began by finishing the previous lecture’s content (I’m pretty sure I can count on a closed fist how many times Pat came to lecture on time). Recitations were helpful in clarifying any questions I had in lecture, as I got lucky with having good TAs in recitation. We also theoretically had weekly calculation and programming focused homeworks, though deadlines were often moved as homeworks came out late, along with an open-ended final Machine Learning project. Thankfully exams were pretty straight forward to make up for the otherwise chaotic nature of the course.
    • Overall Thoughts: I took 10-315 to fulfill my AI elective as a CS major, though I ended up liking the course content more than I thought I would. Pat obviously really cared about the course and bent over backwards to try to improve the it as it went along, which I really appreciated as well. A good class overall, though I think it would have been great with better organization.
  • 05-392: Interaction and Design Overview
    • Content: 05-392 goes over a lot of heuristics for how to design various interfaces well, about what you’d expect from a design-heavy HCI course. We also learned a few tricks of the trade such as how to use Figma and various prototyping techniques, though I think most people in the class already had experience with that from other classes or projects.
    • Structure: Even more so than 05-391, this course is very project-oriented, which makes sense for a design class. The entire class revolved around four projects, of which three were team based, and where each was used to introduce a topic in design. Each unit also ended with a process book, a 20 page slide deck-style document that details the reasoning behind every design decision made in the class, which I really liked for how it made me more cognizant of design chioces I made. This class also had a very strict attendance policy (I’m pretty sure given how it was calculated attendance counted for 140% of your grade, which is funny).
    • Overall Thoughts: This course was definitely more thought-provoking than 05-391 I took last semester, and I often felt like I was learning the names to design ideas I already intuitively understood, which was a nice feeling. I knew this class wasn’t going to be very technical given the word ‘design’ in its name, but I’m definitely excited to take a more technical HCI course in the future since my interests are starting to lean more towards the technical side of Computer Science (or maybe that’s just the lack of programming-heavy course talking).
  • 79-345: Roots of Rock and Roll
    • Content: I think a lot of people take this course because of the rock and roll part of its title, and are dissapointed when they see its emphasis on the roots part. The course focuses on the origins of rock and roll from the Civil War until the late 1960s, mostly through a variety of case studies on blues, country, and rock songs and performers. Scott Sandage, the perennial professor for the course, also defines Roots as a ‘course with a thesis’, and makes sure to tie everything he covers to his overall ideas of free musical collaboration and exchange, which I liked.
    • Structure: Roots of Rock and Roll is very much Sandage’s pet, with lectures consisting of him tying some musician or song back to his overall theses, with a bit of free student discussion thrown in. There are also several readings and albums assigned out of class to read or listen to. A whopping 78% of the grade comes from three 1500-word essays on prompts relating to the readings, with an interesting twist of requiring analyses of multiple songs we studied. The essay prompts were actually really interesting and made this the only class I’ve had trouble staying under the word limit with.
    • Overall Thoughts: I liked this class much more than the other essay-based humanities classes I’ve taken, though that’s partially because I found the content more interesting. Sandage is a really great, if a bit eccentric, professor, and I honestly wish I had the courage to go to his office hours while I took the class. That being said, this class made me write multiple essays for a large portion of my grade, a cardinal sin in my book. Fulfills the Category 3 Gen Ed requirement for CS Majors, which is a plus.
  • 70-100: Global Business
    • Content: Global Business goes over basic business management concepts such as organization structure and analysis, as well as adjacent concepts such as ethics. As a class specifically targeted at students outside of Tepper, the class really doesn’t go too far in depth on anything, which is unfortunate but makes sense given its audience.
    • Structure: Lecture consisted of class discussion of questions and readings we were asked to think about before class, interspersed with the teacher bragging about his status as a distance runner (something I found amusing, given I was training for the Pittsburgh Marathon at the time). The class had an interesting dynamic in that the bulk of classwork was done in a consistent team of five, leading up to a final project and presentation with the team that makes up a large portion of the final grade. I enjoyed this team dynamic since keeping the same team throughout the semester promoted accountability in group work, though I didn’t appreciate the overemphasis on assignment submission style instead of content by the teacher.
    • Overall Thoughts: I registered for this class thinking I may want to pursue a Business Administration minor, and while I haven’t completely ruled one out yet this class definitely has pointed me in the other direction. A decent course that I think I would have really liked had my learning style not clashed so strongly with the course’s teaching style.

Other Commitments:

  • TA for 15-210 (1st Time)
    • Compared to SI, I enjoyed how much more impact I had on student learning, since I got to interact with many more students and for longer periods of time (who knew having homework answers would do that :wink:). TAing for 15-210 definitely helped me internalize a lot of the course material I was more iffy on last semester, which will hopefully be helpful for internship applications later given 210’s algorithmic nature. I’m also beginning to get some sense for explaining content to students, though I can tell I still have a long way to go.
  • SI Leader for 15-122 (2nd Time)
    • It was interesting being a TA and SI leader at the same time, given the overlap between recitations and SI sessions. Compared to being a TA, SI is definitely a much more relaxed environment, with fewer students attending and a less structured plan each session. I ultimately decided not to host SI again since I wanted to prioritize other commitments and I realized I couldn’t committ enough time to be a great SI leader, but I highly recommend the experience overall.
  • I got to be a little more involved in Spring Carnival Committee, helping work on their booth operations management website, Binder. I even got to implement a card reader to verify builders being allowed near the booths during build week, which was nice even if it didn’t end up being used.

Workload: 51 Units, medium for most of the semester, heavy around Spring Carnival.

Fall 2022

Courses:

  • 15-210: Parallel and Sequential Data Structures and Algorithms
    • Content: 15-210 goes into, you guessed it, parallel and sequential data structures and algorithms such as various graph algorithms and different tree-like representations of data. We also covered some miscellaneous topics that don’t really fit in with the course’s parallelism focus such as dynamic programming.
    • Structure: The course mainly consists of lectures introducing some topic generally, followed by recitations that hone the topic into how we specifically need to understand it for the class. We also had weekly homeworks based on techniques we learned in recitation. 15-210 is famous for its bucket system, that homeworks are graded out of 80% instead of 100%, but I found it wasn’t quite as useful as I assumed since it doesn’t apply to exams, which are much more difficult than homeworks in the course (not that I’m complaining about free points).
    • Overall Thoughts: I enjoyed this class much more than 15-213 last semester; I feel the algorithmic content clicks for me more than the seemingly arbitrary computer design I learned last semester. None of the homeworks were too bad, and I found some of the first few especially rewarding in finding a correct solution. My one complaint is that some of the resources we had to learn the content felt a bit disjointed, where information was presented slightly differently between lecture and recitation and the online course textbook.
  • 05-391: Designing Human Centered Software
    • Content: DHCS mostly went over the same basic design and prototyping concepts I learned in the Introduction to HCI mini I took during my freshman fall.
    • Structure: Lecture went over basic iteration and design concepts, though really didn’t go too far in depth. The class revolved around two major group projects we did applying the principles we learned in class, along with a few much smaller homeworks to do while we weren’t working on a project.
    • Overall Thoughts: I remember the professor began the first day of this class asking the question “Why are you all taking this class?”, and while its status as a requirement for the HCI concentration answered it for me I definitely see where she was coming from. The content really didn’t go too far beyond what I had learned in my HCI mini class a year prior, and while I enjoyed the projects we did for the class I was dissapointed in not learning any major new concepts. That being said, this class works well as an easy Domains Elective for any CS Majors looking for quick requirement to get out of the way.
  • 36-218: Probability Theory for Computer Scientists
    • Content: As you’d expect from its title, this course goes over probability basics, including __.
    • Structure: Like the other required math courses I’ve taken, 36-218 is very lecture-heavy, with most material being introduced first and foremost in lecture. We technically had remote recitation, but attendance of it dropped so low that I’m pretty sure they stopped offering it entirely by the end of the semester. The rest of the course infrastructure was very sporadic, with elements such as out of class notes only being provided a third of the time. As for graded work, the class contains several homeworks (of wildly varying difficulty, due to the course staff repeatedly overcorrecting on the difficulty of homework), and a midterm and final.
    • Overall Thoughts: 36-218 is one of several courses CS majors can take to fulfill their probability requirement, and I kind of regret not taking the more difficult Probability and Computing (15-259) since the latter seems to have been a much more complete introduction to probability. Not to say what I learned in 36-218 wasn’t interesting, but I always felt like we could’ve done more if it wasn’t for the course’s poor organization. That being said, I’ve heard the course is usally run much better than when I took it, so take my opinions with a grain of salt.
  • 80-180: Nature of Language
    • Content: A basic introduction to linguistics, especially geared towards those not planning on taking another linguistics course. Went over topics such as morphology, phonology, and acoustics.
    • Structure: Class revolved around lecture, where Christina Bjorndahl, the professor of this particular iteration of the course, introduced different concepts in linguistics. We also has weekly recitations to reinforce what we learned in lecture, and four non-trivial homeworks mainly consisting of morphological and phonological analysis of various datasets, and making discoveries about lingusitics as a whole based on them. There was also a strong sense of class community that I really haven’t experienced in any other class of that size fostered through smaller aspects of our grade like taking turns taking official class notes and a shared blog we each made posts to about some linguistics-related topics.
    • Overall Thoughts: This was definitely my favorite humanities class I’ve taken at CMU overall. Beyond the fact that this is the only liberal arts class I’ve taken without an essay focus, I really appreciated how Bjorndahl did everything she could to make the class as engaging as possible. I really wish I had gone to her office hours at some point since she was probably the professor I think I’d like most as a person as well.
  • 98-205: Introduction to Minecraft
    • My first fun StuCo at CMU, a course that theoretically goes into the basic mechanics of Minecraft but in reality devolves into a glorious weekly 50-minute collective Minecraft session. Has a few suprisingly non-trivial homeworks consisting of playing Minecraft until you reach some objective, along with a final project to make something interesting in Minecraft, which I used as an excuse to show off a image to block converter plugin I made in high school.
  • 99-250: Peer Mentor
    • A required 1 unit course to be an SI leader. Overall very relaxed, as it mostly just goes over the diversity and Title IX training you’d do in onboarding for other paid positions.

Other Commitments:

  • SI Leader for 15-122 (1st Time)
    • One of the first things that really struck me after coming to CMU was how well structured its student teaching programs were, be it through TAs for various classes or Supplemental Instruction. This semester, I got to be on the other side of these programs as a SI Leader for 15-122! SI ended up being a bit more work than expected (we had to basically create all of the handouts from scratch since the previous 15-122 instructors had a lot of factual errors on theirs), but I overall really enjoyed teaching in a smaller group setting like SI. The one downside to teaching SI was that attendance dwindled as the semester went on, to the point where we had several sessions towards the end with no students whatsoever.

Workload: 45 Units, light.

Summer 2022

No classes over the summer, worked at The Pennsylvania Governor’s School for the Sciences as a counselor in Pittsburgh from June-July but didn’t do much other than that.

Spring 2022

Courses:

  • 15-213: Introduction to Computer Systems
    • Content: Goes over interesting content about how computers work under the hood in a depth I hadn’t been exposed to before, going over topics such as number representation, machine code, caching, and memory allocation.
    • Structure: The course revolves around its programming labs, by far the most difficult portion of the class. THe first half of the semester include mostly gimmicky homeworks to teach you the basics about bit operations and machine code, whereas the second half consists of several large coding assignments. Besides the homeworks, lecture and especially recitation are both designed to help prepare you for the homework topics. There’s also a comparatively easy final exam at the end of the class.
    • Overall Thoughts: 15-213 is definitely the class I’ve had the most trouble with so far at CMU, even if not the hardest objectively. I found myself consistently spending well over 20 hours a week working on homeworks in the latter half of the semester, and over 30 hours during malloc lab in particular. This course ended up being more of a course in debugging than actual computer systems for me, and while I feel like a more confident programmer after taking the course I’m very glad I’m done with it.
  • 15-150: Principles of Functional Programming
    • Content: 15-150 teaches the fundementals of functional programming through the language Standard ML, a functional language that isn’t used outside academia from what I can tell. The class goes over topics such as polymorphism, continuation passing and lazy vs. eager evaluation.
    • Structure: The class has solid lectures to go over the broad strokes of concepts, and I was fortunate enough to be blessed with some of the best TAs I’ve ever had for recitation to go over the topics in a fun and engaging manner. The homeworks in the course aren’t too bad, though I definitely got stuck a few times towards the end. The exams felt very doable as well, at least compared to 15-122.
    • Overall Thoughts: I really enjoyed this class overall! I had never been exposed to functional programming before this class but it definitely felt intuitive the further I got along in the course. I wasn’t a big fan of formally proving code like is done on some homeworks, but oh well. Also shoutout to my 8:35am recitation TAs for making the earliest recitation still worth coming too.
  • 21-259: Calculus in Three Dimensions
    • Content:
    • Structure:
    • Overall Thoughts: As excited as I was to take a class with Clive himself, I quickly learned that calculus is not for me. More than any other math class I’ve taken at CMU, I kind of just felt lost the entire time I was taking this course. I felt a bit lost whenever I was doing work for 15-259, and I never really had the ‘aha!’ moment I had in other classes where everything came together. I guess I only really have myself to blame, as I really didn’t seek out assistance as much as I should have.
  • 76-107: Writing About Data
    • Since I wasn’t able to get into the full semester First Year Writing course, I took this as my first of two minis to fulfill the requirement. I unfortunately didn’t realize each section of the class was taught by a different professor and revolved around a different topic, so I ended up stuck with a class revolving around corpus linguistics, which I really didn’t have an interest in. I found it difficult to motivate myself to do work in this class, and overall had a worse experience than in the second mini I took for First Year Writing. I’m sure I would’ve enjoyed this class much more had I been more careful in selecting my section though.
  • 76-106: Writing About Literature
    • This was the second of two minis I used to fulill my First Year Writing Requirement. Even though I didn’t realize each section of 76-106 had a different topic, I got very lucky that I happened to take a version on Graphic Novel Analysis with a teacher I really liked. I had a lot of fun reading and writing for this class, and I didn’t have any trouble motiviating myself to write either of the two essays for it.

Other Commitments:

  • Worked with the Spring Carnival Committee a little bit, but as a Freshman there was only so much I could help out with.

Workload: 40 Units, heavy.

Fall 2021

Courses:

  • 15-151: Mathematical Foundations of Computer Science
    • Content:
    • Structure:
    • Overall Thoughts:
  • 15-122: Principles of Imperative Computation
    • Content:
    • Structure:
    • Overall Thoughts:
  • 21-241: Matrices and Linear Transformations
    • Content:
    • Structure:
    • Overall Thoughts:
  • 79-189: History of Democracy
    • Content: Goes throgh the rise and fall of 6 case-study democracies throughout history, from the Roman Republic to the more modern examples of the Republic of China and Iran.
    • Structure: Class lecture consisted of the professor going over broad concepts and events in each case study we learned about, while recitation went over ___.
    • Overall Thoughts: I really enjoyed the lecture components of this class; Professor Law is a really engaging lecturer and I found the broad topics covered genuinely interesting. I also really appreciated how approachable Professor Law was as a person, he __ and was the first professor I ever had the guts to reach out to. That being said, this was a particularly heavy humanities course for me reading-wise, I wish I could’ve had a course with Law wi
  • 05-120: Introduction to Human Computer Interaction
    • A mini-course available to freshmen as an introduction to the Human-Computer Interaction field and major. ___
  • 07-131: Great Practical Ideas in Computer Science
    • A relaxed StuCo that focuses on teaching some Software Engineering tricks of the trade, such as Vim, Git, and various bash commands. The homework isn’t bad at all, just don’t leaving two thirds of it until the last night you can possibly submit it (*nervous laughter*). The exams are also square-root curved, which takes off any pressure that was on them.
  • 07-128: Freshman Immigration Course
    • A required course for SCS students first semester, going into the different departments, majors, and concentrations of CMU Computer Science. I’m glad CMU offers an introduction to its computer science deparment like this, though I could’ve easily skipped the sections on fields I had no interest in.

Other Commitments:

  • As a bit of a hermit Freshman Year, I didn’t have any other commitments.

Workload: 49 Units, felt heavy since I was adjusting to college but realistically medium.

Summer 2021