Arduino (H)appiness!

So Santa brought me an Arduino UNO – a perfect toy for a programmer-electronic gadget-wiz wanna-be. All the fun in one tiny package!

My kit came with various configurations and all the necessary parts needed to make things happen, such as dimming an LED bulb or connected a photo sensor to control the dimmer. In the video clip below, my Arduino was reading and reporting temperatures in real time.

Sure I followed the diagram laid out in the little booklet that came with the kit; sure all the parts have been supplied and calculations done for me ahead of time. It was extremely gratifying nonetheless – like when I first knitted a hat, or sewed a pouch, or swapped out a computer hard drive for a bigger one.

Arduino – It does things!

Wish every school kid could have one.

Having fun with my #arduino – it's reading and reporting temperatures!

A video posted by Yumei Leventhal (@ymidtownl) on


My On-going Coding Adventure

For me, learning to code is like hiking in the Shenandoah mountains. In this case, my brain gets a robust cardio exercise, and, instead of the occasional satisfaction being rewarded with a sweeping view of the valleys, I get a peek, now and then, at the vast landscape of coding. In these moments, while I feel completely dwarfed by the vast knowledge gap that I know I’ll never be able to  traverse, I cannot help but try to find encouragement in Massimo Banzi’s words that “it’s important to be masters of technology”.

I have enrolled in another Coursera class with Dr. Chuck, which I thoroughly enjoy. But I have reached the point where Coursera doesn’t move quite as fast or efficiently as I would like. Instead of waiting for the next part of the Coursera class to begin, I have started to explore other paths to learn coding.

My most recent exploration to me to the Flatiron School, which led me to explore GitHub,, and Nitrous — I know putting these in one sentence is like co-mingling the Library of Congress with the College Board and QuizLet, but, hey, that’s the nature of exploration, isn’t it? One path leads to another, and so far, it’s been fun – almost as interesting as hiking in the Shenandoah Mountains.

Besides, it’s not like I have figured out GitHub or Nitrous. For that matter: vs CodeSchool == UMich vs UMass? GitHub and Nitrous: Do I need learn both? I thought I was learning Python and then suddenly I’m trying to figure out Nitrous – What is Nitrous anyways? All of these sidetracks will lead me back to Python, right?

Code Tree-bkgrnd

Me want code!


How to get over MOOCs addiction: Experience a MOOC-platform-in-confusion

I finished a Coursera class, “Programming for Everybody” (“PR4E”), got my “Verified Certificate” and felt energized about learning coding. So I decided to continue with MOOCs.

