What Will Be Your Technology “Waterloo”?

My son once asked me a while ago whether I’d ever see myself be left behind by technology. My response was, “No… because I’ll always be learning new things.” His question was a fair one. My grandmother used to need help to make a phone call — on one of those old rotary phones. Granted, there was only one telephone in our neighborhood and most people hardly made any phone calls. Grandma was uneducated and in her early 80s, so technology-the rotary phone-was confusing. But I’ve used grandma as an example to illustrate the point that sometimes technology could advance so rapidly that some people wouldn’t be able to ever catch up.

One may laugh at my grandma, but for most of her life, grandma was one of those ahead of her time: When she was young, her father, a merchant, was traveling back and forth between her village and wherever he was doing business in northeast China. He would bring back facial creams–something village women barely heard of. Grandma also traveled occasionally to Harbin (northeast China), so in her village, her family were viewed with awe. When she moved to Beijing, she quickly adapted to the city life. She figured out how to read the numbers and characters on money and food ration tickets and how to make herself look fashionable, with the limited resources she had.

But the rotary phone became a permanent roadblock for her. She knew the numbers. She knew how to turn the dial. But she never quite got over the confusion and nervousness to pick up the phone and make a call, even after our family got our own phone installed.

(For those who aren’t familiar with rotary phones, here’s an example from “The Museum of Obsolete Objects”. And here’s a video teaching people how to use the newly released rotary phone.)


Some will say, you can’t predict the future–How will you know what your permanent roadblock–my technology Waterloo–will be. I do try to dismiss such anxiety provoking queries: Oh yes, I have been learning and keeping up: I learned a bit Python, a bit Ruby; I learned how to use the git commands–not bad for someone whose career exclusively deals with reading and writing and languages. Plus, I am trying still to figure out Reddit–but did I tell you I think I more or less have understood Twitter?

Truth is: I know I have already met my “technology Waterloo” (“techloo”?). It’s called SnapChat. SnapChat is where I have drawn a line and taken my last stand. Of course I tried SnapChat–several years ago shortly after it caught on, my kids convinced me to try it. So I did, but gave up after a few minutes. The problem was simple: The image flashed on my phone screen so quickly that it disappeared before I could focus my eyes on the screen (those were the days when I didn’t have to use dedicated reading glasses.)


So the roadblock was real–using SnapChat was something that strained (if it wasn’t entirely beyond) my physical ability. In the split second when an image is displayed on the screen, people in their late teens and early 20s see the image, get the joke (or the point), and return a comment or two–while I am still focusing my eyes.

Sure SnapChat was built for young people–perhaps intentionally to exclude the 45+ crowd that have made their D-Day landing and invaded Facebook. But even if I could extend the display time long enough for my eyes to focus, will I be able to make use of–much less to enjoy–SnapChat? I am not sure I can get all the meaning a SnapChat image conveys. (HELLO English major! What happened to your ability to uncover and analyze overt and covert meaning in any text?)


If, unlike me, you have conquered SnapChat, have you met your technology “Waterloo” somewhere else? I am asking because, as an educator and a learner, I’d like to think it just might be possible to predict and identify the roadblocks to one’s learning – and apply an antidote, like how we use antibiotics on infections.

Some of the graphics are from OpenClipArt.org.




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?


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.



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 here.www.openclipart.org

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 EdX.openclipart.org

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: http://www.openclipart.org


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!


A Youtube Video: “Writing a Python Program – Simple Workflow”

Just watched a cool YouTube video: “Writing a Python Program – Simple Workflow” by Richard White. Richard White shows, on screen, how he constructs a simple program: How he starts, how he adds components, and how he does the debugging — i.e. checking for errors in the code. This is really cool!

Why is this worth mentioning? Watching someone write a program is like listening to a brief encounter (“hello,” “hello”) between two native speakers of the foreign language you are trying to learn. Will you be fluent just by catching these incidental dialogues? Maybe not, but the experience certainly makes the language real, and you pick up the subtle shifts in intonation and some other non-verbal elements that are a part of the native speakers’ conversation. And if you watch enough of these exchanges, you will become more fluent – which is why foreign language learners need to visit and live among the native speakers of that language. Watching someone write computer code is an aspiring programmer’s 24-hour study abroad trip.

