It’s a little strange to think that my college experience is already one-eighth of the way done. I’ve honestly enjoyed practically everything about CMU (sans first year writing, but oh well). Since I’m at least keeping up the pretense of having a blog, I should probably do the obligatory course review. Who knows, maybe some prospective student will see this and find it marginally useful!
This semester (fall 2019), I took a few “real” courses:
- 15-151 (Mathematical Foundations for Computer Science)
- 21-241 (Matrices and Linear Transformations)
- 15-122 (Principles of Imperative Computation)
I also took a few “less legit” courses:
- 76-107 / 76-108 (First Year Writing Minis)
- 07-128 (Freshman Immigration Course)
- 07-131 (Great Practical Ideas in Computer Science)
There were also a few courses (15-051 Discrete Math Primer and 99-101 Computing at Carnegie Mellon) that were really summer mini-courses but ended up officially on my fall transcript. I’ll go through all of the courses that I took and give my personal thoughts/recommendations on them. (Okay, my recommendations aren’t very useful because these are generally required courses anyway. Maybe my thoughts will be more useful.)
15-151 (Mathematical Foundations for Computer Science)
I actually really loved this course. 15-151 is more or less a crash course in pure math (sets, functions, number theory, combinatorics, etc.) and is definitely the conceptually trickiest but most rewarding of the standard freshman courses. It’s the source of much freshman misery, but on the bright side, some of the problems are actually pretty cool and satisfying to solve, particularly after spending many hours in a certain corner of the eighth floor of Gates. (That being said, unless you have extensive competition math experience coming in, you will probably suffer a lot on the road to enlightenment. As an example, our class average on the final was a 61%.)
As someone without much high school competition math experience (I took the AMC/AIME because my school required it, and I went to PUMaC mostly for fun), I felt like I learned a good deal. I probably won’t remember the details of Cantor’s massive-brained proof that for any set , there does not exist a surjection , but it’s a great primer to the sort of mathematical thinking that is a prerequisite for more advanced courses.
Just a note: if you’re ever talking to someone from CMU, we actually have three different versions of this course: 21-127 (the standard version), 21-128 (for math majors), and 15-151 (for CS majors). 21-128 and 15-151 are literally the same course but with different names/numbers. All three are colloquially called “Concepts”, although only 21-127 is actually titled “Concepts of Mathematics”.
Also, Mackey is an amazing professor. He even agreed to sign my PGP key!
21-241 (Matrices and Linear Transformations)
This was more or less a standard introductory linear algebra course. It was a decent course: not particularly special, but I think I learned a decent amount. The nice thing about linear algebra is that there’s a little bit for everyone: there’s both some pretty neat theory as well as some very practical applications. I actually liked Professor Offner a lot; his awkward sense of humor was honestly pretty relatable. Some of the applications presented in class were a little out there (honestly, it felt like we finished the actual curriculum early so Offner just filled the rest of the semester with Fourier transforms, perspective rendering, graphs, and whatever other applications of linear algebra that he could think of), but the exams were always very fair. I remember spending quite a few late nights with a friend in Gates doing homework and studying for the exams; in 21-241, I think my studying always paid off when it came to both grades and understanding.
There is also a more advanced version of this course, 21-242 Matrix Theory, but it is invitation-only, based on the results of an invitation-only exam. (I did not get the invite to sit for the exam.) If you get the opportunity to take it, I’ve heard that it’s a good course, although you’ll have to talk to someone who did take it to find out more.
15-122 (Principles of Imperative Computation)
This was a fairly standard introductory C course, with the interesting twist of formal verification. Especially during the first half of the course, we were frequently challenged to not only write code but to prove the correctness of our code. This was sometimes annoying, but the experience of having to reason rigorously about code turned out to be quite valuable. 15-122 programming assignments were pretty boring at first, but once they got a little more interesting toward the end of the semester, they ended up becoming my favorite type of assignment. One of the especially enjoyable assignments was an implementation of Huffman encoding; for full points, we had to submit our code after compressing it with our implementation!
I’m still not entirely convinced that functions are pointers. (I’d better remove that before I get banned from ever becoming a 15-122 TA…)
76-107 / 76-108 (First Year Writing Minis)
I was not a terribly big fan of the required first year writing courses at CMU; I opted to take the two mini-courses instead of the traditional 76-101 Interpretation and Argument course, so maybe that colored my experience. The courses were fine in terms of workload, but I guess I’m just not a big fan of this type of content. Since High Tech (my high school) made us do a lot of technical writing (oh, what a fun time we had compiling our final report for Dr. Eng’s multivar class—I’m not being sarcastic!), on top of some of the research writing experience that I had, I felt reasonably prepared for the two minis that I chose. (I steered clear of the more “humanities-focused” one.)
I guess the pacing of the mini-courses was refreshing; each one lasted only half a semester (approx. 8 weeks), so there was plenty of variety.
07-128 (Freshman Immigration)
The name tells you pretty much everything you need to know about this course. I don’t have much else to say about it.
07-131 (Great Practical Ideas in Computer Science)
This was an interesting course concept: an introduction to some of the practical “tools of the trade”, viz. Unix utilities. I took this course mostly for social reasons (a lot of people take it) and because I hoped that I might learn something from it. Maybe I learned a bit, but as someone who has not used an editor besides Vim for the past 1.5-ish years, it honestly wasn’t very helpful. In the end, I just skipped the lectures and did the labs remotely. It is an extremely “chill” class (e.g. you don’t even have to show up to the final) run by very passionate people, so it can be a decent experience if you don’t have much experience with
I am really excited for next semester! My schedule isn’t very pretty (9:00 am lectures are annoying), but all the courses are in topics that I think are really interesting, so hopefully that makes up for it. My current plan is:
- 15-251 (Great Ideas in Theoretical Computer Science)
- 15-252 (More Great Ideas in Theoretical Computer Science)
- 15-150 (Principles of Functional Programming)
- 21-268 (Multidimensional Calculus)
- 80-180 (Nature of Language)
- 07-180 (Concepts in Artificial Intelligence)
I’ve also found out about this really cool course, 16-865 (Advanced Mobile Robot Design / Space Robotics Development, depending on whom you ask). The course essentially evolves around the CMU MoonRanger project, which is a project whose goal is to have a small autonomous rover on the moon sometime before I graduate. As someone who loves space and robotics, a space robotics opportunity seems very cool.