Inspired by these similar pages.

Degree: B.S. in Computer Science, minor in animation & special effects, concentration in computer graphics

Background: I entered CMU with a bit of programming experience (poorly taught APCSA, self-taught Python), and some competition math experience (AMC and related things). I did IB/AP in high school.

☆: Courses which I especially enjoyed and/or thought were worth taking.

!: Courses which were particularly time consuming for me.

Fall 2023

! Head TA: 15-210 Parallel & Sequential Data Structures and Algorithms
16-385 Computer Vision
  • Overall a not too bad class for the AI elective (especially if you don't care that much about AI). In particular there are no exams. A much more scaffolded and beginner-friendly version of 15-463 (I probably should have taken vision first.)
☆ 15-312 Foundations of Programming Languages
  • Originally I was going to take 15-317 (clogic) for my logic & languages requirement, but my advisor recommended 312 over clogic. It is definitely more fast-paced and theory heavy, but in my opinion the content is probably more interesting, and the teaching quality of both the professor (Harper) and the TAs were really good as well. Also not too bad to take after having taken compilers (some content and homeworks overlapped with implementing the fun parts of a compiler without all the debugging pain).
  • In some ways, this class felt like 150 but on steroids, in the sense that I would completely zone out during lecture at times and be behind in terms of content, but still be able to (somewhat) learn the content on my own by doing the homework. The homework problems were also always very satisfying to complete.
15-445 Database Systems
  • As this was the third systems class I took, I felt that the coding projects were not as difficult as distributed or compilers to complete. In the beginning they were quite scaffolded, and in general they felt like software engineering tasks (since we were working within a subset of an existing codebase).
  • I took this class because I thought databases would be broadly useful, and because I wanted some more hands-on experience with concurrent C++. Having a bit of course and project experience with DB did help me out a bit while interviewing for jobs, but I didn't really get as much as I wanted out out of the concurrent C++ side. I will also note that the lectures and projects for CMU DB are publically available (on Youtube, Github, Gradescope), so I technically could have also taken another course and learned DB on my own (although realistically, I probably wouldn't have done that this year).
☆ 15-469 Special Topic: Visual Computing Systems
  • In my opinion this is the graphics class that ties everything together-- revisiting topics from the intro graphics class, computational photography, video games, graphics + ml from an architecture lense. Fun and chill seminar-style lectures with a really good professor, who used to be a B.S./M.S. student at CMU! (Oscar)
  • Got to work a bit with vectorized SIMD and C++ through the assignments / course project, which was cool. I wish I could have learned and worked with CUDA explicitly (I should have picked something involving CUDA for my final project in retrospect).
☆☆ 60-335 IDeATe Special Topics in Animation: Story Development
  • My favorite class I took this semester, in part because it was so different from the technical CS or technical art classes that I'm used to taking. I've always wanted to take a storytelling or writing class, and this (A3) mini taught me a lot about both while being super chill and fun. The instructor (Alexa Lim Haas) is really kind and supportive of all of her students, no matter what background they come from.
(Dropped) 15-327 Monte Carlo Methods & Algorithms
  • This was a new class (that also counts for the graphics concentration). I dropped it after the first week and replaced it with databases because (1) I felt like I had seem some of the content before in graphics/discrete differential geometry (2) I didn't want to / couldn't drop any other classes and (3) it had an early morning timeslot (LOL). In retrospect I don't think I actually knew as much content as I thought I did (after looking at some of the homeworks), but this class is definitely on the mathier side.


Other: gym, recruiting

Workload: fluctuating between moderate - death depending on how hard I trolled

Notes:
  • Recruiting sucked, as always, but especially more so this semester because of the economy/massive layoffs everywhere. Many people I knew (including me) had a hard time getting interviews.
  • Definitely felt some form of senioritis this semester-- I found myself prioritizing TA-ing, playing games, or going to the gym more over grades or assignments. I think I would have had a better time mentally if I had dropped databases, but I kept putting it off. The other classes I took were all for graduation requirements (major, concentration, minor).

Spring 2023

