Category Archives: Teaching

Teachers make up 15% of Coursera users

Coursera Poll question
According to this Coursera poll question, approximately 15% of its users are teachers and about 9% teach at the college/university level.

I enroll in MOOCs primarily to see what the state of the art is and to pick up ideas I can use in my own teaching. We teachers borrow from each other all the time. Chances are I found that assignment you did was found in another textbook, at a conference, or on some other teacher’s website.


Linux on JavaScript: new horizons in interactive content

busybox in browser

Linux-in-Javascript emulators are very interesting to me. These are stripped-down Linux systems (usually running busybox) running atop a virtual CPU whose emulation engine is written in JavaScript.

It started with the groundbreaking JavaScript PC Emulator by Fabrice Bellard in 2011. His project emulates a 486 processor. Follow that link to see Linux boot right in your browser. It even comes with gcc to compile programs! The first time you boot up it’s pretty slow, but caching by your browser will result in better performance on subsequent boots.

Check out busybox’s own version of Bellard’s emulator with a fully tricked-out busybox executable.

Today I discovered the JOR1K Emulator which uses the OpenRISC 1000 emulator and includes network and graphics frame buffer support. All things considered, it’s very fast, even on an iPhone. Be sure to run the demo.

These emulators would be a great way to introduce novice students to the command line without needing to set up an account on a real Linux system in advance. They could be embedded directly into educational content–picture an online textbook where the student could try commands in the safety of an emulator. With a suitable suspend/resume feature, we could forego the whole “boot” process entirely and simply jump into a working shell.

As I bring more of my classroom content online (the “flipped classroom” model), it has to be more than just “read this chapter” or “watch these videos.” Interactive content is the way to keep students motivated and engaged. Projects like these really get me thinking about the possibilities.

Are physical machines still the better choice?

Dell Optiplex 755This post is a bit of a ramble. My apologies in advance. Just looking for advice, I guess.

If I’m going to dive head-first into producing videos for my upcoming online Introduction to SQL course, plus supplementary “flip-classroom” videos for other courses, I need some horsepower. For screen recording and video editing, I’ve purchased an i7 iMac with Fusion drive and 8GB of RAM. That should be arriving next week and will replace the Mac mini I’ve been using the past year.

For a database, I’ll use the same PostgreSQL backend software that I use for my on-ground class. But since the videos will be publicly accessible on YouTube, I don’t want to use the same server machine. That is, I don’t want the public to see exactly what my students will see, since doing so may pose a bit of a security risk. Consequently, I’ll run the database on a separate machine.

A few options are available:

I have a small Dell Optiplex 620 “Slim Form Factor” machine sitting in a closet. It’s the machine that ran the database for my previous videos already on YouTube. It’s perfectly adequate for basic stuff and it has an Nvidia GT 610 in it for simple CUDA programming, but I’m afraid that if I start working with larger datasets, it may start to creak. The temptation to upgrade to something snappier is looming large.

I could throw together an Intel i3 machine out of parts for about $400. As a plus, I can toss into it a Nvidia GTX 680 I happen to have lying around for bigger CUDA projects.

I could purchase a used, but more current, Optiplex 755 or 780 from Craigslist for about $180, but I wouldn’t be able to put anything larger than the GT 610 into it. Still, it would run the database with ease. I like small machines that I can tuck into an out-of-the-way place.

I suppose I could run the Ubuntu server inside a VirtualBox on the soon-to-be-unused Mac mini. It would be difficult to run the machine headless, though.

But then I think: for $400, I could rent a Linode virtual machine for almost two years! And for the few times I need more oomph, I can temporarily fire up a more capable one for just a few dollars. When I want to do CUDA, just rent an Amazon EC2 GPU machine at 35 cents/hour.

A few years ago I promised myself I’d stop running server hardware and just go virtual. Why am I still thinking about buying new stuff? What is it about spending a few hundred dollars up front that seems better than paying a dozen dollars every month?

Having a local machine means zero latency and no setup necessary when I just want to record a video or two; I can shut it down when I’m done. A virtual machine means setting it up from scratch every time I need to start it up. (Some StackScripts could help with that.) A low-end local machine would satisfy 95% of my needs. A more capable machine would satisfy 100%, but at 2x the expense.

What would you do?

Where is the MOOC train headed? No one knows.

Keith Devlin, a MOOC veteran who has run his Mathematical Thinking course three times, recently attended a conference on MOOC education and research. Kudos for recognizing that online education hasn’t been the domain of tier-one universities.

If you want to see the future of MOOCs, you need to hang around with the instructors in the lesser known, small universities and community colleges who, for many years, have been experimenting with online learning. Most of the leaders of that loosely knit band could be found in a large, cavernous room in Arlington for two days last week – along with key figures from such new-MOOC, Ivy League players as Stanford, MIT, and Georgia Tech.

From The MOOC Express – Less Hype, More Hope.

Sometimes it’s the simplest assignments