My first attempt, taking “Computer Science for All” (“CS4All”) on EdX didn’t go too well (see my “What is the ‘Ed’ in Edx?” posts ). So I returned to Coursera and enrolled in “Internet History, Technology and Security” (“IHTS”, also taught by Dr. Chuck Severance. That was a “self-paced” course (more on that later) and I finished it in a few weeks. “IHTS”, a historical overview of the evolution of the Internet, was different from “PR4E”, which was a more hands-on type of class. I was not exactly sure how much I could learn from “IHTS”, but the class turned out to be really interesting. I learned a lot of the history of the Internet and was surprised, and impressed, that Dr. Chuck managed to explicate the complicated concepts of web security and someone like me actually could appreciate the simplicity and elegance of it all.

When “IHTS” was finished, I knew I was developing MOOCs addiction.I knew it must be an addiction because I was not willing to change it. Instead, I went ahead to take another one: A series of courses that Coursera refers to as “Specialization”: “Python for Everybody”, taught by Dr. Chuck. It consists of four courses and a capstone projects. Since I recently completed “PR4E”, I received the credit (money and grades) for that course and only need to complete and pass the work needed for courses #3, #4 and the capstone project. I thought I was addicted for sure now that I am getting deeper and deeper into Python and programming.

Turned out: I need not worry: Coursera, which got me into taking MOOCs classes in the first place, is about to cure me of my addiction. Unexpected hassles began from the moment I signed up for the course. Coursera apparently did an overhaul of its platform – I got emails to that effect, though from the look of it, I could not tell what had been changed. My first problem was actually paying for the course – Coursera would not let me: I click “Enroll” and “Pay”, the screen gets stuck in a loop. It took me over a week, and a link from a Teaching Assistant, to pay for the course.

As soon as I got into “Python for Everybody”, I knew it felt different: What I once most loved about Coursera classes – the intuitive and seamless navigation – suddenly disappeared. The “new” look felt very much like EdX  – or EdX-like. It is clumsy and not as intuitive as before. The Discussions forum, which was easy to navigate and follow, now suddenly becomes a maze – occasionally it disappears from view for a day or two. For me to find what I have posted (and what responses I have received) requires many clicks – it used to be one or two. It seems everything requires a few more clicks to get to – each time I want to access the course materials, I must click to dismiss the announcement that this is a “new format”. After a while, it gets annoying.

While I was willing to give the new look a chance to grow on me, I was less than pleased to find myself unable to get into a course which I have paid for. Writing to Coursera gets no response – but it’s only been a few days.

The Chinese has a saying which is roughly “the broth that the food was cooked in makes the best remedy for digestion” (原汤化原食 ) . I have concluded that Coursera is dispensing the very remedy for MOOCs addiction, perhaps intentionally. After all, why would anyone mess around with a good thing?



Notification for the certificate came in around midnight. Nice! Thank you, Dr. Chuck and your crew!
Coursera pythonlearn 2015 certificate


Why places such as Codecademy are important to learning

Having completed one MOOC, “Programming for Everyone” (“PR4E”), and dropped another, “Computer Science for All” (“CS 4 All”), I returned to my half-completed lessons on Codecademy.

I must say that I have developed a renewed appreciation for Codecademy. Codecademy may be limited in what it can do at the moment, but what Codecademy does do puts a spotlight on an important – but much neglected – aspect to learning. That is: learning through unstructured play (also known as “having fun”).

www.openclipart.orgThe idea of learning through play is nothing new, but often the frequency of play decreases as a learner advances academically. Even in many elementary schools, play time is specialized time – and only involves physical play. The more “grown-up” and self-disciplined one is, the less play there is in their learning. For those who insist on continuing to play (and learn), there are very few opportunities other than instructor-created, task-specific playful activities tailored towards testing. By the time one graduates from high school, one is so conditioned by the high-bound attitude towards learning that one no longer knows how to learn through play or create alternative ways of learning that bring joy and satisfaction. Those who are familiar with the work of Georgi Lozanov will immediately understand the importance of play in adult learning.

Codecademy has created a unique playground for learning coding. Granted it does not confer degrees – neither does it carry with it the implicit or explicit burdens inherent in traditional approaches to adult learning.

As I previously wrote, I would not have taken “PR4E” if it wasn’t for Codecademy. On Codecademy, I had a chance to play with coding. www.openclipart.orgTrue, there are no tests, no homework, nor deadlines; there is no limit to the number of attempts for an exercise, and there is no obligation to progress or complete. However, by “play,” I mean more than the absence of all of these “markers” of progress – I am talking about the sense of having a blank canvas, of having no practical purpose to the specific learning activity, of feeling the thrill of uncertainty over the outcome(s) (or the lack thereof) in the activity, and of experiencing the satisfaction of having successfully completed tasks of one’s choosing.

In my case, learning to code was a whimsical decision. Had I attended a “real” class, I might have had to explain to the professor and classmates (as well as myself) why I wanted to learn coding. With Codecademy, I didn’t have to justify my learning. It was pure play. Yet, through a few well structured lessons, Codecademy whetted my appetite. I got my first taste of coding and it was good. I enjoyed the activities and felt I might have a chance to succeed with harder challenges. So I wanted to see if I could advance to higher levels.

In the context of traditional education, the idea of “fun” exists in tandem with those of “easy” and “not serious” – “fun” certainly does not describe something where one learns deeply. Compared to a traditional college’s Computer Science 101 class, my Codecademy lessons are indeed easy. Had I stopped with Codecademy, one might be justified in viewing Codecademy as a fun but light-weight place where one merely dabbles in coding.

Instead, Codecademy led me to move on to more serious undertakings which I otherwise would not have done. Having completed an instructor-led class, “PR4E” and then abandoned “CS4All,” I have come back, in a spiral fashion, to Codecademy and found myself appreciating it as a serious enrichment place. I credit Codecademy for framing my learning experience in such a way that made further learning not only possible, but desirable.

In that sense, using the word “fun” to characterize my experience on Codecademy obscures its dead-serious philosophical underpinning articulated in Codecademy’s “self description“: “We are rethinking education from the bottom up.”

To paraphrase: Learning on Codecademy is driven by learners.

In my case, I set the speed and the topic. Codecademy was both a playground and a testing ground. In fact, when I started, I had no idea that I would end up learning Python. The short, well-designed, hands-on introductory lessons in HTML and CSS got me “hooked.” When I finished with those, I was intrigued enough to want to continue playing. When lessons got more difficult and it became obvious that additional knowledge was needed, I determined (perhaps erroneously) that I should learn Python. My path to Python was drawn out through a process of discovery, as a byproduct of my learning activities. It came from my own need to learn. Throughout the whole process of trying out different programming units on Codecademy, I continued having fun.

On first glance, Codecademy may seem dwarfed by MOOCs backed by established educational institutions. Such an image has its roots as much in how and what Codecademy offers a learner as how the deeply ingrained notion of “place of learning” plays against an upstart in a new medium.

Compared to “PR4E,” Codecademy’s lack the richness and rigor one associates with a good “class”. In the absence of achievement markers, such as quizzes, exams, or verbal confirmation from a teacher, one is not sure just how much one has learned (or whether what one has learned amounts to anything at all).

But I am cognizant of my own bias – gauging Codecademy’s lessons by the high bar set by “PR4E”, an exceptional MOOC with an excellent, experienced professor (let’s not forget the low bar set by EdX’s “CS4All.”) Besides, my point of reference is largely anchored in the traditional courses punctuated by tests, exams and other stress-inducing activities that we call milestones. While the rational side of my brain recognizes Codecademy’s innovative approach to learning, the other side tends to retreat to the more tangible way of gauging learning (including the use of tests). As I advanced on Codecademy and the quality of some of the lessons dropped precipitously, combined with an absence of help, I turned something closer to a traditional classroom, first a class on Coursera  and later on EdX.

In retrospect, though, Codecademy played a critical role in my learning – and it continues to do so. In fact, aside from hobbies, I cannot recall the last time I learned anything that gave me this much fun and satisfaction.

This second time around, Codecademy’s lesson structure, consistent across all units, makes me feel that I have returned to a familiar place. Unfortunately, the Python lesson I got stuck on remains familiarly impenetrable to me; even the newly posted comments and complaints echo what I have seen – so the poorly produced portions of the course materials remain on Codecademy, perhaps never to be retooled, refined, or revamped. But Codecademy is not the first place of learning to have problems such as this – every educational institution has a few such classes that are the bane of its students’ existence, and how many have been held accountable?ball and rim

Years ago, while driving, I saw a lone young teenager shooting hoops, mid-day, under a hot summer sun. In the
short time I waited for the traffic lights to change, he made shot after shot, picking up the ball after each attempt. The hoop-less ring was mounted on an old backboard. I remember feeling moved by the single-minded dedication of the kid. Thinking of him now, I hope the kid grew up to become a basketball star. I hope he found other playgrounds throughout his years in school to practice whatever caught his fancy. I hope that his community at least kept that rusty old backboard and the court for other kids to play. It was not a perfect basketball court, but it was there.

Adult learners, too, benefit from having an intellectual playground. We also need to recognize the importance of such playgrounds in our continued intellectual growth. For that reason, I hope other Codecademies will emerge so that we all can experience the fun that comes from learning through play.


My First Virtual Graduation

Dr. Chuck Severance, who teaches the Coursera class, “Programming for Everyonegraduation02” (“PR4E”), worked his magic again. This time, it’s a virtual a graduation ceremony, replete with “Pomp and Circumstance,” a keynote speaker, handshaking, and “handing out” a certificate. Dr. Chuck Severance held up the certificate (rolled up and tied with a ribbon) so close to the recording camera that it looked as if it was touching my computer screen.

The keynote speaker, Kurt Bonk – that is his real name(!), gave a graduation speech with references to Sir Ken Robinson’s book and his “PCs” – passion, purpose, persistence, playfulness, choice, commitment, connection, and completion – and a congratulation to the virtual students.

For a college professor, this struck me as very funny and evoked the image of the “Five Minute University.” But in all seriousness, “PR4E” has been a tremendous class for me. I feel I have learned an awful lot and it inspired me to want to learn more. So I’d rather not draw an analogy between the “Five Minute University” and the “PR4E” graduation ceremony aside from the humor in both.

Instead, in the spirit of playfulness and in honor of the formal conclusion of “PR4E,” I will attempt to speak in code. So, pardon my broken Python:

def MOOC(x):
ffff while MOOC(x) == “available and free” and length MOOC() <== 5:
ffffffffff print: “Take a MOOC class.”
MOOCs = [“Codecademy”, “Coursera”, “EdX”, “etc”]
ffffffor course in MOOCs:
fffffffffif course == “learning”:
ffffffffffffffprint “Good choice of class!”
ffffffffffffffprint “Good luck next time!”

ffffffor learning in MOOCs:

fffffffffif learning = learning +1
ffffffffffffffprint “You are learning! Keep it up!”

fffffffffffffftry “MOOC1” == “MOOC2”:
ffffffffffffffexcept: print “Take the better of the two.”
print “If you don’t success the first time, try, try again!”
try MOOC == “PR4E + 1”:
except: continue

print “How about ‘History of the Internet’ – People say it’s good.”

I know there is an infinite loop in there (the “while” line looks awfully suspicious). But hopefully the limiter “< == 5” works or else I’ll need to learn magic tricks next.



Kids, Math, MOOCs, and Online Learning

Put people in one room and make them learn the same things and it will instantly become clear how different we are as individuals in how we learn, what we learn, what we are willing to learn, and how fast (or slow) we learn.

Obviously when individuals are motivated – for whatever reason, they will work their hardest to figure out solutions to problems. Conversely, when students disengage – for whatever reason, then they may not perform well, however easy the tasks.

One of the more “tricky” challenges for a teacher is to strike the right balance between continuously challenging students and knowing when to step in with instruction and guidance. This applies to almost all levels of instruction – and perhaps is the most fundamental challenge for classroom instruction today. For that reason, MOOCs have come closest to transform the traditional classroom as we know it.

Years ago, I was drafted as a parent-volunteer for a first grade classroom. The young teacher asked me to assist with three or four boys needing help solving addition problems using numbers 1 through 5. The teacher gave me her teaching “tools,” a handful of small, colorful plastic cubes that could be connected or snapped apart to illustrate the concept of addition. Following her instructions, I proceeded to go through the exercise questions with the boys, connecting and disconnecting the cubes for each question.

The boys were slow to respond. They were also quiet and disinterested. After we finished a few of the exercises, I began to feel for the teacher who had to deal with these kids that had no ability to do such simple addition problems. I thought of my own kids and thought of what they could do and how they learned math.

That was when it dawned on me. I asked the kids: Do you do math at home with your mom and dad? They all nodded. Can you do math problems with big numbers? They all nodded again.

So I wrote an addition problem with three-digit numbers. The boys gave me an instantaneous answer – the correct answer. I did a few more similarly “difficult” problems and saw their faces gradually become animated.

At the end of the period, I reported what happened to the teacher. She thanked me, but never invited me back again. From time to time, I think of those kids and hope that they were lucky enough later on to get, at a minimum, a teacher who did not bore them.

Those of us in education are familiar with the concept of “differentiated instruction.” It is a very appealing concept as it promises to address issues similar to what I encountered in the first grade classroom. In practice, however, “differentiated instruction” is not easy to achieve, especially if a teacher has multiple classes, and, worse yet, multiple subjects to teach. It also takes personally knowing the students, as well as training, for a teacher to provide appropriate and effective levels of challenge to the students. And of course putting standardized testing in the mix complicates the matter even further.

For all the reasons above, I have high hopes for MOOCs – not because they provide global access to education, or bring the much-needed funds to an institution, but because of how MOOCs could potentially transform the classroom – and teaching.

MOOCs’ potential transformative power has not always been viewed as positive. It is still common for traditionalists to bemoan how the Internet undermines learning: All the answers can be found on the Internet, so cheating is easier than ever. Many teachers rely on in-class tests to avoid cheating outside the classroom. From there, people deduce that cheating must be rampant with online classes. Such an assumption seems reasonable, especially since testing in MOOCs is completely different from the traditional classroom. Quizzes and exams are often not timed. Students often can take a quiz multiple times with the best score registered. Conceivably, one can cheat, if one has no moral qualms about cheating after signing a pledge to be honest.

Having experienced several MOOCs, I have learned something different. For starters, things aren’t as clear-cut as one might think when it comes to online classes. University of Michigan’s “Programming for Everyone” (“PR4E”) on Coursera taught me that there are ways to manage assignments and testing to maximize learning, while still allowing for assessment. Much depends on how the class is set up. nirvana_1

Earlier, I have written at length about “PR4E.” Quizzes for “PR4E” focus on the lecture and reading materials – decent in-class note-taking and memorization would secure a passing grade in most traditional intro-level classes. But, as I have written, quizzes for “PR4E” were structured in such a way that they seem to complement both the lectures and reading materials (at least for me). The quiz questions are also well written – I did not find any idiotic questions where I had to resort to random guesswork. Most importantly, knowing I could re-take the quizzes, I never needed to prepare ahead of time for taking a quiz. If I had not completely understood a concept, I usually ended up answering a couple of questions wrong. For me, most of the time, I immediately realized what the mistake was – and was glad to have another chance. If I didn’t understand a question, which was rare, I was able to go back to the right section in the book to find the answer. On top of it, errors due to careless clicking did not result in penalty.

At this point, one might conclude that this class was way too easy – how can you gauge student learning with quizzes like that? Well, as good as the quizzes were at testing my learning from the lectures and the book, they made up a very small part of what I did for “PR4E.” Converting the concepts from the lectures and textbook took place through doing the exercises. After each exercise, I truly felt that I owned the knowledge. “PR4E” exercises had none of the baggage of testing, yet afforded incredible learning opportunities.

“PR4E” assigned progressively more difficult exercises, which were provided weeks ahead and could be completed as many times as possible before the deadline. While quizzes never took me more than 10 minutes each time, I spent hours trying to figure out a solution to some exercises (which, in the end, often consisted of only a few lines of code).

Often, to find the solution, I had to resort to both the Internet as well as the Discussion Forums for the class. At the beginning, I was able to piece the information together and then wrote the code. Halfway through the class, that was no longer sufficient. Having all the “answers” was not sufficient: Syntax errors, such as a missing a punctuation mark or an indent, could often result in “bad code” that one could not detect by straight copying. It took a lot of reading on the Discussion Forums to fix whatever the problem was. It took several such exercises for me to totally grasp some basic (but very important) concepts, such as the function of indents in Python – only afterwards did I appreciate the emphasis and clarity of the professor’s lectures on the topic.

I am no stranger to the concept of peer editing, collaborative learning, recursive progression, or U Chicago’s spiral curriculum in math education. Yet, it was in an open online class that I experienced all of that. Between the tips in the Discussion Forums and my own need to clarify concepts, I went back and forth between the lecture videos, textbooks, and the various assignments. With each iteration, what I had learned got reinforced, clarified, and consolidated.

One might argue that, if I am that kind of goodie-two-shoes student, I would have done the same thing regardless of the instructional platform. That may be true, assuming a class is taught as well as “PR4E.” However, I can’t imagine myself enrolling in a traditional college class to learn Python just for fun – the logistics alone would be a formidable barrier. Having been a part of “PR4E,” a truly “massive” MOOC (presumably 150,000+ strong), also meant being part of a considerable cohort of fellow learners. If only a fraction of them are regulars on the Discussion Forums, the forums become active places.

Was “PR4E” easy? Not at all. There were plenty of exasperated people halfway through the class (myself included from time to time). Yet the class provided just enough entry-level steps that I was able to “hop on board.” Along the way, there was just enough supplementary support from the Discussion Forums to make me feel that solution was around the corner and I should keep going. Perhaps the most critical piece came from the professor: Even when working on seemingly impossible problems, I knew that all the concepts had been covered by either the lectures or the book – all were accessible at any time. Of course, a newbie like me had a lot of ground to cover. Even when I understood all the concepts, I was not able to translate my understanding to lines of working code. But that’s when the generous time allotted to each exercise and the impressively active Discussion Forums – unique MOOCs assets – became invaluable.

As I have said, “PR4E” is an exceptional class. It may not be perfect and certainly cannot be perfect for everybody, but it gave me a taste of what a good MOOC class is like. Many of the fellow learners enrolled in “PR4E” were way more advanced than I was – I know because, based on their announcements, some completed assignments in less than half the time it took me. People asked for more challenging classes to followup on “PR4E,” but to my knowledge, no one was bored out of their mind like those first graders I met. And if anyone was bored, they could drop that class and take a more advanced one – other classes are just a click away. Let’s just hope they are all as well organized and managed as Coursera’s “PR4E.”


Video: Dr. Chuck’s Interview with Douglas Crockford, developer and popularizer of JSON

The last of the enrichment videos from “Programming for Everyone” (“PR4E”): Dr. Chuck Severance interviews Douglas Crockford on his involvement in developing JavaScript Object Notation (JSON).

“PR4E” has introduced me to quite a few of these interview videos. All of the people interviewed were instrumental in the development of the Internet. Their work not only shaped the Internet, but shaped how users eventually would interact with the Internet. I am always shocked each time by how important these people are to my relationship with the Internet – and with computer technology in general. Yet their names are not household names, and uniformly they are humble people with no ego and no interest in self-aggrandizing.

Douglas Crockford emphatically and repeatedly stated that he was not the inventor of JSON: “… I don’t claim to have invented (JSON) …. (and) don’t claim to have discovered it.” Crockford simply saw its potential, had a vision, worked on it, made it into a standard, and remained actively involved in its development – sound close to an inventor in my mind.

Like the others in Dr. Chuck’s interviews, Crockford seems to be solidly grounded in reality, with a clear understanding of the bigger historical picture as well as his own “small” role in that big picture. “Amazing” is the word that keeps popping up in my mind as I watch this and the other videos.

All of those interviewed by Dr. Chuck must have a lot of accomplishments to their names, but the most distinct trait they share – and this likely reflects Dr. Chuck Severance’s own perspective and affected his choice of people for his interviews – is how each of them transformed what is highly technical into something that ordinary people can access. Empowering the ordinary person to participate and contribute seems to be the refrain. Crockford tried to “simplify (Javascript) as much as possible.”

JSON (JavaScript Object Notation) took a while to gain wide acceptance, partly because it was perceived to lack certain “credentials” – it was not a standard. Crockford, the entrepreneur, took action: “I bought and declared it a standard! That’s it!”

Sounds simple, today.


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:


Video interview of Brendan Eich, Inventor of JavaScript

Yet another excellent video introduced to me by my Coursera class, “Programming for Everyone.” This time, Dr. Chuck Severance interviews Brendan Eich, the inventor of JavaScript. I love these videos for their rich insights, for the unique historical perspectives, and for reminding me of the amazing humans behind the technical innovations.

For all the stereotypical view of the dichotomy between the Machine and Man, between science/engineering and the humanities, the inventors of many of the building blocks of the Internet today struck me as incredibly altruistic and humanistic in their intent. They may not be household names or billionaires like Bill Gates, but their work made the personal computer and the Internet accessible – learn-able – to even grandmas and grandpas and people with a rudimentary education in remote areas and underdeveloped countries.

Like many others from the 1980s and 1990s, Eich acted as a conduit between the highly technical field of computer science and people with limited (or no) training in computer science. Eich wanted to pare down the complicated process of programming an interactive website into something most people could learn and master: “People didn’t need to know how to use a compiler to do programming,” he declared. So he created JavaScript for “a bigger cohort of programmers that were amateurs.”

Today, we pay homage to the revolution of the personal computer, to Microsoft and Apple, and yet, it was people such as Eich who built the bridge for the average person to cross over and tap into the power of the personal computer.

Most impressive is the underlying faith in the untapped creative power of collaborative work, something shared by Eich and his contemporaries. Eich wanted to create a “malleable program, … a multi-paradigm language” that allowed others to modify and improve, and ultimately,  “foster user innovation.”