My MOOC Explorations Continue

It’s been a few months since my last post. That’s because I got totally immersed in learning coding, specifically Ruby, far more seriously than I had expected. In the last two months, I got very sick. But now I am back.

First of all, the Capstone Python class on Coursera got postponed from a January start date. It finally started in early April and I have completed it and thus completed the excellent 5-course Python series, taught by Prof. Chuck Severance of the University of Michigan.

While waiting for the Capstone class to start, I stumbled upon the Flatiron School‘s  Learn platform which I really enjoyed and wrote about in my previous blog. In no time I found myself being pulled deeper and deeper into Learn. In February, I formally signed up as a fee-paying online student on Learn and have put in a good amount of time everyday (until I got sick.)

Like many of today’s online teaching / learning platforms, Learn has also been going through continuous changes. So not everything is 100% smooth – but then what is 100% trouble-free in life? The bottom line is: I have learned a tremendous amount through  Learn. I will write about it in my future blogs.

This entry is in response to Learn‘s assignment question: “Why did you decide to learn software development?”

It may be a while before I will call myself a “software developer,” but I am getting to understand what “software development” means. Computer technology permeates our lives, so we should, and we must, gain some basic understanding of how it works. Programming languages are also (surprisingly) interesting – so why not learn some programming? In a previous post, I argued that every teacher should learn to code a little. I have come to believe everybody should learn some programming, because, as Massimo Banzi, the creator of Arduino, succinctly said:

… it’s important to be masters of the technology.”
– Massimo Banzi –


What is the “Ed” in EdX? Part 3

When I was working my way through the exercises in Codecademy and my Coursera class, “Programming for Everyone” (“PR4E”), I often found the instructions to be so densely constructed that they required “translation.” The vast knowledge gap between a beginner and the instructor necessitates that introductory classes should be taught the way math is taught to elementary school kids: Broken down into manageable pieces.

Having completed “PR4E,” I look back at the early assignments and laugh at myself for having to struggle so hard to complete them. But for the most part, my view towards course instructions hasn’t changed. “Hand-holding” (particularly for computer classes) may seem less and less necessary, as kids nowadays come into contact with programming fairly early, either through computer games or formal classes in schools. Nonetheless, programming literacy’s rise is only relative to the level of previous generations, and the need for effective pedagogy remains.

Compared to the tightly constructed exercise instructions in “PR4E,” the instructions in the EdX course, “Computer Science for All” (“CS For All”), seem oddly put together – they resemble the stuff from a messy teenager’s closet, an eclectic pile that hints at an attempt at fashion, but which, in its present configuration, is merely a pile that only its owner appreciates.

The layout for “CS For All” is unintuitive and confusing, which may reflect EdX’s user interface in general and so may not be the fault of those who put together the course. However, the awkward layout/user interface could have been mitigated by a more fluid course flow and clearer instructions. As such, I had a hard time figuring out what’s where and what’s next in “CS For All,” something I did not experience in either of my two Coursera classes.

On Coursera, everything related to a course is clearly laid out on the left-hand side navigation panel. Though courses differ, both of the courses I have taken on Coursera have more or less populated the content areas of the course: Announcements, Syllabus, Lectures, Textbook, Quizzes, Assignments, Discussions, Grades, Course Materials … The navigation bar stays on the screen so that, at any given moment, one can skip to another section (and back) and seamlessly navigate through the various sections. A week before the class was to start, the discussion forum already was busy with self introductions and questions. And there was a real sense of excitement for the start of the course.

In contrast, the navigation panel for “CS For All,” which is also on the left side of the screen, is organized chronologically by week. If one clicks on, say, Week 1, a brief written introduction to the week shows on the right hand side. On the top of that text is a horizontal bar which is a row of clickable icons representing that week’s content:

EdX_1To say the content is organized “thematically” may attribute too much logic to its organization:


Tab 1: “Defining Computer Science”: Here is an excerpt from the textbook. There is a link to the entire textbook – Why they must re-post an excerpt is not clear.