! Head TA: 15-210 Parallel & Sequential Data Structures and Algorithms
  • A lot of work (some rewarding, some tedious). Also more stressful than necessary due to a lot of semester-specific things (ex. developing C++ Lab infrastructure, content changes, etc.). At the end of the day, had many fun moments as well with other TAs and students, which was worthwhile.
☆ ! 15-411 Compiler Design
  • Very hands-on class where you implement 6 compilers with a partner in a language of your choice (we used OCaml, which is what most teams used). This was pretty effective in allowing us to deeply understand how each phase of a compiler works, and also a lot of work (for me, >= 25 hrs/week).
  • In my opinion, the labs in order of difficulty: L5 > > > L4 > L3 > L2 > L1 ~ L6 (if you pick an easier final project)
15-464 Technical Animation
  • A graphics elective that covers both classic and modern research in animation (offered every other spring). In particular I learned a lot about cloth/fluid/deformable simulation.
  • Pretty flexible class that was good to take alongside compilers as well-- main assignments were two mini-projects due every three weeks, and tasks for a final project.
☆ 60-125 IDeATe: Introduction to 3D Animation Pipeline
  • Really cool class where you make all aspects of a short animation (modeling, texturing, rigging, lighting, animating, etc.) from scratch. Very applicable if one is interested in working in film, animation, or games.
  • Interesting to see how artists use many of the concepts or tools we learned about in the 15-xxx graphics classes in the pipeline.
21-355 Principles of Real Analysis I
  • Not too interesting, but I got some practice with formal definitions and proofs for continuous math, which is useful and sometimes cool.
  • Also seems to vary a lot with the professor-- I took it with Neumayer, who was generally fairly supportive of her students.


Workload: heavy first 1/2, death second 1/2

Notes:
  • Compilers and both animation classes had final projects in place of exams, which was hard to balance in the last month of classes.
  • Although I liked everything I was learning about, for the sake of my sanity and sleep schedule I wish I had dropped real and spent more time polishing my assignments for 60-125.

Fall 2022

☆ TA: 15-210 Parallel & Sequential Data Structures and Algorithms
15-451 Algorithm Design and Analysis
  • I was lucky to take this class during what seemed to be an abnormally "good" semester in terms of professors, TAs, and students-- I thought the 451 was harder than 210 and 251, but still reasonable/manageable. How hard and how reasonable 451 is seems to depend heavily on who's teaching it, though.
  • As with 251, having an oral group that you get along with and are willing to work with you is more important than having a really "smart" group.
! 15-440 Distributed Systems
  • Possibly the worst taught CS class I've taken so far (although I've been told that I haven't taken any AI/ML classes yet). That might just be how systems courses are taught though, and exasterbated by stress. I might have taken 15-418 instead, but didn't want to deal with a second final project on top of 463's.
  • For the fall variant, two of the four major projects are partner projects. In my opinion, it's probably better to find a partner who has a similar working style as you, as opposed to a friend who you might not work that well with. Group issues are common.
  • I would rank the projects P1 > P3 >= P2 > P0 in terms of difficulty, but everyone's experience is different.
☆ ! 15-463 Computational Photography
  • A really interesting and well-run class about cameras and various vision/graphics-adjacent imaging techniques. Yannis (the professor) is a great teacher and does a lot of cool imaging/rendering research. I think I learned the most from this class this semester, even though I would also rank it as the hardest class I've taken to date-- at several points I was close to dropping it.
  • Assignments are half implementing a research paper in Python, half applying your implemented code to your own camera photos. All of them are a lot of work but are really rewarding to get working. The class will probably go more smoothly if you've taken both computer vision and graphics beforehand (if I had to pick one, then vision is more helpful than graphics). For me there was a steep learning curve in the beginning with getting up to speed with standard vision programming tricks.
  • I would rank the assignments as A2 > > > A3 > A6 > A4 > A5 > A1 in terms of difficulty (but this varies for everyone). Some of my favorite assignments include building the pinhole camera for A1, A4, and the second half of A3.
