I'm approaching my final semester at Princeton and course selection is coming up quickly. This has prompted some introspection: it's the last time I'll choose courses and that comes with some responsibility. Suddenly, here I am, with four slots remaining and a laundry list of subjects and professors left to experience.
The interesting thing is that it's still hard for me to define a good class—even with the benefit of hindsight, it's not always clear what made one course worth taking over another. Was it a function of the instructor? Or the material? Or something else entirely?
This is my attempt to answer these questions.
Real quick: I'm a computer science major. I've taken ~19 computer-science-based courses (including two semesters of independent research).
Apart from those 19, I've taken four courses in math or statistics, along with nine liberal arts classes, which span the History, Sociology, Asian-American Studies, Near-Eastern Studies, Philosophy, and Religion departments.
This is a reasonable cross-section of the offerings on campus, but one that's skewed towards the experience of an engineer—I really can't speak towards Task Forces in the Wilson School or Junior Papers in the Economics Department.
The clearest realization I've come to: exams are useless. In fact, I now actively avoid classes with midterm and/or final exams, if I can help it.
There are a bunch of reasons for this:
Look, I generally do quite well on exams, but I'm always frustrated by this cycle of cram-for-test-and-forget-soon-after. They're completely counter to my goals here at school.
Of course, many will claim that exams are "necessary". Cue next section.
Some of my most valuable learning experiences at this school have come through project-based work.
This idea can manifest itself in a variety of forms, but the basic structure: take two+ weeks at the end of the semester and (in lieu of a final exam) go explore some topic relevant to the course. The final deliverables might include a research report and/or some amount of code, all of which can be produced individually or in groups.
This is an engineer's response to the idea of a 'final paper'.
As a few examples, here are some of my own final projects:
So, why do I find these experiences so valuable?
I feel pretty strongly about the usefulness of projects. My advice would be to take courses that provide this kind of assessment and stay clear of examinations as much as possible.
This is tied closely to the previous point, but courses that provide a lot of independence often make for good learning experiences.
This can come in the form of project-based final assessments or be scattered throughout the semester. For example, in COS 217: Introduction to Programming Systems, one assignment features an extra-credit competition to optimize assembly code. That's an experience I'll never forget, and while I wouldn't particularly want to do it over again, working through those optimizations on my own with some Intel manuals as my guides was a great experience.
The most extreme manifestation of independence comes through independent research. The two semesters I've spent on research have surely been the highlights of my Princeton education (see here for more) and I'd strongly encourage everyone to try their hand at it.
I've found precepts to be sort of useless. It's not that the instructors are bad, but they often struggle to inspire. In a typical precept, I get the sense that most of the class hasn't done the reading. Determining whom to blame would be an entirely separate debate, but the point still stands: I often walk away with the sense that I've just wasted an hour.
My solution, then, has been to avoid them when possible, opting instead for classes that meet twice a week for an hour and a half (with no precept). I've found this to be a much better setup for both COS and liberal arts courses.
The latter claim might come as a surprise, but in my experience, adopting this format leads to better preparation by students, especially given that you can find small classes that abide by this format. For example, REL 230: Who Wrote The Bible? meets twice a week and the students appear to have done the reading. The course is also small enough that it achieves the desired goals of a precept by encouraging discussion.
This section, again, ties in to the previous: small classes are typically better.
For starters, both students and professors typically care a lot more when the course is small. Maybe only students that care are willing to enroll in a small course, and only professors that care are willing to teach them? In a large course, it's easy to skip class and remain anonymous, but a more intimate setting keeps you honest and engaged. Regardless, both sides put in more effort—and everyone wins.
Of course, there's also the notion that smaller classes lead to increased student-faculty interaction. While this is a hackneyed claim, it's undoubtedly true, both within the classroom and beyond it.
As an example of why smaller classes are better, take COS 597E: Bitcoin and Cryptocurrency Technologies, one of the greatest courses I've taken at Princeton. It's twenty-odd kids sitting in a room with two leading experts on Bitcoin. The course was designed to be discussion-based—and it's certainly walked the walk, with nearly everyone contributing on a regular basis and interacting with the professors non-stop. I come to class every day prepared and excited to participate.
Taking these smaller classes pushes you out of your comfort zone. Try them out.
When courses are structured such that the material builds on top of itself (or progresses sequentially), I've found them to be much, much more valuable.
Again, let me illustrate with an example. When I took the aforementioned course on computational geometry, we spent one or two lectures on the basics of the subject (like the idea of counterclockwise vs. clockwise rotations). But the class then devolved into a disjointed series of lectures on specific problems, with the problem sets barely relating to what we'd learned in class, much less anything we'd learned in the previous weeks. It was hard to find the material intriguing and even harder to retain it.
On the other hand, Robert Schapire's theoretical machine learning course opened with a few weeks worth of introduction to the mathematical formalism of the process and evaluation of learning. This gave us a great foundation and toolkit to analyze actual algorithms, starting with vector machines (SVMs) and then moving on to ensembling techniques (e.g., AdaBoost), which themselves build on learners like the SVM. The material flowed from one class to the next and constantly reinforced what we'd learned in previous weeks. Better yet, the problem sets did a fantastic job of remaining relevant to the material we'd covered recently while still requiring you to draw on important knowledge from previous weeks.
'Progression' may not be the right word, but a dependent sequence of material, with assessments that reflect and enforce this dependence, has benefited me massively as a student.
It seems like my ideal course would be small and discussion-based, with a dependent sequence of material, plenty of open-ended assignments, and a substantial final research project (like the Bitcoin course I mentioned earlier).
I look back on my Princeton education incredibly fondly. There's a lot of talk here about how "undergraduates come first", and I really believe it. Take my own education as evidence: I was able to do independent research with world-renowned professors as early as my sophomore year.
So it's clear that this school has a lot to offer. But to get the most out of it, you need to cut through the bullshit and find the truly enriching experiences—the courses that will both push and stick with you.
Thanks to Shubhro Saha for his feedback on a draft of this post.