The general objectives for Com S 342 are divided into three parts: a set of essential objectives, a set of supporting objectives, and a set of enrichment objectives. The essential objectives will be helpful for your career as a computer scientist; hence our objective is to help you to master them. The supporting objectives are part of the means we will use to achieve the essential objectives. You are encouraged to explore the enrichment objectives both for their own sake and because learning more about those will help deepen your understanding of the essential objectives.

Essential Objectives

In one sentence, the essential objective is to familiarize you with modern programming languages and paradigms. In more detail the essential objectives for Com S 342 are as follows.

You will be permitted to use the textbook and course notes for tasks involving programming, but not during tests. On tests you may be permitted a small amount of reference material.

Understanding programming language concepts and terms is important both as an end in itself and to help with the other essential objectives. As an aid to achieving mastery of the other essential objectives, concepts and terms can provide a conceptual model of how a language operates and can give words to otherwise vague ideas.

As an end in itself, understanding programming language concepts and terms is important to enable you learn more about programming and programming languages after the course is over. Without understanding these concepts and terms, you will have difficulty discussing programming language ideas with others, and will have difficulty in reading the technical literature. Since computer science is rapidly evolving new programming languages and since language issues are important in many areas of computer science (especially user interfaces, data base query languages, computer architecture, and operating systems), the ability to learn more quickly is important to maintaining your technical edge. One specific way that such an understanding will help is to allow you to learn new languages quickly, by mapping programming paradigms and concepts into the new language's syntax, and by reading the new language's reference manual. Reference manuals are often thick with technical terms and make heavy use of programming language concepts. You will probably need to learn many different programming languages and user-interfaces during your career. Finally, and understanding of such concepts and terms will help you to better understand whatever language you program in; this will help you program more effectively. Being able to program better will also give you increased job satisfaction.

Knowing how to program in different paradigms is important for several reasons. You can find solutions to problems more surely if you have many different ways to approach problems. In the twenty-first century you will not necessarily be programming in FORTRAN or COBOL; if you can program in a language such as Smalltalk, C++, or Ada, or other new languages you will be much in demand. As parallel programming becomes more important, the use of functional and logic programming languages may increase. Already the use of object-oriented languages is increasing.

Even if you do not become a programmer, the ideas of the functional paradigm (function abstraction, infinite data structures, continuations, referential transparency) have important applications in all areas of computer science and in many other contexts such as mathematics and engineering. Similar comments hold true of the object-oriented and logic programming paradigms. For example, the idea of data abstraction is certainly a key concept in software engineering and even in contemporary mathematics (category theory). Knowing logic programming can help you in such diverse tasks as using a database query language and in careful specification of problems (which is necessary for problem solving in any domain).

Since problems in the real world do not come labeled with a given paradigm, you must be able to evaluate the paradigm and language that will give the most help in solving a given problem. You must be able to justify your decision using well-reasoned arguments to decide whether your approach to solving the problem is promising.

Enrichment Objectives

Enrichment objectives could be multiplied without limit, but the following seem most important or most easily taught using the course text. Following each of the enrichment objectives is a brief justification.

Gary T. Leavens