Teaching Computer Science through Inquiry

December 27, 2010 at 11:41 am 21 comments

The second page of the National Science Education Standards highlights the importance of inquiry.

Inquiry is central to science learning. When engaging in inquiry, students describe objects and events, ask questions, construct explanations, test those explanations against current scientific knowledge, and communicate their ideas to others. They identify their assumptions, use critical and logical thinking, and consider alternative explanations. In this way, students actively develop their understanding of science by combining scientific knowledge with reasoning and thinking skills.

via National Science Education Standards.

Do a Google or Bing search on “inquiry in science education” and you’ll get some 9 million hits, from NIH to the National Academies, to scholarly articles and textbooks.  Inquiry is the best way we know to teach science.

Now, do a similar search on “inquiry in computer science education.” You’ll get a few thousand hits, but most of them seem to be on “computer science education” without “inquiry.”  The Exploring Computer Science curriculum claims to be inquiry-based, but their description of inquiry (“inquiry focused instruction is modeled through role playing, jig sawing activities, pair and small-group collaboration, structured tinkering, promoting multiple solutions, and engaging in simulations”) doesn’t obviously mesh with the definition above from the National Academies.

Next, let’s visit the ACM Digital Library and search for papers sponsored by SIGCSE on “inquiry.” I found four papers. Two were on using computing to do mathematics inquiry. One was a single page poster. The fourth was on using the Web for inquiry.

We generally teach computer science as engineering, but we do argue that computer science is both science and engineering.  Wouldn’t it be worthwhile to explore teaching CS as science, too?  Inquiry-based learning is about using students’ questions to drive the learning. We do try to answer students’ questions in our CS courses, but the questions tend to be of the form, “How do we make X?”  If we were to teach computer science as inquiry-based science education, we would be answering questions of the form, “How does X work?

Teaching computer science as inquiry might be a great way to teach debugging skills.  We would think about each run of a program as an experiment, and we would explicitly “identify assumptions,” “construct explanations,” and “consider alternative explanations” (from the NAP definition above).  Teaching CS as inquiry would be about encouraging students to explore “how things work” and what their models of computation are and what they should be.  Our first step towards building an inquiry-based CS education would be to identify what questions students have and what their existing models of computing are.

When Barb and I were trying to argue that AP CS should count as a science in Georgia, we made this argument explicitly that CS could be taught as science.  The reasonable response was, “Yes, it could, but APCS doesn’t teach CS as science.”  The evidence for inquiry-based science education is strong, and successful curricular models exist. Teaching CS as inquiry may be a way to teach CS better and may be a path towards getting CS more easily recognized as part of STEM education

Entry filed under: Uncategorized. Tags: , .

Where Good Technologies Come From: Case Studies in American Innovation What’s College good for, anyway?

