Discussion forum for David Beazley

How I am offering courses online

As most people know, my Chicago courses have only been offered in-person. There are many reasons for that–the main one being that I believe the best teaching outcomes are obtained by having a small group of people together in one place, focused on one thing. This leads to group discussions, surprise discoveries, and unexpected connections. I have taught for many years in a variety of settings (university classrooms, corporate training, virtual training, etc.). By far, I think the small in-person group is the best format of all. People are often surprised when I tell them that I try to cap courses at just 6 participants.

The COVID-19 outbreak has forced me to think about what it might look like to offer my courses online. Is it even possible? Or practical? I know for certain that I don’t want to be in the position of trying to offer a MOOC with hundreds (or forbid 1000s) of participants (e.g., an online version of a traditional university course). My courses just aren’t structured in a way where one would simply sit back and watch lectures or live-demos. Plus, I wouldn’t be able to offer useful code review, debugging assistance, or other sorts of things with a large group like that. Instead, I view classes more of a process of group exploration and problem solving. No two classes are exactly the same. Everyone brings their own experience to the table. You often never know exactly where you’re going to end up. I like that.

So, with that in mind, I’m going to get my first chance to try an online version of one of my project courses with upcoming run of Write a Compiler. Here’s my plan…

  • The group size will remain small. Instead of 6 people, I’m going to limit it to 12. An even dozen. It’s a good round number. Divisible by 2, 3, 4, and 6.

  • The course is going to be structured around a single shared group GitHub project. Each participant will work in their own personal subdirectory, but otherwise everyone will be on the same master branch of the same project. This approach allows me to see everyone’s code (i.e., walk around the room) and offer code review. It also allows everyone else to see everyone else’s code (i.e., look over someone else’s shoulder). Writing a compiler is hard. There are many ways of doing things. This will make it possible to share ideas and fix bugs (e.g. “oh neat, I didn’t think of doing it like that”, “I think this is a bug”, etc.).

  • I’m using the GitHub Issue Tracker for organized technical discussion. In some sense, it’s perfectly designed for this. A specific topic can be raised as an issue (e.g., “how do I implement operator precedence?”). Discussion can then follow on just that issue. Frankly, I like this idea much better than what I’ve experienced with a Slack channel (which is usually just unorganized chaos). Issues are great for getting help with tricky coding problems too. Stuck? Raise an issue. Since everyone can see all code, everyone can jump in and put their eyes on it.

  • I’m using the GitHub Wiki to organize course handouts and other materials. Bonus: It’s easy to edit and make corrections as we go.

  • I’m using Gitter as a free-form group chat channel.

  • I’m using Zoom for any live presentation/live coding demos. I might use it for chat as well (instead of Gitter). I’ll have to see how that plays out. There is a lot of time where I’m not actively presenting during a course. So, maybe Gitter makes a bit more sense.

  • I will record any kind of live presentation and make it available on a private Vimeo channel shortly after the fact (note: I have previously used Vimeo for corporate training material). I might also pre-record lectures and make them available before the fact. There is an inherent challenge with time-zones. Should a course be exclusively conducted on Chicago time or not? Can it work if people view presentations at different times? What about live coding? I don’t know.

Ultimately, I think the key will be to see if people can stay engaged and have useful discussion–not to mention completion of the project. Given the project-oriented nature of compilers, I think the GitHub approach can definitely work as long as everyone buys into the ground rules (working from the same repo, helping each other out, raising issues, etc.). But, like most things, it’s an experiment. I’ll report back in a week!

I’d also like to hear your ideas…

1 Like

One other thought… the shared GitHub repository serves as a kind of permanent record for what happened during the course. People could refer to it later and it would still (hopefully) be useful.

Out of curiosity. Have you considered https://zulipchat.com/ which has more structured conversations. I used it briefly and it seems interesting.

I haven’t used Zulip, but I have used Slack. Honestly, I’m not sure I’d want too much in the way of structured conversations outside of GitHub. I’d prefer to have the structured conversations anchored off a GitHub issue. It seems like that would be more “archival” in nature and easier to revisit later–even after the course has ended.

1 Like

