I’m making an effort to freshen up and improve my data skills so when I found out that two of my friends were going to take an R class on Coursera, I joined them. The class is pretty typical for an online programming class: each week there are a set of lectures to watch, a quiz to take, and a programming exercise to do. In addition to this, we also have a weekly Google Hangout to discuss the lectures, go over our programs, and share our R questions.
I realize we’re still at the dawn of online education but it feels as if the class has simply been moved from the classroom to the web, without any thought as to how the class can be structured to make the best use of the web. So far, the Google Hangout paired with the programming exercises is the most valuable. The programming exercises provide the structure and the Google Hangouts help us absorb the material better. We are able to share our solutions, analyze the pros and cons of the different approaches, and by explaining why we solved them a certain way we end up understanding the material better ourselves. Why can’t online classes be designed to take advantage of this? I understand that not everyone has someone to take a class with and yet having a partner provides a big benefit.
These online programming classes should take a lesson from Project Euler. Project Euler is a series of puzzles that require both a mathematical and programming insight to solve. The brilliance is that they have forums for each problem that you can only access after solving the problem. But once you gain access, you can see other solutions, learn from them, and pick up tricks and approaches that you’ll need to solve future problems.
Pairing the structure provided by a class with this Project Euler community would create better online programming classes than we have now. My ideal online programming class would have the following structure:
- No video lectures. The content can be better presented through text and visuals and helps people work on it at their own pace.
- Each lesson would be focused on a particular problem. Start by describing a problem and then spend time going over different ways of thinking about it as well as the different tools available. This should be as interactive as possible where students can follow along by running the code on their own computer.
- Limited time spent on defining terms. People are sitting in front of the computer and can do a search on Google or Stackoverflow to get more and better definitions than can be covered in a class.
- Leveraging the volume of people taking the class. When you have thousands of people taking a single class you can do things that you just wouldn’t be able to do normally. For example, you can analyze people’s programming solutions to see which solutions are the most common, which run the quickest, or which are the shortest. Having that information available to students would be much better than just getting a numerical score.
This approach isn’t for everyone but that’s the point. Moving online will give us the ability to have classes custom tailored for each student but we need to start by thinking about building classes for the web from scratch rather than copying them from the classroom.