In any case, this video was suggested by a TA for my Coursera class – in response to inquiries about some basic steps of writing code in Python. So the demand is obviously there.


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.


Python state of mind: [‘grief’]

Assignment 8.4 for my Python class on Coursera is a simple exercise to split a few lines from Romeo and Juliet into individual words, then sort the words in alphabetical order. With this exercise, we are supposed to practice using various functions we have learned: loop, slice, sort, list, and so forth.

I have spent the whole day working on it, read just about all the discussion threads on this assignment alone, and I am still nowhere near completing the assignment. I have learned a lot, though I am not sure the amount of learning commensurates with the amount of time and effort. But, as long as I feel I am learning, I am motivated to keep going.

The lines from Romeo and Juliet that we are working with are:

But soft what light through yonder window breaks
It is the east and Juliet is the sun
Arise fair sun and kill the envious moon
Who is already sick and pale with grief

A few minutes ago, my code returned this to me – Python has wisely informed me that this is indeed a Shakespearean experience – and not the happy kind:

griefThere you have it: Shakespeare has the final word – “grief”.grief-Shakespeare


Help Forums: Where Magic (sometimes) Happens

Help-buttonMOOC help forums have been invaluable to me as a newbie to coding. In both Codecademy and Coursera, I have encountered conscientious staff, skilled coders, helpful fellow learners, and equally puzzled newbies whose follow-up questions inevitably muddle up whatever clarity there is, but whose confusion make for many a learning opportunity as well. For that reason, I frequently browse the help forums on Codecademy, often just to read what is already under discussion. I always learn something from others’ questions and responses. To me, the help forums on Codecademy make up for the lack of face-to-face office hour meetings; the help forums are better than  professors’ office hours because of the sheer variety of suggestions, good or bad. Without the tips from the help forum, I would not have progressed as much as I have in Codecademy. The same tips got me started on learning Python.

However, the lessons on Codecademy are not always structured in an incremental fashion. Although the first few lessons on HTML were excellent, one third though the Python course, I began to wonder about the wizards spewing out those maghetto-haphazard lessons. Responses via the Help Forum helped me inch forward, but I was unable to progress beyond a particular module in Python. Learning modules in Codecademy are designed so that a learner must successfully pass each step before moving on. I got hopelessly stuck, and it was evident to me that I could not count on the Help Forum alone to sustain my learning at Codecademy.

I knew Codecademy was not a traditional instructional forum, so my expectations, in contrast to my enthusiasm, remained realistic. Unwilling to concede defeat (certainly not at that early stage), I decided to seek out another platform to continue chipping away at Python.

I wanted to learn programming in an environment similar to Codecademy, but one which has a logically laid out instructional path, a cohort with whom I could share tips and frustrations, and a help forum where I could, I hoped, get reliable feedback and explanations. Having taken one enjoyable Coursera class last year, I went searching for Python programming classes. It so happened that Programming for Everyone was about to start. I watched the professor’s introductory video, liked his straight-forward approach, liked the fact that he seemed not to take himself that seriously, liked his attitude that learning is be for everyone, even a highly technical skill such as a programming language.

Most importantly, I remembered having a lot of interesting exchanges on the Discussion Forums in my last Coursera class. So I assumed I could count on getting sufficient help from others, including the teaching assistants for Programming for Everyone.

Help Help Help Forum_trnspIf one hangs around help forums long enough, one naturally begins to make comparisons. One becomes a connoisseur of help forums. This may sound a bit strange, but it is not different from what happens in a traditional educational setting, such as on a college campus, where students trade professor-related tips and “shop” for classes.

The Coursera class’ help forums are very active and, at least at the initial self-introductory stage, very friendly. We are halfway through the class now, and the activity level remains high. Many questions and many answers get posted.

In many ways, however, the Coursera help forums are reminiscent of Codecademy’s.

On Codecademy, help comes in two forms: 1) a direct tip – lines of code, or specific suggestions to modify a code; 2) links to resources outside Codecademy. Though outside resources are helpful, there are only a finite number of good sources. After a while, one gets to know them all (it is terribly depressing to still be stuck at that point). Direct tips and direct answers (“Try this …”), seem to have more instructional value. Just seeing how someone interprets a coding instruction is helpful. Seeing the different approaches to coding, even at an introductory level, is an eye-opening experience. It actually surprised me to realize there was a creative side to programming.

