Academic Bulletin

Computer Science

Professors Bonham-Carter, Jumadinova, Kapfhammer (Chair), 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.

Computer Science Learning Outcomes

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:

Introduction

  • Understands the basic and practical foundations of computer science (e.g., algorithms, data types, conditional logic, recursion, procedural programming concepts, object-oriented programming principles);
  • Knows how to use standard development tools to implement software solutions to problems.

Fundamentals

  • Can design, implement, evaluate, improve, and document an algorithmic solution to a problem;
  • Understands the mutually beneficial connections between (i) computer hardware and software and (ii) theoretical computer science and practical software development.

Applications

  • Understands the basics of application areas such as networking, data management, artificial intelligence, and computer graphics;
  • Can apply key concepts from these application areas to formulate and solve problems and evaluate solutions implemented as computer programs.

Advanced

  • Understands advanced concepts in areas such as compiler design, operating systems, and distributed systems;
  • Knows how to apply key ideas from these advanced subjects to formulate and solve problems and evaluate solutions implemented as complete, efficient, and effective computer systems.

Independent Research

  • Demonstrates critical thinking abilities and effective written and oral communication skills;
  • Can identify, analyze, and use sources in both the technical and research literature.

Professional Development

  • Understands how to work in a team and evidences the willingness to commit to lifelong learning.

Computer Science Major

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 160 early in their academic career. Students who major in Computer Science may incorporate Mathematics courses into their study through the following substitutions:

  • Math 205 as a substitute for the combination of CMPSC 480 and CMPSC 481.
  • Math 320, Math 330, Math 345, Math 360, or Math 365 as a substitute for one of the required 300-level CMPSC courses.

Note: Students who major in Computer Science may not double-major in Integrative Informatics.

Requirements:

Introduction (Three Courses):

  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 102 - Discrete Structures Credits: 4

Fundamentals (Four Courses):

  • CMPSC 200 - Computer Organization Credits: 4
  • CMPSC 201 - Programming Languages Credits: 4
  • CMPSC 202 - Algorithm Analysis Credits: 4
  • CMPSC 203 - Software Engineering Credits: 4

Applications (Two Courses):

At least one course from each of the following categories.

Analyze and Visualize
  • BIO/CMPSC 300 - Bioinformatics Credits: 4
  • CMPSC 301 - Data Analytics Credits: 4
  • CMPSC 302 - Web Development Credits: 4
Implement and Integrate
  • CMPSC 310 - Artificial Intelligence Credits: 4
  • CMPSC 311 - Robotic Agents Credits: 4
  • CMPSC 312 - Database Systems Credits: 4

Advanced (One Course):

  • CMPSC 400 - Operating Systems Credits: 4
  • CMPSC 401 - Compiler Development Credits: 4
  • CMPSC 402 - Cloud Computing Credits: 4

Innovation Seminars:

  • CMPSC 480 - Software Innovation I Credits: 2
  • CMPSC 481 - Software Innovation II Credits: 2

Junior Seminar:

  • CMPSC 580 - Junior Seminar Credits: 4

Senior Project:

  • CMPSC 600 - Senior Thesis I Credits: 2
  • CMPSC 610 - Senior Thesis II Credits: 2

Computer Science Minor

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.

Introduction (Two Courses):

  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4 OR
  • CMPSC 102 - Discrete Structures Credits: 4

An additional twelve semester credit hours of Computer Science courses with at least one course 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.

Suggested Course Sequences for Various Interests Include:

Computer Languages
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 201 - Programming Languages Credits: 4
  • CMPSC 312 - Database Systems Credits: 4
  • CMPSC 401 - Compiler Development Credits: 4
Computer Security
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 102 - Discrete Structures Credits: 4
  • CMPSC 200 - Computer Organization Credits: 4
  • CMPSC 201 - Programming Languages Credits: 4
Computer Systems
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 102 - Discrete Structures Credits: 4
  • CMPSC 200 - Computer Organization Credits: 4
  • CMPSC 400 - Operating Systems Credits: 4
Data Analysis
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 102 - Discrete Structures Credits: 4
  • CMPSC 202 - Algorithm Analysis Credits: 4
  • CMPSC 300 - Bioinformatics Credits: 4
  • CMPSC 301 - Data Analytics Credits: 4
Data Management
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 102 - Discrete Structures Credits: 4
  • CMPSC 201 - Programming Languages Credits: 4
  • CMPSC 312 - Database Systems Credits: 4
Distributed Computing
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 102 - Discrete Structures Credits: 4
  • CMPSC 202 - Algorithm Analysis Credits: 4
  • CMPSC 302 - Web Development Credits: 4
  • CMPSC 402 - Cloud Computing Credits: 4
Intelligent Systems
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 102 - Discrete Structures Credits: 4
  • CMPSC 202 - Algorithm Analysis Credits: 4
  • CMPSC 310 - Artificial Intelligence Credits: 4
Robotic Systems
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 201 - Programming Languages Credits: 4
  • CMPSC 310 - Artificial Intelligence Credits: 4
  • CMPSC 311 - Robotic Agents Credits: 4
Software Development
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 201 - Programming Languages Credits: 4
  • CMPSC 203 - Software Engineering Credits: 4
  • CMPSC 480 - Software Innovation I Credits: 2
  • CMPSC 481 - Software Innovation II Credits: 2
Web Design
  • CMPSC 100 - Computational Expression Credits: 4
  • CMPSC 101 - Data Abstraction Credits: 4
  • CMPSC 203 - Software Engineering Credits: 4
  • CMPSC 301 - Data Analytics Credits: 4
  • CMPSC 302 - Web Development Credits: 4

Courses

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

Introduction

  • 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.

    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.

    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.

    Prerequisite: Knowledge of elementary algebra.

    Distribution Requirements: QR, SP.

Fundamentals

  • 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.

    Prerequisite: CMPSC 100 and 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.

    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.

    Prerequisite: CMPSC 100 and 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.

    Prerequisite: CMPSC 101.

    Distribution Requirements: SB, SP.

Applications

  • 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.

    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.

    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.

    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.

    Prerequisite: CMPSC 101.

    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.

    Prerequisite: CMPSC 101.

    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.

    Prerequisite: CMPSC 101.

    Distribution Requirements: QR, SP.

Advanced

  • 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. Students also investigate the resource management, process scheduling, and information security methods 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 reports and oral presentations.

    Prerequisite: CMPSC 200.

    Distribution Requirements: QR, SP.

  • CMPSC 401 - Compiler Development

    Credits: 4

    An introduction to the fundamental translators for programming languages and an examination of the interactions between the design of programming languages, compilers, and run-time environments. Participating in hands-on activities that often require teamwork, students learn how compilation techniques support the process of software development. During a weekly laboratory session students use advanced compiler creation tools to incrementally design and implement a complete compiler, reporting on their results through both written reports and oral presentations.

    Prerequisite: CMPSC 201.

    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. 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.

    Prerequisite: CMPSC 202.

    Distribution Requirements: QR, SP.

Innovation Seminars

  • 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.

    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.

    Prerequisite: CMPSC 203 and CMPSC 480.

    Distribution Requirements: none.

Junior Seminar

  • 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.

    Prerequisite: CMPSC 101 and at least one of the Fundamentals courses.

    Distribution Requirements: none.

Senior Project

  • CMPSC 600 - Senior Thesis I

    Credits: 2

    Independent research in computer science. Must be taken on the letter-grade basis.

    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.

    Prerequisite: CMPSC 600.

    Distribution Requirements: none.

Other Courses

  • 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.

    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.

    Prerequisite: Permission of instructor.

    Distribution Requirements: none.