Transferring knowledge from one context to another is less http request and more scattershot.

The transfer problem in computing education

Amy J. Ko
Bits and Behavior
Published in
7 min readJul 19, 2019

--

When we talk about the value of school, we often talk about ideas like “learning how to learn” or “learning foundations.” In contrast, when we talk about the problems with school, we often criticize it for focusing too much learning about things and not enough doing things.

This debate is central when defending the value of computing education. Some people who believe that being a software developer greatly benefits from an undergraduate degree in CS. They invoke arguments that learning the foundations of computing, such as theory of computation, data structures, abstraction, and functional decomposition, are critical to avoiding big problems in practice. They discuss the importance of learning how to think like a computer scientist, computationally, algorithmically, and systematically.

In contrast, people who advocate for the sufficiency or even primacy of practical knowledge about computing talk about the fundamental importance programming. And programming a lot. The sentiment is that more you build, the more you will learn. They argue that programming, and software engineering more broadly, necessarily involves learning, and that the “foundations” of CS are too divorced from the learning necessary to create software.

Clearly, both positions are too extreme to be completely right. There are some fundamentals that are useful. And practicing programming, and all the learning it requires, is obviously necessary. Our best evidence about learning says as much, demonstrating that a combination of general principles and concrete examples are central to preparing people for a world of new situations.

However, none of these positions answer the core question about the value of school. Can’t one learn core principles about computing outside of school, such as on the job or in a practical coding bootcamp? And can’t one learn them better, since they teach them in the context of programming, rather than in the context of higher minded principles and ideas? Or does this learning necessarily need to happen in formal systems of education? These questions are far from pedantic: half of my undergraduates in Informatics could drop out now, get jobs, make good money, and learn quite a bit. Few do, but it’s only because of some un-interrogated belief about the essential value of school.

I think the heart of this question about the value of school is the problem of transfer. In one sense, the entire point of school is transfer: we learn ideas in one context (school) that we then take into another (the broader world). For school to be valuable, it has to prepare students with knowledge that is not only valuable in the new contexts they’ll encounter, but that they can also readily apply in the broader world. For example, something about a student learning Java throughout a 4-year degree should result in a new hire at Microsoft quickly thriving in a role requiring C#. And the concepts a secondary student learns by making in Scratch should, ideally, transfer to their first programming class in college. And all of this should be true because of something essential about school that wouldn’t have happened if someone learned outside of school.

But does this transfer from school to school and school to work actually happen? While there’s very little evidence about transfer in computing education, there’s a lot of evidence about transfer more generally, and the answer is typically no. Our best theories about why transfer doesn’t happen is that promoting transfer requires so many things that are hard to achieve in school:

  • For knowledge to transfer at all, it has to be learned well in the first place. School rarely provides enough practice or feedback for such mastery.
  • For knowledge to be transferred to diverse contexts, it has to be understood both abstractly and concretely. Because of how learning works, it’s necessary to start with concrete, and challenging to get learners to abstract.
  • Metacognition is key, both for initial learning, and because transfer is an active process, not a passive one. Unfortunately, metacognitive skills in most learners are underdeveloped.
  • For knowledge to be transferable, it needs to be learned in more than just one context. That’s hard when the broader context is school, the smaller context is a specific class, and the even smaller context is a specific genre of problems in a class that might not represent authentic contexts in the world. School can provide multiple contexts in which to learn one thing, but it can’t provide authentic contexts.

Therefore, even if school had the time to help leaders master subjects deeply, and learn the requisite metacognitive skills to promote transfer, schools would still struggle to reflect the contexts learners would encounter in the world.

Of course, we know schools rarely do any of these things well. As a teacher, I certainly try. And I try hard. But I know that I fail most of the time. The tiny glimpses of transfer I get are when students that have long since graduated write me on LinkedIn or Facebook and tell me about how they used an idea or skill in practice. More often than not, these were the most curious, reflective, and deep learners. But it’s often the case that the ideas were also lost in translation.