In this Coursera class’ help forums, the “direct” tips are forbidden. If an eager student posts a few lines of code, the code is quickly deleted by teaching assistants. Occasionally some goody-two-shoes student would do the policing on behalf of the “code police.” Students are supposed to complete their own work – we are constantly reminded. This kind of admonition, a staple in a traditional classroom, is rather jarring in a MOOC environment where, if one chooses to copy others’ work, few actual impediments stand in the way. A 10-question quiz can be taken 100 times and only the highest score counts. Exercises are given weeks ahead and nothing prevents a student from getting the answers elsewhere. So why NOT share the answers on the Help Forum?

So far, I have taken each quiz multiple times – learning something each time. In fact, I take pleasure in re-taking my quizzes: They offer great, low-stakes practice opportunities. Quizzes for this class are on materials from the lecture and book, and therefore easy for someone like me.

The exercises assigned, on the other hand, are far more challenging. I have developed a routine for the coding exercises: I usually spend a good amount of time “translating” the instructions into plain English, breaking the sentences down into “actionable” bits, and then begin to tackle the pieces one at a time. At this early stage, I don’t have a large enough set of coding skills at my disposal. A minor difference between the professor’s lecture and the exercise itself throws me off track. When this happens, which is often, I wish I could get some quick clarification, so I can start practicing what I have learned. THIS is when I turn to the help forums.

Sometimes, I wish I could get a wholesale answer to an exercise, so I could see how it’s done. I am willing to do additional exercises to “pay” for seeing the answer, because I would not be able to come up with it on my own – not for a lack of effort or interest, but for a lack in foundational knowledge.

Yet this is where I find the greatest similarity between the help forums in Codecademy and this Coursera course: how some teaching assistants treat willing learners with impatience and curtness bordering on contempt.


To be fair, I have gotten plenty of helpful tips for my inquiries. But, sometimes – more often than one might expect, a responder would say: read the textbook, or: watch the video … Occasionally there is a hint of “if you had read the textbook closely, you would know…” Well, I read the textbook closely (as I am convinced many others do also in this class), yet I still find myself at a loss at the start of an exercise.

More to the point, though, I do not like the dismissive responses because I do work very hard to learn. Usually, when I desperately need some help on (what I presume to be) a simple issue, I read through other people’s questions, so I won’t have to wait for an answer. Much of the time, I figure out what not to do.  Occasionally, I get a lucky break and learn from a line or two of code that slips past the “code-sterilization inspector” in the help forums.

Fortunately the instructional videos for this class are extremely good. Nonetheless, repeated viewing of the videos and reading the textbook are not always sufficient. Neither is dogged persistence alone. After a point, one’s frustration level rises.

In the Coursera help forums, constant activities help maintain an upbeat, can-do atmosphere. But, like with Codecademy, as the difficulty level increases, “help” from the helpful people gradually becomes inadequate. So far, the presence of other bewildered learners has helped keep me going. Just when I begin to wonder whether I have what it takes to learn coding, posts about quitting the class begin to pop up, as well as words of empathy and encouragement in response.

Most maddening are responses that come from some (presumably) skilled coders,  who give seemingly profound responses that makes no sense to a newbie. A case in point:

A student posted a long and detailed request for help. The response: “Check your comparison logic.”

The student followed up with: “I’m not really sure what you mean. I thought I had followed the techniques in the video for finding both the largest and the smallest values but there is obviously some sort of error. To be honest I’m not sure what part of my code I need to correct.” The followup response: “The part of your program that compares the number given by the user with the current values of maximum and minimum.”

Student: “Still feeling totally lost on this. I’ve spent another hour working on my code and I’m no further forward. I’ve checked the book and the videos and I thought I was following the instructions on how to find the maximum and minimum values… I’m not sure what part of the code needs changing and not sure what I should try next.”

At this point, another teaching assistant stepped in with these tips: “Be careful with indentation. Try running your code through http://pythontutor.com to see where the problem is.”

