For my first semester at Georgia Tech, I wanted to take two courses that were well-reviewed, challenging, and introduced me to new concepts but that also played to my strengths. The first two months of the semester were bound to be hectic as I balanced gracefully leaving my full-time job of the past 6+ years with starting OMSCS. With that in mind, I ended up taking both of the operating systems courses GT offers online students.

Fortunately, there was only some overlap between the two courses and once I was a full time student my schedule made it easy to cram on the sort of “presumed knowledge” that Advanced Operating Systems (AOS) assumed was rattling around in my brain. There is also a “refresher” course that I would strongly recommend going through if you’re taking this course without GIOS. It’s possible to complete in a weekend and the first week of the course is a perfect time to cram this in. Going through this refresher and honing in on areas of weakness had the added bonus of forcing me to learn topics that pushed me ahead of the curve in a few areas in GIOS, but not so many to make that course redundant.

Similar to GIOS, the course professor (Umakishore Ramachandran) provided excellent lectures with a well-structured course, but was largely absent from managing the day-to-day of the class. While the TA’s in this course were less active than in GIOS, they still capably managed all forum questions and were readily available in Slack. There are four projects (one of which is essentially a warmup for the last project) and two tests. The projects are manageable if you have C/C++ skills, and I found the tests to be easier than those in GIOS (more memorization on these tests and less applied concepts).

As a number of reviews for CS6210 on OMSCentral note, this is the closest to a distributed systems course in OMSCS and the topics reflect that. Most of the course focuses on virtualization and distributed communication/resource sharing all in the context of operating systems developed in the last 30-40 years. There are a ridiculous number of assigned papers (about 45 total, each averaging 20-25 pages in length) and it’s easy to question the efficacy of reading a paper from 1978, but it’s worth the effort. In many ways, this is representative of computer systems. Each paper includes nuggets of brilliance from dozens of systems that represent foundational concepts and truisms that have stood the test of time.

My favorite parts of the course included:

  • The readings/lectures on real-time multimedia processing opened my eyes to persistent temporal streams. These concepts form the underpinning of the so-called “large-scale situational awareness” applications, which is really just a fancy way of saying “Big Brother.” I also really enjoyed the discussion of global memory systems, distributed shared memory, and distributed file systems. If, like me, you’re taking this course because of the distributed systems content, then these papers and lectures should be your bread and butter.
  • The last project and set of lectures before the midterm were focused on inter-machine communication and synchronization between nodes in a cluster. These had us read/watch lectures on several seminal algorithms (sense reversing barrier, tree barrier, tournament barrier, and dissemination barrier) and then implement them using OpenMP and OpenMPI.
  • The final project of the semester is supposedly one of the largest solo projects in OMSCS. It requires that you implement all of the orchestration involved in a MapReduce framework, using gRPC as the remote procedure call API. You’re given a great starting point, and after I spent about a day grokking the project it was actually relatively easy and fun. I had the benefit of implementing a DFS in gRPC while taking GIOS alongside this course, however, which was a huge help.

Taking this course in conjunction with GIOS provided a great introduction to OMSCS on a number of levels. These two courses are the cream of the crop in the computing systems specialization (especially now that intro to high performance computing is only intermittently offered) and solidified my understanding of common operating system abstractions and distributed systems in use today. Slogging through the average week of a half-dozen papers and hours of lectures on operating systems drives home the foundational data structures, algorithms, and common-sense approaches found in implementing computer systems. This is truly where the rubber meets the road in computer science.

Georgia Tech’s Graduate Introduction to Operating Systems (GIOS), a thorough review of the core concepts behind operating systems, came highly recommended by way of OMSCentral and it did not disappoint. The lectures (delivered through Udacity) are well-structured and concise, the projects are enjoyable and go beyond the normal client/server projects in an undergrad OS course, and the course TAs and community are key to making this a top-notch experience. In summary, if you have decent C/C++ experience and either have not taken an operating systems course before or it’s been quite some time since you looked at these dinos, then I’d strongly recommend signing up for CS6200.

Ada Gavrilovska is the course professor, but most of your interactions (asking questions about projects, tests, readings, etc.) are with her teaching assistants. Fortunately, one of the fun parts of OMSCS is that most students and TAs are full-time employees themselves. This means that while the course is driven by TAs, these folks have real-world experience to bring to the table, usually from similar areas of practice.

Continue Reading A GT OMSCS Course Review – Graduate Introduction to Operating Systems (CS6200)

My first day with LexBlog was sometime in August of 2008. The previous summer I worked at a Hastings (a now, mostly defunct retail chain for movies, books, video games, CDs, and okay coffee), my last retail job. LexBlog, by way of Colin O’Keefe, provided me a route to take the first steps in my career with a part-time editorial position. I began by working on their content aggregator, LexMonitor, covering the work of the largest law firms in the country.

Fast forward eleven years and LexMonitor is a thing of the past at LexBlog, as am I.

On September 26th I walked out of a WeWork in downtown Seattle on what would be my last long walk home after a day at LexBlog. The walk was about five miles, something I’d done countless of times since moving to Seattle in 2013 to work for LexBlog full-time. It was a walk reserved for thinking through especially hard problems or after a long night (and sometimes early morning) of work. This time, it was a walk into a new branch of my personal and professional life.