It’s the week before finals and I asked my C Programming class for feedback about the semester. We had productive, hour-long discussion in which everyone participated. Among the questions I asked was: which assignment did you like the most?

The answer astonished me: They had to modify a simply program we had written during lecture and add a few features to it, each time committing the changes to a Mercurial repository. When they were done, they were to push the repository to BitBucket where I would inspect the program and give them credit. Easy-peasy.

I invented that assignment at the last moment, just before lab time about two weeks ago, to fill up an hour that would have otherwise gone unused. What I figured it would have taken them about 45 minutes to do in reality took about 90 minutes. They found the assignment more challenging for a variety of reasons:

  • Many of them had used Mercurial or set up a BitBucket repository despite being shown it and given instructions to do so some two weeks prior.
  • They had never modified someone else’s program to add features.
  • They had never thought about coding in an iterative, cyclic fashion: add feature, test it, commit, repeat.

What I thought would be a trivial, almost throwaway assignment turned out for many of them to be the most practical, instructive one of the entire semester. It was not so much about using some particular C language feature that we had just learned; instead it was about the process of programming–using the tools, putting iterative development into practice, and reading third-party code.

I pointed out that in industry, this would likely be what most of their programming would be like: using a VCS and modifying an existing codebase.

It was suggested that I ought to give more assignments like this one. Add features to an existing program. Fix programs with bugs in them. Glue together parts of an incomplete program. They gave me some great ideas for collaborative projects, too.

I always figured that writing programs from scratch were the most instructive. Certainly, they said, there’s a place for that. But it’s a nice break once in awhile to puzzle over someone else’s code.

A preview of my winter break

Although I’m on the Distance Learning committee at my institution, I’m one of only a few faculty on the committee that doesn’t teach an online course. I joined the committee because I have an interest in a) making high-quality online courses available and b) making sure the learning management system (LMS) that we use is suitable for both online and on-ground courses. Myself, I love and crave the classroom experience, but I’m increasingly intrigued by the idea of offering an online course.

The opportunity has come up to take my Introduction to SQL course online. I’ve been hesitant to do so for one primary reason: it’s a lot of work. I would be embarrassed to put up a bunch of links to readings, assignments, tests, and call it good. That is, frankly, a waste of students’ time and money. Unfortunately, it’s what qualifies as an “online course” at many institutions–even my own. If I’m going to make an online class, I’m going to do it right, by golly. That means lots of instructional videos, Socratic-style quizzing, and peer reviewing (when appropriate).

Luckily, there are lots of role models for best practices. I sign up for  Coursera and Udacity courses simply to take a look at how the content is presented. My current favorite course is Programming Languages from Coursera, taught by Dr. Dan Grossman of the University of Washington. I can’t link to an actual video, but here is a screenshot.

Screenshot of Coursera Lecture

Highlights of his presentations:

  • In addition to Powerpoint presentations with a few key points he does lots of live coding on screen. The main window you see there is him typing in programs and running them during the lecture.
  • His face appears in the video. You can see him talking the entire time. This is huge. It’s like he’s talking to me. When there’s nothing else going on in the terminal window or on the slides, I can watch him. When students can see or hear the instructor, they are more engaged successful. I’m not camera shy.
  • The videos are relatively short (5-15 minutes each) with small quizzes scattered throughout. (Udacity rules the roost when it comes to Socratic quizzing, though.) Each week there are about 1.5 hours of videos to watch.
  • Production value is pretty low, to be honest. It’s just a screen, a talking head, and a low-quality microphone. But that’s the state of the art in online education in 2013.

Here’s one of my videos in an attempt to emulate what Grossman does. I think it came out pretty well.

I have also done some videos in the Khan Academy style: disembodied voice with a pen tablet.

My work is cut out for me this winter break. To qualify to teach the course online in the fall, I need to have 25% of the content prepared by March. (We are one of the only institutions that peer-reviews course content before it goes live. The ACCJC accrediting institutions gave us high marks for that.)

I have “new computer” lust. I’ll need a new machine to handle all this video editing, right? Right?

Cheating, round 1


The assignment was to write a C function that trims the newline character off a string, if it is present. The function takes a string as an argument, trims it in place, and returns nothing.

Here’s what one student turned in:

void trim(char *s)
char *tr ( char *s )
  int i = 0;
  int j = strlen ( s ) - 1;
  int k = 0;

  while ( isspace ( s[i] ) && s[i] != '' )

  while ( isspace ( s[j] ) && j >= 0 )

  while ( i <= j )
    s[k++] = s[i++];

  s[k] = '';

  return s;

Announcement to all students: we teachers can use Google, too.

What the $heck?

Did you know the dollar sign ($) is a valid character in a Java variable name? Imagine my surprise when a student showed me the method he wrote. It’s supposed to calculate the amount of tip to leave at a restaurant table.

 * Given the dollar amount of the bill, return 15% tip.
public double tip(double $)
    return $ * 0.15;

I was so sure this was a bug in the IDE that I submitted a bug report. Then I read the Java spec on identifier names.