CS Electives

My take on the cs electives I’ve taken. Loosely based on this: http://shinexwang.com/cs-electives-review/

Courses I’ve taken

Courses I’ve audited to some capacity

Rating scale

Difficulty πŸ’€ πŸ’€ πŸ’€ πŸ’€ πŸ’€ /5

Interesting πŸ’‘ πŸ’‘ πŸ’‘ πŸ’‘ πŸ’‘ /5

Usefulness πŸ”¨ πŸ”¨ πŸ”¨ πŸ”¨ πŸ”¨ /5

These are my opinions on the courses

TL;dr

You want courses that are:

Easy: 456, 349

Interesting: 488, 444, co487, 458

Useful: 343, 456, 458

CS 343 - Parallel and Concurrent Programming

Difficulty πŸ’€ πŸ’€ πŸ’€ πŸ’€

Interesting πŸ’‘ πŸ’‘ πŸ’‘ πŸ’‘

Usefulness πŸ”¨ πŸ”¨ πŸ”¨

Concurrency is important both practically in the workplace and conceptually for lots of systems. The course is a lot of work and goes through a fair amount of OS-style concurrency concepts. The usefulness takes a hit since it is in uC++, which is specific for this course. The prof (Peter Buhr) is good, and lectures are entertaining. I liked the course despite hating CS350.

CS 349 - User Interfaces

Difficulty πŸ’€

Interesting πŸ’‘ πŸ’‘ πŸ’‘

Usefulness πŸ”¨ πŸ”¨ πŸ”¨ πŸ”¨

Contrary to popular opinion I liked this course a lot. I didn’t have the best professor for it (Jeff Avery is the best prof so I’ve heard) but I still enjoyed the assignments, workload, and overall structure of the course. There are dry parts when talking about history, random UI facts, etc. but it is just memorization for the midterma and final. You create little Java programs and my last assignment was a Android app. I liked coding the assignments and they were easy to get high marks.

CS 370 - Numerical Computation

Difficulty πŸ’€ πŸ’€ πŸ’€ πŸ’€

Interesting πŸ’‘ πŸ’‘

Usefulness πŸ”¨

This one gets a bad reputation from me because it is mathy. It was a prereq for graphics (cs488), so I took it. It covers stuff in Matlab (and in now allow Python as well). I didn’t like solving ODEs, Matlab, Splines, or Matlab. (I hate Matlab enough to include it twice). Jeff Orchard made this course bearable for me. He’s good. If you don’t like mathy cs courses stay away.

CS 454 - Distributed Systems

Difficulty πŸ’€ πŸ’€ πŸ’€

Interesting πŸ’‘ πŸ’‘ πŸ’‘ πŸ’‘

Usefulness πŸ”¨ πŸ”¨ πŸ”¨

Distributed is an interesting course in theory. Then you see A1 and A4 are just writeups about concepts taught in class/textbook. A2 and A3 are implementing a distributed file system in C++, and are coding. They aren’t bad, and are organized fairly well. If you liked CS350 OS assignments these were similar with syscalls, etc. Not as much concurrency here, just operating-system level coding.

CS 456 - Computer Networks

Difficulty πŸ’€ πŸ’€

Interesting πŸ’‘ πŸ’‘ πŸ’‘

Usefulness πŸ”¨ πŸ”¨ πŸ”¨

Computer networks are pretty important considering that is a lot of the knowledge of how the internet works. That being said the material is pretty dry and I can’t see people asking you how lookup tables get propagated in a network of routers in real life, etc. Still pretty birdy for a cs elective.

CS 488 - Introduction to Computer Graphics

Difficulty πŸ’€ πŸ’€ πŸ’€ πŸ’€ πŸ’€

Interesting πŸ’‘ πŸ’‘ πŸ’‘ πŸ’‘ πŸ’‘

Usefulness πŸ”¨ πŸ”¨

The name is true. It is an introduction. User Interfaces was a 100 level when comparing it to 488. 488 doesn’t hold back on any punches and is very mathy, challenging, but rewarding. This course will chew you up if you don’t dedicate the time it deserves. This gets a low usefulness score because you are working at the low level editing OpenGL buffers in C++, and I don’t think many people go into game development, much less work with OpenGL at the low level compared to using a game engine.

CO 487 - Applied Cryptography

Difficulty πŸ’€ πŸ’€ πŸ’€ πŸ’€

Interesting πŸ’‘ πŸ’‘ πŸ’‘ πŸ’‘ πŸ’‘

Usefulness πŸ”¨ πŸ”¨ πŸ”¨

This course is a breadth course covering applications of crytography in multiple facets from RSA, ciphers, hash functions, secrecy, proving secrecy, elliptical curves. Alfred Menezes is a good prof too. I liked the concepts, the assignments were a bit time consuming, but it lacks usefulness. There are some overlaps in security, but I don’t see you trying to break ciphers. (Or maybe you do, I dunno what job you do)

Stuff I audited

CS 444

Seems good, but it is a big 3 with a group project to build a compiler. If you didn’t like cs241 there is no reason you should take this, since it is just more of that.

CS 458

Seems good as well. Has a breadth of security topics and has minimal overlap with CO487. Doesn’t seem too hard or challenging except maybe A1.

Side Note

Even though I’ve taken a lot of upper year cs courses, I haven’t taken a lot of them. Here are some I would still check out

Side Note 2

Even though I haven’t taken these courses and I know very minimal information about these courses, I think these are bird courses for cs electives.

If you really want β€œeasy” courses:

I haven’t taken them, so I’m not 100% sure they are birdy, but based on the description they seem that way.