

Course Offerings  Computer Science
Division of Science and Mathematics
Christine Shannon (chair); Neil Eklund, Alex McAllister, Art Moore; student: Isaac Vetter
Computer science examines the roles of theory, abstraction, and design as they are applied to the issue of complexity. Computers themselves are a result of theoretical development and the use of abstraction to design and build a machine. Anyone who uses a computer also sees clear evidence that we need to find even more powerful ways to solve complex problems like those of producing better computer hardware and software.
The major in computer science seeks to provide students with
1. a theoretical understanding of complexity,
2. the knowledge of existing techniques for dealing with complexity, and
3. experience designing appropriate solutions to complex problems found in the real world.
Since the tools and techniques of computer science can help to solve problems in many subject areas, the Computer Science Program aims to produce liberally educated graduates who are able to communicate effectively with those outside the discipline.
Some computer science graduates have continued their education by working on advanced degrees in high quality graduate schools. Those who have chosen to begin their careers immediately have been successful in finding professional employment. Computer science graduates frequently work as programmers, but the major is strong preparation for many other jobs as well. For example, a computer science major might consider a career in technical writing, systems analysis, engineering, management, or law.
Requirements for the Major
MAT 160 or 170, 190;
CSC 117, 221, 223, 332, 334, 336, 343;
Two additional courses selected from MAT 370, PHY 300, or CSC courses numbered 300 or higher.
Prospective majors must complete CSC 117 no later than the fall term of their sophomore year and should complete MAT 190 by the end of the sophomore year. The CSC 117 class is open to nonprogrammers as well as to those with some programming experience.
Students are encouraged to supplement this preparation with additional courses in mathematics, physics, and logic. In particular, students who plan on graduate study in computer science need to select additional courses in mathematics and science.
Requirements for the Minor
MAT 160 or 170, 190;
CSC 117, 221, 223;
Three additional courses selected from MAT 370, PHY 300, or CSC courses numbered 300 or higher.
Computer Science Courses
CSC 117 Introduction to Computer Science (four credit hours)
An examination of the ideas behind the operation of computers and the Internet, with an emphasis on programming. Students learn to use selection, repetition, function definition, structured types, and standard libraries to build useful programs. Topics include databases, an introduction to robotics, the basic operation of the Internet, and related social, legal, and ethical issues. Prerequisite: basic skills in mathematics or permission of the instructor.
CSC 221 Computer Organization
A study of basic computer architecture. Topics include numerical representation and arithmetic, the levels of computer organization (digital logic, microprogramming, machine language, and macro language), internal machine processes (discrete instruction execution, memory, registers, addressing, input/output considerations, and synchronization), instruction sets (addressing, data flow, flow of control, interrupts, and multitasking), and the assembly process (translation, linking, loading, and the use of macros). Assembly language programming is part of the course. Prerequisite: CSC 117 or permission of the instructor.
CSC 223 Intermediate Programming and Data Structures (four credit hours)
Continued instruction in the use of object oriented techniques. Study of the standard data structures including lists, stacks, queues, trees, and hash tables. Introduction to space and time complexity. Prerequisite: CSC 117. Laboratory work is required.
CSC 332 Design and Analysis of Algorithms
An introduction to the theoretical and empirical evaluation of algorithms and to some fundamental concepts in algorithm design and implementation. Topics include worstcase vs. averagecase performance, complexity classes, recurrence relations, problemsolving strategies, heuristics, and NPcomplete problems. Prerequisite: CSC 223 and MAT 190.
CSC 334 Theoretical Foundations of Computer Science
An introduction to the study of abstract models of computation and languages, and to the use of formal methods in computer science. Topics include Turing machines, Church's thesis, decision problems and undecidable problems, finite state automata and regular expressions, context free grammars and pushdown automata, symbolic logic, axiomatic semantics, and formal correctness proofs for small programs. Prerequisite: MAT 190 and CSC 117 or permission of the instructor.
CSC 336 Software Engineering
An introduction to methodologies used by teams to design and construct software. Prerequisite: CSC 223.
CSC 339 Topics in Artificial Intelligence
An introduction to some of the important ideas in artificial intelligence from the point of view of an intelligent agent. Topics include knowledge representation, pattern matching, automated reasoning, and searching techniques. Applications are selected from game playing, problem solving, and autonomous robots. Prerequisite: CSC 223 and MAT 190 or permission of the instructor.
CSC 341 Principles of Programming Languages
Various languages are used to study principles such as methods of representing data types, sequence control, data control, type checking, and runtime storage management. Includes an introduction to language translation and distributed and parallel programming constructs. Emphasizes differences in programming paradigms. Prerequisite: CSC 223.
CSC 342 Theory and Construction of Compilers
A study of ideas and techniques involved in the writing of a compiler for a highlevel language, including grammars, finite state machines, topdown and bottomup parsing, and symbol tables. Includes the writing of an actual compiler. Prerequisite: CSC 221 and CSC 223.
CSC 343 Operating Systems
An introduction to the role of an operating system in the management of memory, the processor, devices, and files. Topics covered include scheduling, memory management, deadlock, file structures, and concurrency. Examples are taken from actual systems. Prerequisite: CSC 223 and CSC 221 or permission of the instructor.
CSC 347 Computer Graphics
Essential topics of computer graphics necessary in the design of data structures for practical implementation in the development of software as well as the potential and limitations imposed by existing hardware. Rasterscan and vectorscan techniques are examined. Topics also include clipping, window management, color, and hidden line and hidden surface removal.. Some topics from linear algebra are included to support the development of primitives, twodimensional figures, and threedimensional transformations. Prerequisite: MAT 160 or 170 and CSC 223 or permission of the instructor.
Special Topics Offered 19982001
CSC 45 Applied Cryptography
A survey of modern protocols and algorithms used to secure and authenticate information. Students write programs to test some cryptographic techniques. Prerequisite: CSC 23.
CSC 45 Computational Geometry
An examination of basic algorithms that answer questions about collections of geometric objects. Topics include triangulations, convex hulls, Voronoi diagrams, and intersections of various geometric sets. The algorithms covered in the course have applications in a variety of areas including computer graphics, geographic information systems, robotics, and automated design and manufacturing. A significant amount of course work involves programming in C++. Prerequisite: CSC 23.
CSC 45 ObjectOriented Software Design and Implementation
An exploration of methods of design and implementation of objectoriented software. Students utilize these methods as they work as a team to complete an extended software project. Prerequisite: CSC 23.