Continue Reading A Full-Time Student

My morning routine is sacrosanct. Every day, I wake up at the same time, drink the exact same amount of coffee (which is usually just a little too much), take the same bus, and settle into work. I find a great deal of comfort in this routine, which is why the lack of shock to my system over the month of August was itself quite a shock.  On Sunday, July 28th, my wife and I flew up to Anchorage, Alaska and settled in a small Airbnb on the outskirts of town.

This was not a permanent move; in fact I’m already back in Seattle. Our time in Anchorage was limited to a month as Sarah wrapped up a rotation at the Alaska Native Medical Center (ANMC). While her routine was shockingly similar (which is to say, “brutal” – residency is no joke), mine was very different. Gone was the morning commute to the office. My french press had to stay at home, and the view from my office became dominated by a forest filled with vegetation and the occasional moose.

Case in point – a mother and her calf waltzing through our ward 

Other than the change of scenery and slight shift in daily routine, however, my work life remained the same. I may move around, but our platform’s infrastructure and tooling could care less about where my laptop is opened so long as my logins are valid.

Continue Reading Working Remotely in Anchorage, Alaska

I do not own a desktop computer and have not for nearly seven years. Before that, my primary computer was a Dell desktop that my parents bought me as a college graduation present that I augmented with a small notebook computer (at a time when such small laptops were just a novelty).

Even without a desktop computer, my life is full of peripheral devices. Laptops these days are so powerful that most can easily accommodate an additional monitor (if not two), and working in this way usually requires a detached keyboard and mouse.

Today, my mouse’s batteries died. Unlike my keyboard, which is solar powered, my mouse runs on rechargeable batteries, and I often forget to recharge them. When I do, I’m left with just my laptop’s trackpad and a sense of frustration.

Continue Reading Technology Advances; the World Remains the Same

This summer, I’ll wrap up a computer science degree from Oregon State University. The experience has been rewarding, difficult, and incredibly eye-opening.

After the first quarter at OSU, I was not sure that the program was for me. While learning C++ was a nice wrinkle, the “Introduction to Programming” courses that served as my welcome were underwhelming. In hindsight, this perspective makes sense as someone that was coming in with years of experience managing and delivering web projects for large clients with large expectations. Learning the structure of for loops, classes, and a brief dalliance into recursion was not really what I had signed up for. However, after the fourth quarter I was trying to plot a path to continue my education far beyond the 15 courses that were required to get another bachelor’s.

It wasn’t the fact that OSU continued to underwhelm that drove me to look beyond the program – quite the opposite. OSU provided a window into a world that I didn’t know existed. It’s fair to say that two years ago I did not know what a computer science degree entailed or what it prepared you for. Two years later and I can’t imagine a world where I don’t continue to explore the field.

Continue Reading Finishing One Degree; Starting Another

Before I dive in, I should note that this post was written as LexBlog hits its fifteenth birthday. It’s been my pleasure to work in the Seattle offices at LexBlog for over 6 years. So much of that pleasure stems from truly enjoying the people that work here and overcoming the challenges we face on a regular basis. Here’s to another fifteen for a great company of great people.

There’s a line in Fight Club that I love that comes to mind when thinking about my favorite memories at LexBlog:

You met me at a very strange time in my life.

Narrator 

https://youtu.be/UkgP0od6iSE?t=23


Continue Reading Overcoming the Trough of Sorrow

I rarely look at C while at the office. In many ways, it’s a language of a bygone era, especially when you’re talking about web application development. Sure, we take advantage of C every day, but write in it? Never.

However, I’ve become fairly proficient in it these past two years and have grown to appreciate the language for what it is: Blazing fast and fine-tuned for several specific use-cases. Unlike JavaScript (my language of choice while at work), C does not come with dozens of associated frameworks that come and go on a moment’s notice. It also doesn’t split its time between the hard logic of an application and managing the user interface. In many ways, C runs the world of computers around us without us even knowing.

The story behind C is the most interesting part of the language. Written in the late 60’s and launched into production around 1972/1973, C was born from necessity. In the late 60’s, Dennis Ritchie and Ken Thompson decided to write an operating system for the PDP-11, Unix (pictured above – it’s the size of a huge refrigerator and it’s processing power isn’t even close to the power of my phone).


Continue Reading Give Me A Language That Doesn’t Change – A Brief History of C

I have a great fondness for journalism. The industry, the people, the organizations — it’s all fascinating and vitally important. My political and philosophical leanings lead me to believe that the tradition of having an independent and empowered Fourth Estate is key to a functioning democracy.  Even in the absence of my politics and philosophies, reading the news is fun. I enjoy reading about the experiences of people I’ve never met going to places I’ve never been. How odd.

So to hear that the profession is dying, shrinking, or changing for the worse, and to listen to the narrative get increasingly louder is cause for some concern.


Continue Reading The Changing Winds of Journalism

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)


Continue Reading Over Halfway Through Oregon State’s Post-Bacc Computer Science Program