My University Course Tier List

My University Course Tier List Featured Image

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

The Transcript

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:

YearSemesterCourse CodeCourse TitleCourse Tier
2012FallCHEM 111Principle Chemistry for EngineersB
2012FallMATH 122Calculus for Science & Engineering 2B
2012FallMUEN 373Jazz Ensemble 1A
2012FallMUEN 383Symphonic WindsB
2012FallMUEN 384Spartan Marching BandC
2012FallEECS 132Introduction to Programming in JavaS
2012FallFSNA 109Science and RaceB
2013SpringMATH 223Calculus for Science and Engineering 3B
2013SpringMUEN 374Jazz Ensemble 2B
2013SpringMUEN 383Symphonic WindsB
2013SpringPHYS 121General Physics 1—MechanicsA
2013SpringEECS 233Introduction to Data StructuresC
2013SpringENGR 145Chemistry of MaterialsC
2013SpringUSNA 228TimeC
2013FallMATH 224Elementary Differential EquationsC
2013FallMUEN 373Jazz Ensemble 1A
2013FallMUEN 383Symphonic WindsB
2013FallPHYS 122General Physics 2—Electricity & MagnetismA
2013FallEECS 281Logic Design and Computer OrganizationA
2013FallENGR 210Introduction to Circuits and InstrumentsC
2014SpringCOMP 25212System ArchitectureB
2014SpringMUSC 20172Sound and Digital Entertainment TechnologiesA
2014SpringPSYC 11212Brain and CognitionB
2014SpringPSYC 21052Conceptual and Historical Issues in PsychologyB
2014SpringSOCY 10402British Society in a Globalising WorldB
2014FallMUEN 374Jazz Ensemble 2B
2014FallMUEN 383Symphonic WindsB
2014FallSTAT 312Statistics for Engineering and ScienceB
2014FallEECS 337Compiler DesignA
2014FallENGR 200Statics & Strength of MaterialsB
2014FallENGR 225Thermo Fluids Heat & Mass TransferB
2014FallPHED 131Personal FitnessA
2014FallUSSY 286VFood CrazeA
2015SpringMUEN 374Jazz Ensemble 2B
2015SpringMUEN 383Symphonic WindsB
2015SpringENGL 398Professional Communication for EngineersC
2015SpringEECS 301Digital Logic LaboratoryD
2015SpringEECS 315Digital Systems DesignB
2015SpringENGR 398Professional Communication for EngineersC
2015SpringEECS 302Discrete MathematicsC
2015SpringEECS 290Introduction to Computer Game DesignB
2015FallMUEN 373Jazz Ensemble 2B
2015FallMUEN 383Symphonic WindsB
2015FallEECS 324Modeling and Simulation of Continuous Dynamical SystemsC
2015FallEECS 366Computer GraphicsB
2015FallEECS 390Advanced Game DesignA
2015FallEECS 338Introduction to Operating SystemsC
2016SpringMUEN 373Jazz Ensemble 1A
2016SpringMUEN 383Symphonic WindsB
2016SpringEECS 391Introduction to Artificial IntelligenceC
2016SpringEECS 398Engineering Projects 1A
2016SpringSASS 375CInvisibles in PolandS
2018FallCSE 5542Realtime RenderingB
2018FallCSE 6331AlgorithmsC
2018FallCSE 6341Fundamentals of Programming LanguagesA
2018FallMUSIC 7204.04University BandC
2019SpringCSE 5539Intermediate Studies in Artificial IntelligenceB
2019SpringCSE 5544Introduction to Data VisualizationD
2019SpringCSE 6431Advanced Operating SystemsA
2019SpringCSE 6559Advanced Computer GraphicsB
2019FallCSE 5521Introduction to Artificial IntelligenceB
2019FallCSE 6559Advanced Computer GraphicsB
2019FallENGREDU 7189.01GTA Prep SupportA
2019FallENGREDU 7900Professional DevelopmentA
2020FallCSE 5522Advanced Artificial IntelligenceB
2020FallCSE 6998MS Research CSEB
2020FallENGREDU 7189.02Teaching Professional DevelopmentA
2020FallENGREDU 7780Research DesignB

In the next section, we’ll take a look at the criteria we’ll be using to review these courses.

The Criteria

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!

D Tier

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:

  1. The lecture never provided enough context to get you started; you had to learn almost everything from scratch.
  2. 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 physicsOpens in a new tab., 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.

C Tier

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.

B 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.

A Tier

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.

S Tier

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.

Jeremy Grifski

Jeremy grew up in a small town where he enjoyed playing soccer and video games, practicing taekwondo, and trading Pokémon cards. Once out of the nest, he pursued a Bachelors in Computer Engineering with a minor in Game Design. After college, he spent about two years writing software for a major engineering company. Then, he earned a master's in Computer Science and Engineering. Today, he pursues a PhD in Engineering Education in order to ultimately land a teaching gig. In his spare time, Jeremy enjoys spending time with his wife, playing Overwatch and Phantasy Star Online 2, practicing trombone, watching Penguins hockey, and traveling the world.

Recent Posts