I’m over halfway through Oregon State University’s post-bacc computer science program. It’s a (mildly) grueling gauntlet of 15 courses, made more grueling by the fact that I’ve been working full-time and taking two-courses a quarter (with an exception made for this past summer when only one course was on the docket to give me some time to get married 🙂 ). To-date, I’ve taken, or am currently taking, the following courses (in no particular order):
- Introduction to Computer Science I
- Introduction to Computer Science II
- Discrete Structures in Computer Science
- Data Structures
- Web Development
- Introduction to Databases
- Computer Architecture & Assembly Language
- Analysis of Algorithms
- Operating Systems (currently in progress)
- Software Engineering I (currently in progress)
And have the following classes in front of me:
- Software Engineering II
- Introduction to Usability Engineering
- Intro to Computer Networks
- Mobile and Cloud Software Development
- Software Projects (Program Capstone)
Like in any program designed to teach a diverse group of students, all with different learning styles and coming from different backgrounds, the course quality and difficulty varies. In my estimation, the most interesting courses have also been what I consider the most difficult ones.
Introduction to Computer Science II was seemingly designed to weed out students that were not strong programmers. The course was heavy on writing code (C++ is the primary language used in OSU’s program and it was heavily featured here) with a focus on object-oriented design patterns.
Discrete Structures in Computer Science likely would have been easier if my algebra and proof writing muscles weren’t so rusty. Once you’re warmed up, however, the course is a fascinating exercise in inductive reasoning and solid introduction to set and graph theory. This course has proved especially helpful as I investigate disciplines related to artificial intelligence which are heavy on the types of symbology you’re introduced to in this class.
Computer Architecture & Assembly Language is a trip. While C++ exposes you to concepts like pointers and memory allocation – things most languages abstract away – assembly is a different beast. Here, you learn to move memory around on the CPU and see how loops, conditional statements, and functions are built from the ground up. You’re also introduced to the fetch, decode, execute cycle that all CISCs utilize. In short, you learn what a computer is and how it does all the beautiful things that we take for granted.
Analysis of Algorithms was, conceptually, the most difficult course in the program. The workload was lighter than Introduction to Computer Science II, but the last time I looked at limits and derivatives was in college. I again found myself going to Khan Academy on the weekends to brush up on calculus, but once the basics were down, it was off to the races. This course was the first one where I felt like a “computer scientist” as the concepts require an abstract way of thinking that goes beyond “just” programming or writing software. Here, you get to see Big-O notation and algorithm analysis, dynamic programming, complexity theory, graph theory and algorithms, and your classical searching and sorting algorithms. The course quality itself leaves something to be desired, but the topics are truly beautiful.
The other courses aren’t “bad”, per se, but they either lack the rigor or depth of the other courses or the organization/lecture/coursework is so poor so as to be distracting. That said, each course has its own nuggets of interesting content, and most importantly, the continued act of solving problems is key to learning how to be a “developer”, “engineer”, “computer scientist” (or whatever you want to call someone that moves bits around at high speeds).
And now I’m into the home stretch! Over the next three quarters I’ll wrap up 7 courses, with the majority of the coursework left (usability engineering, software engineering, cloud computing) all things that are in my wheelhouse. Come August this year, I’ll be the proud owner of a B.S. in C.S. from Oregon State University and moving on to Georgia Tech’s Master’s in C.S. program. The time commitment of this program has been stressful at times, but I wouldn’t trade this experience for anything.