Tab 2: A video: a clip put together by students that is loosely connected to the text in Tab 1 and attempts to cover some basic Python concepts. The narrators in the video are tagged as “PROFESSOR 1” and “PROFESSOR2.” Perhaps Harvey Mudd wanted to empower their undergraduates, but tagging the students as “prof 1” and “prof 2” seems, on the one hand, oddly dehumanizing and, on the other, more like an feeble ego inflation than empowerment. In addition, this section– the first section explaining basic concepts in programming – ought to be treated as a critical page. This is where a learner either gets “hooked” or put off and most professors try to put their best foot forward

But it is not so with this class. In the video, “Professor 1” and “Professor 2” narrate unimpassionately. What’s the purpose of this lecture? How does it connect to the previous readings? How is this related to whatever I will learn next? None of these questions is addressed. If I were to evaluate this page as a college essay, I’d probably give it a “D” for lack of focus.

Tab 3: “Programming and CS”, an excerpt from the textbook, again. I think I am beginning to see a pattern.

Tab 4: “Making Decisions in Code”, which is the very first section on coding. It has a very short explanation and a video.

This is what I am taking this class for, but here the lack of teaching experience is most painfully apparent.

For the introduction to coding (specifically using Python), this course chooses to begin with the concepts of conditional statements called the “if statements.” Had I not already taken “PR4E” and started on Codecademy, I’d be stuck right then and there – with the “if statements.” The “if statements” are rudimentary components of Python, but starting with the “if statements” is like elementary schools’ math lessons start with multiplication. There is nothing wrong with having multiplication as “Lesson 1,” but shouldn’t there be a diagnostic test first?

In “PR4E,” we started with a simple line: “print “Hello world!” When we ran the line of code, the display showed the iconic “Hello World!” and I was delighted. This was a ridiculously easy way to illustrate the “print” function (which is used over and over again when programming in Python). It seems a ubiquitous first practice line for a lot of Python lessons. I suppose someone at Harvey Mudd wanted to try something new, which is commendable, but did they know how to structure a class in an incremental fashion so that all, including those without the very basics, can learn Python from scratch?

If one had any doubt about the lack of pedagogical consideration, the quizz/exercise at the bottom half of the page would settle that question. There is a screenshot of a few lines of simple code, followed by three multiple choice questions. On first glance, a beginner will have no problem answering these seemingly simple questions, “What does the lines on the LEFT print?” Well, one can guess at least three times. But one’s answer is, at best, guesswork.

Why not have students run those lines and see what gets printed? Why not ask students to report the results? Shouldn’t a programming class be heavy with hands-on activities? If those teaching the class are programmers, they should have no problem writing a program that can efficiently check the answers. Has it not occurred to them? Or perhaps they could not for whatever reason. Whether it was due to inexperience or inattention, whoever created the quiz/exercise did not use the opportunity to facilitate a learning experience. Instead, he focused on testing – you know, the sort of thing students (maybe including “Professors 1 & 2”) are typically subjected to.

At this point, I find myself thinking about how to explain the difference between seemingly easy work that is conducive to learning and busy work that is also easy but which kills the sparks of curiosity and is downright demeaning to a learner. “PR4E” had quizzes in the form of multiple choice questions. These quizzes were not hard – most of the answers could be taken straight from the textbook. Yet, it usually takes me two to three times to get all the answers right. Apparently, as closely as I tried to read the textbook and watch the video lectures, some concepts inevitably get skipped over. The quizzes often caught me exactly at those “fuzzy” points (that I didn’t even know were “fuzzy.”) Once I completed a quiz, I could immediately see which answer was right and which was wrong. It never took me long to figure out why something was wrong, but each time I re-took a quiz, I learned something new. So I never felt the quizzes were a waste of time.

The quizzes on “CS For All,” on the other hand, seem to be just quizzes and offered no new learning opportunities. They may be simple, but they are pointless. Scores get uploaded, and there is feedback, but one is left with “so what”?

Both classes allow students to re-do the quizzes. In fact, “PR4E” seems ridiculously generous with quizzes: I could have repeated the quizzes 100 times each (literally!) to get the perfect score. Yet my motivation to do well in these classes is not related to the level of difficulty. When an exercise on “PR4E” got hard – and they did with each passing week, I spent a lot of time in the Discussion Forums, read and carried on back-and-forth discussions with other learners and teaching assistants. Once I completed an assignment, not only did I feel a great sense of accomplishment, but I also knew exactly what had gone wrong with my code – the thrill came from having learned something hard.

