Catalogue PDF Version

Catalogue - PDF Version

Computer Science

Department of Mathematics and Computer Science Chair
Yan Hao, Associate Professor

Computer Science Faculty
Stina Bridgeman, Associate Professor
Chris Fietkiewicz, Assistant Professor
Hanqing Hu, Assistant Professor

Mathematics Faculty
Jocelyn Bell, Associate Professor
Jennifer Biermann, Associate Professor
Jonathan Forde, Professor
Yan Hao, Associate Professor
Erika L. C. King, Associate Professor
Joseph Rusinko, Associate Professor

Emeritus Faculty
David Belding
Irving Bentson
Carol Critchlow
Kevin Mitchell
Ann Oaks
John Vaughn

Computers and software have a profound impact on the world and society, and understanding how to effectively use the power of computing is an important part of today's world. Course topics in the computer science curriculum span the core of the discipline, from the theory of computation to algorithms and from hardware to software development, as well as delving into real-world applications in areas such as artificial intelligence, computer graphics, and databases. However, beneath the technical knowledge necessary for working with computers, computer science is, at its core, very much the study of how to think critically and solve problems.

Whether pursuing computer science as a major or a minor, students gain analytical and programming skills that are sought after by employers and graduate schools in a variety of fields. Because of the increasing importance of computing across disciplines, computer science can also be an excellent choice for a minor or second major.

In a rapidly growing and changing field, the Department of Mathematics and Computer Science offers a range of courses that enable students to use the software technology of today and to apply enduring principles in designing the technology of tomorrow. The department offers two majors in computer science (B.A. and B.S.) and a minor in computer science. The majors are structured to give students a broad but firm foundation in both core and application areas of the discipline, while the minor provides students with a solid foundation in programming and the flexibility to pursue the additional courses most closely aligned with their interests.

Mission Statement

The mission of the Computer Science program is to prepare students to lead lives of consequence in the rapidly evolving field of computing by enabling them to use current methodologies and tools, instructing them in the enduring principles of computer science, training them to think critically, and inspiring them to apply the power of computing to help tackle the world's current and future problems.

Offerings

The Department of Mathematics and Computer Science offers two majors in computer science (B.A. and B.S.), and a minor in computer science. In addition to the specific courses listed below, other courses may be approved by the department for credit toward the major. To be counted toward the major or minor, all courses must be passed with a grade of C- or better; credit/no credit courses cannot be taken toward the major or minor.

Computer Science Major (B.A.)

disciplinary, 10 courses
Learning Objectives:

  • Demonstrate both a theoretical and technical understanding of the core body of knowledge in computer science as well as several application areas.
  • Analyze computational problems and design correct and efficient algorithms to solve them.
  • Design and implement efficient, well-constructed, and well-documented software solutions.
  • Explain their work both verbally and in writing, and work effectively as a member of a team.
  • Continue learning and adapting their skills throughout their careers as technologies change.
  • Recognize the broad applicability and ethics of computing, and appreciate the need for collaboration with experts in other domains.

Requirements:
CPSC 124, CPSC 220, CPSC 225, CPSC 229, CPSC 327, CPSC 329; two additional 300- or 400-level computer science courses excluding CPSC 450, CPSC 495, and CPSC 499; two additional computer science or mathematics (MATH 130 or above) courses. This major will also include a capstone experience.

Computer Science Major (B.S.)

disciplinary, 15 courses
Learning Objectives:

  • Demonstrate both a theoretical and technical understanding of the core body of knowledge in computer science as well as several application areas.
  • Analyze computational problems and design correct and efficient algorithms to solve them.
  • Design and implement efficient, well-constructed, and well-documented software solutions.
  • Explain their work both verbally and in writing, and work effectively as a member of a team.
  • Continue learning and adapting their skills throughout their careers as technologies change.
  • Recognize the broad applicability and ethics of computing, and appreciate the need for collaboration with experts in other domains.

Requirements:
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 advisor. (MATH 130 can be included in the last category.) This major will also include a capstone experience.

Computer Science Minor

disciplinary, 5 courses
Requirements:
CPSC 124, CPSC 225, and three additional computer science courses chosen in consultation with the advisor.

Course Descriptions

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. Past topics have included Graphics and Animation, Multimedia, Robots, and Web Site Development. This course is intended for students with no previous programming 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 towards the major and minor in computer science but cannot be taken concurrently with or after completion of CPSC 124. No prerequisites.

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  This course reveals how hardware executes software. Students design digital logic circuits to work with binary data, develop programs using both assembly language and machine language, and analyze operations of the central processing unit during program execution. 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 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. Past topics have included 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 310 Computational Neuroscience  Computational neuroscience uses techniques from mathematics and computer science to model, simulate, and analyze the nervous system at multiple scales. It has become an essential tool in multiple fields, including neuroscience, medicine, and biomedical engineering. Students will study different neural modeling approaches, including physics-based models, firing rate models, and statistical models. A significant focus will be algorithms for implementing, executing, and analyzing simulations. Models will be constructed and simulated for single neurons, synapses, and networks. Students will evaluate numerical simulations with regard to numerical accuracy and computational efficiency. Prerequisite: CPSC 225. (Offered alternate years)

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 331 Operating Systems  An operating system, such as Windows, Mac OS, or Linux, is a fundamental part of any computing system. The core concept of processes in modern operating systems is explored. Techniques covered include process execution, CPU scheduling, address translation, and virtual memory. Additional topics may include concurrency with threads, file systems, and security basics. An introduction to the C programming language is used to demonstrate system level applications. Prerequisite: CPSC 225. (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 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, OpenOL, 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 329. (Offered alternate years)

CPSC 433 Compilers  This course explores the implementation of modem 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 229 and CPSC 329. (Offered alternate years)

CPSC 441 Computer Networks and Distributed Processes  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, inter-networking, end-to-end protocols, network applications, and network security. Prerequisite: CPSC 329. (Offered alternate years)

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 329. (Offered alternate years)

CPSC 451 Capstone Independent Study  This independent study can be taken in the senior year as the capstone experience in the computer science major. A student who would like to pursue this option must find a faculty sponsor, as for any independent study, and must submit a written proposal for the independent study. The proposal must be approved by the department chair. A Capstone Independent Study must satisfy the general criteria for a computer science capstone course: a significant project integrating theory and practice, and utilizing software development principles, practices, and tools; a significant design/planning experience where students must weigh alternatives and choose an appropriate approach; and a significant written, oral, and/or visual presentation of work beyond the program code itself. Note that in some cases an Honors course, CPSC 495, that does not lead to a completed Honors project might be converted into a CPSC 451 course instead of CPSC 450; this will require approval by the department chair.

CPSC 495 Honors

CPSC 496 Honors

CPSC 499 Computer Science Internship  CPSC 499 offers academic credit for an internship in which the student encounters computer science concepts that are new to them or applies familiar computer science concepts in unfamiliar contexts. To get academic course credit, the student should consult before starting the internship with a faculty member of the Department of Mathematics and Computer Science who will act as sponsor. The student and faculty member should agree on what will be required to receive credit, which will ordinarily include: a reflective journal written over the course of the internship discussing what is done for the internship and how it relates to computer science, a confirmation from the student's internship supervisor that the internship was successfully completed, and some sort of final product such as a paper, project, or presentation.