Wednesday, September 12, 2018

Learning by Wholes

David Perkins is a senior professor of education at Harvard who has done a lot of super-applicable, general-audience writing. I just finished his book Make Learning Whole, and am eager to try applying each of the seven principles he outlines within. Here are some ideas of how I think each could apply to my own work, along with an explanation of the principles themselves.


Play the Whole Game

"We can ask ourselves when we begin to learn anything, do we engage some accessible version of the whole game early and often? When we do, we get what might be called a 'threshold experience,' a learning experience that gets us past the initial disorientation and into the game. From there it's easier to move forward in a meaningful motivated way."

By game, Perkins means a domain, a field, an area of learning. The point is to not to just talk about the game, not to pick away at learning just elements that are part of the game, but to actually do it and participate in it. Sure, you might have to play a junior version, probably with lots of scaffolding to support you at first, but that's still far superior to being promised you'll (maybe kinda sorta) get to the real thing later.

As a computing educator, it is tempting to say that playing the whole game comes for free since you start writing code pretty much right away. But the whole game isn't always present, at least not until later. There are oh-so-many examples of introductory programming learning experiences that go through a laundry list of concepts, using toy examples for each one before eventually getting to look at any sort of interesting, realistic problem. I avoided this with my CS1 design. It is structured around a series of demo programs in Processing. Each module is devoted to modelling how to create one demo, introducing computing concepts as they are needed. I want to make sure I continue to keep the whole game in mind for all my learning experiences. If my learners aren't doing something resembling the real thing, I need to fix that.

Make the Game Worth Playing

Motivation is always a tricky thing, especially in contexts where the reason for learning something is because a teacher said you have to. So how do we make the game worth playing? By playing the whole game, for a start. Look for intrinsic motivators. Connect to practical applications, personal insights, to other areas of the curriculum. Focus instruction on generative topics ("topics that figure centrally in the discipline or practice under study, resonate with the learner's interests and concerns, and, importantly, resonate with the teacher's also"). Teach in a way that highlights "understandings of wide scope, with enlightenment, empowerment, and responsibility in the foreground." Build a tone of enticement into the beginning of lessons. Teach for understanding. Foster a growth mindset. Provide a pleasantly frustrating challenge, seeking flow.

I've done a lot of thinking on game-like learning, and have led and contributed to development of a few game-like and even game-based learning experiences. I think that a lot of the ideas behind making the game worth playing connect well with game-like learning. I recently delivered a course to employees at work and struggled a bit with engagement. In my next experiment, I'm thinking of using game elements to increase engagement and retention.

Work on the Hard Parts

"The hard parts have an annoying characteristic: They do not always get better just through playing the whole game. Real improvement depends on deconstructing the game, singling out the hard parts for special attention, practicing them on the side, developing strategies to deal with them better, and reintegrating them soon into the whole game." Actionable assessment and communicative feedback are important aspects. To anticipate the hard parts, watch out for certain kinds of knowledge: ritual, inert, foreign, tacit, skilled, and conceptually difficult.

I've fully adopted backward course design, and have gotten pretty good at writing learning outcomes. In my next designs, I'd like to identify the 'hard parts' among the learning outcomes, and double check that I am isolating, practising, and reintegrating them. I think I am doing this in my aforementioned CS1, where I get learners to practice the newly introduced computing concept before reintegrating it back into the development of the module's demo.

Play Out of Town

We want our learners to be able to transfer their learning: "People learn something in one context, and this informs how well they learn and perform in another context. ... In other words, transfer is a matter of 'playing out of town,' applying the games we learn to bits and pieces of those games not just in their original contexts but elsewhere, in some other setting where they might be helpful." Think about "what is supposed to transfer, to where is it supposed to transfer, and how is the transfer accomplished." Fostering transfer means including "some of the connection making that we hope learners will do later on."

One of the big goals I had when starting our curriculum-aligned work-integrated learning program a few years ago was to help our students see computer science more holistically while making deliberate, explicit connections between academic theory and the industry work they do. Although I don't work on that program directly anymore, I'm always brainstorming ways to do this and making suggestions to the team. My hope is that the result will be better transfer of academic knowledge to the workplace. I'm also hoping to look for more ways to incorporate reflective abstraction and diverse applications into individual learning experiences.

Uncover the Hidden Game

"Any complicated and challenging activity always has multiple layers beneath the obvious. ... The hidden games are not only interesting but often important to doing well at the surface game. ... A great deal of learning proceeds as if there were no hidden games. But there always are. They need attention or the learners will always just be skating on the surface." A few example types of hidden games include the hidden games of strategy, causal thinking, inquiry, and power. Games hide under the rug of simplicity, within the margins of good enough, inside the cloak of the tacit, and beyond the horizon of readiness.