76-270 Writing for the Professions
  • A standard writing/communication class, but felt tedious and annoying the entire semester to work through (probably due to stress). I could not bring myself to wake up for the 9am section, which was unfortunate because they took attendance.
  • I originally signed up for this class because I thought I would need extra units to pad different technicals / in case I dropped a class. I ended up staying in it because it was a graduation requirement, but I should have dropped and taken it a different semester.
  • If you're already doing research or are interested in research, 07-300 is probably a better option. I might have considered that if it didn't conflict with 463.
82-279 Anime - Visual Interplay between Japan and the World
  • Super chill gened, with a really nice professor. You watch and discuss several anime over the course of the semester, with essays instead of exams. Counts for category 3.


Other: research, recruiting

Workload: death

Notes:
  • Don't take five classes, TA, and do research during interview season, even if you like suffering.
  • I met a lot of new friends through 451 and 440 this semester, which might be because a lot of CS juniors take at least one of them junior fall. In retrospect, this makes me glad I took 210 + 213 last fall to be able to have my current schedule, since in past semesters I didn't take many core classes at the "same time" as many other people in my year.
  • My time management/tolerance for higher FCE has definitely increased over the semesters, but this semester's workload was still too heavy for me. It might have been more manageable if I didn't pick up a research project on a whim a few weeks before the semester started.
  • As someone who struggled with internship applications and interviewing all throughout freshman and sophomore year, I found this interviewing cycle to be a lot more manageable (but still hard). I guess it really is true that things work out if you work hard in school, and that it's easier to be considered for interviews the older you get. Although, I still feel that I got very lucky-- landing internships and jobs are harder than ever now, with the current state of things.

Spring 2022

☆ TA: 15-210 Parallel & Sequential Data Structures and Algorithms
  • Pretty interesting to teach theory for the first time. Deepened some shaky understanding of topics from last semester and got to work with cool vet TAs, which was really rewarding.
  • Reasonable responsibilities/time commitment
☆ 15-251 Great Theoretical Ideas in Computer Science
  • Very well run proof-based class, many interesting theory topics and homework problems. I felt like past semesters' math/cs theory classes were finally paying off.
  • Writing sessions were initially stressful, but they ended up saving a lot of time from having to write up all the problems, and also reduced exam prep. I felt like I didn't need to prepare for exams as much (as say 210, 150, or concepts) other than reviewing practice/hw problems and some textbook definitions.
  • I think I would have suffered a lot more if I took 251 earlier, but I also would have been wowed a lot more by lectures/recitations (I think 210 did that for me in place of 251).
  • I also had a good group, which made the class fun / lighter. Having group members that you get along with and are willing to go to office hours with you is more important than having "really smart" group members.
15-462 Computer Graphics
  • Interesting lectures and cool assignments. Tedious at times, mainly due to c++ things and me being bad at reading comprehension. Relatively chill and moderate workload class.
  • Assignments I liked the most: a3 > a2 > a1 > a4
  • Assignments that drove me crazy: a3 > a4 > a1 > a2
15-458 Discrete Differential Geometry
  • A math class in disguise as a CS class. The math (differential geometry) is actually really hard (traditionally would require rigorous understanding of real/functional analysis, linear algebra, topology, etc) but it's taught in a very visual and intuitive way that's not very rigorous. Overall an even chiller class than graphics.
  • Assignments are half written proofs/computations, and half 112-122 level progs, due every 2 weeks. Grading is pretty lenient.
  • Keenan is a great lecturer, highly recommend the in person lectures.
85-241 Social Psychology
  • Counts as a cat 1 gened. Relatively low workload (papers, async quizzes), slow lectures with mandatory attendance, nice professors.


Other: Scottycon artist alley tabling, rec volleyball

Workload: moderate, though it felt light at times

Notes:
  • Felt burnt out this semester. Having a much lighter TA workload + unexpectedly lighter course load freed up a lot of time that I initially didn't know what to do with. I kind of regret not taking another technical, but that probably would have spiked workload from light-moderate to heavy-death. More free time let me do more social events and take TAing at a slower pace, which was nice.