“CS For All” only allows students three chances on quizzes. In that sense, “CS For All” is a lot less forgiving and hence appears to be a tougher class. But what good is a tough class if one doesn’t learn much?

Tab 5: “Programming Rock, Paper, Scissors (RPS)”

By this time, I began to see what “Professors 1 & 2” were trying to do: They want to use lines of code as segues to certain concepts. When I saw it this way, I could see the video as a well-intentioned attempt. When I began “PR4E,” I tried to “translate” lines of code into “plain English,” aka “English for the Technically Uninitiated.” I often wished I could see the correct code so I knew what it looked like. So one might assume I’d be delighted to see code shown right away. But what “CS For All” ends up doing with the code is turning it into a quiz. Instead of seeing code as code – or, better yet, seeing coding in action, what a student sees is “the stuff that the test is on.”

The quiz questions reinforce that view. They seem like the kind of questions I, as a learner, might ask as I work my way through lines of code: “Now, what is this?” “What does that do?” But what I say to myself while learning doesn’t translate into teaching tools when transcribed verbatim. The “working-through” process is highly individualized. Each learner has a unique way of walking themselves through a problem. The sequence and timing of their questions relate to – and reveal – each individual’s knowledge gaps. It takes a deep understanding of that process – something that comes from training or experience – to construct a learning path that has something to offer to each learner.

Some of the questions in the quiz might serve to draw a learner’s attention to some key concepts, but shouldn’t that be accomplished in lectures? What’s the purpose of asking students to regurgitate information in a quiz, given the textbook is only one click away?

The quiz questions reek of standardized testing: Only the right answer matters. Some of the quizzes in “CS For All” serve no other purpose than having me, the student, taking a quiz. It is testing for the sake of testing. They also seem to be a bit “off”: if I have grasped the relevant concepts by the time I take the quiz, I will find these questions pointlessly easy. But if I didn’t know how to answer these questions, I probably would not know where to begin, given the lack of clear focus in the class materials.

When I got stuck on an exercise in “PR4E,” I’d trace “my steps” through several lessons, until the problem gets resolved – I usually knew exactly which lecture to go to based on the kind of problem I got stuck on. To teach learners how to learn is one of “PR4E”‘s explicit goals; it also helps that each lecture also had a clear focus.

“CS For All”‘s quizzes, which someone had to come up with, essentially will dead-end in a used-quiz bin waiting for their next iteration to torment another batch of unlucky students foolish enough to take this course. (Oh, I forgot, at Harvey Mudd, this is a required course.)

Another point of confusion for me were the icons on the horizontal bar. It looks as if the tabs are set up for students to go through sequentially, but the reading materials, the videos and the exercises aren’t exactly arranged sequentially with each section reinforcing previous sections. One cannot randomly accessing each tab either, because the content suddenly no longer looks familiar – (What is “Picobot”?) Yet, if it is not set up for “random access,” then one of the advantages of interactive websites would be lost. One might as well use a printed book instead.

In many ways, “PR4E” resembles a traditional classroom, where a professor has tremendous control over the content of the course. Much of the learning begins with a lecture and the assignments. Assignments and quizzes have deadlines – students have weeks to do them, but there are deadlines nonetheless.

As a MOOC, though, “PR4E” offers much more than a traditional class – in terms of broad appeal, access, and pace. As a programming class, it was perfect for online delivery: A “Python Playground” was set up for students to test out their code; assignments and quizzes were submitted online and instantly graded; students were able to switch seamlessly from the textbook, to lectures, to Python Playground, to Discussion Forums – and then return to an assignment and pick up where they left off. Then there are all these incredibly interesting videos that bring these highly technical things (JavaScript, JSON, PHP) to life and contextualize what the class is teaching.

