Computing Community Consortium Blog

The goal of the Computing Community Consortium (CCC) is to catalyze the computing research community to debate longer range, more audacious research challenges; to build consensus around research visions; to evolve the most promising visions toward clearly defined initiatives; and to work with the funding organizations to move challenges and visions toward funding initiatives. The purpose of this blog is to provide a more immediate, online mechanism for dissemination of visioning concepts and community discussion/debate about them.


Computer Science for Non-Majors

February 17th, 2014 / in Uncategorized / by Ann Drobnis

RanThe following is a special contribution to this blog by Ran Libeskind-Hadas, R. Michael Shanahan Professor and Department Chair of Computer Science at Harvey Mudd College, currently on sabbatical at Massachusetts Institute of Technology (MIT).  Ran is a member of the Computing Community Consortium (CCC) Council and Co-Chair of the Computing Research Association’s Education Committee (CRA-E). 

I’m on sabbatical this year and have been visiting computer science departments at colleges and universities, small and large.  One of the recurring stories that I hear is that a growing number of non-majors are choosing to take introductory CS courses.  And, some of these students get so excited that they choose to take a second CS course.  Although this results in large courses and staffing headaches, it is generally viewed as a good “problem” to have.

I believe that this is an ideal moment to develop new computing courses and curricula for non-majors.  This sounds crazy given that we’re drowning in students and have little precious time to do much more than tread water.  Here’s my case.

College students across all fields are quickly recognizing two important facts:  Every well educated citizen should understand something about the computationally-pervasive world in which we live.  Second, computing skills are likely to be useful across virtually all disciplines including the arts, humanities, and social sciences.

Many of these students discover computing late in their college lives and/or have other constraints that prevent them from taking more than one or two computing courses.  Those students, I believe, are not ideally served by traditional CS 1 and 2 courses which are often designed as the stepping stones of a computer science major.  While implementing a queue as a doubly-linked list is probably important for a CS major (although one could reasonably argue that it still doesn’t have to be presented in CS 1), it’s almost certainly not the highest priority for a social scientist or a biologist.

What then should be taught in courses for non-majors?  I don’t believe that there’s one right answer, but I do believe that some of the ingredients are the following:

* Programming.  Building interesting computational artifacts is incredibly exciting and compelling and helps demystify the otherwise magical software that a college student uses everyday.

* Programming at a “high level of abstraction”.  Specifically, using a language with low syntactic overhead and with built-in abstract data types in order to concentrate on building interesting computational tools.

* Demonstrating a breadth of applications.  Depending on the design of the course, this breadth might be a range of applications across many fields of studies, just in one domain (e.g., sciences, social sciences, arts), or a specific discipline (e.g., biology).

* Giving students the tools to write programs that they actually want to use.  Here are two simple litmus tests:  Will students spend at least as much time using their programs to explore something new as they did writing them (e.g., using a program to align biological sequence and make inferences from those alignments, building their own music recommender system, etc.)?  And, does the assigned work offer creative avenues for students to invent and implement their own ideas (e.g., in the form of innovative features above-and-beyond the minimum requirements)?

* Discussing big ideas such as efficiency and intractability or how computers work.

Many departments have recently started developing and offering courses in this spirit.  Some examples include the “Data Programming” course at the University of Washington (http://courses.cs.washington.edu/courses/cse140/), “The Beauty and Joy of Computing” at Berkeley (http://inst.eecs.berkeley.edu/~cs10/sp14/) , “Computer Science for All” at Harvey Mudd (https://www.cs.hmc.edu/twiki/bin/view/CS5/WebHome), among others.

It’s hard to allocate resources to this endeavor, but it’s an investment worth making, both for the well-being of society in general and to cultivate more computationally sophisticated future colleagues across all disciplines.

Computer Science for Non-Majors

8 comments

  1. don Francisco says:

    I think it is great that you took on this challenge. I think it is
    great because of necessity it raises a lot of other related questions.

    The evolution of the discipline of Computer Science is very different from
    that of Mathematics and Statistics but it has dramatically impacted
    these and every single other academic discipline in ouir colleges and Universities and the impact of that evolution shows ho sign of slowing down. .

    By identifying what a non-major ought to know, you will of necessity have to ask why should a CS major know or not know that same material.

    By attempting to know what non CS majors should know we will have to look at what CS programs are teaching today and we will have to ask if they are meeting the Steelman standards which we know many departments are simply not meeting.

    We will have to ask if our current CS faculty are up-to-date in the progress that have not only taken place in their own specialties but what they know or do not know has taken place in related CS subject matter areas.

    My feeling is that we are very much like the Mathematics departments were at the time right after Sputnik ( 1957) where it was decided that we needed to teach “The New Math” and had to face the fact was we didn’t have enough Math teachers who could teach other Math teachers and bring them up to date.

    It is the general opinion of those working in both industry and academia that some of our CS based industry has left academia in the dust. Many of our best CS faculty are doing important and supposedly financially rewarding research but the teaching strength of our departments has declined because of the emphasis on paying research. More research is needed here.

    I will watch what these trailblazers are about with great interest
    .

  2. Michael Ernst says:

    There will be a special session at the SIGCSE 2014 conference (March 5-8, Atlanta) about teaching computing to non-majors using real-world data and real-world problems. The special session will take place at 1:45-3:00 on Friday, March 7.

    The abstract appears at
    https://www.openconf.org/sigcse2014/modules/request.php?module=oc_program&action=summary.php&id=1330
    and you can read a 2-page description of the special session at
    http://homes.cs.washington.edu/~mernst/pubs/data-programming-sigcse2014.pdf
    The approach has been used at 4 colleges and universities, one of which (at the University of Washington) was mentioned in the original CCC blog post:
    http://tinyurl.com/dataprogramming