Skip to content

A Principled Course

2010 July 7
by Hélène Martin

This summer, I have the opportunity to work with Larry Snyder from University of Washington’s Computer Science and Engineering department on his pilot of the CS Principles course.  I’m thrilled to be part of the process: I’ve expressed skepticism in the idea of a first course in computing without much programming and I’m scared of a reduction in rigor — what better way to address these areas of concern than to be part of the effort to shape the course?

Larry has been working actively on introductory courses since 1997 or so and has written a textbook on fluency with information technology, a concept defined and solidified by a committee which he chaired.  That work has defined what “the average American” should know in order to effectively leverage the growing availability and sophistication of software and hardware products.  The group advocated teaching IT fluency in three areas: skills (how to use a particular product), concepts (underlying ideas that won’t change as, for example, new versions of software come out) and intellectual capabilities (problem solving).

Now we’re tackling a related but not entirely equivalent question: what should “the average American” know about computer science?  In my mind, that’s a trickier question since computer science is a relatively poorly defined field.  Certainly, IT products generally come out of computer science, so there’s a lot of overlap, but it doesn’t feel right to define computer science in terms of its products.  What unites those working on structural problems in graph theory to those working on accessible technology?  I still haven’t found an entirely compelling answer and some would argue that they don’t belong in the same discipline/department.  It’s frustrating to think that I can’t eloquently describe my own field but I have this vague sense that computer science is about process rather than product.  This suggests that a useful way to think of the CS Principles course in contrast with IT fluency might be that it will include an increased emphasis on “intellectual capabilities” built on top of the “concepts” part without much “skills.”

Another interesting aspect of this course is that its goals are potentially numerous and conflicting.  I think it’s pretty straight-forward to define the goals for a programming course — students exiting the course should recognize problems appropriate to solve computationally, should be able to formulate basic algorithms, and should have some syntactic fluency in the language of choice.  There’s some healthy debate to have on how to reach those goals, but I think most people would agree with the basic skeleton.  Furthermore, defending those goals is pretty straightforward.  By formally expressing algorithms, students develop their problem solving skills in a systematic and measurable way.  Programming is fundamentally a creative endeavor and that is a useful and satisfying experience for students to have.  And so on.

What about a breadth course like this Principles one?  What should a student exiting the course know/understand/be able to do?  So far, the course committee has shared lots of high-level notions of what the course should convey through its 7 Big Ideas (reminiscent of Peter Denning’s 7 Great Principles), a set of general practices and a philosophical rationale for the course.  This does not yet imply any specific set of skills and understandings that a student would have exiting the course.  That’s what the pilots are for.

For the UW pilot, to be offered this coming winter, Larry and I are trying to be disciplined about using a form of backward design to try to avoid an aimless romp through “cool stuff” related to computer science.  We are trying to come up with “unit-level” goals that describe the general concept a student should come away with, breaking those down into small skill, knowledge or understanding based goals and writing corresponding sample assessment questions so that we can then work to create the most appropriate learning activities.  I don’t know whether we’ll have the discipline to stick to this process for the development of the entire course but it has certainly helped me focus my thinking and give me hope that we can weave a coherent story.

It’s interesting to ponder whether specific outcomes and connectivity between topics matter all that much.  My sense is that if this were just a college course with the goal of getting freshmen excited about taking a programming course and considering computer science, it might be ok for it to just throw as much “cool” stuff as possible in students’ direction.  I think that for it to be successful as a high school class, though, it will need to be much more clearly based on specific outcomes.  Without those, districts will be reluctant to adopt it (where are the standards it covers?), teachers will be difficult to train (should I use Alice?  Python?  How do I decide?) and students will see it as an ‘easy AP’ to pad their schedule.

To imagined or veritable readers: How would you go about developing such a course?  What are a couple of specific things you believe students marching out of the classroom on the last day should be able to do/explain/use?

