Online Learning Experience at Carnegie Mellon University

Summer well-spent

Feryandi Nurdiantoro
12 min readAug 9, 2020

Being productive in this quarantine time certainly is a dream for the majority of the people. Myself included. One thing that I want to do is expanding my knowledge. Therefore, I consider myself lucky when I got a chance to have three months of learning experience from a university in the United States.

Acknowledging the financial issues that occur due to the coronavirus, ECE (Electrical and Computer Engineering) department of Carnegie Mellon University offers a one-time grant. The grant covers the cost of Summer 2020 courses for the incoming Fall 2020 graduate students.

Obviously, I am very excited.

I see this as an opportunity to get a head start on my master-degree dream. Therefore, I register as fast as I could.

In this short article, I will try to share my online learning experience in one of the world-class universities in the United States. I will start with how I choose the courses, what I learn from that, and finally how the online experience is.

Choosing the Courses

I want this opportunity to be worth my time and energy. Thus, I have to consider it carefully.

No more random classes like when I was in undergraduate study

Moreover, I got only 2 classes that I can choose over four classes available. The available classes to choose is:

18613 — Foundations of Computer Systems
18661 — Intro to Machine Learning for Engineers
18749 — Building Reliable Distributed Systems
18793 — Image and Video Processing

But even with that limitation, I see myself struggling to decide between those choices. Three candidate courses that I want to take are,

  • Foundations of Computer System. It is been a while since I learn the basics of a computer system. I even struggled to remember how to read hexadecimal. So, I think this is the right opportunity to refresh those memories and put them in a cache. Learning how a computer system works certainly will make me a better programmer. It will make me have a better understanding of how things are working.
Hopefully, no more this meme after I took the 18613!
  • Intro to Machine Learning for Engineers. I do really like machine learning. It is an interesting topic in computer science. It also a popular and demanded skill in recent years. However, I have to be honest with myself: I didn’t see myself tweaking hyperparameters or trying a new statistical model soon. I like machine learning as a ‘hobby’. I like to try new things and machine learning is one of them.
  • Building Reliable Distributed Systems. In this interconnected world, a non-distributed system is rare. Moreover, this course is the one that I felt relevant to my current job. I experience first-hand that it is really hard to build a reliable distributed system. Having formal learning on this might be helpful. Knowing what the standards are, how other companies doing so, how a major incident unravel, is really interesting.

In the end, I choose these two courses:

Screenshot from SIO (Student Information Online) website

I almost can’t get the later one because the class is full, and got waitlisted. Fortunately, I got a seat.

Let me breakdown the experience for each of the courses 😁

Foundation to Computer Systems

The course that gives CMU its “Zip”

This course is the master-degree version of the 15–213, a signature course for CMU undergraduates. In this course, students will learn how computer systems work from the ground-up. Opening up hidden realities inside the computer that have been abstracted away for years.

Although I already learned part of this course in my undergraduate study, it feels really good to refresh it after several years. It also makes me understand even more than when I was in undergraduate study.

This particular undergraduate course of mine is heavily based on this lecture. I was so excited looking back at this slide from my undergraduate study! I finally can meet the person named in this slide: Prof. Gregory Kesden.

I choose this course because I believe refreshing my knowledge of how the underlying computer system works is essential. There are many things that I forgot and I took for granted that it just works. Especially, many of the underlying mechanism is abstracted away in the majority of programming languages now.

This class is heavy on its lab assignments. There are 8 lab assignments scattered across 3 months period. These labs are exciting and engaging! Each lab assignment is well-defined and well-structured. It has rigorous testing for the scoring so any defects or bugs in the software almost going to be caught.

Autolab is the system that this course uses to auto-grade the assignments. Every time we submit, it will auto-grade it. It also has a scoreboard for those who are competitive (like me 😛)