The next time I create a learning experience for developers who want to learn a different language or tech framework, I want to use my subject-matter experts to help me uncover the hidden game of what they do. I think a short lesson on the ideas from the book might help them know what I'm going after, and I can use my own expertise as a practitioner to dig further. I want to make sure the hidden game surfaces in the learning outcomes and therefore the rest of the learning experience.

Learn from the Team

So much of formal education has the expectation of learning solo. Learning from the team means engaging with richer participation structures (how activities are organized through roles and responsibilities) that are more social and collaborative. Effective participation structures include pair problem solving, studio learning, communities of practice, cross-age tutoring, and extreme team learning.

We've used a few of these, some more directly than others. For example, our work-integrated learning students are asked to pair program very early on in their industry-based education paths. As I work on my CS1 course to be delivered to employees, I'm planning on incorporating learning teams, each one assigned its own mentor. I also want to encourage pair or group problem solving and more meaningful peer evaluation opportunities.

Learn the Game of Learning

"Learning to learn has to do with many things: directing one's attention, choosing time and place, relating new ideas and skills to what you already know. Indeed, it has a lot to do with the previous six principles." To uncover the hidden game of learning, learners need to move from the passenger seat into the driver's seat. Skills ranging from problem-solving strategies to time management should be taught explicitly, either as a standalone course or incorporated throughout curriculum.

Our work-integrated learning program already has workshops that help our students learn the game of learning, such as a growth mindset workshop I led. As I continue to read books on how learning works, I'm hoping to compile the fundamentals into an easily-digestible format and potentially a workshop as well. The former could be shared with learners in my courses for employees as well.

Thursday, August 23, 2018

Delivering a Technical Course to Busy Developers

At work, I'm experimenting with how to deliver a technical course to my fellow employees in such a way that participants succeed and our team doesn't have to put in too much time on top of our regular duties. Just making them available for self-directed study results in most folks poking in for an hour and never returning. If we can come up with the right delivery model, we can make all the courses we create for other purposes available to our colleagues without adding stress to our already busy schedules.


Many of our courses were designed for students in our work-integrated learning program first. Most material is curated with our own added context and assessment, and courses are intended to be completed in a self-directed manner. For our WIL students, we provide lots of feedback on their work and hold in-person sessions that range from formal tutorials to quizzes to pair programming assignments, all of which require quite a bit of time and attention from our education team.

I chose a Ruby programming course for my first experiment this summer since the majority of our development is with Ruby on Rails. I put together a series of short workshops previewing Ruby to our Dev Degree students and a more in-depth project-based course the same students took later on. The students spent two hours each on five workshops and about 20 hours a week for 3 weeks on the project.

I initially made the new course 8 weeks long, though we added a breather week partway through. Interested learners were asked to get lead buy-in, and were told they'd need to spend some time during work to succeed. I sent students some pre-learning resources both to set expectations of prerequisite knowledge, and to offer help for those who wanted to fill in any gaps. I recruited experienced Ruby developers as mentors who would answer questions, formally review project work, and run weekly tutorials using video conferencing software. Assignments were due each week, but with soft deadlines; getting an assignment in on time meant being paired up automatically for a peer review.

The course started with over 50 confirmed learners. Many have dropped off since, which isn't unexpected. Some realized that they didn't have enough problem-solving-oriented knowledge, and will likely take one of our intro to CS courses when the opportunity arises. Others found the everyday demands of their jobs made it difficult to keep up, and though there are exceptions, it seemed that once someone fell behind, they more often than not just stopped working on the course.

The course didn't end up being too demanding on my time, but it doesn't look like very many students will finish it. We wrap up next week, at which point I'll start to dig into who finished, who didn't, and why. I plan to have some anonymous surveys as well as focus group discussions. It will be really interesting to see whether we can find some tweaks that result in more success stories.

Have you ever tried to deliver a technical course to your colleagues? What did it look like? What structure worked well?

Thursday, March 8, 2018

Six Months On, Six Months Off: My Experience of Maternity Leave in Tech

Today, my second child, Henry, turns one. I went on maternity leave for six months when he was born, which means I have also been back for six months. I was a grad student when I had my first baby, so life was pretty different then. Being International Women's Day in addition to Henry's birthday, it feels like a good time to reflect on my experience this time around.


Henry eating a cupcake at his daycare's birthday celebration.