2 Responses leave one →
  1. July 9, 2010

    Hi Helene,
    I teach a course called Principles of Computer Technology to all the 10th graders in my school here in NJ. I’ve put it it together myself, totally flying by the seat of my pants. With the exception of one teacher, no one in my school has any clue about computers or tech, so I’ve had total freedom to decide what should be included. The basic outline of the course is:

    We start by taking apart computers and having a good look inside, and I spend about a week and a half talking about hardware, operating systems, and the history of computers and computing, emphasizing the Jacquard loom (and the Luddite rebellion) and the analytical engine. I stress that the computer is just a machine, and that the power comes from the speed, not from complexity of what it’s doing — there’s no magic. This is the least successful part of the course. I feel like the material is really important, but it tends towards lecture. I’ve worked hard on it, and it isn’t as deadly as it used to be, but I’d love to find more hands-on activities here.

    Then we spend about a week on computer security — worms, viruses, phishing, botnets, DOS attacks, and so forth. Kids really seem to be interested in this, more than I would expect.

    Then a few days on binary numbers, how sound and pictures are encoded.

    Then a few days talking about how the internet works — TCP, IP, DNS, routers, IP addresses and ports, etc.

    Then on to HTML and CSS. We spend several weeks on this. They enter the tags directly via a text editor. We use a validator to find and fix syntax problems. Almost everyone enjoys this part of the course. To me, this step is very helpful in easing the way into programming later on.

    One of the assignments in this part is to give each kid the name of some computer pioneer. They have to make a web page about the person, and also to present the person to the class. I’ve tried to find some offbeat and interesting people (John Perry Barlow, Jaron Lanier, Lynn Conway, etc) to humanize the subject.

    From there we talk a very little bit about Google, client/server and cloud computing, and dynamic web pages, and we spend about a week on PHP — they work in groups, doing mad-lib pages. I don’t try to explain PHP programming, it’s all based on modifying templates that I give them. Again, most kids enjoy this.

    Because I teach in a sort of a magnet school for kids who are interested in medical careers, we spend some time working in groups learning about how computers are used in medicine, from public health surveillance and GIS to medical records to bioinformatics. Everyone dreads this, but it turns out to be an eye-opener for quite a few.

    The last part of the class is about 5 weeks of programming, getting a minimal procedural introduction to Python — loops, branches, subroutines, variables, lists, some simple graphics with Livewires — that’s about it. As you know, some kids are much more successful with this than others. Some eat it up, some can’t wait for it to be over. Because I have all the students in the school, I feel like I have to go easy with this part, to be fair to the kids who suffer through it.

    The other thing that goes on is that each student writes a paper on Robotics and AI, including some topics that I specify (Turing test, strong vs weak AI, explaining what “autonomous” means in robotics), and everyone gives a presentation to the class about some particular aspect of robotics or AI that interests them (Art, prosthetics, miltary robotics, robots in movies, whatever) These presentations take up the last few days of the class, and many of them are really good.

    It’s hard to say what they get out of the class, or what specifically they can do that they couldn’t do before. This is both frustrating and alarming. They have a regular current events assignment, and they clearly have (or think they have) a better understanding of what’s going on in the world. That’s certainly valuable. I have a handout that I give them on the last day entitled “Things I hope you learned” that lists some specific items we covered, I can send it to you if you like. I guess it comes down to a quote I like from Carl Sagan: “We live in a society exquisitely dependent on science and technology, in which hardly anyone knows anything about science and technology.” Just trying to do something about that. . .

    So, that’s about it. I’d love to know more about what you do, what other folks do or are planning to do, etc.



    • Hélène Martin permalink*
      July 9, 2010

      Hi Andy,

      Thanks for the thoughtful post! I love that you’re giving this course to all students in your school and share your sense that it’s frustratingly difficult to know what students get out of these kinds of classes. Sometimes I take comfort in the fact that I’m sure our “liberal arts” colleagues (language arts, social studies, etc) must feel the same all the time. Some types of knowledge and growth are really hard to measure.

      I REALLY like your course website and blog — lots of great, great stuff on there. Thanks for sharing your course with me!

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS