To browse the full list of courses available by academic department, visit Courses of Instruction.
To browse the most up-to-date faculty listing, click here.
To browse the 2014-2016 Catalogue online as a PDF, click here.
To browse the 2012-2014 Catalogue online as a PDF, click here.
To browse the 2010-2012 Catalogue online as a PDF, click here.
To browse the 2008-2010 Catalogue online as a PDF, click here.
The 2006-2008 Catalogue is still available online as a PDF. To browse it, click here.
If you have questions or comments about the new online Catalogue, please send us your feedback.
Computers are an integral part of today’s society, and understanding how to effectively use the power of computing is increasingly important. The study of computer science also promotes rigorous thinking and problem-solving ability – beneath the technical knowledge necessary for working with computers, computer science is, at its core, very much the study of how to solve problems. Many students who major in computer science go on to graduate school or to work in related professions. For other students, computer science is a good choice for a second major or minor, in combination with another major from any of the Colleges’ academic divisions. Regardless of field, students often find that the skills they have gained studying computer science are highly sought-after by employers. To meet the challenges, opportunities, and responsibilities encountered after graduation, computer science majors are encouraged to obtain a broad but firm foundation in the discipline. In a rapidly growing and changing field, the department offers a range of courses that enable majors to use modern technology, to understand its applications across a broad range of disciplines, and to understand the fundamental and enduring principles underlying those applications. The Department of Mathematics and Computer Science offers two disciplinary majors in computer science (B.A. and B.S.) and a disciplinary minor in computer science. In addition to the specific courses listed below, other courses may be approved by the department for credit toward a major. To be counted toward the major or minor, all courses must be passed with a grade of C- or better; the department strongly recommends courses be taken on a graded, rather than a credit/no credit, basis.
REQUIREMENTS FOR THE MAJOR (B.A.)
disciplinary, 10 courses
CPSC 124, CPSC 220, CPSC 225, CPSC 229, CPSC 327, CPSC 329; two additional 300- or 400-level CPSC courses excluding CPSC 450, CPSC 495, and CPSC 499; two additional computer science or mathematics (MATH 130 or above) courses.
REQUIREMENTS FOR THE MAJOR (B.S.)
disciplinary, 15 courses
CPSC 124, CPSC 220, CPSC 225, CPSC 229, CPSC 327, CPSC 329; two 400-level computer science courses excluding CPSC 450, CPSC 495, and CPSC 499; two additional computer science courses; and five additional courses from the Natural Science division that count towards the major in their respective departments, chosen in consultation with the adviser. (MATH 130 can be included in the last category.)
REQUIREMENTS FOR THE MINOR
disciplinary, 5 courses
CPSC 124, CPSC 225, and three additional computer science courses chosen in consultation with the adviser.
CPSC 120 Principles of Computer Science Designed to appeal to a diverse audience, this course examines some of the fundamental ideas of the science of computing within a particular topic area, which varies from semester to semester. Recent topics have included graphics and animation, multimedia, robots, and website development. This course is intended for students with little or no previous computer science experience, and is appropriate for those who are interested in computer science as well as those who might not have considered computer science but are interested in a particular topic area. This course counts toward the major and minor in computer science but cannot be taken after completion of CPSC 124. No prerequisites. (Offered every semester)
CPSC 124 Introduction to Programming An introduction to the theory and practice of computer programming, the emphasis of this course is on techniques of program development within the object-oriented paradigm. Topics include control structures, objects, classes, inheritance, simple data structures, and basic concepts of software development. Currently, Java is the programming language used in the course. This course has a required lab component, and is required for the major and minor in computer science. No prerequisites. (Offered every semester)
CPSC 220 Introduction to Computer Architecture A broad introduction to computer architecture, this course shows students how computers really work and how millions of transistors come together to form a complete computing system. Topics covered include transistors, logic gates, basic processor components, memory, input/output devices, and low-level machine instructions. This course has a required lab component, and is required for the major in computer science. Prerequisite: CPSC 124. (Offered annually)
CPSC 225 Intermediate Programming This course builds on CPSC 124, covering some of the more advanced fundamentals of programming including basic data structures (such as lists, stacks and queues, binary trees, and hash tables), recursion, common algorithms (such as searching and sorting), and generic programming. This course also looks more deeply at object-oriented programming, including the use of class hierarchies. Currently, the course is taught using the Java programming language. This course has a required lab component and is required for the major and minor in computer science. Prerequisite: CPSC 124. (Offered annually)
CPSC 226 Embedded Computing Small, inexpensive, powerful, and pervasive computers have fostered a revolution in our daily lives. This course makes this revolution tangible through basic electronics theory, building electronic circuits, implementing logic gates and combinatorial circuits, and ultimately designing systems employing microprocessors and peripherals. Practical projects are emphasized, such as designing, building, and programming a microprocessor-controlled mobile robot. Prerequisites: CPSC 225 or permission of the instructor. (Offered alternate years)
CPSC 229 Foundations of Computation This course introduces students to some of the mathematical and theoretical foundations of computer science, and to their practical applications to computing. Topics include propositional and predicate logic, sets and functions, formal languages, finite automata, regular expressions, grammars, and Turing machines. This course is required for the major in computer science. Prerequisite: CPSC 124. (Offered annually)
CPSC 271 Topics in Computer Science Each time this course is offered, it addresses a topic in computer science that is not covered as a regular course. The topic is covered at a level that is appropriate for any student who has successfully completed an introductory programming course. Possible topics include web programming, human-computer interaction, and Linux system and server administration. This course may be repeated for credit by permission of the department. Prerequisite: CPSC 124 or permission of the instructor. (Offered occasionally)
CPSC 327 Data Structures and Algorithms This course continues the study of data structures and algorithms, focusing on algorithm design and analysis and the relationships between data representation, algorithm design, and program efficiency. Topics include advanced data structures, key algorithm design techniques, analysis of the time and space requirements of algorithms, and characterizing the difficulty of solving a problem. Concrete examples will be drawn from a variety of domains, such as algorithms for graphs and networks, cryptography, data compression, strings, geometric problems, indexing and search, numerical problems, and parallel computation. This course is required for the major in computer science. Prerequisites: CPSC 225; CPSC 229 is recommended. (Offered annually)
CPSC 329 Software Development This course continues the study of programming by focusing on software design, development, and verification—the skills beyond fluency in a particular language which are necessary for developing large, reliable programs. Topics include object-oriented design, the use of APIs, and testing and verification. Techniques common in modern software development will also be studied. Specific techniques may include GUIs and event-driven programming, multi-threading, client-server networking, fault-tolerant computing, stream programming, and security. This course is required for the major in computer science. It includes a required lab component. Prerequisite: CPSC 225. (Offered annually)
CPSC 336 Robotics An advanced study of the electronics, mechanics, sensors, and programming of robots. Emphasis is placed on programming robots that investigate, analyze, and interact with the environment. Topics may include mobile robots, legged robots, computer vision, and various approaches to robot intelligence. Prerequisite: CPSC 226 or permission of the instructor. (Offered alternate years)
CPSC 343 Database Theory and Practice Computer databases are used to store, organize, and retrieve large collections of information. This course introduces the theory and practice of relational databases and relational database management systems (RDBMS). Topics include data modeling and database design, the relational algebra and relational calculus, SQL, and elements of RDBMS implementation such as file structure and data storage, indexing, and query evaluation. Additional topics may include web-based access to databases, transaction management, reliability, security, and object-oriented databases. Prerequisite: CPSC 225; CPSC 229 is recommended. (Offered alternate years)
CPSC 371 Advanced Topics in Computer Science Each time this course is offered, it addresses a topic in computer science that is not covered as a regular course. CPSC 371 addresses topics at a more advanced level than CPSC 271. Possible topics include combinatorics, functional and logic programming, and data visualization and data mining. This course may be repeated for credit by permission of the department. Prerequisite: CPSC 225 or permission of the instructor. (Offered occasionally)
CPSC 424 Fundamentals of Computer Graphics This course studies the principles underlying the generation and display of 3D computer graphics. Topics include geometric modeling, 3D viewing and projection, lighting and shading, color, and the use of one or more technologies and packages such as WebGL, OpenGL, and Blender. Advanced topics might include ray tracing, global illumination, texture- and bump-mapping, the mathematics of curves and surfaces, volumetric rendering, and animation. This course includes a required lab component. Prerequisite: CPSC 225. (Offered alternate years)
CPSC 431 Operating Systems An operating system such as Windows, Linux, or Mac OS X is a fundamental part of any computing system. It is responsible for managing all the running processes as well as allowing the processes to safely share system resources such as the hard drive and network. This course is a general introduction to the design and implementation of modern operating systems. The subjects to be covered include historical development of operating systems, concurrency, synchronization, scheduling, paging, virtual memory, input/output devices, files, and security. Prerequisite: CPSC 225. (Offered alternate years)
CPSC 433 Compilers This course explores the implementation of modern programming languages by looking at compiler design and construction. The course focuses mainly on object-oriented programming languages, although it also looks briefly at compilation of languages from other programming paradigms. Major topics in compilation are covered, including scanning, parsing, semantic analysis, and code generation. Time permitting, the course also covers some advanced topics, including garbage collection and optimization. This course has a required lab component. Prerequisites: CPSC 225 and CPSC 229. (Offered alternate years)
CPSC 441 Networking One of the most important recent developments in computing is the explosive growth in the use of computer networks, which allow computers to communicate and work together. This course is an introduction to the theory and practice of computer networks, the software protocols that allow them to operate, and the applications that make use of them. Topics covered include direct-link networks, packet switching, internetworking, end-to-end protocols, network applications, and network security. Prerequisite: CPSC 225. (Offered occasionally)
CPSC 444 Artificial Intelligence This course serves as an introduction to some of the major problems and techniques in the field of artificial intelligence. Artificial intelligence generally deals with problems that are too large, complex, or poorly-specified to have exact algorithmic solutions. Topics to be covered might include knowledge representation, natural language processing, machine learning, neural nets, case-based reasoning, intelligent agents, and artificial life. Prerequisite: CPSC 327 or 329. (Offered occasionally)
CPSC 450 Independent Study
CPSC 495 Honors
CPSC 499 Computer Science Internship