In no particular order, here are some thoughts about my six months off:

  • I felt pretty useless the first 6-8 weeks, recovering from a repeat c-section after 50 hours of labour towards a failed VBAC.
  • Everything was changing on my team when I left, big time. We had a new team lead who was amazing, but this fact gave me all kinds of feels as I was more or less 'in charge' until then. 
  • I kept close tabs on the goings-on of the team while I was away. Slack was part of my regular social media rounds. I even contributed with tangible work here and there when there was something I could help with or that I was really invested in.
  • I managed to get a lot of reading done during my leave and that felt really good.
  • I missed the office (the actual building in addition to the people there).
  • I decided I wanted to pursue technical leadership instead of people management as a career path.
  • I didn't have the motivation to go out to play groups or baby classes as I did the first time.
  • I didn't socialize much other than visiting with family. (It was great to visit my parents' pool patio for example, even if I rarely actually swam.)
  • Making lunch for myself sucked (we get free lunches at work).
  • I constantly asked my husband, who works at Shopify as well, what was going on at the office, what was for lunch, whether he brought my any dessert, etc.
  • I felt very grateful that I could take so much more time off than my American friends, and have my EI allowance topped up by Shopify the entire time.
  • My team sometimes joked that I never really left.
And some thoughts about my first six months back:
  • At first, I struggled with rejoining as an individual contributor on a team I had in some ways started and led for a while.
  • My husband was on leave for the second half of Henry's first year and he stayed completely disconnected from work by choice.
  • It was incredible how fast things had moved while I was away, and I can't imagine how far behind I would have been if I hadn't stayed connected.
  • I was happy to be able to jump back in quickly with work I was very familiar with from before my leave.
  • The first four months were difficult in terms of scheduling meetings, pumping sessions, and time with students whose schedules were very complicated. Some of my newer colleagues questioned my time management skills / commitment to quality.
  • Henry was a terrible sleeper the entire six months I was back at work (we only sleep trained him this past week and before that waking up every two hours was a 'good' night). I was running on near empty and had nothing left to give outside of work.
  • I missed carpooling with my husband and eating lunch with him, but also enjoyed the slight increase in schedule flexibility knowing he could pick up our daughter from school. It was also nice to eat with teammates and get to know them.
  • I'm finding myself wanting to wean in the near future, despite having nursed my daughter until she decided to stop on her second birthday.
  • I had a hard time enjoying Henry during these months, largely due to sleep deprivation and perhaps being away from him most of the weekdays. But that's back on track now that I am sleeping!
So many feels, this whole baby thing! I'm incredibly grateful to have had this experience while working at Shopify, which appears to be one of the best tech companies in this regard.  However, it's easy to see why being on leave for any number of months, let alone a whole a year, can hurt someone's career. Our society definitely needs to continue figuring out how to balance to scales for folks who leave to care for family, and to encourage men to take leave as often as women.

Wednesday, January 10, 2018

Getting Better at Ruby for #AdventOfCode2017

Because I'm a computing educator, I don't write code every day. I'd be lying if I said I didn't miss it. So when I heard about Advent of Code late 2017, I knew I wanted to participate.

In its third year, Advent of Code was created by Eric Wastl. On each day of December up to and including Christmas Day, a new problem is released at midnight Eastern time. Each registered user gets personalized input, and when you solve part one of the problem, a second, usually more difficult, part is revealed. Each part earns you a star. The faster you get your stars, the higher you are ranked. There's a global leaderboard showing the top participants.


I wasn't too interested in the competition aspect, knowing I couldn't be up at midnight every night working on code. Instead, I decided to commit to solving the problems as close to when they came out as I could for my circumstances. I also decided to use Ruby so I could remember the basics I used to know from working in Rails for half a year, and learn about the language on its own a bit more deeply.

I managed to solve almost all the problems the day they came out, with just two or three being finished the day after due to time constraints (read: two young children). I also learned a lot about Ruby, from the unexpected things you can do with hashes to its memory model, and more. My favourite trick was using a two-item array representing an x-y coordinate as a key to a hash.

More importantly, it was really really fun writing code every day. I couldn't believe how addicting it was. Most of the problems were fairly easy to solve using Ruby (sometimes it felt like it was cheating using that particular language!), though some were much trickier conceptually. None of them completely thwarted me though, and I managed to figure them all out on my own without looking online. Earning each star was very satisfying.

The code as I wrote it is now up on my Github – no editing after the fact. I know I'm not following all the Ruby conventions (I really do prefer camel case for example), and I'm probably being more verbose than a lot of folks doing this competition (I love readable code). Now that the competition is over, you can see all the problem descriptions to understand what I'm trying to achieve. (I think you still have to solve part 1 to see the part 2 description, though.)