21 Comments Add your own

  • 1. gasstationwithoutpumps  |  December 27, 2010 at 12:16 pm

    I’ve got a PhD in computer science, and I came into the field initially because it was where all the cool math was happening (I have BS and MS in math). I was initially interested in doing combinatorics and graph theory.

    But over the years I have become more and more applied. I see nothing wrong with teaching CS as an engineering discipline, with the focus on how to make things that work. Computer science is much more about building things than about discovering things. This does not mean throwing out all theory, as all engineering disciplines have a core of theoretical work, but concentrating more on good practice.

    For example, I’ve been finding that CS education puts far too little emphasis on documenting programs and structuring them cleanly. In most of the larger courses, no one ever reads the programs at all—they’re just run on a standard data set (which often misses the difficult edge cases) to see if they are approximately ok. This is ok if you are just trying to find out if students have the basic ideas, but not a way to develop proper engineering practice, where details matter.

    Many of the students graduating with bachelors in CS have never heard that it is more important to document the meanings of variables than to translate the actions of the code into pseudo-English. (After all, the only examples of documentation they have seen have been glosses in books teaching them language constructs, where the comments were intended to teach the language, not to properly document the code.)

    I think that recognizing that CS is properly an engineering discipline, rather than a “science” would go a long way toward correcting some of the most serious problems in the field. It is much easier to justify the importance of clean, well-documented code from an engineering standpoint than from a scientific one.

    • 2. Mark Guzdial  |  December 27, 2010 at 12:42 pm

      I’m not arguing that there’s anything wrong with teaching CS as engineering. In computing education research, we should explore many ways to teach computing, and it’s clear that we have not yet explored much about teaching CS as science. One potential advantage is that we might be able to teach debugging skills better as a science, since the thinking around exploring alternative explanations is made more explicit in a science than in an engineering approach. If we are exploring the goal of CS for all, not just for those who will develop software professionally, then teaching CS as science, as a way of understanding the computational world around us, provides greater leverage and insight than CS as engineering. I am not arguing that CS is either science or engineering. I’m looking for more ways to think about teaching CS.

    • 3. Aaron Lanterman  |  December 29, 2010 at 8:28 am

      “Computer science also differs from physics in that it is not actually a science. It does not study natural objects. Neither is it, as you might think, mathematics; although it does use mathematical reasoning pretty extensively. Rather, computer science is like engineering — it is all about getting something to do something, rather than just dealing with abstractions… But this is not to say that computer science is all practical, down to earth bridge-building. Far from it. Computer science touches on a variety of deep issues. It has illuminated the nature of language, which we thought we understood… It naturally encourages us to ask questions about the limits of computability, about what we can and cannot know about the world around us.” – Richard Feynman, “Feynman Lectures on Computation”

      • 4. Mark Guzdial  |  December 29, 2010 at 12:44 pm

        I wonder if Feyman would look at all the technology surrounding kids today and see that computing is part of their “natural” world, and trying to figure out how it all works is akin to figuring out where rain comes from.

        • 5. Alan Kay  |  December 29, 2010 at 1:29 pm

          I had a chat with Feynman about this when he was working with Danny Hillis at Thinking Machines years ago.

          First, it’s important to realize that most of Feynman’s quotes have been filtered through his friends, such as Ralph Leighton and Edward Hutchings, who actually wrote down his remarks as they say fit.

          Second, it is clear from his actual written lectures that he didn’t think Physics studied “objects”. Like any scientist he realized that science only has phenomena (itself filtered through machines and nervous systems) to try to make sense of. His own field of QED is exactly that right now, it is a deeply accurate predictor of the phenomena (one of the most accurate in science) but with an embarrassing lack of next lower level mechanism to explain it.

          He did balk a bit at the idea that phenomena generated by human made things was “just phenomena” and thus was the proper province of science. But (at least in this conversation) he didn’t come up with any way to distinguish the two (I don’t think they are different).

          He was famous for being suspicious of non-mathematical sciences like Anthropology, in which the cultural part is exactly studying human made phenomena. From my point of view there is no question that, carefully done, Anthro is a real science (and one of the most important ever invented).

          In this quote, he uses my favorite metaphor to try to explain computing as a wide-ranging discipline — bridges and bridge-building — but misses that there is actually an active science of bridge building that in every way resembles what “natural scientists” do.



      • 6. Rob St. Amant  |  December 29, 2010 at 2:02 pm

        “Computer science also differs from physics in that it is not actually a science. It does not study natural objects…”

        Newell, Perlis, and Simon answered this objection in their article “What is Computer Science?”, writing, “The objection would equally rule out of science large portions of organic chemistry (substitute ‘silicones’ for ‘computers’), physics (substitute ‘superconductivity’ for ‘computers’), and even zoology (substitute ‘hybrid corn’ for ‘computers’).”

        • 7. Aaron Lanterman  |  December 29, 2010 at 2:13 pm

          Following along with one of Alan’s responses, I found Feynman’s use of “natural objects” a bit strange. I would have expected him to say something like “natural phenomena.”

  • 8. Alan Kay  |  December 27, 2010 at 2:13 pm

    People who read this blog might be interested in a rather large scale “Computer Science as a science” research project.

    The “STEPS Project” (Steps Toward Expressive Programming Systems) takes the view that science views *phenomena” and tries to understand it by building models that explain it (and in the deepest sciences, the models *produce* highly similar phenomena).

    The phenomena could arise from human made things, so there can be a science of “bridges” …. and a science of “computer systems”.

    Here is the STEPS proposal to NSF from 4 years ago.

    Click to access rn2006002_nsfprop.pdf

    It proposes to make a working model of “vanilla personal computing” from the “end-user down to the metal”.

    One can find the yearly reports on the webpage:
    (Choose “Fundamental New Computer Technologies” and “Alan Kay” to narrow the search)

    We took a kind of “Maxwell’s Equations” approach to making the model. We wanted it to be comprehensive and small (1000 to 10,000 times smaller than the code in typical personal computer systems and apps).

    But we also avoided reverse engineering the actual phenomena or “dirty details” from the vendors. Instead we designed a new system that would act the way personal computing does, but we were able to use as many design and mathematical skills as we could muster to get around some of the less than celestial approaches in some of today’s systems.

    No cries of victory at this point, but I think some folks in computing and in computing education will find the stuff that has been done to be interesting.

    Perhaps some will also be able to see a different kind of approach to “what is CS?” and a different approach to curriculum for introducing our field,



  • 9. Barbara Boucher Owens  |  December 27, 2010 at 7:31 pm

    This might be the most important post we’ve seen in a long time. Too bad it is during the lull between terms. I hope everyone gets a chance to mull this over.

  • 10. Gilbert Bernstein  |  December 28, 2010 at 1:03 am

    Mark, thanks for this post. I didn’t realize there was so little work done on inquiry based approaches for CS education. I think that Shawn Cornally over at Think Thank Thunk has expressed some desire to use more inquiry in his high school CS classes. It could be interesting to pick his brain.

  • […] This post was mentioned on Twitter by busynessgirl. busynessgirl said: RT @RobertTalbert: Very interesting. | Teaching Computer Science through Inquiry http://tinyurl.com/22vphph […]

  • 12. Bonnie MacKellar  |  December 28, 2010 at 9:27 am

    Is it possible that computer science educators just don’t use the term “inquiry”? I have done the type of activity described in your post for years – we even had a NSF equipment grant to support this kind of thing back in the 90’s – but we never called it “inquiry”. I think our term back then was “active learning”. Also, I never write papers about it because I figure everyone teaches that way, no?

    As for the science vs engineering thing – I really think that despite its name, computer science is firmly an engineering discipline, just like electrical engineering and civil engineering. Our students are going to work in industry on projects that are much more similar to designing and building bridges than to running biological experiments. I strongly believe that not enough engineering is taught in most CS programs.

    • 13. Alan Kay  |  December 28, 2010 at 10:38 am

      Hi Bonnie,

      I think computing is a large discipline that includes all the STEM areas.

      To me, it is a very bad idea to have the science part of this considered as an engineering discipline (and I’d also like to see the engineering part be more like a real engineering discipline).

      I lay the blame for this confusion (and worse the narrowing of the field) to academia, which has not taken care to keep all the flowers planted in the 60s blooming.

      Using words weakly and carrying those weak uses to weak thresholds in our field has made a real mess of it over the last 30 years.

      Best wishes,


    • 14. Mark Guzdial  |  December 28, 2010 at 7:33 pm

      Certainly, it’s possible that you were doing “inquiry.” Inquiry learning is a form of active learning, but it is characterized by being driven by a question, e.g., “Why is the sky blue?” or “Why is it summer in the North when it is winter in the South?” If you were doing active learning, I’d love to hear what questions you used to drive the instruction. With all the technology in kids’ lives today, I’m interested in what questions they have and how they think it all works.

  • 15. gasstationwithoutpumps  |  December 30, 2010 at 11:25 am

    I think that there is a core science of computation, but that relatively few of those who study “computer science” need or are interested in that core. Most of the CS graduates go on to become engineers, interested in building things, not in figuring out how they work.

    I don’t propose that the core theory of computer science be abandoned, but unlike Mark, I don’t think that increasing the “science” part of CS is desirable for pedagogic purposes. Indeed, part of the problem of CS education has been the emphasis on theory at the expense of practice.

    If we get past the use (or perhaps misuse) of the word “science”, though, the basic suggestion that Mark is making—increasing the use of inquiry-based learning—is a good one. I would argue that the correct questions to center the inquiry on are engineering questions, though, rather than scientific questions. They aren’t “how does this work?” but “how can I make something to do this?”

    • 16. Alan Kay  |  December 30, 2010 at 2:31 pm

      I think that trying to make a strong analogy to real engineering and how much science real engineers need to know is a good idea — again, e.g. for doing large scale making of things like suspension bridges, and domes, etc.

      Since Newton and the invention of modern science, engineering has to understand “how does this work” to understand “how to make something work”. The lack of this is the big bug in most current conceptions (especially in academia and commerce) of our field — and it’s why so much crappy below threshold unacceptable junk gets bubblegummed together.



  • […] argued in a previous blog post that inquiry-based computer science education is not possible today because we know too little about how people think about the computing in their lives.  The result […]

  • […] just got the rejection and reviews from my NSF Cyberlearning proposal. I was proposing to work on inquiry learning in CS Education, i.e., to conduct studies to explore what questions students had about computing, and with some […]

  • […] mental models, which I think is key for computing education (e.g., for figuring out how to do inquiry learning in computer […]

  • […] hard for us to apply this idea from science education and teach an introductory computing course via inquiry, because students may not have many questions that relate to computer science when they first get […]


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed

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

Join 9,052 other followers


Recent Posts

Blog Stats

  • 2,031,370 hits
December 2010

CS Teaching Tips

%d bloggers like this: