Problem-based learning – what I learned from

As I have stated repeatedly in other articles, I think it is worthwhile for language teachers (or teachers of other subjects, for that matter), to learn computer programming. For one thing, one may be surprised, as I was, by the sheer amount of creativity and collaborative effort among programmers, as well as innovative approaches used to teaching people to write code. Over the last year, I have taken numerous courses offered by Coursera, Codecademy and The Flatiron School’s digital platform Learn (as part of their “Prework”.)

One learns coding by coding, just as one learns language by speaking. On most learning platforms for coders, the pedagogical process is built in discreet parcels, with specific goals, targeting specific skills. This is all familiar terrain for most language teachers (be it French, Chinese or Esperanto). What may be different, however, is how the actual learning takes place, in the absence of “teachers”¹. On both the Codecademy and Learn, students participate at no cost and are self-paced. There is structure, however. Students must progress sequentially through the lessons. Operating in the background is an automated program, which assesses each student’s code as a pass or fail. If the student’s effort is a “fail”, an error message pops up, listing the reasons. Students who wish to progress must closely read and understand these error messages, and make relevant modifications to their code.

Working through error messages isn’t easy – but therein lies the learning opportunity and the contrast with traditional learning environments. In a traditional classroom, students look to teachers for validation that they have carried out a task correctly; if the task has not been correctly completed, students expect the teacher to explain the solution. In contrast, self-paced students on the Learn platform are focused on solving the problem and finding multiple ways to solve the problem. There is no emphasis on solving the problem “the correct way”.

I didn’t understand that coding is more art than science until I began to learn programming. Although skills are obviously involved, there is seldom a “correct” way to code. Although the very best code is efficient and parsimonious, running faster and requiring less computing power, code can be written in a myriad of ways to solve the same problem. An excellent programmer can write one line of code to accomplish what a novice might take five lines to accomplish. In that sense, computer languages behave similarly to human languages in that there are many ways to accomplish a simple task. In English, for example, “Hi,” “Hello,” “How are you?,” and “How do you do?” all serve essentially the same function. If I were teaching English to non-English speakers, I’d accept all of them as “correct” greetings (and, for that matter, “Good morning!”, “Good afternoon!”, or even, “Howdy!” would work too.) The same is true with computer languages.

Unless a specific skill needs to be learned, both Codecademy and Learn allow great latitude for the code students submit. I am always amazed by the many variations when I search for a solution online and read snippets of code posted by others. In the end, when I pass a lesson, I have solved the problem my way, which is rarely identical to other students’ solutions. When I am stuck and ask for help, help is delivered in response to the specific issues in my code.

THAT process, in my mind, is problem-based learning par excellence. I do learn specific coding skills – like everyone else learning through the same platform. Yet, I acquire each of those skills when a problem arises – so I master those skills in a different sequence and at different times from other students. On Learn as well as Coursera, I occasionally see other learners fly through the lesson while I am stumped, spending hours (sometimes days) trying to figure it out. Other times, I surprise myself by how quickly I finish a lesson.

Ideally, our foreign language classes should be conducted the same way, because this is how we’d learn a foreign language if we lived among native speakers of that language. We speak when we have a need to and corrections, when given, are contextualized.

For that reason (among others), I believe, foreign language instruction can benefit tremendously by borrowing philosophically from (the best) programming instructional platforms. Both have content that must be mastered, including grammar and syntax; both require “hands-on” learning; both require practice and repetition, and both can improve when people interact with each other – programmers may be “techies”, but, it turns out, the world of programming is an entirely collaborative universe where people willingly, freely, and unreservedly, share tips and offer solutions. Learning to code has given me a glimpse into the that universe, so I have begun to understand what gave rise to the (incredible) practice of “open source”. (See my post Why all teachers should learn to code a little).

While I wait impatiently for my next programming class to start on Coursera, I am now applying what I have already learned to programming an Arduino and Raspberry Pi. But that is not the point – I feel I have truly entered a unique world that has so much to offer to everyone.

For all my praise of self-paced learning online, I am not at all suggesting that we should get rid of teachers – a completely self-paced, self-directed course alone often is not sufficient, as I have discovered when I hit a difficult patch on Codecademy (see my earlier post). Without the excellent course taught by Dr. Chuck Severance (“Dr. Chuck”, of the University of Michigan) in which he succinctly explained away some of the most difficult concepts, I’d have given up a long time ago.

For that reason, the Learn platform offers an entirely unique solution, which mitigates what I see as a major roadblock for learners on Codecademy²: The lack of reliable help when one needs it most. A few months back when I first started this journey, I was often exasperated by how many discussion forum threads I had to sift through to pick up the tiny bits and pieces needed to advance in a lesson. Even on Coursera, help is often “Hit-and-Miss Help” – a learner can’t pick teaching assistants (and does Coursera track the efficacy of their TA’s anyways?) In any case, I often wished I could ask direct questions for a seemingly simple issue while the problem was fresh (and urgent) in my mind.

On Learn, however, there is synchronous, live help, usually from “Learn Experts” who are good at programming and who generally are excellent at offering explanations. The “Ask a Question”  window is present in every lesson. Usually within a few minutes (sometimes sooner) of posting, my question gets answered – in the most helpful way imaginable (and I am not talking about copying code to pass an exercise). Sometimes fellow students chime in. In fact, when one posts a question, one immediately sees the message that a “fellow student” will help soon. Now that I have been on Learn for a month, I have come to recognize these “fellow students” who are, at a minimum, advanced students, but who are vetted by Learn to be “Learn Experts” – they are different people with different personalities, but they all offer good, reliable help. Occasionally I do get surprisingly excellent help from advanced students: Once, a fellow student responded to my question with a series of (blunt) questions about my code; as I tried to answer her, I began to see what was wrong and learned a tremendous amount as a result. Help also comes through different media, depending on the need. A couple of times, my question required an elaborate answer, so the Learn Experts guided me through their screen-sharing utility and eventually initiated a voice chat session to walk me through the steps – all through Learn, which is free and open to all.

My Coursera professor, Dr. Chuck (as he calls himself) is fantastic – what I learned from him would have taken me a long long time to learn on my own (that is, if giving up was not an option). He made me – a person who has been teaching language for decades – feel good about the profession. allowed me to look at problem-based teaching and learning with fresh eyes – and to see how technology can seamlessly blend in with education.

The free Learn platform offers tremendous value.  What I learned there would have been worth a whole semester-long computer science class in a traditional institution. And I, relatively new to programming and definitely a complete newcomer to Ruby, am about to finish it in 5 weeks. To continue learning on Learn after I complete the free courses, I must become a paid student. I can only hope their formal instructional classes are just as good.


¹ There are teachers in the traditional ‘face-to-face’ classes at The Flatiron School. Learn functions as Flatiron’s “qualifying platform” for those wishing to enroll in its face-to-face or online immersion classes.

² Codecademy has recently implemented a new system called “Codecademy Pro”, whereby for a monthly fee one can receive help from “Codecademy Advisors.”