Challenge: CS162 in 1 Week

Ever since I wrote my first program, I’ve been interested in computer systems and computer programming. One thing that I felt was missing from my computer knowledge was that deeper understanding of computers. At university I had only taken subjects relating to Algorithms, Data Structures and Problem Solving, but never things like Computer Architecture, Networking or Operating Systems.

Recently, I embarked on a mission to solve this problem.

Outline

  1. What Was the Challenge?
  2. Why did I decide to do this?
  3. What did I learn?
  4. What would I do differently?
  5. Should you do this?

What Was the Challenge?

In order to learn these missing pieces of my computer knowledge, I decided to go through the entirety of CS162 in a single week. CS162 is an ~18 week course on Operating Systems offered at the University of Berkeley. Completing this course would give me a great understanding of how Operating Systems work and give me a deeper insight into what happens when I run various programs.

Fortunately for me, the course materials and lectures are all available for free online (course material, lectures).

I was aiming to complete this course during the last week of my university holidays. That is, an 18 week course in only 1 week. This was going to happen with a few constraints

  1. I don’t need to complete the projects
  2. I will sit the final exam on the last Sunday of the week

Motivation

In order to really motivate myself, I created a contract with my brother. The contract stated that I was to sit the final exam on Sunday the 26th of July and if I didn’t achieve a passing mark (50%), then I would donate a sum of money to charity. If I didn’t sit the exam at all then I would need to pay an even bigger sum.

I don’t suggest this motivation technique for everything but it definitely has it’s place. For me, I knew that having this social pressure to learn would help me to learn much more over the week than I would have if I just tried to learn on my own. There are some sites that will do this for you automatically like Beeminder

Why did I decide to do this?

The first and most obvious reason of why I did this is that I have a high level of interest in learning, and I thought that learning about Operating Systems would be both useful and interesting. Interesing in the sense that I would have a better understanding of computers and useful in that when I begin my first job at ANZ next year, I’d love to get involved with some programming there. My idea is that having background like this will make it easier to learn new tools and to have a much more well rounded view of computer systems.

Another reason why I wanted to try this was to see how much I could learn in a week. I recently read the book “Ultralearning” by Scott Young. A few years ago, Scott undertook what he calls the MIT Challenge. He did an entire MIT 4 year degree both in one year, and using material available for free online.

This inspired me to also undertake something similar. I’ve got a massive stack of online courses that I want to do some day, but this presented a great opportunity to try one out and see how I’d go.

What did I learn?

So now on to the actual fun stuff, what did I actually learn. Well to put it simply, the course and learning didn’t pan out like I had expected.

I began the first few days by reading the relevant text books for the course and taking notes. This strategy was working really well in terms of learning, but not so well in terms of speed. In order to get through the course, I’d have to go through much quicker.

At this point I changed tack and began watching the lectures on 2x speed. This was a fairly decent strategy, however as I got closer to the end, I realised I was still going to fall short of watching all the lectures. 26 lectures at 1:30 each takes quite a while! (Surprisingly 3x speed didn’t really help me that much).

So in the end I realistically made my way about 50% of the way through the course.

I successfully learnt about things like:

  • Kernel Abstraction
  • Dual Mode Operation
  • OS Scheduling techniques
  • The fork() method
  • Locks
  • Process and Threads
  • Virtualisation of memory

These things are super interesting and I am very happy I spent the time learning them.

What would I do differently?

In hindsight there are a few things that I would change.

Obviously the main problem that I encountered was that I wanted to get through the entire course in the week and I didn’t manage to do that. I don’t think that came down to the amount of work specifically, I think the mistakes were mostly down to a lack of awareness and planning.

My initial stages of reading the textbooks rather than watching lectures was a good initial strategy, but I also think the lectures provided adequate explanations and were more time efficient. If I had this challenge again, I’d stick to the lectures where possible and only use the textbook for further clarification when needed.

I also think I didn’t plan for this as well as I could have. I underestimated the amount of work I would have to do and perhaps started a bit too confident in my learning abilities. One thing I would do next time would be to plan ahead more. Me spending 4-6 hours a days trying to learn meant I could only get through so much material in a day, when in reality, I had a lot to get through and need to spend more time if I was going to get through everything.

Should you do this?

Overall I think this experience was worthwhile. While I didn’t complete the course like I had imagined, I still focussed more than I would have had it not been for the challenge. Sometimes when you have a week to do nothing, the week can quickly fade into a slump week. I am very happy that my week had purpose and I was able to gain something from it.

It’s unrealistic to expect a full time employee to commit a week of solid work to a course like this. I am really lucky to be in university and to have this free time. It’s much more likely that someone would undertake these courses in their spare time after work or on weekends. I think that while learning is good, it’s also important to have something to show for it. One thing I would recommend is to make sure you use the course to create something, be that a blog post like this or a project that you can create that will showcase your understanding of the topic. Without this, your new knowledge isn’t as useful.

Online learning is something that will become much more common in the future, and it’s amazing that we have such resources like MITOCW and these courses from Berkeley available for free. I’d highly recommend finding something that interests you and diving in. Also be careful though about window shopping for courses. Sometimes you can feel like you are learning when you are just finding lists of courses to try one day. It’s important to remember that the actual work comes in doing the course, not just looking at the outside or watching the intro videos.

Even if it’s not this specific course that I took, I think using your free time to learn new things is a great idea. I am really happy about what I learnt during this week and no doubt will be sitting through some more online courses in the future.