Recently I've been toying with this idea about radically changing the way I approach teaching Programming. This is based on some of the discussions from the #duke21c class I'm taking with Cathy Davidson, and have all culminated in this bizarre idea of mine to make a MOOC.
It all started with me telling the class why I think blogs are more fun to read than E-books. Part of it comes from their real-time nature, making them distinct from books, frozen forever in time, but part of them has to do with the tone: blogs are rough around the edges, representing a series of snapshots that draw graph showing the evolution of the author's ideas and beliefs. Unlike a book, which is generally written from the point of view of an author telling the reader what is important to think, I really prefer seeing how the author builds that set of beliefs of what is important through their own experiences, so I can see for myself how an expert reacted to challenges and developed a mindset from that.
I fundamentally believe that the difference between a novice and an expert is that an expert knows what information is worth paying attention to and what needs to be tuned out.
Lots of times, when we get busy writing programs, we often forget that the languages we are using were designed by experts to address specific problems. In other words, whenever we use a programming language to solve a problem, we are solving it from the perspective of the person who designed it and in the contexts of the problems that they designed their language to solve. This is kind of a big deal, since my goal in teaching students how to program isn't to have them leaving my class knowing a language, but leaving the classroom knowing how a programmer approaches problems that they face. These problems have changed as the discipline of Computer Science has evolved, and the syntactical constructs of the languages illustrate that, from the way that C programs allocate memory to the way that Go programs make use of multi-core processors.
So where does the MOOC come in?
Well, I'm a big fan of retro computer games - especially the name that became a household brand in the 80s and 90s - the original Nintendo Entertainment System. That was the happiest box of fun I ever had, and now that I'm a programmer, I can appreciate the way the box works. How much RAM does your Computer have? 3 MB? 4? The NES had an astounding 2KB of RAM. The video games that were produced were developed by programmers who can only be called artists for being able to create works like The Legend of Zelda given these limitations. My peers ask me "why I would ever want to artificially constrain myself" by developing for this platform. I respond by telling them that in the 80s, it wasn't artificial. Young computer scientists need to understand and respect the history of our craft in order to appreciate the freedom they have with modern systems.
So I'm making something I call #8bitmooc. As the name implies, it's a MOOC being developed to teach people about programming the NES. I believe the only way to truly know what it was like to be in that time period is to try to solve problems using those tools. So while it is a class that involves programming, it is not a "programming class". In fact, it's a history class. It's a class that teaches a dead language. And I think that's a great way to spin it.
If you're interested in the project, I'm keeping a blog at 8bitmooc.org, and the entire project is open source and being developed on GitHub. If you have any ideas, please don't hesitate to let me know what you think. I'll follow up with a more "design"-oriented blog post explaining how the course will work on a functional level, but I just feel like being handwavy and talking about my grandoise vision for the future. :)