When we…transfer…these ideas about transfer to computing education, the prospects for transfer get even murkier. Does knowledge of one programming language transfer to another? Do learners take general principles of computing that we know apply to all of computing and actually apply them to all of computing? Are there general programming problem solving skills that learners can apply to all programming settings? We might believe that all of these things happen, but we actually have little evidence that we do. And researchers, as recently as this year in unpublished work, are beginning to find that even basic transfer, from one programming language to another, doesn’t happen at all.

In my own personal case — as a learner who had strong curiosity, metacognitive skills and a deep desire for mastery— there are many things I learned in my CS degree that were transferrable but that I struggled to transfer to my later contexts of graduate school, faculty member, and chief technology officer. Here’s are some examples of my struggles:

  • I learned Java’s syntax and semantics in my bachelor’s degree, and used Java throughout graduate school, but the moment I started writing JavaScript, CSS, and HTML, I was mostly lost.
  • I learned to design and build programming languages in a really practical undergraduate compilers course, but the moment I started writing my own lexers, parsers, compilers, and interpreters, I quickly found all of my knowledge about top-down recursive descent parsers inadequate and had to start over with with ANTLR, where most of my foundational knowledge didn’t easily apply.
  • I learned basic data structures, how they operate, and how to build them, but in the endless systems projects I built in which I largely relied on pre-existing implementations of these data structures, my foundational knowledge of data structures didn’t really help me select the most appropriate implementation.

And these are just the things that were relevant to my later work. There were a whole bunch of things I learned that simply didn’t apply to my daily work in research, software development, or software project management.

Thus far, this analysis is pretty damning: teaching foundations doesn’t lead to much transfer, even when the conditions for transfer are ideal, which threatens the whole premise of school and its emphasis on foundations. If school can’t offer transfer, is there anything else redeeming about school, relative to informal learning or learning on the job? Especially in computing where the jobs are abundant and lucrative?

Here’s the best case I can make:

  • School, as an institution, gives us time to learn. Informal learning is nice, but unless you have some form of financial security, it’s just not feasible for most people in society to do. Informal learning is necessary at work, but often not incentivized or valued, and so time for it can be limited.
  • School, as a social context, gives us motivation to learn. Life is full of other priorities and distractions. School, in a way, is a collective agreement amongst students and teachers to focus attention on learning. That’s not easily achieved when you’re learning alone, or at work, where learning is only a means to an end.
  • School, as a community, gives us “context-free” relationships. In school, we connect with each other around who we are, the ideas we are learning about the world, and the change we want to see. In my experience, this is different than the types of relationships we form at work, which are more “context-bound”—grounded in company values and goals, but not in one’s identity.
  • Foundational ideas support mastery of practical ones. The evidence shows that even if foundational ideas aren’t directly applicable in many contexts, and even if people struggle to transfer them, they can help people learn more practical skills that do transfer. Knowing the very concept of dictionary data structure is directly valuable, even if knowing its time and space complexity is usually not, and understanding time and space complexity likely helps deepen one’s understanding of the concept of a dictionary.
  • Sometimes concepts do transfer. It might be the case that most things don’t transfer, but occasionally they do, and when they do, they can be quite powerful. I still remember the Systems Thinking course I took, and how terribly taught it was, but how powerful the idea of a system was, and how it shapes my perspectives and thinking today. I might have only successfully transferred a few dozen of the 1,000 things I learned and remember in college, but those few dozen are quite valuable, and no one could have predicted how.

Therefore, I would argue that school is valuable, and that computing education in school can be valuable as well. It’s just that the value lies in many more things than just transfer. In our efforts to improve computing education in higher education, and bring computing education to primary and secondary, we should keep in mind that the goals aren’t just knowledge about computing, but also motivation, relationships, and mastery.

--

--

Amy J. Ko
Bits and Behavior

Professor, University of Washington iSchool (she/her). Code, learning, design, justice. Trans, queer, parent, and lover of learning.