The specificity of the last response – the reference to “indentation” as well as the link – must have helped the original poster who said “thank you” and went quiet. He was lucky: Hours later, another student picked up the thread with a very similar question as the first student, essentially asking for a more in-depth explanation. This student got this response: “Same answer: check your comparison logic.”

Frustrating the above exchange may seem, that one good post made it all worthwhile for me. Going through discussion threads in the help forums often feels like panning for gold: As long as there is an occasional glittery dust in the pan, there is always hope. The link to PythonTutor.com certainly helped me tremendously. PythonTutor has a “Visualization Tool” which shows exactly where one’s code gets stopped. This tool gives me, a student, a great sense of relief for simply knowing where the problem occurs. It is like when a car breaks down, the car’s owner doesn’t need to be told to “find out why your car isn’t working,” or “read the manual closely to diagnose the problem.” A simple “do you have enough gas in the tank?” would be a great start for diagnosis.

Somehow, I have a feeling that, technically speaking, the first response was probably precise and right on the mark, except it made no sense to beginners. A fellow student recognized this and subsequently offered this explication:

“What people mean by check your comparison logic are[sic] these types of statements …”

In my case, by the time this explication was posted, I had already checked my code on PythonTutor.com, read some more stuff online, and figured out how to fix my code. I had managed to survive another week’s lesson and could afford to be amused by the exchange above.

I am convinced, now more than ever, that, just as in normal university classrooms, MOOCs require teaching assistants who have basic understanding of instructional methods as well as a modicum of empathy for students who are motivated but are struggling to learn.


Lather, rinse, repeat: Loopy tech talk

Dr. Chuck Severance’s textbook for the Coursera class is succinct and clear, usually giving just the right amount of explanation (to me at least) and yet wasting no words. Sometimes it is humorous.

Python primary-loopThe class recently finished the section on “loops” – which are repeating operations in Python. One type of loops is “Infinite loops”, which are operations that, once initiated, will become an endless cycle that cannot be broken unless the computer is turned off. Infinite loops happen due to faultycoding – lacking an “exit clause” that would stop an operation from spinning spinning on endlessly.

Dr. Chuck Severance shares a programmers’ inside joke on infinite loops:

“An endless source of amusement for programmers is the observation that the directions on shampoo, ‘Lather, rinse, repeat,’ are an infinite loop because there is no iterPython primary-loop_V2ation variable telling you how many times to execute the loop.” (Python for Informatics: Exploring Information 5.3)

Funny as it may be, the analogy struck me as being particularly revealing of the programmers’ universe. Shampooing is indeed an infinite loop, but it is not a non-stop loop – there is usually a 24 hour break (for some, even longer) between “rinse” and “repeat.” The analogy between ‘Lather, rinse, repeat’ and an infinite loop is therefore a faulty (if not false) one, because an infinite loop in a computer program, as I understand it, has no pause. It only responds to a rather nihilistic intervention: having power cut off. Occasionally, it may over-stress the computer hardware.

‘Lather, rinse, repeat,’ on the other hand, is precisely the kind of loosey-goosey type of loop that would, one would imagine, inevitably drive a programmer bananas, because it is most likely an irregular “loop” that’s subject to unpredictable external influences (such as the shampooing ritual being delayed due to a long international flight).

Whoever first came up with the ‘lather, rinse, repeat’ analogy saw the similarities between the cyclical side of shampooing and infinite loops in a computer program, and so saw it fit to compare an essentially broken chunk of computer program to what most non-programmers would consider a perfectly regular routine.

Those us whose lives center around things other than programming, the ‘lather, rinse, repeat’ routine would not be the first thing to come to mind if we must find something as hopelessly flawed and potentially destructive as an infinite loop program.

The shampoo loop story illustrates the disparity in perspective between newbies and programmers. It offers an insight into the disconnect often felt by students new to programming. In a MOOC intro-level class designed for the “lather, rinse, repeat” crowd, learning most likely follows the shampooing pattern than the finite (much less infinite) looping in a program. For these learners, learning is more likely recursive than cyclical. In the best case scenario, learning should be a spiral process. But I will save that for another discussion.lather rinse repeat2