Here’s is the summary of each lab:

  • C Programming Lab: this lab is just to make sure that students are having the necessary C programming background to solve all the following labs. The assignment is to implement a queue.
  • Data Lab: this one is about manipulating bit in a way that makes something useful. For example, how to know whether the bits is an even / odd number using only bit-wise operations? We also implemented float to int conversion here.
  • Bomb Lab: my favorite one, in this lab we have to ‘defuse’ the bomb by giving the program the right input. You have to disassemble the binary to know what are those right inputs.
  • Attack Lab: this is a really practical lab if I may say. I’ll learn the security issues that could happen in a running program. After this lab, you’ll know-how stack and function works within the program.
  • Cache Lab: this lab contains two-part: the first assignment is to create a cache simulator, and the second one is to improve matrix operation using the cache. You’ll be amazed at how changing the way we access the data could affect an enormous amount of computer cycle.
  • Malloc Lab: this is “the lab” of this course, looks like everyone is both excited and scared with this one. We have to create a functional memory allocation program, from scratch! This includes maintaining free and allocated memory space, improving memory utilization, and improving throughput. Overall, this is a recommended lab for everyone in computer science!
  • Tsh Lab: process, fork, signals, and file descriptors are the topic of this lab. We have to create a tiny shell with the capability to run a program (foreground and background), maintaining the job list, and do output and input redirection using file descriptor.
  • Proxy Lab: creating a working HTTP GET proxy. This will need an understanding of how networking works in C, how HTTP works, and how to do threading.

Almost every single topic covered in the lecture has its lab (just one that doesn’t: virtual memory). It makes the lecture far more exciting and practical. I learned a lot.

As you might notice, the lecture builds up from the bottom up. It started from bit-level, and go higher in each lecture. Which I think is a nice way to tell stories about how the computer works.

Professor Gregory Kesden is really kind, he will stay up late after class to answer questions. He gave his phone number to the student in case someone wants to ask him questions, and he almost always available in the Zoom for office hour. He also likes to tell random interesting stories. Additionally, he is teaching in his boat! His motto is, he is there to help us succeed with the course. Dedication.

Overall, a really good and well-structured class. Everything has been designed thoughtfully and each lab has its own perfectly-defined learning goal.

Building Reliable Distributed Systems

Design for failure and nothing will fail — “Architecting for the Cloud: Best Practices” by AWS

The class itself is really interesting for me both in the lecture materials and how the lecturer interacts with the students. The distributed system is the main struggle in my current job. It is really hard to create and maintain a reliable system, let alone distributed. I got even more excited when I first join the class. That’s because the lecturer, Professor Priya Narasimhan, is interactive and energetic!

Even though we are 16,000 km (10,000 miles) apart, I can feel how excited she is with the topic. She is really into the distributed systems and loves to be challenged with questions. This is what I learned from this lecture: challenge every part of your system! To be able to make a great distributed system, every single failure and edge cases should be considered properly.

She routinely posts GIF before the lecture via Slack.

She is friendly, therefore students are not afraid to ask questions and challenge her in the lecture. This makes the class interactive and flooded with questions (contrary to what I experienced in my university in Indonesia, where almost one ever asks a question).

Here are some brief materials that we learn:

  • We take a look at how Amazon uses robots to achieve One-day Shipping, and how Netflix capable to serves a gigantic amount of video streaming data.
  • We also take learning from distributed system incidents such as Amazon EC2 failures in 2011, we break down those incident pieces by piece, look on how it happens, and what could be done to prevent it.
  • We learn the idea behind the CAP theorem and how we do the trade-offs.
  • Additionally, we take a look at embedded systems failure incidents.

I’d say this course is really practical, it is close to the industry that even right now, I could apply it to my daily work life.

The “lab” or assignment for this course is to build a reliable distributed fault-tolerant system. Here’s the overall system diagram:

Narasimhan, Priya & Moser, Louise & Melliar-Smith, Peter. (2002). Strongly Consistent Replication and Recovery of Fault-Tolerant CORBA Applications. Comput. Syst. Sci. Eng.. 17. 103–114.

No, we are not implementing all of it, just some parts 😅. With the course time constraint it kind of impossible to built the whole system.

This assignment makes me understand how hard it is to create a reliable and fault-tolerant system. There are so many things that could fail. Everything is going to fail, we have to make sure that we are ready for it.

The Online Experience

There are several tools that CMU uses to make the online experience seamless and interactive. Some of them are well-known in Indonesia, some of them are not.

The Lecture: Zoom

This is my first time doing an online course so I have no expectation. Turns out, it is interactive!

