Computer Science
Changes effective Fall Term 2008
| Anderson |
Carrington |
Child |
Holt |
| James |
|
|
|
The Department of Mathematics and Computer Science offers a computer
science major that develops students' ability to design and implement computer
programs to solve many types of problems. Based on curricula developed
by the Association for Computing Machinery (ACM), the major prepares students
for graduate study and for many interesting computer-related endeavors.
The computer science minor complements any major for which computer applications
are important. The minor also gives students excellent preparation for
many computer-related occupations.
MAJOR REQUIREMENTS
Fourteen (14) courses are required. A first-year student majoring in
computer science will typically take CMS 167A/167B and MAT
111 in the fall, and CMS 170 and MAT 140 in the spring. Students who are not prepared to start with calculus should
start with MAT 109 instead of MAT 111.
CORE COURSES
-
CMS 167A/167B Introduction to Computer Programming
-
CMS 170 Computer Science Principles I
-
CMS 230 Introduction to Computer Systems
-
CMS 270 Computer Science Principles II (object oriented design)
-
CMS 330 System Software Principles
-
CMS 360 Algorithm Analysis
-
CMS 484 Senior Computer Science Capstone
-
CMS 485 Senior Seminar in Computer Science
ELECTIVES
Two (2) of the following are required; one (1) of these must be a 400-level
course.
-
CMS 375 Database Management Systems Design
-
CMS 395 Topics in Computer Science
-
CMS 430 Artificial Intelligence
-
CMS 440 Computer Graphics
-
CMS 450 Networks
-
CMS 480 Programming Language Translation
ADDITIONAL REQUIREMENTS
MINOR REQUIREMENTS
Eight (8) courses are required: the following four (4) courses and four (4) additional classes chosen from requirements
for the major.
CORE COURSES
-
CMS 167A/167B Introduction to Computer Programming
-
CMS 170 Computer Science Principles I
-
CMS 270 Computer Science Principles II
-
MAT 110 Applied Calculus OR MAT 111 Calculus I
Course of Study
CMS 167A/167B Introduction to Computer Programming: Introduction
to fundamental aspects of programming, focusing on problem solving, software
design concepts, and their realization as computer programs. Topics include:
variables, procedural abstraction, control structures, iteration, representation of numbers,
and data types. Introduction
to high-level programming language to gain mastery of these principles
provided in classroom activities and closed laboratory experiences.
CMS 170 Computer Science Principles I: Develops discipline
in program design, problem solving, debugging, and testing, with an introduction
to data structures. Topics include: abstract data types, complexity analysis,
and recursion. Basic data structures (queues, stacks, trees, and graphs)
and transformations (sorting and searching) are introduced as representative
of the fundamental tools that are used to aid in software development. A
high-level programming language is used to construct programs of a moderate size.
Prerequisite:
CMS 167A/167B. CMS
230 Introduction to Computer Systems: Introduction to the study of how software controls the critical
hardware components of a computer's architecture – the CPU and
RAM. Topics include
development of C language programs, comparison of high-order
procedural languages to machine language programs, CPU organization
and functionality at the register/bus level, instruction formats,
and development of machine language and assembly level programs
using multiple addressing modes, flow-of-control branching and
subroutine calls. Prerequisites: CMS 170 and MAT140. CMS 270 Computer Science Principles II: Object-oriented
programming, event-driven programming, UML, unit testing, virtual machines,
design patterns, exception handling, and user interfaces. Uses Java and assumes
knowledge of a procedural or object-oriented language. Prerequisite:
CMS 170. CMS 330: System Software Principles: Short
history of programming languages and their construction. Techniques
of language translation including lexical analysis, grammars, and
parsers. Analysis of the structure and functionality of modern
operating system software, with emphasis on concurrent processes.
Topics include: process scheduling, communication, and
synchronization; API services; and, design and development of
concurrent program using OS features. Prerequisite: CMS
230.
CMS 360 Algorithm Analysis: Detailed study of algorithm
design and analysis, including greedy algorithm, divide and conquer, dynamic
programming, backtracking, and branch and bound. Emphasis on verification
and analysis of time space complexity. NP theory is introduced. Prerequisites:
CMS 270 and MAT 140.
CMS 375 Database Management Systems Design: Introduction
to design and management of database systems. The course project involves
design and implementation of a relational database. Topics include file
organization, relational models and their implementations, query language
theory, and data normalization.
Prerequisites: CMS 370 and
MAT 140.
CMS 395/495 Topics in Computer Science: An intensive introduction
to a specialized area of computer science. Example topics are: user interface
design, parallel and distributed processing, multimedia development, theory
of computation, network programming, modeling and simulation, and software
development tools. Prerequisites: CMS 270 and consent.
CMS 430 Artificial Intelligence: Selective survey of key
concepts and applications of artificial intelligence and an in-depth experience
with a language commonly used for building AI systems (e.g., LISP or Prolog).
Subtopics include knowledge representation, state space/searching, heuristic
search, expert systems, expert system shells, natural language processing,
propositional logic, learning and cognitive models, and vision.
Prerequisite: MAT 310.
CMS 440 Computer Graphics: Survey of computer graphic
hardware, primitive graphic operations and implementations, two-dimensional
and three-dimensional transformations, hidden lines and surface removal,
illumination and shading models, curves and surface, color modeling, and
animation. Prerequisite: CMS 270. CMS 450 Computer
Networks: Study of the technology, architecture, and
software used by systems of network-connected computers. Topics
include data transmission, local area network architectures, network
protocols, inter-networking, distributed systems, security, and
network applications such as email, WWW, and FTP. Students will
develop programs that run concurrently on multiple computers. Prerequisite:
CMS 330.
CMS 480 Programming Language Translation: An in-depth
study of the principles and design aspects of programming language translation.
The major components of a compiler are discussed: lexical analysis, syntactic
analysis, type checking, code generation, and optimization. Alternate parsing
strategies are presented and compared with respect to space and time tradeoffs.
A course project consists of the design and construction of a small compiler.
Prerequisites: CMS 270 and CMS 330.
CMS 484 Senior Computer Science Capstone: The Senior Capstone
course provides a culminating and integrative educational experience. While
participating on a team with other students, students will design and implement
a large-scale software project. Class meetings will be used for teams to
demonstrate the progress of their project as well as for the teams to meet
and work. Team meetings outside of class will be required. Prerequisite:
one 400-level CMS course.
CMS 485 Senior Seminar in Computer Science: Students read
computer science literature and make presentations on topics chosen from
current technology and research in computer science. Prerequisite:
one 400-level CMS course.
CMS 499 Independent Study: Covers selected topics
in computer science. May be repeated for credit. |