The Pandemic will alter the way courses are taught. I prefer in class teaching for many didactic reasons. I teach at Columbia U grad school, and also at hacker schools like GA and Corporate Training so I get different perspectives. RIght now all my courses are via Zoom , github, jupyter notebooks, R notebooks and slack. Everyone works from a main branch clone. Zoom organises the class into groups. Some important things: Assign a co-host; don’t assume everyone has admin rights to their laptop for collab working ; two screens are better than one for code alongs while viewing. Soory I can’t be there but I out in some time writing three commercial compilers. Best JP

Fortunately, I am working with a small group so I think the organizational aspect of it will be a bit easier (fingers crossed). Plus, no notebooks! ;-).

Will you think about also offering Computer Science course?
And, why don’t like the notebooks for teaching?

The Computer Science course can’t be offered online because it involves a lot of hands-on work involving hardware.

As for notebooks, that’s a complicated story… as a general rule, I’m not a big fan of notebooks for work or for teaching. However, I realize that some people find them useful. So, I’d probably just leave it at that (of course, in relation to the current course, I’m not really sure how I’d write a compiler in the form of a notebook).

Well, the compilers course is over. Just thought I’d make a few comments about the experience.

For the most part, I stuck to the plan I described initially. Just a few general refinements:

  1. I prerecorded all lecture segments and made them available in advance. I don’t know if this was effective or not, but the compilers course has never been strongly based around lectures. Instead, this prepared presentation was more of an “introductory overview” of what we would be doing in each part.

  2. Live taught portions were more about specific aspects of the project, coding, and group discussion. The topics and Q&A were much more open ended. I also recorded these sessions and uploaded them to the course page shortly thereafter. I didn’t record absolutely everything though–there were a lot of extended periods where we were just coding on stuff and not much discussion was happening.

  3. We didn’t use Gitter chat. Zoom chat was used for some general Q&A throughout the course, but most technical Q&A went to GitHub issues (which was my preference).

  4. I ended up having everyone create their own branch and their own directory within the central course GitHub repo. This allowed everyone to work independently in their own place without having to fight a bunch of merge conflicts. I think it worked pretty well. Also, as an instructor, it was easy for me to go to the GitHub website, switch branches, and look at anyone’s code. This proved to be rather useful for debugging.

  5. Limiting participation to less than 12 people seems like a good call. It’d be hard to manage conversation and the live sessions with any more. Also, I think code review/debugging would get too complicated.

In terms of overall project progress, we reached the same end-point as in past in-person compiler courses. It doesn’t appear that running the course online slowed down or accelerated the course in any appreciable way that I could tell. I’d probably need more data to know.

Now, I just need to refine it all a bit in preparation for the upcoming Raft course.

1 Like

Glad to hear it went well! I use zoom, github and slack as required at the hacker school and at university. One of the things I find is that esp for longer classes video becomes boring if I only just lecture and students code along with me. So, I applied what I learned in Ed. School . Present the information for about 12 minutes; pause, ask a question or two using gallery view on zoom then set them off into a team room for a little while and do pair programming. Then come back and resume. It takes much more planning than teaching in class. At least, that is my experience.

We all use github and it works just fine, but it takes a while to teach pull requests, push and have them be comfortable. So, I have to prep the classes most of the time on this. Not everyone is a systems programmer or big project developer who depend on version control daily. Your adult learners may vary from mine.

I try to stay away form technology that seems to be a novelty du jour. There’s too much going on, and I don’t want things interfering with the courses or my time.
Stay well.
John

@dave, can you please tell me if the ‘Advanced Python’ or the ‘Raft’ course will be conducted online any time soon?

Hi Vish,

Both courses will likely run in the May/June timeframe.

Cheers,
Dave

Thank you Dave! Meanwhile, can you please recommend any sources which will give me a solid grounding in python concurrency?

Course dates have been posted for May/June (now online). Advanced Python, May 18-22, 2020. Raft, June 1-5, 2020.

As for concurrency, there are many resources. However, you can find a complete slide-deck for the “Python Concurrency and Distributed Systems Workshop” that I used to teach posted here: https://speakerdeck.com/dabeaz/python-concurrency-and-distributed-computing-workshop

Nice! Can you please give me some idea of the kind of projects that will be done in the Advanced Python course? Also, I am in IST - what will be the class timings? Thank you!