The professor is even more engaging than it normally does in an offline big-class setting. This is because everyone can directly message the professor, this ability makes people more likely to ask questions.

The zoom class for both of my courses (left: 18–613, right: 18–749)

In the distributed system course, the chat panel is flooded by questions and discussion. And, the professor answering each one of them! Even integrate it into the course itself. It feels really good when the professor says your name and answer directly in the class. It makes the class more interactive and interesting.

However, because of the activeness of the student, it can hinder the overall progress of the lecture. Sometimes, it got stuck on one slide for a long time. Not to say that this is not good, the discussion is always good. However, it means that not all the planned lectures might be taught in the session.

The Forum: Piazza, Slack, Zoom

What I don’t like from this online setting is, it is hard to interact with my classmates.

Fortunately, CMU is ready for this online format. They have Piazza for this course. This platform makes questions and answering more interactive, students can add an answer to each other’s answers so the answer will be more complete. Students and lecturers can answer any questions and post information deemed useful in here. Like a StackOverflow for the classroom. This is the first time I use this kind of platform in a classroom setting.

Slack (left) and Piazza (right) are the platforms for communication between instructors and classmates

Not all the courses using this platform. The distributed system course uses Slack as we interact, ask questions, and share content.

Another thing to compensate for this online limitation is online office hours. There is what is called Office Hour with the Teaching Assistant (TA). Every week, we will meet at a Zoom meeting and discuss the lecture or the current lab available that week.

An office hour meeting with the TA

This is new for me, I never got this kind of ‘office hour’ in my undergraduate study. It makes asking questions so much easier, so we can understand more about the course. This office hour is not only provided by TAs but also by the Professor itself! It just not have a fixed schedule like this one.

Yet… I still struggle to make friends here 😂. I think the online format is just not for me, and different timezone makes it even more difficult.

The Classroom: Canvas

Canvas is a platform for an online classroom. It can put modules for each week, create assignments, quizzes, and grading. However, in my experience in both courses, both of the doesn’t use the Canvas to its full capability.

Both courses only use Canvas for doing the mid-term and final exams. For module/lecture slides distribution, 18-613 has its website that could be accessed here, and 18-749 is using Slack to do it.

One not so good experience with this platform happens on the mid-term. Looks like this is the first time they are using Canvas to do the exam. So, they managed to not properly updated the exam to the newest version before the exam starts. Because of that, the answer keys are still incorrect for some of the problems, therefore the auto-graded score is disappointing. But in the end, they could fix that.

The Review: Panopto

Every Zoom class is recorded and uploaded to the platform called Panopto. This a really powerful platform. The website itself optimized for learning.

One of the Panopto recording of the lecture

It is really easy to review the materials using this platform. It has the thumbnails of every slides so I can jump to whatever I feel I need to recall. It also has a discussion tab where every chat in the Zoom is recorded here. The most powerful of all, it can search for certain sentences that the lecturer said in the video. This platform helps me to re-learn and search for certain things that I forgot.

Remarks

Overall, I love the experience. The lecturer has been looking into their students, and make sure that they got the materials well. It doesn’t feel like online learning that you got from Coursera or Udemy. It is felt like a full-time in-person class. Everything prepared with care. I also like how prepared CMU with all of these platforms, although I hope it could be used to its potentials (especially Canvas) and more integrated.

With all of those prepared and done, I still struggled to do online learning. Timezone is the biggest enemy. The time difference is staggering, 12-hours. There is only a 2–4 hours window of optimal direct communication that available every day (around 7–9 AM/PM). Which is for me, not enough.

Another thing is because the summer class happens before the enrollment commitment (which is Fall 2020, or Spring 2021), some of the people still have their full-time job (me included). This makes it hard to do group assignments. Each person has their job, their timezone, and their commitment. It is really hard to coordinate in this situation.

That’s being said. It looks like CMU has been prepared for this online learning setting long before the pandemic. Therefore, the platform is ready to use and there is no meaningful problem at all.

Thank you to CMU ECE for the best three months of the online learning experience I ever had.

To all of the classmates, teaching assistants, and professors: I hope that I can meet you in person, sometimes next year.

--

--