Andrew Cox


Do Research-based Study Methods Apply to Learning Webcraft?

Last week, I enrolled in P2PU’s free How to Teach Webcraft and Programming to Free-Range Students course. The first assignment was to read Organizing Instruction and Study to Improve Student Learning, a 2007 Institute of Education Sciences study that “includes a set of concrete actions relating to the use of instructional and study time that are applicable to subjects that demand a great deal of content learning, including social studies, science, and mathematics. The guide was developed with some of the most important principles to emerge from research on learning and memory in mind.”

The 7 recommendations

The report was organized around 7 recommendations and how you can apply them in the classroom. Each recommendation is weighed against how strong the supporting research is along with common pitfalls for applying the recommendations and how to avoid them.

I recommend reading the whole report to get the context of the studies that support, but the summaries of each of the 7 recommendations are available on IES’ overview of the study.

Since you can read the summaries on the study’s overview page, I’m mostly just going to talk about how well the recommendations apply to learning software development, and how using a digital medium for teaching is either a benefit or a hinderance.

1. Space learning over time

Students should be exposed to each main element on at least 2 separate occasions, preferably spaced out over weeks or months rather than days. This is something I had not considered for SkillBonsai. On one hand, many skills related to software development build on each other, so are automatically reinforced as the student progresses. Additionally, it’s often enough to know a technology or technique exists and be able to reference it when you need to apply it. Rote memorization isn’t as important for many concepts in software development.

I do believe this concept could be put to use though. For some skills that are worth committing to long term memory, I could email periodic, spaced reminders that include links to refresher or review versions of the initial instruction. Having a reference version of an instruction is valuable in its own right, so this is definitely something I’m going to consider.

The report also added a note that may address some issues with spaced learning as it applies to software development:

One limitation of the literature is that few studies have examined acquisition of complex bodies of structured information.

2. Interleave worked example solutions and problem-solving exercises

I really like this idea and think it applies very well to both software development and online learning. I think one of the more difficult aspects of learning software development is knowing if your code is well formed. Seeing worked examples of good code should be a great way to see if your own code looks similar in terms of simplicity and readability.

The study also recommends that you decrease the examples as you progress:

As students develop greater expertise, decreased example use and correspondingly increased problem solving appears to improve learning.

3. Combine graphics with verbal descriptions

In addition to graphics or video, you should also provide an audio track since the brain can process the visuals better when they don’t have to use their eyes for both reading and interpreting the graphics.

Graphics are often not as obvious in the world of software development, but perhaps the rise of screencasts on the web indicates that video with an audio voiceover is an effective teaching aid. There are other studies, however, that indicate videos are often misleading in how much information is retained by the student.

4. Connect and integrate abstract and concrete representations of concepts

The studies show that students struggle more with abstract representations initially, but are better able to use the learned concepts in different contexts.

I’m not exactly sure how to apply this to software development. Is the bowling kata an example of an abstract concept? Or are we talking about visualizing the MVC framework? I’m going to need to think about this one a little more.

5. Use quizzing to promote learning

If you think of quizzing as a means to help students understand what areas they need to study rather than an evaluation for a grade, quizzing suddenly seems much more powerful.

One concept that I will definitely adopt is the idea of pre-quizzing to prepare students for the material they’re about to learn. This could work very well with SkillBonsai when using an external resource like another site’s tutorial or a chapter in a book.

But how do we validate that a software solution is “correct”? Aside from simple “check the output” tests, perhaps we could add a more subjective checklist for the student to do a self-check on the quality of code, including:

  • Do your variable and method names express intent (i.e. are they named clearly)?
  • Are your methods less than 10 lines long?
  • Are your classes doing more than one thing?

Each quality question could provide links for the student to review what each of those quality checks means in detail if they need a refresher. We could also encourage them to have their solution checked by someone in their local or online programming community.

I think there are limits to what we can do with online quizzing for software development, but there’s a lot of untapped potential with simple multiple choice or fill-in-the-blank quizzing.

6. Help students allocate study time efficiently

It is our belief, however, that students’ ability to manage their own studying is one of the more important skills that students need to learn.

This is probably the key takeaway for me. Students are notoriously poor at “metacognition”, or knowing how much they know. This really resonated with me and I think it’s one of the most important aspects I can bring to SkillBonsai.

In addition to quizzing, the study suggests that students rate each question based on their confidence that they know the answer (before seeing any of the possible answers). This allows them to evaluate how much they think they know and direct them to the areas that need the most study.

7. Help students build explanations by asking and answering deep questions

At first I thought this would be a nonstarter for online learning, but I think there’s a simple solution: ask students to write a blog post about a question or topic. Blogging is a fantastic way to explore a topic and organize your own thoughts. There’s really no way to validate whether a student did it in any automated way, but I don’t think that should be a deterrent.

Do classroom learning methods apply software development?

So, do these classroom instruction and study methods apply to learning software development? I think the short answer is absolutely.

On the other hand, many of the recommendations apply to learning as opposed to improving skills. Is software development more similar to learning history than to becoming a better artist, musician or athlete? If not, does that imply that we should be using different methods to complement the learning methods listed above?

Here are some ways that I think learning software development is different from learning history, math or a foreign language:

  • Most problems are unique (though they may have common foundations or principles)
  • There is a wide range of “correct” answers
  • You need to be both aware of a broad range of technologies as well as being well-practiced in core fundamentals

Weaknesses of online learning

The most obvious weakness of online learning applications is that it’s often hard or impossible to validate that a student has completed assignments correctly. For my purposes, I’m completely ok with this. My target audience is the motivated self-learner, so if someone wants to say they completed an assignment (like writing a blog post) and they didn’t, then so be it.

However! It is important to be able to provide timely feedback to foster their metacognition and head off any misconceptions as early as possible. For that reason, I think many of these core learning concepts are very applicable.

Finally, the report issued the comforting thought:

As with professionals in other fields, such as medicine, that also seek to rely on a base of evidence and yet must deal with important practical problems on a daily basis, educators must make the best use they can of the current knowledge as it is, even while being mindful of its imperfection.

So, even if we can’t apply all learning principles to every subject, the more we know about effective instruction and learning techniques, the better we can work them into our education applications and material.