Posts tagged ‘community of practice’

What do I mean by Computing Education Research? The Social Science Perspective

As a new guy at the University of Michigan, I spend a lot of my time explaining who I am and what I mean by computing education research. In this and the next blog posts, I am sharing two of those explanations.

The first one was a six minute lightning talk to the University of Michigan School of Information. My audience was well-versed in social sciences, so I explained who I was in those terms.

I ground a lot of my work in Lave and Wenger’s (1991) theory about Communities of Practice. Let me create a symbol here to represent a community of practice. My symbol has a light boundary where novices engage in legitimate peripheral participation, there is a darker area where full-fledged members of the community work, and the core where the experts live who represent the values and practices of the community.

When people think about computing education research, they mostly think about this community of practice: software development. How do we help students join the community of practice of software developers? That’s an interesting question, and I have done some work there (e.g., on how students come to understand multiple class object-oriented systems, like Model-View-Controller), but that’s not my focus.

Let’s set that community of practice aside (lower left), and consider another that I’m much more interested in: end-users who program. I’ve taught thousands of liberal arts, architecture/design, and business/management majors to program using Media Computation, a contextualized approach to computing that focuses on their interests and needs. I worked with Brian Dorn as he studied graphics designers who learn to program. End-user programmers are far more numerous than professional software developers. They use programming for different purposes, so we would expect them to use different practices, languages, libraries, and tools. That’s why we developed JES, a Python programming environment for our future end-users who are programming with media. I’m very interested in understanding and supporting the practices of end-user programmers.

Let’s keep that community of practice in consideration, and next consider a different one: High school teachers who teach computer science. They’re not about software development, either. They’re going to do something different (different practices) and have different values. High school teachers need to learn efficiently because they don’t have a lot of time to learn, and they want to learn effective methods for their students. Here’s where we work on ebooks, and subgoal labeling, and Barb’s Parsons problems. I’m interested in how we make computing education efficient and effective, and in understanding the underlying cognitive mechanisms at work. Why do some things work better for learning programming than others?

Here’s another community of practice I care about: scientists and engineers who use programming as a new way to do science. Again, different practices and values than software developers. How do we best support them?  What tools do they need for their practices?

I would like students to have the same advantages as scientists and engineers, to be able to use code as a powerful and executable notation. Lately, I’ve been particularly focused on pre-calculus and economics. I know it’s stretching Lave and Wenger’s notion to think about classrooms as kinds of community of practice, so maybe the real community of practice is economists and professionals who use Computing. My specific interest is the edge of the community of practice, constructing legitimate peripheral participation for students who might use computing to aid in their entrance into the field. When does programming help with learning something else, and why does it help, and how can we make it more effective (e.g., use the best parts of programming that have the greatest leverage on supporting learning)?

So let’s consider these communities of practice.

This is a really weird picture, from Lave and Wenger’s perspective. I’m saying that programming is a practice in all of these communities, but it’s different in each one. We actually do know practices like this: Reading and writing, and the use of mathematics.

I suggest that programming is a literacy. (I’m not the first, of course, and I don’t make the argument nearly as well as my colleague, Yasmin Kafai.) It’s a way of expressing thought, communicating with others, and testing and exploring new ideas.

And that’s what makes computing education a social justice issue. If we have really invented a new literacy, we need to make it available to everyone.

November 5, 2018 at 9:00 am 9 comments

The Community of Practice for CS teachers? Suggestion: It’s not teachers

My Blog@CACM post this month is on the AAAS symposium I attended on undergraduate STEM education (see post here).  The symposium set up for me a contrast between computing education and other STEM education.  In math and science education, faculty are more likely to get continuing professional development and to value education more than CS faculty.

Why is it different in CS?  In the blog post, I suggest that part of the issue is maturation of the field.  But I have another hypothesis — I suggest that most CS teachers, especially at the undergraduate level, don’t think of themselves as teachers.

In my book Learner-Centered Design of Computing Education, I use Lave & Wenger’s situated learning theory as a lens for understanding motivations to pursue computing education.  Lave & Wenger say every learner aims to join a community of practice.  Learners start out on the periphery of the community, and work their way towards the center, adopting the skills, values, and knowledge that those in the center hold. They might need to take classes because that’s what the community values, or maybe they do an apprenticeship. The community of practice provides the learner and the practitioners a sense of identity: “I belong with this group. I do this practice. This is who I am.”

