I finished my master’s degree!
This program has been really fun and rewarding for me and I’m almost (but not quite) sad to be done. Some ways I learned/grew:
- I got more comfortable reading research papers.
- I gained a lot of confidence in my ability to understand math.
- I learned a lot about ML, and got comfortable with relevant python libraries.
- I learned LaTeX math syntax, which is pretty handy.
- I got excited about several topics that weren’t previously on my radar.
Advice (fwiw, I got straight A’s):
- Take it slow if you can.
- If you’re nervous about the math needed for ML courses like I was, start spending a few minutes each day to learn or review differential calculus, linear algebra, and prob/stat. A little goes a long way; you mostly only need pretty basic stuff.
- In some classes, it’s important to watch the office hours videos even if you have no questions about the material. In ML, some of the requirements for the assignments were only really communicated during office hours.
- Read all the official course communications closely. You don’t want to be the student who loses a bunch of points for a mistake that a TA had already clearly warned about in an Ed post. GA in particular requires you to strictly adhere to specific definitions and assumptions which are primarily communicated in Ed posts.
- If you take Compilers, do the project in Java. It’s enough work already without worrying about memory management too. (Admittedly, I’m biased since I have way more experience in Java than C/C++.)
- If possible, take PTO from work to give yourself extra breathing room near difficult tests / due dates.
- Watch Bee and Puppycat on Netflix. This is unrelated, it’s just a good show.
Notes on the courses I took:
- Computer Networks (fall 2020): Learning more about the history of the Internet and reading foundational papers was fun. And it was good to learn a little about how routing works. This was a fairly gentle introduction to OMSCS (I had enough spare time, combined with freshman over-exuberance, to partially replicate one of the papers covered), but I wouldn’t call it a blow-off course either.
- Introduction to Operating Systems (spring 2021): I think I had done enough low-level(ish) programming throughout my life that nothing in this course felt like a major revelation. But it went into detail on some topics I hadn’t paid attention to before, like schedulers; and it forced me to at least temporarily have a very clear conception of how various synchronization mechanisms work. The workload was higher than CN but not too bad, although it would have really sucked to be learning C/C++ for the first time during this class.
- Software Analysis (summer 2021): This was a surprising combination of being really interesting and really easy (it felt like the lowest workload of all the courses I took). It was fascinating to learn how many different problems can be solved by slight variations on the same basic fixed-point algorithm. And “statistical debugging” was a cool concept.
- Compilers (fall 2021): It was a lot of fun to have an excuse to implement a compiler. Learning about how regexes and nondeterministic finite automata are connected was cool too. This had by far the largest / most complex coding project of any class I took; make sure you’re very comfortable with the programming language you plan to use before signing up.
- Machine Learning (spring 2022): This class was the most stressful thing I had experienced in years, but the way it was structured really helped me get out of my comfort zone and feel like I might be capable of engaging with the field on more than a superficial level.
- Reinforcement Learning (summer 2022): This class had my favorite projects, even though I wasn’t really successful at any of them. It also had one of my favorite textbooks of the program. The accumulated stress from ML and RL really got to me though and I needed a semester off after this.
- Deep Learning (spring 2023): I don’t remember many specific things about this class but I think it was generally pretty helpful in getting me comfortable with pytorch and deep learning. I found it significantly easier than ML and RL because the work was less open-ended, except for the final project.
- Network Science (summer 2023): This was another class with a memorable textbook. I’m a bit of a videophobe so I also appreciated that most of the “lectures” were provided in written form instead of recordings. The core idea—that many real-world networks are scale-free and that this has implications which apply across a number of domains—is the sort of thing that makes you go “whoaaaaa”. Despite some annoying ambiguities in some of the coursework, I found it generally pretty easy and pretty interesting.
- Natural Language Processing (fall 2023): The quizzes and programming assignments (excluding the mini-project) were so easy that I didn’t really need to understand the material for them. The tests were what forced me to actually learn, and I appreciated the format of them (even if they were a ton of work). It felt like there was a decent amount of overlap between DL and this class (which makes sense) but I think this class did a better job of explaining how transformers work.
- Intro to Graduate Algorithms (spring 2024): Prior to this, I had only a vague notion of P vs NP, so I found that section of the course super fascinating. Solving dynamic programming, divide-and-conquer, and graph problems was already within my comfort zone, but I did learn some things in all those areas—perhaps most memorably the “master theorem” for analyzing divide-and-conquer runtimes, and the fast multiplication algorithm. I liked how much substantive interaction there was on Ed among students and TAs. I stressed out a lot about how to word my solutions, and the high-stakes 2.5-hour exams were nerve-racking.
(cross-posted from reddit)
(Updated 2024-05-30 to expand acronyms and link to courses.)