“CS For All” has all the bells and whistles of a MOOC – it has, on appearance, everything “PR4E” has: A PDF copy of the textbook, videos, Discussion Forums, online submission of assignments and quizzes. Yet it feels much more like a traditional course: One starts with some reading, then a “lecture,” followed by assignments, and then reading again… And, like a traditional campus trying to move into the 21st Century, “CS For All” carries all of the baggage of a traditional course, including poor audio and video quality, software malfunction that invalidates students’ submissions, busy work and meaningless tests. Trying to figure out how to navigate “CS For All” is like being dropped in the middle of a strange college town with no preparation and then trying to make sense of what courses to take.

“CS For All” was my first course with EdX, so my critique of one course cannot be generalized to the entire EdX platform. But one cannot help but wonder what kind of quality assurance measures EdX has in place, both to ensure decent user experience and, well, to ensure there is “ed” in

If traditional institutions were to compete for their piece in the MOOC universe, it behooves them to remember that, like in traditional universities, sometimes one course can make or break a student’s education. If one reads through the posts on “CS For All,” one sees very similar complaints to what I have. Ask people on Coursera about their experiences with EdX, many who have taken EdX courses have similar reactions as mine to my first EdX course.

My experience with “CS For All” may be an anomaly, but undoubtedly MOOC platforms will sooner or later develop their own flavors as well as reputations. Likewise, institutions’ reputations will be affected by the quality of their delivery of MOOCs. (Take note, Harvey Mudd!)

If a MOOC is to endure, it must figure out the pedagogy piece – the quality part of the pedagogy piece. That begins with the professor(s).

Graphics are based on originals from:


The “Five Minute University”: Parody or Prophecy?

This short video (25 years old!), in which “Father Guido Sarducci” pitches ideas for his “Five Minute University,” may first come across as pure comedy. But, for people interested in higher education innovation, it offers a timely and poignant critique which is strangely resonant with the development of MOOCs. As MOOCs gradually establish their presence on the global education landscape, Father Guido Sarducci’s Five Minute University remains both an apt parody and a clarion warning.

Still loopy, but mostly (MOOCs-ly) from joy

So I have completely finished all the lecture videos, reading assignments, exercises, quizzes, and just about all the additional materials for my Coursera class, “Programming for Everybody” (“PR4E”). The last task is the final exam, which will take place several weeks from now.

This has not been an easy class. I literally clawed (and crawled, and chewed…) my way through every single line of code I learned. Even while I was finishing the very last assignment, I had to revisit some basic steps in creating a “for-loop”,  Python lingo for iteration processes. Yet I finished, at least the regular portion of the class.Congrat1

Dr. Chuck Severance concludes his last video lecture with animated scenes of sparks/fireworks flying. He then raises his coffee mug for a toast (of tea) to his massive number of off-screen students. And he puts on his academic mortar board to signal the completion of the course.

Celebration is indeed in order, as far as I am concerned. This course was an unexpected delight. Granted, I am the “E” in “PR4E”, the expressed audience for this course – someone who started from scratch. Still, I had some trepidation about my chance of success with the course. Even though I had done a few basic exercises on Codecademy, when I started, “functions” and “variables” were not exactly clearly defined concepts, so I was perhaps at the equivalent of a first grader level – smack in the middle of the demographic pool of “everybody.”Congrat2

Yet, despite all the frustrations and late night work, I feel I have understood the basic Python after eight weeks with this class. Will I be able to make a living as a Python programmer? Not likely – I can probably learn Swahili faster in the same amount of time. Yet, as Massimi Banzi said in his interview with Dr. Chuck Severance, “it’s important to be the masters of the technology.” I’d like to think I took my first step in that direction.Congrat3

Learning is empowering in itself. Learning a technology that has claimed a corner in practically every aspect of one’s life goes beyond feeling empowered: It puts one into the driver’s seat with a key. I now have a key, a tiny one (maybe a mailbox key), but I earned it – well, technically, I will have earned it when I pass the final exam. And soon I must find ways to use my key.

PS – The concluding scenes in Dr. Chuck Severance last lecture offered a very nice, personable touch, but I couldn’t help but being reminded of “Father Guido Sarducci’s Five Minute University.” In all fairness, though, this Coursera MOOC class is nothing like the “Five-Minute University”, aside from the 10-second fireworks simulation, the two-minute mortarboard graduation simulation, and the toast delivered virtually, replete with tea and a travel mug. Of course, in a week or so, I might just find another minute and take another programming class!