Fall 2021

! TA: 15-112 Fundamentals of Programming & CS
  • ☆ It was really fun to teach in person, and I made many good friends with other TAs. I had mixed feelings about TAing again at the beginning of the semester, but I'm glad I stuck through with it.
  • It's easy to overwork yourself without realizing / out of caring too much when TAing for this course in particular-- I don't think this is true for all CS courses, after talking with other TAs. (2023 update: the course seems to be healthier TA-workload wise now, after some course changes)
! 15-213 Introduction to Computer Systems
  • ☆ I thought the concepts were cool/useful, and labs were difficult but rewarding to finish.
  • I found this class to be poorly organized though-- lectures can be hard to follow if you have zero systems background, and support for labs is terrible.
☆ ! 15-210 Parallel and Sequential Data Structures and Algorithms
  • I really enjoyed this class, despite not having great intuition for its content (not great at theory, no competitive programming background). The different algorithms, data structures, and algorithm design techniques were all really cool.
  • I found exams and labs to be really hard.
36-218 Probability Theory for Computer Scientists
  • Not a good class if you're looking for a strong grounding in probability. The content is poorly motivated and tedious (mostly rote calculations).
  • I would have liked more theory, but I didn't have enough time/mental capacity to handle 21-325 on top of 213, 210, and TAing. I also wasn't able to get permission to register for 15-259 for S22 without having taken 15-251 (although people have gotten approved for it before).
☆ 60-220 IDeATe: Technical Character Animation
  • Pretty cool (and time consuming) class-- you learn about classic animation exercises and build up your own character animation reel over the course of the semester using Maya.
  • I think people typically take this class after having taken 60-125 (which I had not), and so I struggled with random Maya/animation things throughout the semester, though everything turned out okay.
(Dropped) 21-325 Probability
(Dropped) 21-360 Differential Geometry of Curves and Surfaces
  • Seems interesting, but my schedule was already too heavy, and I felt poorly prepared to take it without any real analysis background.
  • In retrospect, I wish I had taken this course over 36-218, since it was no longer offered due to low enrollment this semester (although then I probably would have died from workload). 15-458 covered similar topics but from a less rigorous lense.


Other: research team meetings (dropped), recruiting

Workload: heavy, sometimes death

