Today, I thought it would be fun to look at every college course I’ve ever taken and place them in a tier list. While I don’t typically write this style of content, I was a bit tipsy when I had the idea which made me think this would be a good idea. We’ll see!
At any rate, the plan for this article will be to list every course I’ve ever taken in reverse tier order. In other words, we’ll start with the lowest tier, D, and work our way to the best tier, S. As the writer, I’ll make sure this article is put together nicely. That said, the writing process is going to be a mess.
Overall, I expect this to be a very, very long article. After all, I’m in my third year of a PhD, and I have a four-year Bachelor’s under my belt. In other words, we have a lot of courses to review.
Table of Contents
As I’m currently still pursuing a degree, I suspect this article will be a live document. In other words, every semester I’ll drop in some new courses. Then, perhaps I’ll make some update articles. To aid in that tracking, here’s a table of every course I’ve taken—you know I love data:
|Year||Semester||Course Code||Course Title||Course Tier|
|2012||Fall||CHEM 111||Principle Chemistry for Engineers||B|
|2012||Fall||MATH 122||Calculus for Science & Engineering 2||B|
|2012||Fall||MUEN 373||Jazz Ensemble 1||A|
|2012||Fall||MUEN 383||Symphonic Winds||B|
|2012||Fall||MUEN 384||Spartan Marching Band||C|
|2012||Fall||EECS 132||Introduction to Programming in Java||S|
|2012||Fall||FSNA 109||Science and Race||B|
|2013||Spring||MATH 223||Calculus for Science and Engineering 3||B|
|2013||Spring||MUEN 374||Jazz Ensemble 2||B|
|2013||Spring||MUEN 383||Symphonic Winds||B|
|2013||Spring||PHYS 121||General Physics 1—Mechanics||A|
|2013||Spring||EECS 233||Introduction to Data Structures||C|
|2013||Spring||ENGR 145||Chemistry of Materials||C|
|2013||Fall||MATH 224||Elementary Differential Equations||C|
|2013||Fall||MUEN 373||Jazz Ensemble 1||A|
|2013||Fall||MUEN 383||Symphonic Winds||B|
|2013||Fall||PHYS 122||General Physics 2—Electricity & Magnetism||A|
|2013||Fall||EECS 281||Logic Design and Computer Organization||A|
|2013||Fall||ENGR 210||Introduction to Circuits and Instruments||C|
|2014||Spring||COMP 25212||System Architecture||B|
|2014||Spring||MUSC 20172||Sound and Digital Entertainment Technologies||A|
|2014||Spring||PSYC 11212||Brain and Cognition||B|
|2014||Spring||PSYC 21052||Conceptual and Historical Issues in Psychology||B|
|2014||Spring||SOCY 10402||British Society in a Globalising World||B|
|2014||Fall||MUEN 374||Jazz Ensemble 2||B|
|2014||Fall||MUEN 383||Symphonic Winds||B|
|2014||Fall||STAT 312||Statistics for Engineering and Science||B|
|2014||Fall||EECS 337||Compiler Design||A|
|2014||Fall||ENGR 200||Statics & Strength of Materials||B|
|2014||Fall||ENGR 225||Thermo Fluids Heat & Mass Transfer||B|
|2014||Fall||PHED 131||Personal Fitness||A|
|2014||Fall||USSY 286V||Food Craze||A|
|2015||Spring||MUEN 374||Jazz Ensemble 2||B|
|2015||Spring||MUEN 383||Symphonic Winds||B|
|2015||Spring||ENGL 398||Professional Communication for Engineers||C|
|2015||Spring||EECS 301||Digital Logic Laboratory||D|
|2015||Spring||EECS 315||Digital Systems Design||B|
|2015||Spring||ENGR 398||Professional Communication for Engineers||C|
|2015||Spring||EECS 302||Discrete Mathematics||C|
|2015||Spring||EECS 290||Introduction to Computer Game Design||B|
|2015||Fall||MUEN 373||Jazz Ensemble 2||B|
|2015||Fall||MUEN 383||Symphonic Winds||B|
|2015||Fall||EECS 324||Modeling and Simulation of Continuous Dynamical Systems||C|
|2015||Fall||EECS 366||Computer Graphics||B|
|2015||Fall||EECS 390||Advanced Game Design||A|
|2015||Fall||EECS 338||Introduction to Operating Systems||C|
|2016||Spring||MUEN 373||Jazz Ensemble 1||A|
|2016||Spring||MUEN 383||Symphonic Winds||B|
|2016||Spring||EECS 391||Introduction to Artificial Intelligence||C|
|2016||Spring||EECS 398||Engineering Projects 1||A|
|2016||Spring||SASS 375C||Invisibles in Poland||S|
|2018||Fall||CSE 5542||Realtime Rendering||B|
|2018||Fall||CSE 6341||Fundamentals of Programming Languages||A|
|2018||Fall||MUSIC 7204.04||University Band||C|
|2019||Spring||CSE 5539||Intermediate Studies in Artificial Intelligence||B|
|2019||Spring||CSE 5544||Introduction to Data Visualization||D|
|2019||Spring||CSE 6431||Advanced Operating Systems||A|
|2019||Spring||CSE 6559||Advanced Computer Graphics||B|
|2019||Fall||CSE 5521||Introduction to Artificial Intelligence||B|
|2019||Fall||CSE 6559||Advanced Computer Graphics||B|
|2019||Fall||ENGREDU 7189.01||GTA Prep Support||A|
|2019||Fall||ENGREDU 7900||Professional Development||A|
|2020||Fall||CSE 5522||Advanced Artificial Intelligence||B|
|2020||Fall||CSE 6998||MS Research CSE||B|
|2020||Fall||ENGREDU 7189.02||Teaching Professional Development||A|
|2020||Fall||ENGREDU 7780||Research Design||B|
In the next section, we’ll take a look at the criteria we’ll be using to review these courses.
To keep things interesting, here’s the criteria I used to assess each course:
- Strength of faculty member(s): I prefer courses with a faculty member who cares about their students
- Balance of workload: I prefer courses where the workload is manageable, doesn’t induce a lot of stress, and is assessed fairly
- Strength of curriculum: I prefer courses with well-planned curriculum, so I know what to expect
- Fairness of grading: I prefer courses that treat assessments as another mode of learning rather than a form of punishment
- Credit alignment: I prefer courses whose credits align with expectations (i.e. 3 hours x # of credits)
- Content interest: I prefer to take classes that I actually want to take
I may not explicitly state all these criteria in each review, but I will use these criteria as a guide.
The Tier List
For my tier list, I’ll be using traditional rankings: S, A, B, C, and D. Since there are five groups, we can expect a majority of the courses to fall into the middle tiers: A, B, and C. Only particularly excellent courses can be expected to fall into S tier while only incredibly bad courses can be expected to fall into D tier.
With that said, this list will obviously be enormous. As a result, I’ve decided that I will only share stories about one to two classes per tier to get a sense of how the tier should look. Otherwise, I’ll just list the courses explicitly. Let’s get to it!
To start, I figured we could work backwards by starting with the worst courses and working up to the best courses. In other words, here’s the list for D tier:
- EECS 301: Digital Logic Laboratory
- CSE 5544: Introduction to Data Visualization
As you can see, there are very few courses in this tier. After all, in order to be considered D tier, the course has to be absurdly bad. In other words, I’d argue that these courses should probably be retired. Let’s take a look:
EECS 301: Digital Logic Laboratory
When I think of a bad college course, the first course I think of is Digital Logic Lab. This course was absolutely the worst course I’ve ever taken for several reasons.
First, workload. Digital Logic Lab was a laboratory course that took place in a typical 14/15-week semester. According to my transcript, it was a 2-credit course. Now depending on which time equation you subscribe to, 2-credits could mean a lot of different things. In general, however, I tend to multiple by 3 to determine the number of hours expected for a course a week. In this case, 2-credits should take about 6 hours of week a work on average.
Unfortunately, this was never the case. First, the course was 2 hours a week on Friday evenings. Then, every other week a lecture was held and a new project was assigned. In total, I believe their were 7 projects where—according to the credit system—roughly 12 hours of work was needed to complete them.
In my experience, even while working in pairs, these projects took upwards of 30 hours to complete. The reason was basically two-fold:
- The lecture never provided enough context to get you started; you had to learn almost everything from scratch.
- The only time you could get help was during lab hours (i.e. 2 hours a week)
As you can probably imagine, the lab time after the lecture was ramp up time. In other words, there was no way you would have any questions because you didn’t even know what you didn’t know. Likewise, since it was Friday, there was a good chance your partner would cut out early, so you’d make no progress.
If you were playing it safe, you’d go into the lab throughout the week to try to make some progress—or at least generate some questions for the following Friday. Unfortunately, if you failed to do this, you were shit out of luck.
Now, I could totally rant about a lot of other things like the “faculty” or the “grading”, but that would mostly be a waste of time. After all, the real reason I hated this class was because I was stuck working with faulty hardware. Sometimes boards would just fail, and I’d have no idea. I’d just be stuck in a 10-minute compile loop where I’d stare at code, make a minor change, play some soccer physics, and pray everything worked.
At one point, I spent a long day trying to get a motor to spin. When I had an epiphany that the motor might have been blown, I tried passing current through it: it was dead. That event alone made me swear off hardware.
CSE 5544: Introduction to Data Visualization
Like most bad courses, I’ve already ranted about this one at some point on this website. That said, I think it’s worth mentioning just how terrible this course was.
For starters, this was a grad level course which felt a bit more like an unplanned seminar than an actual course. Specifically, all the data visualization related content was compressed down to the first six weeks or so. Meanwhile, the remainder of the class was dedicated to a term project and presentations.
Normally, I wouldn’t hate this style of course. After all, these free form courses usually allow for individual interests to thrive. Unfortunately, that wasn’t my experience. To put it bluntly, this was the first time I felt comfortable skipping a class. To me, it was an act of protest.
To summarize just how bad it was, I’d like to share a quick story. In the second half of the course, every student was asked to present a data visualization paper. Naturally, I picked a topic related to music because I was interested in music visualization.
Literally the day before I went to present, I received an email from the professor asking me to switch topics. Given that I had already done all the work, I straight up said no. That said, it wasn’t a good feeling to have to push back on a professor like that—especially considering the culture of hierarchy and elitism in academia.
These sort of flippant changes occurred ALL THE TIME. For instance, projects requirements would change on the due date, which often also changed as a result. It was absolutely impossible to work ahead.
As the semester went on, I regularly grew up the courage to skip class. After all, why should I respect their time if they weren’t going to respect mine? This is what a D tier course looks like.
As we move up to C tier, we’ll find that there are courses that I’d still consider bad but also had some redeeming qualities. Here’s the list:
- CHEM 145: Chemistry of Materials
- MUEN 384: Spartan Marching Band
- EECS 233: Introduction to Data Structures
- USNA 228: Time
- MATH 224: Elementary Differential Equations
- ENGR 210: Introduction and Circuits and Instruments
- ENGL 398: Professional Communication for Engineers
- ENGR 398: Professional Communication for Engineers
- EECS 302: Discrete Mathematics
- EECS 324: Modeling and Simulation of Continuous Dynamical Systems
- EECS 338 Introduction to Operating Systems
- EECS 391: Introduction to Artificial Intelligence
- CSE 6331: Algorithms
- MUSIC 7204.04: University Band
Naturally, the general trend in courses in this tier is a single redeeming quality—or rather, no bad qualities that reach a level of absurdity. That said, in general, these classes are still very bad. Here are some examples:
CHEM 145: Chemistry of Materials
When I think of a course that’s just generally bad, I think of Chemistry of Materials. Overall, I didn’t mind the curriculum, but I had two glaring frustrations.
First, the faculty member who taught the course was notoriously boring. To make matters worse, this course was taught in a massive lecture hall of at least 200 students (though I believe the capacity of the room was closer to 600). In other words, this professor had basically no way of engaging with the group.
That said, perhaps the most frustrating part of this course was how it was assessed. Like most courses, it had its fair share of quizzes, exams, and assignments. The difference was that work was always submitted in weird ways.
For example, we had a recitation every week where we would take a quiz. After each quiz, we would turn in our homework. Of course, me being forgetful, I took the quiz quickly and walked out without turning in my assignment one time.
This was a very frustrating experience because it meant that I worked on the assignment for basically nothing. After all, I have no plan to work in chemistry, and I didn’t then either. As far as I’m concerned, that material (pun intended) has largely disappeared from my brain.
To make matters worse, I’m a bit passive, so I didn’t bring it up until a day or two later when I say my recitation instructor at a study session. At that point, I explained the situation, and she said there was nothing she could do. The solutions had already been released.
Perhaps the most frustrating part of this whole thing was that I probably could have avoided taking the final had she just heard me out. See, there was a rule that if you had an A before the final, you wouldn’t have to take it. Well, that assignment left me at a high B, so I had to take it. Needless to say, I ended the course with a B all because I forgot to turn in an assignment.
CSE 6331: Algorithms
Another classic C tier course was a graduate level algorithms course. If you know me, I hate theory-based courses, so this was tough one for me to get into.
Likewise, I don’t really care for courses that are traditionally difficult and lean into it. For example, everyone knows that theory-based courses are difficult because they require a certain style of thinking. It doesn’t help that these types of courses also grade notoriously hard. This class was no different.
To make matters worse, the entire class was built around 3 exams. If you failed any of them, you pretty much failed the course. As a result, I spent a lot of nights just reading the text book, so I could hopefully approach the problems on the exam.
Outside of that, I didn’t really have any gripes. I just don’t like a course where your success hinges on three hard exams. It feels really random, and it doesn’t reward sustained effort. You really only have to show up and try during those three checkpoints.
Of course, even that’s not really true. After all, the professor for this class taught his own way, so the exams usually followed a notation that was unique to the course. In other words, you had to show up just so you could solve problems his way.
That said, the professor was fairly nice, and I passed despite scoring roughly 50% on every exam. Had I not passed, I would have dropped this course into D tier.
With the move to B tier, we’ll start to see a ton of classes that were just kinds “mid”. In other words, they had good and bad parts, but I didn’t find any facet of them noteworthy.
- CHEM 111: Principle Chemistry for Engineers
- CALC 122: Calculus for Science & Engineering 2
- MUEN 383: Symphonic Winds
- FSNA 109: Science and Race
- CALC 223: Calculus for Science and Engineering 3
- MUEN 374: Jazz Ensemble 2
- COMP 25212: System Architecture
- PSYC 11212: Brain and Cognition
- PSYC 21052: Conceptual and Historical Issues in Psychology
- SOCY 10402: British Society in a Globalising World
- STAT 312: Statistics for Engineering and Science
- ENGR 200: Statics & Strength of Materials
- ENGR 225: Thermo Fluids Heat & Mass Transfer
- EECS 315: Digital Systems Design
- EECS 290: Introduction to Computer Game Design
- EECS 366: Computer Graphics
- CSE 5542: Realtime Rendering
- CSE 5539: Intermediate Studies in Artificial Intelligence
- CSE 6559: Advanced Computer Graphics
- CSE 5521: Introduction to Artificial Intelligence
- CSE 5522: Advanced Artificial Intelligence
- ENGREDU 7780: Research Design
Naturally, this middle tier is the largest tier in the bunch. In general, I find that you have to take the good with the bad for most courses. In other words, a good professor makes up for bad curriculum while a lighter workload can make up for bad teaching. Let’s take a peek at a few examples:
CSE 5542: Realtime Rendering
Interestingly enough, I already talked about this course once on my blog. That said, I don’t think it hurts to rehash some of my thoughts here.
As a quick overview, this course was almost an exact clone of the graphics course I took in undergrad. As someone who is forgetful, I didn’t mind, but I can imagine why this would be frustrating.
In terms of pros, I really, really liked the professor. In fact, he was my advisor for the first two years of my PhD, and I really enjoyed working with him. He’s definitely one of the better instructors in the department.
Likewise, the content was fairly interesting. Overall, I really like computer graphics. After all, it’s one of the few areas of computer science where you get to literally see results quickly.
That said, I felt the projects for this course were often ill-formed and took many hours more than most people expected. As a result, these projects were often pushed back despite my efforts to get them done on time.
In addition, I find working on software that is that close to hardware to be a bit frustrating at times, and there were very little resources available to help out.
Overall, the teaching was fine, but the workload was a bit unpredictable (i.e. a little good and a little bad). That said, I couldn’t really complain. This is pretty standard for a B tier course.
SOCY 10402: British Society in a Globalising World
I think the hallmark of a course in B tier is when I can’t really remember taking it. In other words, there was nothing bad enough for me to be traumatized, nor was there anything good enough for me to look back on. This course was no different.
If I had to recall anything from this course, it would be that it took place in England. Also, I remember that the professors switched around every couple of weeks—depending on their expertise.
Outside of that that, I don’t remember any assignments. Though, there were regular group meetings where folks thought I was interesting for being an engineer in a sociology class. Beyond that, my mind kind of goes blank.
I will say that I don’t love a course that just has a final exam. I could be wrong, but I think this entire course banked on an essay final. Naturally, this was the worst grade I got abroad.
If I could remember more, I’d tell you about it! But, it really was that forgettable.
By A tier, we start seeing courses that are genuinely good. In other words, everything about the course is above expectations, but nothing is really extraordinary. Alternatively, there may be some minor flaw causing it to miss S tier.
- MUEN 373: Jazz Ensemble 1
- PHYS 121: General Physics 1—Mechanics
- PHYS 122: General Physics 2—Electricity & Magnetism
- EECS 281: Logic Design and Computer Organization
- MUSC 20172: Sound and Digital Entertainment Technologies
- EECS 337: Compiler Design
- PHED 131: Personal Fitness
- USSY 286V: Food Craze
- EECS 390: Advanced Game Design
- EECS 398: Engineering Projects 1
- CSE 6341: Fundamentals of Programming Languages
- CSE 6431: Advanced Operating Systems
- ENGREDU 7189.01: GTA Prep Support
- ENGREDU 7900: Professional Development
- ENGREDU 7189.02: Teaching Professional Development
Here, we have a surprisingly large list. When I set out to make this tier list, I wasn’t expecting to list off so many good courses. After all, I generally disliked my coursework. Let’s find out why my tier list disagrees!
EECS 337: Compiler Design
Honestly, I’m expecting this to be the most controversial ranking on my list. But hear me out, this compiler design course was really, really good.
First, let me give you some context. As you can see, I took this course right after getting back from being abroad. At the time, I had taken a grand total of three programming courses. In no way should I have been ready for this course, but I took it anyway.
For whatever reason, they had a PhD student teaching the course. As far as I could tell, this was unprecedented for my department as I had only ever taken classes with professors.
On top of that, the professor was more or less writing the curriculum while we were taking the course. This should have been a con, but I actually quite liked it. It allowed him to create material that mirrored what we wanted to learn. Unfortunately, the material was very difficult.
Now normally, I would hate this style of class. After all, there was very little organization to it. Likewise, the professor wasn’t exactly likeable. He was just really, really smart, so I often felt this huge disconnect between him and his students.
Yet despite all the signs pointing to a bad class, I really enjoyed it. In fact, this course forms the foundation of some of my primary interests including programming languages and version control. Hell, by the end of the course, I had written my own compile and stored it all in Git. How many other students could have said that at the time?
That said, part of me really would hate it if all college classes adopted this model. After all, I would hate to have to work as hard as I did for all of my classes. That’s ultimately why this course didn’t make it into S tier.
MUEN 373: Jazz Ensemble 1
Typically, for something to make it into A tier, it just has to be above average. For me, above average means that there was something about the class that I really enjoyed—even if there were some other glaring issues in the background.
In many cases, courses in this list really weren’t that great, but there was one thing about them that I really enjoyed. Naturally, this jazz ensemble was no different.
Overall, I would say that I don’t love rehearsing: I like performing. As a result, a course like jazz ensemble isn’t the most riveting experience in the world—especially considering that I had to balance it with other classes.
To make matters worse, I was always the worst performer in the room, so it was sometimes frustrating to sit next to genuine music majors as they corrected my every note. And, some of them weren’t always nice about it.
That said, I have to throw this into A tier for two reasons. First, I got to play with some of the best musicians I’ve ever heard. That obviously included my peers, but it also included other folks like Paul Ferguson, Bill Dobbins, and Phil Woods.
Second, I got to perform in front of a lot of awesome crowds. By far, my favorite concert every years was the holiday concert which played two nights back-to-back. Sometimes, I was fortunate enough to play in both groups: Symphonic Winds and Jazz 1.
Overall, it was the actual output of the course that made the work worth it (see also Advanced Game Design, Engineering Projects 1, etc.). The course in and of itself wasn’t all that special.
In the highest tier, only courses that reach above and beyond can be found:
- EECS 132: Introduction to Programming in Java
- SASS 375C: Invisibles in Poland
As you can see, there are only two courses that make the cut. Both of which we’ll talk about below:
EECS 132: Introduction to Programming in Java
If there was one class that I keep looking back to as a way of improving my own teaching, it would be this one. So, what makes it so great? Let’s talk about it.
First, I should mention that this is the first programming class I ever took. At the time, I had almost zero programming experience. In fact, I had no idea what I was getting myself into.
In terms of structure, this course was a mix of lectures and paired programming labs. Generally, I didn’t love the paired programming aspect of the labs, but I really, really enjoyed the content. After all, I mirror a lot of my own content after it.
Rather than asking students to complete a series of tasks, these labs were more exploratory in nature. In other words, we were tasked with experimenting with different programming language features to learn what they were and how they worked. This helped me really internalize things like the difference between integers and floating point values early on in my education.
In addition, projects were almost entirely self-guided. In other words, there was never a code template—just some rules around expectations. As a result, we were free to implement the projects as we felt made sense.
Likewise, projects were graded on correctness, readability, and testing. In my experience, I haven’t seen a single course that looked at code in this holistic manner, and I think it helped me internalize good practices much sooner.
On top of all that, the curriculum was organized in a way to teach object oriented programming right out of the gate. After all, that’s the entire point of using Java, right? Why wouldn’t it be taught this way? Well, I haven’t seen anything like it since.
To top it all off, the professor was incredibly charismatic and supportive. He made sure that the material was approachable and that we would feel rewarded for working hard. Overall, I blame him for getting me excited about code even when the majority of my experiences since then have been disappointing. Thanks, Dr. Connamacher!
SASS 375C: Invisibles in Poland
As we near the end of this list, I’m realizing now that perhaps this course doesn’t belong to S tier. That said, I still stand by the decision. I hope I can convince you as well!
Until I was 19, I had only been outside the United States once on a visit to Canada as a little kid. Then, in my sophomore year of undergrad, I went on a semester abroad to England on a whim.
Since then, I’ve been abroad twice more: once to Poland and again to Mexico. Beyond that, my travel has largely been bound to the states. Of course, COVID-19 isn’t exactly making travel easier.
Of all my trips abroad, Mexico was by far my favorite. That said, I was a huge fan of the trip to Poland, and I have this course to thank.
In terms of work, this course only required us to meet up like three times. In addition, we had to write some simple essays. Beyond that, it was all travel! Whether that was travel to a local Polish church for some good food or a literal trip to Poland and Germany, I couldn’t really complain.
Overall, I would recommend anyone take one of these courses. Obviously, the downside is cost, but I’d still recommend it even if you have to go into debt. Your future self will thank you for the trip (source: I’m currently still paying student debt).
Reflecting on Coursework
There were basically two reasons why I put this list together. First, I thought it would be kind of fun. After all, tier lists are popular right now, and I totally bought into the hype. Second, I wanted to reflect on the coursework and figure out how I could improve my own teaching. Here’s what I’ve learned:
- A bad professor can ruin a course
- Course difficulty isn’t inherently good or bad
- There’s more to a course than learning objectives
Are these the same sort of takeaways you had? Why not make your own list to find out? I’d be interested see what makes a class rank well in your eyes. Learning that might help me teach my own classes in the future.
At any rate, this article is well over 4,000 words at this point, so I figure we can call it quits. In the meantime, check out some of my other teaching related articles:
Otherwise, take care! I appreciate your time.
Did you know you don't have to deal with those nasty tuples from sqlite. Try converting the data to actual Python objects!
I've seen a lot of folks share code on Discord, but some ways are better than others. Let's compare a few of the different ways.