The Joy of discovering a Rube Goldberg of Coding

Even though I am in the midst of my Python class on Coursera, I still occasionally return to Codecademy to review the exercises I have done there, starting with the one I got stuck on. I couldn’t wait for the moment when I have learned enough on “Programming for Everyone” on Coursera to make sense of what stymied me on Codecademy. Today, it happened.

Codecademy’s Python lessons devote two units to “lists” and “dictionaries”, Python’s terms for its ways of handling groups of items. Unit #2, titled “A Day at the Supermarket” is where I got stuck. The introduction to Exercise #4, “Lists + Functions,” gives an example of the type of code expected. Now that I have gotten a bit more familiar with the basic syntax of Python, I was struck by how odd the example looked.

Here’s the original example – by the way, no programming background is needed to understand what I am talking about. How the code looks is just as revealing:

def count_small(numbers):
     total = 0
     for n in numbers:
          if n < 10:Culinary
                  total = total + 1
return total

lost = [4, 8, 15, 16, 23, 42]
small = count_small(lost)
print small

My first reaction was that I still didn’t quite get it. But I have gotten stuck plenty of times doing my Coursera exercises, and I have learned a number of diagnostic techniques (so far only primitive ones). So I took a closer look. What I concluded was this code was unnecessarily convoluted. Whoever created this exercise took a Rube Goldberg approach totom-waiter_PBJ teaching coding: It’s like someone wanting to teach “mind-body connection” by teaching sandwich-making. Sandwich-making may be a very important skill, but is not necessarily the best skill for illustrating the  “mind-body connection.” In addition, this person decided to begin the sandwich-making lesson by teaching knife skills, then skillet skills, all for the purpose of making a peanut and butter sandwich.

So I decided to go straight for my PB&J. I wrote a few lines of code and was actually surprised that my code also worked (tested it on “Python Playground” (part of the perks for the Coursera class). This is my code:

PBJ-1lost = [4, 8, 15, 16, 23, 42]
count = 0
for num in lost:
     if num < 10:
          count = count + 1
print count

The output for both code is identical: Python is asked to find out how many numbers in the list are smaller than 10. The output is “2”. If the creator of the exercise had intended to teach the concepts of “lists” and “functions”, those concepts are not used appropriately and end up, instead, confusing learners. Given the numerous exasperated requests for help, confusion and frustration abound, at least for this exercise on Codecademy.

This poorly constructed exercise may have been an extreme example, an anomaly, but it nonetheless shows the important role of pedagogy, or the downside of lacking a pedagogy. Everyone has the ability to teach, but not everyone can teach equally well. With training and guidance, however, most people can become better teachers. That’s precisely where the traditional educational institutions still maintain their advantage.

I do not know whether Codecademy trains its course creators or what kind of structure it has in place for quality control. But when I compare my experiences with Codecademy and Coursera, the traditional, structured class with an experienced professor wins, hands down. True, one can easily argue that comparing Codecademy with Coursera is like the proverbial comparison between apples and oranges. But if emerging online learning platforms were to challenge the traditional institutions for online delivery, pedagogy cannot be ignored, though it is often overshadowed by the stratospheric value placed on technology itself.

Of course, just because an online class is offered by a traditional institution and taught by a bonafide professor does not guarantee the presence of any pedagogy. Programming for Everyone is an exceptional class precisely because of its instructional quality.

I figure I am perhaps in the bottom half of all the students in this Coursera class in terms of coding skills. For me to be able to write an “alternate” code for a Codecademy exercise is no small achievement – all based on seven weeks’ worth of one MOOC class. THIS truly says something about the quality (and potential) of a (fairly) well-organized MOOC class, as opposed to an emerging platform, such as Codecademy, where quality seems to be uneven.

Still, for me, Codecademy is special: Because of it, I began learning Python; learning on Codecademy led me to my current Python class on Coursera. All considered, Codecademy, as well as MOOCs like it, has a unique place in learning. Knife skills aside, I have my PB&J, and that’s what matters.