Computing Profession BLOG@CACM

Is Higher Education an Engine of Opportunity, or a Perpetuator of Privilege?

Mark Guzdial considers the goals of computer science education and the role(s) of educators within that.

Professor Mark Guzdial August 18, 2021

The 2020 Olympic Games (delayed to 2021 due to the pandemic) have ended in Tokyo. The Olympics are about elite athletic competition. The athletes in Tokyo were pushing outward the edge of what we think humans are capable of doing. They tried to jump further and higher, run and swim faster, and change our understanding of humans’ limits.

For some faculty, this is the point of higher education. I was recently in a faculty retreat where we were talking about improving access to the computer science (CS) major, particularly in order to support more diversity in many forms. One of my colleagues pushed back. He is in favor of improving access and increasing diversity, but he wants us to also to acknowledge our responsibility to provide the best-prepared students with an elite education. There are students who come to our campus with a strong prior background, with enormous interest and self-efficacy, who want to succeed in existing social systems. They come to us to prepare them to do things in CS that have never been done before, to invent and innovate, and to change the world.

Higher education can serve as an engine of opportunity. Going to college can lead to greater social mobility than one’s parents. More often, higher education perpetuates inequality (see The Chronicle of Higher Education series on the topic at Rather than developing everyone’s talents and abilities, we focus on preparing those who are already well prepared, which privileges those who are already privileged.

How do you see as your job as a teacher? Let’s use a sports and health analogy. Are you a coach, pushing the top athletes to achieve as much as they can? Or are you a public health worker, ensuring the environment is safe for everyone with a goal of everyone having a healthy life?

For the moment, let’s say we are promoting the coach model, and we want to help our top athletes reach the Olympics. We can aim for our CS students to be high achievers in computing—to be one of the elites. We can teach our students skills in software engineering, research, and entrepreneurship, and we can implement assessments that filter out those who don’t have what it takes to be a top competitor. This is already a common model for CS education at top institutions. But it is missing an enormous potential impact of CS.

Elite STEM education needs computing, too. Each year the Nobel prizes are awarded, I hear about the laureates who used computation to achieve their breakthroughs. We can expect that all future research that is competitive for a Nobel prize will require computation. Computing is useful not just at the very top of the pyramid. All elite scientists, engineers, and mathematicians will need to be skilled at leveraging computation within their domain.

Then comes the critical question: Who is best positioned to teach elite scientists, engineers, and mathematicians about computation? Should it be the domain experts or the computer scientists? My answer is “Yes, and … “.

One of the best books ever written on the learning sciences is How People Learn: Brain, Mind, Experience, and School, which is freely available from the National Academy Press ( Chapter 2 is on How Experts Differ from Novices ( The first page of the chapter says, “Though experts know their disciplines thoroughly, this does not guarantee that they are able to teach others.”

A huge challenge to learning and teaching in higher education is that faculty often have an expert blind spot. The foundational knowledge, the basic “how it works” knowledge is so ingrained and so tacit that faculty do not even see it to teach it. Faculty often do not even know what they need to teach, because it’s “obvious” to them.

The expert blind spot is most significantly a problem when teaching the foundational concepts. If you use computation every day for decades, you stop seeing it. You think about what you can do with it, but you actually forget what you did not know and what was hard to learn. Upper-level courses (past the “how it works” stage) are about how to be a good computational scientist, engineer, or mathematician. Those classes ought to be taught by the domain experts—the ones who know best the practices, skills, and knowledge of computational science, engineering, and mathematics. But not the foundational courses.

Here is a thought experiment: Look at these five letters: “Apple.” You know that once upon a time, that first letter was two slanted lines and a horizontal line to you, but now you are unable to only see the letters. You automatically read the word `apple’. Teaching someone to read requires us to study how people learn to read. We can’t just reflect on it; our learning experience is now blind to us. Teaching someone about computing requires us to study how people learn (and struggle with) computing.

Foundational courses should be taught by someone who focuses on seeing the expert blind spot. A student with great prior background and enthusiasm for science, engineering, and mathematics still needs to be taught computing. Those teachers should study what people don’t know about computing. That’s what a good foundational course in computer science should be about. These foundational courses should also be relevant. They should be contextualized in what the students want to do with computing—we call this contextualized computing education (

Computing education research is developing a good track record at figuring out the needs of those who study computing, but are really interested in the rest of STEM.

  • One of the most cited papers on computational thinking is “Defining Computational Thinking for Mathematics and Science Classrooms” ( The authors interviewed mathematicians and scientists to figure out what they do with computing, then drew on research literature to identify what students would need to be taught.
  • Another example is a recent thread on the SIGCSE Members list about whether variables should be described as “boxes” or as “labels.” There is a rich literature on the use of each. This is not a literature that scientists, mathematicians, or engineers will likely know or care about. Probably most computer scientists don’t either. But it is exactly that kind of knowledge that you want for the teachers of computing to future elite scientists, engineers, and mathematicians.
  • There is a growing literature developing on how to develop computing curricula in collaboration with domain teachers, for example, in mathematics for middle and high school students (, in fractions for elementary school students (, and in biology for undergraduates (

I see two paths to help STEM learners gain the computing skills and knowledge they need:

  • Option 1: CS Does It. We trust mathematicians to teach foundational math, because they’re the ones who are going to be most expert at how to teach math, at what students typically get wrong, and at what works to get students past those early stages. Same for physics, chemistry, biology, and so on. Computer science should be the place to teach everyone the computing education they need—as long as we do it in a relevant and contextualized way. We should not teach the same classes to everyone. That’s what we’ve been learning in our task force at the University of Michigan to define computing education for liberal arts and sciences majors ( But some computer science departments are deeply focused on producing elite engineers (, so this first option might not always be available.
  • Option 2: Invent Something New. An alternative option is to build a computational science community that focuses on seeing the expert blind spot. Michigan State University has created a Department of Computational Math, Science, and Engineering (CMSE, jointly between their Engineering and Natural Sciences Colleges. They are charged with teaching computational modeling to everyone. CMSE has scholars who are explicitly engaged in physics and computing education research. They are a hybrid designed to provide foundational knowledge.

With computer science undergraduate enrollments on an exponential growth curve at many institutions, it can be difficult to see who else needs computing education. But we should. The future is not only in computer science. Computer science can be key to building many futures.

Back to Top


Thanks Mark. Funny, I was bringing my beginner mind to study of a Udemy course intended for folks interested in developing computer games using a simple, nicely-done foundation. I noticed the degree of tacit knowledge and complexification (in the name of simplicity) that was visible at every section of the course. Too many unconnected dots.

There I stumbled into my own tacit knowledge, blindly assuming installation of git and also understanding reliance on editing files with VS Code. It is illuminating to see the online Q&A and Discord discussions where some beginners are brave enough to reveal their struggles and misunderstandings. Others post impenetrable “expert” responses that fail as useful guidance and also expose tool religions.

This has me wonder if some appeal to having elites in a class is a form of laziness as well as confirmation of brilliance for those who teach with little preparation/interest around how people learn.

Dennis Hamilton

Hi Dennis,

I appreciate your insight and share your wonder. Spot-on!

Mark Guzdial


Join the Discussion (0)

Become a Member or Sign In to Post a Comment

The Latest from CACM

Shape the Future of Computing

ACM encourages its members to take a direct hand in shaping the future of the association. There are more ways than ever to get involved.

Get Involved

Communications of the ACM (CACM) is now a fully Open Access publication.

By opening CACM to the world, we hope to increase engagement among the broader computer science community and encourage non-members to discover the rich resources ACM has to offer.

Learn More