Note: The Computer Science curriculum changed for the Fall 2018 semester. Visit the Academic Bulletin archive to view the previous version.
Professors Bonham-Carter, Jumadinova (Chair), Kapfhammer, Luman, Mohan
Computer Science is about computers and computation; the essence of the discipline is the study of algorithms—the design, development and characterization of algorithms, their realization as computer programs, the analysis of the correctness and efficiency of algorithms, and the limitations of the algorithmic method as an approach to problem solving. The department's offerings include an introduction to the discipline including programming, data structures, and discrete mathematics; core courses in theoretical computer science, computer languages, computer organization, algorithm analysis, and software systems design; advanced courses in compiler design, operating systems and distributed systems; and a variety of applications and electives. The human dimensions of computing—social, professional, and ethical implications—are treated throughout the department's courses. The Computer Science programs have an integral laboratory component—nearly all of the courses include a weekly formal laboratory session to provide for practice and experimentation utilizing the principles learned in the classroom and from the course texts.
The laboratory component affords the opportunity for hands-on experience with several computing and network systems. The Department has laboratories adjacent to faculty offices and classrooms in Alden Hall including an advanced-technology computer science classroom that facilitates active learning; a software development laboratory designed for group work on large software systems; and a laboratory for advanced coursework and research.
The study of computer science leads to and requires the ability to analyze ideas, to think logically, and to communicate ideas clearly and concisely. In this way, study of computer science contributes to the foundation of an excellent liberal arts education.
Students who successfully complete either a major or a minor in the discipline of computer science are expected to demonstrate the successful attainment of learning outcomes in each of the following categories:
The major in Computer Science requires successful completion of at least 52 semester hours in Computer Science. To graduate with a major in Computer Science, a student must have an earned GPA of at least 2.0 in required Computer Science and other courses presented for the major. At most one of CMPSC 100 or 102 may be presented for the major on the Credit/No Credit grade basis. Students who are interested in Mathematics and/or planning to attend graduate school in Computer Science are strongly encouraged to take Math 151 early in their academic career. Students who major in Computer Science may incorporate Mathematics courses into their study through the following substitutions:
Note: Students who major in Computer Science may not double-major in Integrative Informatics.
At least one course from each of the following categories.
The minor in Computer Science requires the completion of at least 20 semester hours of course work in Computer Science including:
Note: Students who minor in Computer Science may not major in Integrative Informatics.
An additional twelve semester credit hours of Computer Science courses at or above the 200 level.
Note: At most one of CMPSC 100 or 102 may be presented for the major on the Credit/No Credit grade basis.
NOTE: For students who matriculated before Fall 2016, all Computer Science courses with a laboratory count as a laboratory course in the Natural Sciences for the purpose of satisfying the College distribution requirement
CMPSC 100 - Computational Expression
Credits: 4
An introduction to the principles of computer science with an emphasis on creative expression through the medium of a programming language. Participating in hands-on activities that often require teamwork, students learn the computational structures needed to solve problems and produce artifacts such as interactive games and computer-mediated art and music. Students also learn how to organize and document a program’s source code so that it effectively communicates with the intended users and maintainers. Additionally, the introduction includes an overview of the discipline of computer science and computational thinking. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: Knowledge of elementary algebra.
Distribution Requirements: ME, SP.
CMPSC 101 - Data Abstraction
Credits: 4
A continuation of CMPSC 100 with an emphasis on implementing, using, and evaluating the computational structures needed to efficiently store and retrieve digital data. Participating in hands-on activities that often require teamwork, students create data structures and algorithms whose correctness and performance they study through proofs and experimentation. Students continue to refine their ability to organize and document a program’s source code so that it effectively communicates with the intended users and maintainers. During a weekly laboratory session, students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 100 or permission of the instructor.
Distribution Requirements: QR, SP.
CMPSC 102 - Discrete Structures
Credits: 4
An introduction to the foundations of computer science with an emphasis on understanding the abstract structures used to represent discrete objects. Participating in hands-on activities that often require teamwork, students learn the computational methods and logical principles that they need to create and manipulate discrete objects in a programming environment. Students also learn how to write, organize, and document a program’s source code so that it is easily accessible to intended users of varied backgrounds. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 100.
Distribution Requirements: QR, SP.
CMPSC 200 - Computer Organization
Credits: 4
A study of the low-level operation of computer systems. Participating in hands-on activities that often require teamwork, students investigate how computers process instructions in modern computers as information is encoded, stored, and executed in a machine's physical structures. In addition to learning how to program in assembly and machine languages, students investigate the design and logical operation of processors and the mathematics of machine computation. During a weekly laboratory session, students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 102.
Distribution Requirements: QR, SP.
CMPSC 201 - Programming Languages
Credits: 4
A study of the fundamental concepts that arise in different programming language paradigms. Students learn how programming languages are designed and implemented, and how these factors affect the overall usability, performance, and effectiveness of computer software. Participating in hands-on activities that often require teamwork, students gain experience in leveraging the styles and features of programming languages to implement and evaluate correct and efficient computer software. During a weekly laboratory session, students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 101.
Distribution Requirements: QR, SP.
CMPSC 202 - Algorithm Analysis
Credits: 4
A study of fundamental methods for designing and implementing algorithms and analyzing their efficiency. While developing expertise in select models of computation and the key mathematical and experimental approaches to studying algorithm efficiency, students investigate different types of algorithms through hands-on activities that often require teamwork. Students also learn how to determine whether a problem can be efficiently solved by an algorithm that is implemented as a computer program. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 102.
Distribution Requirements: QR, SP.
CMPSC 203 - Software Engineering
Credits: 4
A human-centric study of the principles used during the engineering of high-quality software systems. In addition to examining the human behaviors and social processes undergirding software development methodologies, students participate in teams tasked with designing, developing, and delivering a significant software application for a customer. During a weekly laboratory session, students use state-of-the-art software engineering, management, and communication tools to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 101.
Distribution Requirements: SB, SP.
CMPSC 300 - Bioinformatics
Credits: 4
An introduction to the development and application of methods, from the computational and information sciences, for the investigation of biological phenomena. In this interdisciplinary course, students integrate computational techniques with biological knowledge to develop and use analytical tools for extracting, organizing, and interpreting information from genetic sequence data. Often participating in team-based and hands-on activities, students implement and apply useful bioinformatics algorithms. During a weekly laboratory session students employ cutting-edge software tools and programming environments to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: BIO 221 and FSBIO 201, or CMPSC 100.
Distribution Requirements: QR, SP.
CMPSC 301 - Data Analytics
Credits: 4
An introduction to computational methods of data analysis with an emphasis on understanding and reflecting on the social, cultural, and political issues surrounding data and its interrogation. Participating in hands-on activities that often require teamwork, students study, design, and implement analytics software and learn how to extract knowledge from, for instance, financial, political, and scientific sources of data. Students also investigate the biases, discriminatory views, and stereotypes that may be present during the collection and analysis of data, reflecting on the ethical implications of using the resulting computational techniques. During a weekly laboratory session, students use state-of-the-art statistical software to complete projects, reporting on their findings through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: FS 102 or permission of the instructor.
Distribution Requirements: QR, PD.
CMPSC 302 - Web Development
Credits: 4
An introduction to the principles and applications of computer science with an emphasis on understanding intercultural perspectives that arise during the design, implementation, and maintenance of mobile-ready web sites. Participating in hands-on activities that often require teamwork, students learn the computational methods needed to create web sites that are useful to people from different cultures and nationalities. Students also investigate approaches to developing efficient, accessible, and aesthetically pleasing web sites that adhere to the international standards set by the World Wide Web Consortium. During a weekly laboratory session students use state-of-the-art web development technologies to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: FS 102 or permission of the instructor.
Distribution Requirements: IP, SP.
CMPSC 310 - Artificial Intelligence
Credits: 4
A study of the design and implementation of intelligent computer systems that can learn, plan, and solve problems autonomously. In addition to examining techniques for designing intelligent software agents, students investigate the social, political, and ethical implications of intelligent systems. Through hands-on activities that often require team-work, students explore the application of artificial intelligence methods in areas such as computer vision, natural language processing, and video game development. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 102.
Distribution Requirements: QR, SP.
CMPSC 311 - Robotic Agents
Credits: 4
A study of the design and implementation of autonomous software agents and robotic systems that cooperatively complete complex tasks. In addition to examining techniques for large-scale coordination and group-based decision-making, students learn how to apply the field's technologies to address the challenges facing local and global communities. Participating in hands-on activities that often require teamwork, students develop and evaluate several multi-agent or multi-robot systems, while also reflecting on the civic issues surrounding the use of these systems. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 102.
Distribution Requirements: CL, QR.
CMPSC 312 - Database Systems
Credits: 4
A study of the applications and evaluation of database management systems. Participating in hands-on activities that often require teamwork, students design, implement, and deploy database systems that store interdisciplinary data sets. In addition to learning how to develop and assess interfaces for databases, students study the efficiency and effectiveness of alternative data management systems. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 101.
Distribution Requirements: QR, SP.
CMPSC 400 - Operating Systems
Credits: 4
A study of the principles used in the design, implementation, and evaluation of operating systems. Participating in hands-on activities that often require teamwork, students create and assess components of an operating system that runs on modern computer hardware. Leveraging insights and tools from an industry partner, students also investigate the resource management, process scheduling, and file systems used in representative operating systems. During a weekly laboratory session students use advanced operating systems software to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 200.
Distribution Requirements: QR, SP.
CMPSC 402 - Cloud Computing
Credits: 4
A study of the principles for dealing with the data sets and the cloud-based distributed systems used by networked services. Participating in hands-on activities that often require teamwork, students investigate topics such as data collection and the scheduling and configuration of cloud-based computation, additionally creating and assessing the components of a distributed system. Leveraging insights and tools from an industry partner, students also learn about existing cloud computing platforms and identify methods for improving their efficiency. During a weekly laboratory session students use advanced distributed computing platforms to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 202.
Distribution Requirements: QR, SP.
CMPSC 403 - Computer Security
Credits: 4
A study of the principles used in the design, implementation, and evaluation of secure computer hardware and software. Participating in hands-on activities that often require teamwork, students assess the trade-offs in security policies and create software with efficient and effective security mechanisms. Leveraging insights and tools from an industry partner, students also investigate techniques for providing access control, secure channels, and intrusion detection. During a weekly laboratory session students use advanced security software to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 201.
Distribution Requirements: QR, SP.
CMPSC 480 - Software Innovation I
Credits: 2
An introduction to the technical and communication skills needed to design, implement, and publicly release innovative software. In addition to establishing connections with professionals in the software field, students refine their writing abilities as they participate in online technical communities. During a weekly practical session, students use state-of-the-art tools to complete well-documented software that is useful to external collaborators, describing their systems through oral presentations and written documents featured on a web site. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 101.
Distribution Requirements: none.
CMPSC 481 - Software Innovation II
Credits: 2
A continuation of CMPSC 480, with a focus on the collaborative enhancement of innovative software. While partnering with members of the course and receiving mentorship from experts in the software community, students document, improve, and maintain a publicly available software tool. During a weekly practical session, students use state-of-the-art technology to complete and release a significant software product, describing it through oral presentations and written documents featured on a web site. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 203 and CMPSC 480.
Distribution Requirements: none.
CMPSC 580 - Junior Seminar
Credits: 4
A team-based investigation of select topics in computer science, preparing students for the proposal and completion of a senior project. Working in teams to complete hands-on activities, students learn how to read research papers, state and motivate research questions, design and conduct experiments, and collect and organize evidence for evaluating scientific hypotheses. During a weekly laboratory session students use state-of-the-art technology to gain practical skills in scientific and technical writing, the presentation of computational and mathematical concepts, and the visualization of experimental data. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 101 and at least one of the Fundamentals courses.
Distribution Requirements: none.
CMPSC 600 - Senior Thesis I
Credits: 2
Independent research in computer science. Must be taken on the letter-grade basis. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 580.
Distribution Requirements: none.
CMPSC 610 - Senior Thesis II
Credits: 2
Continuation of independent research in computer science. Must be taken on the letter-grade basis. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: CMPSC 600.
Distribution Requirements: none.
CMPSC 529 - Internship: Computer Science
Credits: 1-4
Academic study completed in support of an internship experience with a partner institution. An Allegheny faculty member assigns and evaluates the academic work done by the student. May be repeated for credit. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: Permission of instructor.
Distribution Requirements: none.
CMPSC 590 - Independent Study
Credits: 1-4
Individual research under the guidance of a member of the Department's faculty. A project proposal must be submitted to the Department and approved in the semester prior to the semester in which the student intends to register for the course. May be repeated for credit. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
Prerequisite: Permission of instructor.
Distribution Requirements: none.