Sunday, March 31, 2013

Coursera Review: Intro to Computer Networks

I recently finished my first Coursera class, Introduction to Computer Networks.  This was a 10 week long class, and I spent approximately 3-4 hours per week on it.  If you are thinking of taking a Coursera class, and this one in particular, then read on...


The Platform

This is the first full class I've taken on Coursera, and the experience is great.  The classes are laid out in a clear and consistent way, and it's easy to find the lectures, homework, and assignments and quickly see what you have to do.  I also really enjoy the way they set up the lectures - they are broken up into 10-20 minute sections, with multiple choice questions in the middle of each lecture to keep you engaged and make sure that you are understanding the material.

Another critical feature for me was the ability to adjust the playback speed of the videos.  I ended up watching all of the lectures at 1.5x speed, which allowed me to get through the material much more quickly while still absorbing the content.  This shaved close to an hour off the weekly time commitment, which was a big deal for me.

The one logistical SNAFU that bit me was related to the mid-term.  There was one email saying that it was posted, and as a result of some travelling and other distractions I completely forgot about it.  I was so used to clicking on the "homework" tab that I didn't bother to check the "exams" tab to see if there was work due.  The lectures were strictly related to the subject matter (for this class) so there were no reminders from the professor about it.  As a result I missed the deadline, although I was able to turn it in late for 75% credit.  This ended up being just a minor annoyance, since the grade in this class is meaningless.  My goal was always to learn, so simply being able to take the test was enough.

The Content

I took this class because I wanted to get a deeper understanding of the networking infrastructure that underpins the internet, and get more background on different protocols and standards that are in use today.  In this respect, the class was disappointing.  The class was designed to cover a lot of ground at a high level, which meant that I learned a broad set of things, but in a few cases the subjects/protocols that I wanted to learn about in detail (e.g. SPDY) were only allocated 5-10 minutes of one lecture.  In hindsight this makes sense given the scope of the class, but it wasn't really what I was looking for.

The class used a customized reference model, as opposed to the often cited OSI model.  We went through five layers, starting at the bottom and working our way up:




Because of my physics background I found the physical layer to be compelling - the lectures about translating electromagnetic signals into bits on the wire tied a few things together for me and gave me a more holistic understanding of what is really going on inside networks.

The link and network layers were fun to learn about, but weren't particularly relevant to my day to day work.  The most valuable parts of those two layers for me were discussions around routing, and specifically BGP.

Then we got into the transport and application layers, which is what most software/performance engineers care about.  We covered a number of topics:

  • TCP/UDP including slow start and congestion control
  • DNS
  • HTTP
  • CDNs
  • QOS and traffic shaping
  • Network security, including message confidentiality, firewalls, VPNs, and DDOS attacks.  
I learned a little bit about each of these things, but I felt like I already had enough high level knowledge about these topics that the incremental value added by the class was fairly low.  Granted, I decided not to buy the textbook, which would have enabled me to dive deeper into the topics that I cared about.  I just have a hard time spending over $100 for a textbook that accompanies a free online course, especially when all of the material in the text can be found quite easily on the web.  

Should You Take It?

If you are someone who is considering a career as a network engineer, and you feel like you didn't get a chance to take a decent intro to networking class in college, then I think you could get a lot out of this course.  If, however, you are a software engineer that simply wants to learn more about the structure of networks and networking protocols, then this class might end up being a fairly inefficient way for you to get that information.  After skimming some of the pre-release content for High Performance Browser Networking, I think that book will end up being a much better resource for software engineers that want to beef up their networking knowledge.  I'm looking forward to the final release of that book, and I plan on writing a review that compares it to this class.