Computation is used just about everywhere these days. It is used to control planes, cars, nuclear power plants, city traffic, and even to monitor wildlife. To support such a large range of applications, computer scientists learn a variety of problem solving techniques that have come to be called "computational thinking." Such techniques have proven to be useful even when computers are not involved in doing the computation. The goal of our program is to teach students these skills so that they can apply them to programming problems, improving the tools we use in computing, or developing programs or tools for other application areas.
The introductory class sequence for the CS Bachelor's and Minor degrees consists of two classes: CMPSCI 121 and CMPSCI 187. In this sequence, students learn some of the basic techniques and tools of computer science. After these two classes, students understand how to program a computer, how to design, develop, and test interesting software systems, and how to use many of the tools computer scientists have developed to make this as easy as possible.
In CMPSCI 121, the goal is to de-mystify the machine. A computer can perform a variety of tasks. But to do so, it has to receive exact instructions on how to process the user's input, which computations to perform, what to display on the screen, or what to write to a file. Given the versatility of the machine, we need an equally versatile method of specifying what this machine should do. We call this, maybe a little bit disrespectfully, "programming." CMPSCI 121 teaches programming using Java, one of the most general programming languages. This class uses an object-oriented approach to learning programming, where students can quickly see the benefits of defining and manipulating objects. In addition, this class uses examples that illustrate how the simple, basic instructions of a computer can be applied to solving complex, interesting problems in a number of different domains.
CMPSCI 187 teaches some of the most fundamental and important tools of computer science: data structures and algorithms. These tools complement what was learned in CMPSCI 121 by teaching how to give instructions to a computer in the most effective and efficient manner. Whereas CMPSCI 121 teaches how to get a computer to do what is wanted, CMPSCI 187 teaches students how to think, design, and create like a computer scientist.
If you compare programming to building a wall by stacking bricks, CMPSCI 121 teaches students the skills needed to lay bricks according to the stated plan and CMPSCI 187 teaches the beginning principles of becoming an architect. In both, students develop skills and exercise their intellectual and creative abilities for problem-solving so that ultimately they can apply these skills to developing complex computational systems for a wide variety of domains. Being a hacker will not be sufficient. Computer Scientists need to analyze problems and learn to select the right tools (algorithms and data structures) for the job. After taking these classes, students will have started to learn some of these tools and to learn what computer science really is about.