Brief Review of BYU’s Computer Science Program#

Overall#

Since this was my first degree, I don’t have any other experience to compare BYU to. However, I will say that I rarely felt challenged, possibly because many of the classes were outdated. Additionally, there aren’t many opportunities for specialization within the program. I would have liked to focus more on systems, security, and networking, but there really weren’t any more classes I could take in those areas.

The professors were great overall! Of course there were a few who I didn’t like as much as others, but that’s to be expected.

Classes#

CS 142 - Introduction to Computer Programming#

Instructor: Online section

C++ probably isn’t the best choice for a first programming language for a class like this. Oh well, still an important foundational class. I wish I had taken a challenge exam instead of the class- would have saved some time.

CS 224 - Introduction to Computer Systems#

Instructor: Frank Jones

This was definitely one of my favorite classes. The lectures are interesting and the labs are a lot of fun. Some highlights include the bomb lab, the attack lab, writing an assembler for the y86 educational CPU architecture, and learning CPU pipelining techniques.

CS 235 - Data Structures#

Instructor: Jacob Crandall

This is supposed to be a weed out class but I thought it was the very easiest class in the CS program. Throughout the class, you’ll implement various data structures in C++. Brush up on pointers and get familiar with gdb and valgrind before taking this class!

CS 236 - Discrete Structure#

Instructur: Brett Decker

Projects are pretty fun, other content is pretty boring. The projects build on each other, so make sure you don’t get behind. They also don’t line up terribly well with the lecture material, so don’t be afraid to work ahead. The professor described the projects as “your first opportunity to write a whole bunch of code that actually does something”, which is true.

CS 240 - Advanced Programming Concepts#

Instructor: Ken Rodham

Way overhyped. Super easy. This is the prerequisite for all the upper level classes. I got permission to take it at the same time as CS 236, which was a smart move. You’ll learn Java and build an Android family history app with a REST backend. I wish the project was something more useful, but alas. You also have to take a programming test mid-semester where you have 3(?) hours to do an entire lab. You automatically fail the class if you don’t finish in time. This sounds daunting, but for reference, I finished in about 20 minutes.

CS 252 - Theory of Computation#

Instructor: Dennis Ng

Boring! I put this class off until my second-to-last semester even though it’s more of a foundational class. Pretty much everyone else was in 200-level classes.

CS 260 - Web Programming#

Instructor: Daniel Zappala

Quick easy 3 credits. You’ll learn Vue, Express, MongoDB, and do a bunch of creative projects that are pretty simple. Since it’s such a marketable skill, I found it useful to take this class early on in my CS program career. It helps you build a portfolio and add skills to your resume.

CS 312 - Algorithm Design and Analysis#

Instructor: Dan Ventura

Rough semester, could have tried harder but decided to focus on other classes. Some of the projects for this class were pretty intense. At the end, you have to research a fancy algorithm of your choice and implement it as a solution to the Traveling Salesperson Problem. Be careful to get your work done early- there’s a zero late work policy!

CS 324 - Systems Programming#

Instructor: Kent Seamons

Super easy for someone with Linux experience. There’s a huge focus on Linux system calls and how to use them practically. Highlights include building a multithreaded HTTP proxy with epoll and a DNS stub resolver.

CS 340 - Software Design#

Instructor: Jerod Wilkerson

Huge mess when I took it, but I’ve heard they improved it since then. Very unimpressed with the professor.

CS 345 - Operating Systems Design#

Instructor: Paul Roper

One of my favorites. Very hard projects but extremely rewarding to see your own OS come to life. All the labs are available online before taking the class, so I got a head start and did the first 2 labs before the semester even started. I would highly recommend doing this!

CS 401R - Blockchain#

Instructor: Kent Seamons

Dr. Seamons is a great professor and did a fantastic job teaching this class. The title implies that the class is really about blockchain, but in reality we pretty much only talked about cryptocurrency. It would have been nice to focus more on other things you can do with blockchain.

CS 404 - Ethics and Computers in Society#

Instructor: Darin Gates

I completely forgot that I even took this class until writing this post. Minimal effort. It’s a requirement for all CS majors, but it’s only 2 credits so it’s super easy.

CS 460 - Computer Communications and Networking#

Instructor: Casey Deccio

Another one of my favorites. Dr. Deccio is incredible! The content is far more practical than most CS classes, which is enjoyable. Throughout the semester, you implement an entire network stack from the ground up. If you have experience writing kernel code, that’ll come in very handy.

CS 465 - Computer Security#

Instructor: Fred Clift

This was my favorite class at BYU. I was a TA for the class a year after taking it. The first half of the class focuses on cryptography, while the second half takes on more of an applied security approach to modern problems. Some highlights include implementing AES from scratch, implementing a message extension attack, and performing a buffer overflow attack.

The truth is that a lot of the things taught in this class are very foundational. I wish BYU had more security classes. However, it was still a very enjoyable class.

IT&C 567 - Cybersecurity and Penetration Testing#

Instructor: Kyle Fletcher

Not the most organized but still good experience. Pretty easy for a CS student. Most of the class was from the IT program, and they had a much more difficult time understanding the low-level inner workings of the projects we worked on.

Math 485 - Mathematical Cryptography#

Instructor: Rodney Forcade

The professor was a funny old guy and the class was ridiculously easy. I am pretty sure he was just too lazy to assign homework for the second half of the semester. The final was all true/false questions that I could have answered before even taking the class.