Public Understanding of CS and First Courses for Nonmajors
Charles Kelemen, Swarthmore College

The study of Computer Science can help students hone their skills in problem solving, abstraction, formalization of vague ideas, careful and critical thinking, management of complexity, and clear and concise communication of ideas. These are important, general skills useful in other disciplines and useful for life. Exercise in these skills is the reason that most students should take a course in Computer Science. Once the basics of Computer Science are mastered, learning how to set up and use a software package is relatively easy.

I am concerned that most of those taking one course in computing are doing so (or are advised to do so) out of fear that they may be left behind in an ever more technological workplace. Courses that are little more than training in word processing, application package use, or very elementary programming (with an emphasis on syntax) are provided to satisfy this demand. People who finish these courses then think they know something about the discipline of Computer Science. This is unfortunate for two reasons. First, students who take a weak course miss out on a number of valuable intellectual skills and modes of thought. Second, by allowing a generation of students to think that software package use or the syntax of a programming language is the content of Computer Science, we may condemn our discipline to specialist status in the future when most packages are as easy to use as the telephone.

College bound students are not urged to take Geometry in order to construct right angles, nor do they take Physics to be able to better use a lever. In fact, these disciplines provide a kind of mental exercise and knowledge that is considered worthwhile. I argue that Computer Science, properly taught, is no less important. Below I sketch the kind of argument that I think we as Computer Science educators should be making to the rest of the world. Of course, if we make this argument, it is incumbent upon us to make sure that our introductory courses at the college level deliver the skills and ideas cited. Furthermore, we should be urging those responsible for curricula in secondary schools to upgrade their computing requirements and to find teachers with the appropriate education to teach real Computer Science courses.

Not only do many introductory computing courses fail to deliver the important skills mentioned above, they also fail to educate the public about the discipline of Computer Science.

Partly because of the recent debates over balancing the federal budget, Neal Lane, Director of the National Science Foundation, has said the following: "Federal support for science and technology can only be justified and sustained if the electorate and policy makers remain convinced of its contributions to the nation's work and to its citizens' lives. .... At the National Science Foundation, our surveys indicate that the public has a very limited understanding of science, and, more important, how science and technology improve and advance our quality of life."

It is my feeling that most of the public does understand that learning to utilize computer technology is important. They also probably have an opinion about whether computers have contributed to an improvement in our quality of life. Most of the public does not, however, have a good understanding of what the discipline of Computer Science is all about. Many equate it with programming or being a PC guru. If spreadsheets and Web browsers were first developed by people in other disciplines, why support research in Computer Science? The reason is that they were built on an infrastructure supplied by Computer Science research and both spreadsheets and browsers have been improved by people educated in Computer Science. But, does the public know this?

An introductory Physics course, whether at the university level or secondary level, usually treats topics such as mechanics, particle motion, wave motion, electricity and magnetism, heat, and provides some mention of relativity and quantum theory. How many introductory Computer Science courses treat the field of Computer Science in such breadth? If most of the public is to understand what the discipline of Computer Science is about, we must deliver more exposure to the diversity of our discipline in our introductory courses.

SKETCH OF AN ARGUMENT FOR THE STUDY OF COMPUTER SCIENCE IN 'COMPUTING' COURSES FOR NON-MAJORS

In order to solve a problem on a computer, it is necessary to understand exactly what the nature of the problem is. This requires the development of the ability to transform loosely worded descriptions into precise specifications. Once this has been done, most problems are too complex to be handled in toto. It is necessary to divide the problem into a number of individual parts that are manageable, solve these parts and then verify that reassembling these solutions together properly does in fact solve the original problem. Finally, the solution must be documented so that other human beings can understand the solution and be convinced of its validity. Developing an algorithm to solve a problem requires the ability to abstract the essence of the problem from the details. However, once the appropriate abstraction has been discovered and an algorithm developed, the computer scientist must return to the details considering every possible contingency that may arise during the sequential or concurrent execution of a number of complex processes. The execution of these processes is a dynamic event that will take place sometime after the solution has been conceptualized and on input values usually not known precisely. In order to deal with this dynamic complexity, computer scientists must develop the ability to discern statements of static, invariant relationships that will hold at various points in the problem solution independent of the initial input values.

Formulating an algorithm to solve a problem and then programming it for a computer is a bit like preparing a lecture on the problem for an extremely literal minded individual who knows nothing. Ideas must be organized and presented in a linear fashion. Everything must be stated precisely. Attempting to do this is an active, creative process that invariably leads to a better understanding of the original problem. We will use the phrase 'algorithmic thinking' to refer to this creative process of understanding and precise expression necessary to design and communicate an algorithm to a person or computer. Once the algorithmic way of thinking has been mastered, it may be applied to questions of all sorts, independently of any desire to obtain a solution from a computer. It becomes a mental tool that can be used to counteract the natural human tendency for quick and easy, but sometimes careless and sloppy, thought. This is not to say that the algorithmic mode of thinking is a panacea. Obviously, there are important questions which require other types of thinking. Algorithmic thinking is, nonetheless, a very powerful tool when added to other modes of thought.

At present the disparity between the level and structures used in human thought and those available even in our so-called high level computer languages is so great that all but the simplest programs are born containing errors called bugs. This leads to practice in tracking down bugs in extremely complex, dynamic environments. It also leads to an attempt to develop methodologies to avoid bugs, and realizing that avoidance will not be completely successful, the development of techniques to help find the anticipated but unavoidable bugs. This practice provides good exercise for anyone who lives in a world that, at times, seems to be governed by Murphy's Law, which states, "anything that can go wrong will go wrong."

The computer itself is an important general tool. It is already used in almost every discipline. Many of the present uses are rather pedestrian, but nonetheless important, applications of a computer's capabilities. Word processing, communication, indexing, and information retrieval are some examples. More creative applications of computers will require efforts by individuals with knowledge of some depth in both the application discipline and computer science. As computer scientists improve their understanding of methods to index and transform information and as users learn of the full capabilities of computer systems (as opposed to the limitations of particular software packages), we will see the realization of computer systems that extend our mental capabilities in much more profound ways than we have seen heretofore.