Lijun Ni taught me the value of teacher identity. Someone who says “I’m a math teacher” (for example) will join math teacher organizations, will seek out professional development, and will more likely be retained longer as a teacher. That’s their identity.

I believe that many science and math teachers (even at the undergraduate level) feel a sense of identity as teachers. Even at research universities, those teaching the intro courses in mathematics and science are likely teachers-first. They know that they are mostly no preparing future mathematicians, biologists, chemists, and physicists.  They are preparing students for their chosen professions, perhaps in engineering, medicine, or computer science. The math and science teachers belong to a community of practice of teachers, e.g., they have a goal to be like the best teachers in their profession.  They have an identity as teachers, e.g., they strive to be better math and science teachers.

I suspect that CS teachers feel a sense of identity as software developers. They see themselves as programmers primarily. They see themselves as producing future programmers. They take pride in what they can do with code. They have a sense of guardianship — they want the best and brightest in their field.

There’s a difference between CS teachers as programmers vs CS teachers. Programmers train other programmers. They learn new programming languages, new techniques of programming, the latest tools. Teachers teach everyone, and they learn how to be better at teaching. We need CS teachers to be teachers. It’s less important that they know the latest industry gadgets. It’s more important that they learn how to teach “all” about CS, and how to teach that CS better.

When Grady Booch came to SIGCSE 2007, I was surprised at how excited everyone was — people still talk about that visit (e.g., see the explanation for the BJC approach to computing). I realized that, for most of the people in the room, Grady was a role model.  He was at the center of community that they most cared about.  Note that Grady is not a teacher. He’s an exceptional software engineer.

There are serious ramifications of a teacher with an identity as a software engineer.  I had a discussion a few months ago with one of our instructors, who told me, “I just don’t get why women would even want to be in computer science.  Working in a cubicle is not a great place for women to be! They should get a better job.”  I was shocked. I didn’t tackle the gender issues first. I started out trying to convince him that computer science doesn’t just lead to a cubicle. You could study computer science to become something other than a software developer, to work somewhere other than a cubicle. He wasn’t buying my argument. I realized that those cubicle jobs are the ones he wants to prepare students for. That’s where he imagines the best programmers working. He doesn’t want to teach computer science for whatever the students need it for. He prepares future programmers. That’s how he defines his job — a master software engineer with apprentice software engineers.

I am calling out undergraduate CS teachers in this post, but I suspect that many high school CS teachers see themselves as software developers (or as trainers of software developers), more than as teachers of computer science.  I hear about high school CS teachers who proudly post on the wall the t-shirts of the tech companies who employ their former students.  That’s a software developer focus, an apprenticeship focus. That’s not about teaching CS for all.

What would it take to shift the community of practice of CS teachers to value teaching over software development?  It’s an important change in perspective, especially if we care about CS for all. Not all of our students are aiming for jobs in software development.

How did other STEM disciplines do it?  How did they develop a culture and community of practice around teaching?

May 23, 2016 at 7:35 am 23 comments

Dagstuhl Seminar Poster: Critiquing CS Assessment from a CS for All Lens

Today’s the last day of the Dagstuhl Seminar I’ve been attending on Assessing Learning In Introductory Computer Science (see seminar description here).  We all presented posters about the theme, and I presented a poster where I critiqued CS assessment from a CS for All Lens (see Slideshare link).


Not everyone who learns CS is going to want to be a software engineer.  Then why teach them CS?  And how would you teach them, if the goal is not for students to develop software to professional standards?  That’s what my new book is about.

If we have different learning outcomes, assessment has to change, too.  I argue that we have to consider what the learner wants to do and wants to be (i.e., their desired Community of Practice) when assessing learning.  Different CoP, different outcomes, different assessments.

I learned a lot from this seminar.  I was in a great breakout group that came up with shared definitions of a notional machine and student misconceptions, and defined a research agenda for understanding student misconceptions.  In a breakout group on conveying social and professional practice (bottom line for me: I’m not sure that we can or should in school), Andy Ko taught me a whole new way of thinking about MOOCs, about the positive role that they can play in society.  The whole week has me thinking more about adult learning and how we support lifelong development.  I have plans to write blog posts about these themes in future weeks.  But first, a long trip home.

February 19, 2016 at 7:28 am 1 comment

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 4,325 other followers


Recent Posts

Blog Stats

  • 1,575,180 hits
November 2018
« Oct    

CS Teaching Tips