Notes:
  • Having felt mostly fine about 122 and 150 content, 213 + 210 together was still really hard for me (remote to in person transitions, 20 hrs/week of TAing, getting sick didn't help). I was pretty much always stressed and working on either one during the semester, with little to no free time. It's doable with good time management (starting early on both, staggering the labs on different weeks, not staying stuck for too long and going to OH), although that doesn't mean it's a good idea.
  • I would have tried to take 60-125 rather than 60-220, if it didn't conflict with 213. Scheduling animation/ideate classes is hard...
  • Thought about looking into graphics, systems, or algorithms concentrations after this semester.
  • I found sophomore year recruiting really hard. I struggled a lot with both preparing for and doing coding interviews. Because of this and feeling like I would be lucky to get any offers at all, I accepted the first internship offer I got without thinking too much about whether I would be interested the kind of work I would be doing, which I ended up regretting. In my opinion, it would have been more worthwhile if I had negotiated a later offer deadline and continued to try to recruit for other companies.

Spring 2021

☆ ! TA: 15-112 Fundamentals of Programming & CS
  • Took a lot of prep time, at least for my first time TA-ing. TP mentoring was by far the hardest part. Teaching recitation, helping students during OH, grading sessions, planning puzzle hunt, and leading a 3D graphics mini lecture was all fun (and stressful). Non-TP weeks were around 13-15 hrs/week, TP season was ~18 hrs/week.
☆ 15-122 Principles of Imperative Computation
  • Programming assignments were fun, though exams and the constant stream of work were sometimes stressful.
☆ 15-150 Principles of Functional Programming
  • A really fun class with puzzle-like homework assignments, entertaining professors, and really nice TAs. Eye-opening in terms of how I thought about programming.
☆ ! 21-268 Multidimensional Calculus
  • Pretty challenging, as it was my first time taking a multivariable calc course. Some proofs with matrices and a little bit of real analysis (although I heard the rigor of this course depends heavily on the professor).
73-102 Principles of Microeconomics
  • Weekly psets, open-note exams (during covid). As an online class it wasn't too bad for a cat 2 humanities elective, but not the easiest in person.
02-261 Quantitative Cell and Molecular Biology Laboratory
  • Pretty chill, had some short programming assignments in Python. A decent option for the SCS lab requirement.
05-120 Introduction to Human-Computer Interaction
  • Survey of different research areas and techniques within HCI, with a lot of group discussion and design-oriented projects. A gateway course that helps for declaring a primary HCI major or HCI concentration for CS majors.


Other: GCS project (dropped), some personal/family issues

Workload: moderate - heavy

Notes:
  • Moved onto campus, although almost all classes were still fully remote for me.
  • I overdid it for myself this semester with 5.5 classes and TAing, although I don't regret getting a humanities and lab requirement out of the way.
  • I do wish I had taken 60-125 over 05-120, as I didn't end up liking HCI as much as I thought I would initially (although the workload of 122/150/268/TAing on top of a project class would probably have been too much for me).
  • I decided to take 21-268 over 21-259 after Mackey mentioned that some theoretical understanding of multivariable calc would be useful for some computer graphics content (which I found to be true). I think it's probably worth taking for some theoretical understanding of certain AI/ML topics as well (although people are fine w/o it)
  • I wish I had talked more with and befriended other TAs, especially for my first semester TAing as a freshman.

Fall 2020

☆ 15-112 Fundamentals of Programming & CS
  • ! Making a term project was mostly fun. Incorporating some 21-241 lecture material (change of basis, perspective rendering) was cool (and janky as hell).
  • Great course for getting comfortable with coding and for building a strong foundation for 15-122, 15-150. Weekly FCE goes down significantly (~10-12) if you have prior coding experience, expect during term project season.
☆ ! 15-151 Mathematical Foundations of Computer Science
  • Introductory proof writing + discrete math, and also my hardest class freshman fall.
  • A background in competition math definitely helped-- I wasn't that good at it, but having done AMC/AoPS style problems before, I did better than I expected.
☆ 21-241 Matrices & Linear Transformations
  • My first linear algebra class-- I thought it was well taught, with basic proofs and many interesting applications (SVD, Markov matrices, perspective rendering, hamming code, spectral clustering, pageRank, etc.).
  • I struggled to wrap my head around concepts until the very end of the semester. If I could go back, I would have spent more time asking questions and internalizing the homework problems, since a good understanding of linear algebra is really useful in various areas of CS (such as graphics, ML, theory, etc.)
76-107/8 Writing about Data/Public Problems
  • Light and chill first year writing options, standard reading/discussion/essay assignments.
07-128 SCS Freshman Immigration Course
  • Introductions to different majors/concentrations and departments within SCS.
  • Probably would have been more fun to talk with other SCS freshmen and faculty in person :(
07-131 Great Practical Ideas in Computer Science
  • Useful for learning terminal/git basics, which I didn't really know before. TAs were all nice SCS upperclassmen with cool presentations and advice.
98-127 StuCo: Game Creation for People Who Want to Make Games


Other: game creation society, internship/research applications

Workload: mostly moderate

Notes:
  • This was one of the fully remote semesters which I took at home, due to covid.
  • I found the perspective rendering content of 241 and the 3D graphics-ish programming I did for 112 interesting, and decided to look more into graphics research/classes at CMU.
  • I wish I talked and worked with more people in my classes, particularly 112 and 151.

Pre-CMU

CMU accepted the following AP credits for me:

  • AP CS A (counted for 15-110 only and not 15-112, since I got a 4)
  • AP BC Calculus (counted for 21-120 and 21-122)
  • AP Physics C Mechanics, E&M (counted for two science electives in the same department)
  • AP Environmental Science (counted for science electives)
  • AP Lang, Lit, Chinese, Spanish, Gov, Stat (counted for humanities/free electives)