Academic Bulletin (Before Fall 2018)

Programs

The major and minor field programs are designed to provide a solid academic basis in the principles of computer science combined with practical experience in software systems design, implementation and analysis. Courses are divided into four categories: basic courses, core courses, advanced courses, and applications. There are two majors in computing, Computer Science and Applied Computing, and several interest-focused minors.

The Computer Science major is designed to prepare students for advanced study of computer science or any of a variety of positions in the computing industry or in other industries requiring computing expertise. The Applied Computing major is designed to prepare students for entry-level software development positions or entrepreneurial and management positions in computing and computing related areas.

The Computer Science Major

The major in Computer Science requires successful completion of at least 44 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. With the exception of CMPSC 111, no course presented for the major may be taken on the Credit/No Credit basis.

Requirements:

  1. Basic courses (three courses):
    • CMPSC 111 Introduction to Computer Science I
    • CMPSC 112 Introduction to Computer Science II
    • MATH 205 Foundations of Mathematics
  2. Core courses (four courses):
    • CMPSC 210 Principles of Computer Organization
    • CMPSC 220 Programming Language Concepts
    • CMPSC 230 Theory of Computation and Formal Languages
    • CMPSC 250 Analysis of Algorithms
  3. Advanced course: at least one of the following:
    • CMPSC 420 Introduction to Compiler Design
    • CMPSC 440 Operating Systems
    • CMPSC 441 Principles of Distributed Systems
  4. Electives (two courses). Computer Science electives may be chosen from courses listed in the core, applications and advanced categories in the course listings below. In some cases, Special Topics courses (CMPSC 490) or independent study courses (CMPSC 590) may be used to satisfy the elective requirement.
  5. Mathematics requirement (two courses). Students pursuing the major in Computer Science must complete a mathematics unit consisting of two courses to be chosen from MATH 320, MATH 325, MATH 345, MATH 360, and MATH 365, or, with approval of the faculty of the Department of Computer Science, some special topics courses in mathematics (those numbered MATH 490 through MATH 499). Students who plan to pursue graduate studies in Computer Science are encouraged to also complete the calculus sequence through MATH 210.
  6. The Junior Seminar (CMPSC 580)
  7. The Senior Project (CMPSC 600 and CMPSC 610)

The Applied Computing Major

Students seeking to major in Applied Computing must select either the Software Development track or the Management and Entrepreneurship track.

The Software Development Track

The major in the Software Development track of the Applied Computing major requires successful completion of at least 44 semester hours in computer science, four semester hours in economics, and 12 semester hours in mathematics. To graduate with a major in Applied Computing: Software Development Track, a student must have an earned GPA of at least 2.0 in required Computer Science and other courses presented for the major. With the exception of CMPSC 111, no course presented for the major may be taken on the Credit/No Credit grade basis.

Requirements:

  1. Basic courses (four courses):
    • CMPSC 111 Introduction to Computer Science I
    • CMPSC 112 Introduction to Computer Science II
    • MATH 205 Foundations of Mathematics
    • ECON 100 Introduction to Microeconomics
  2. Core courses (four courses):
    • CMPSC 210 Principles of Computer Organization
    • CMPSC 220 Programming Language Concepts
    • CMPSC 250 Analysis of Algorithms
    • CMPSC 280 Principles of Software Development
  3. One advanced course: CMPSC 440 Operating Systems or CMPSC 441 Principles of Distributed Systems.
  4. One of the following applications courses:
    • CMPSC 370 Artificial Intelligence
    • CMPSC 380 Principles of Database Systems
    • CMPSC 381 Data Communications and Networks
  5. An internship sequence consisting of:
    • CMPSC 500, Internship Seminar
    • An internship (CMPSC 510–CMPSC 512) approved by the department faculty
    • CMPSC 501 Internship Seminar
      If, after completion of CMPSC 500, the student is unable to obtain an internship meeting the department's guidelines, the department may allow a substitute requirement. In any case, the student must complete CMPSC 500 and CMPSC 501.
  6. Mathematics requirement (two courses). Students in the Software Development track must complete a two-course mathematics unit consisting of:
    • MATH 170 Calculus II
    • One of the following:
      • MATH 320 Linear Algebra
      • MATH 345 Probability and Statistical Inference I
      • MATH 360 Graph Theory
      • MATH 365 Combinatorics and Discrete Models
  7. The Junior Seminar (CMPSC 580)
  8. The Senior Project (CMPSC 600 and CMPSC 610)

The Management and Entrepreneurship Track

The major in the Management and Entrepreneurship track of the Applied Computing major requires successful completion of at least 32 semester hours in computer science, 20 semester hours in economics, four semester hours in mathematics, and eight semester hours of research project (junior seminar and senior project) in the student’s choice of computer science or economics. To graduate with a major in Applied Computing: Management and Entrepreneurship Track, a student must have an earned GPA of at least 2.0 in required Computer Science and other courses presented for the major. With the exception of CMPSC 111, no course presented for the major may be taken on the Credit/No Credit grade basis.

Requirements:

  1. Basic courses (four courses):
    • CMPSC 111 Introduction to Computer Science I
    • CMPSC 112 Introduction to Computer Science II
    • MATH 205 Foundations of Mathematics
    • ECON 100 Introduction to Microeconomics
  2. Core courses (five courses):
    • CMPSC 210 Principles of Computer Organization
    • CMPSC 220 Programming Language Concepts
    • CMPSC 250 Analysis of Algorithms
    • ECON 200 Microeconomic Thoery
    • ECON 240 Introduction to Managerial Economics
  3. One advanced course, CMPSC 440 Operating Systems
  4. One applications course: CMPSC 380 Principles of Database Systems or CMPSC 381 Data Communications and Networks
  5. Economics requirement (two courses):
    • ECON 202 Economic Statistics
    • ECON 280 Economics of Entrepreneurship I or ECON 440 Advanced Managerial Economics
  6. An internship sequence consisting of:
    • CMPSC 500 Internship Seminar
    • An internship (CMPSC 510–CMPSC 512) approved by the department faculty
    • CMPSC 501 Internship Seminar
  7. The Junior Seminar and Senior Project. Students complete one of the following capstone sequences:
    • Computer Science sequence:
      • CMPSC 580 Junior Seminar: Topics and Research Methods in Computer Science
      • CMPSC 600 Senior Thesis I
      • CMPSC 610 Senior Thesis II
    • Economics sequence:
      • An Economics Seminar (ECON 578–ECON 589)
      • ECON 620 Senior Project

The Computer Science Minor

The minor in Computer Science requires the completion of at least 20 semester hours of course work in Computer Science including:

  • One of the following courses:
    • CMPSC 210 Principles of Computer Organization
    • CMPSC 220 Programming Language Concepts
    • CMPSC 230 Theory of Computation and Formal Languages
    • CMPSC 250 Analysis of Algorithms
    • CMPSC 280 Principles of Software Development
  • An additional eight semester credit hours of Computer Science courses numbered 200 or above.

With the exception of CMPSC 111, no course presented for the minor may be taken on the Credit/No Credit grade basis.

Suggested course sequences for various interests include:

Theory of Computing
CMPSC 111, CMPSC 112, CMPSC 210, CMPSC 230, and CMPSC 250

Computer Architecture
CMPSC 111, CMPSC 112, CMPSC 210, and two of CMPSC 220, CMPSC 250, CMPSC 420, CMPSC 440, or CMPSC 441

Computer Languages
CMPSC 111, CMPSC 112, CMPSC 210, CMPSC 220, CMPSC 230, and CMPSC 420

Computer Systems
CMPSC 111, CMPSC 112, CMPSC 210, CMPSC 220, and CMPSC 440 or CMPSC 441

Artificial Intelligence
CMPSC 111, CMPSC 112, CMPSC 210, CMPSC 220, and CMPSC 370

Computers, Databases, and Data Transmission
CMPSC 111, CMPSC 112, CMPSC 210, CMPSC 380, and CMPSC 381

Computers and Mathematics
CMPSC 111, CMPSC 112, CMPSC 230, and CMPSC 250

Computer Applications
CMPSC 111, CMPSC 112; one of CMPSC 210, CMPSC 220, CMPSC 230, CMPSC 250, or CMPSC 280; and two of the following: CMPSC 370, CMPSC 380, CMPSC 381, CMPSC 382, and CMPSC 383

Software Systems Design
CMPSC 111, CMPSC 112, CMPSC 210, CMPSC 220, and CMPSC 280

Computer Interface Design
CMPSC 111, CMPSC 112, CMPSC 210, CMPSC 280, and CMPSC 382

Courses

Basic Courses

  • CMPSC 103 Web Development Now CMPSC 302 - Web Development

    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 handson 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: Knowledge of elementary algebra.

    Distribution Requirements: IP, SP.

  • CMPSC 111 Introduction to Computer Science I Now CMPSC 100 - Computational Expression

    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 programs 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 reports and oral presentations.

    Prerequisite: Knowledge of elementary algebra.

    Distribution Requirements: ME, SP.

  • CMPSC 112 Introduction to Computer Science II Now CMPSC 101 - Data Abstraction

    A continuation of CMPSC 111 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 programs 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 reports and oral presentations.

    Prerequisite: CMPSC 111 or permission of the instructor

    Distribution Requirements: QR, SP.

Core Courses

  • CMPSC 210 Computer Organization Now CMPSC 200 - Computer Organization

    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 machines 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 reports and oral presentations.

    Prerequisite: CMPSC 112.

    Distribution Requirements: QR, SP.

  • CMPSC 220 Programming Languages Now CMPSC 201 - Programming Languages

    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 reports and oral presentations.

    Prerequisite: CMPSC 112.

    Distribution Requirements: QR, SP.

  • CMPSC 230 Theory of Computation and Formal Languages (also listed as MATH 310)

    An introduction to the theories of finite-state machines, pushdown automata and Turing machines as well as the relation between automata and the formal languages they recognize. Students explore computational theory and its practical applications in lexical analysis and language parsing.

    Prerequisite: MATH 205 with a grade of C or better and CMPSC 112, or permission of instructor.

    Distribution Requirements: QR, SP.

  • CMPSC 250 Algorithm Analysis Now CMPSC 202 - Algorithm Analysis

    A study of fundamental methods for designing and implementing algorithms and analyzing their efficiency. While developing expertise in the mathematical analysis of algorithms and algorithmic programming, students investigate different types of algorithms through hands-on activities that often require teamwork. Students also learn how to determine whether algorithmic answers exist for various problems that are solvable by 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 reports and oral presentations.

    Prerequisite: CMPSC 112 and MATH 205.

    Distribution Requirements: QR, SP.

  • CMPSC 280 Software Engineering Now CMPSC 203 - Software Engineering

    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 reports and oral presentations.

    Prerequisite: CMPSC 112.

    Distribution Requirements: SB, SP.

Applications

  • CMPSC 300 Bioinformatics (also listed as BIO 300)

    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 assignments and oral presentations.

    Prerequisite: BIO 221 and FSBIO 201, or CMPSC 111.

    Distribution Requirements: QR, SP.

  • CMPSC 370 Artificial Intelligence Now CMPSC 310 - Artificial Intelligence

    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 reports and oral presentations.

    Prerequisite: CMPSC 112.

    Distribution Requirements: QR, SP.

  • CMPSC 380 Database Systems Now CMPSC 312 - Database Systems

    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 reports and oral presentations.

    Prerequisite: CMPSC 112.

    Distribution Requirements: QR, SP.

  • CMPSC 381 Communication Networks

    An introduction to the principles and architectures of computer systems for network communication. Students participate in team-based and hands-on activities to investigate the hardware and software used by networking methods. In addition to evaluating the efficiency and effectiveness of data communication technologies, students gain experience in applying network protocols and programming libraries to solve data communication problems. During a weekly laboratory session students use state-of-the-art technology to complete projects, reporting on their results through both written reports and oral presentations.

    Prerequisite: CMPSC 112.

    Distribution Requirements: QR, SP.

  • CMPSC 382 Visual Computing

    An introduction to the principles and applications of computer graphics and data visualization. Students examine fundamental issues including types of data representation, rendering strategies, and the application of two- and three-dimensional graphics. Participating in hands-on activities that often require teamwork, students apply theories of visual thinking to convey the inherent patterns of data that have been derived from a structured analysis. During a weekly laboratory session students use state-of-the-art graphics technology to create interactive applications, reporting on their results through both written reports and oral presentations.

    Prerequisite: CMPSC 112.

    Distribution Requirements: ME, QR.

  • CMPSC 383 Robotic Agents Now CMPSC 311 - Robotic Agents

    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 fields 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 reports and oral presentations.

    Prerequisite: CMPSC 112.

    Distribution Requirements: CL, QR.

Advanced Courses

  • CMPSC 420 Compiler Development Now CMPSC 401 - Compiler Development

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

    Distribution Requirements: QR, SP.

  • CMPSC 440 Operating Systems Now CMPSC 400 - Operating Systems

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

    Distribution Requirements: QR, SP.

  • CMPSC 441 Distributed Systems Now CMPSC 402 - Cloud Computing

    A study of the principles used in the design, implementation, and evaluation of distributed systems. Participating in hands-on activities that often require teamwork, students investigate topics such as remote communication, process synchronization, and fault tolerance while creating and assessing components of a distributed system. During a weekly laboratory session students use advanced distributed programming environments to complete projects, reporting on their results through both written reports and oral presentations.

    Prerequisite: CMPSC 280.

    Distribution Requirements: QR, SP.

Internships

  • CMPSC 500–CMPSC 501 Internship Seminar

    A corequisite seminar for all students participating in the Internship Program. Internship students enroll twice, once prior to and once following the Internship. CMPSC 500 focuses on expectations and planning, leading to the Internship Proposal required for all students planning an internship. CMPSC 501 provides the opportunity for students who have completed the Internship to prepare written and oral reports on the Internship experience. The student, in consultation with the faculty of the Department of Computer Science, is responsible for arranging for an acceptable internship. The courses meet together weekly for one-half a semester.

    Prerequisite: Completion of at least two core courses and permission of instructor.

    Distribution Requirements: none.

  • CMPSC 510 Internship: Software Development

    An experiential learning opportunity with an employer in the area of software development. Students identify a potential employer as part of their work in the first internship seminar, CMPSC 500, work (usually during the summer) for this employer under the guidance of a mentor, write a report on their experiences, and share the insights gained from the internship with the Department in a public presentation. Students mentor future interns as part of the second internship seminar, CMPSC 501. May be repeated for credit.

    Prerequisite: CMPSC 500 and permission of instructor. Corequisite: CMPSC 501.

    Distribution Requirements: none.

  • CMPSC 511 Internship: Management

    An experiential learning opportunity with an employer in the area of management of software projects. Students identify a potential employer as part of their work in the first internship seminar, CMPSC 500, work (usually during the summer) for this employer under the guidance of a mentor, write a report on their experiences, and share the insights gained from the internship with the Department in a public presentation. Students mentor future interns as part of the second internship seminar, CMPSC 501. May be repeated for credit.

    Prerequisite: CMPSC 500 and permission of instructor. Corequisite: CMPSC 501.

    Distribution Requirements: none

  • CMPSC 512 Internship: Computing

    An experiential learning opportunity with an employer in some area of computer science other than software development or software management, e.g., database or network management. Students identify a potential employer as part of their work in the first internship seminar, CMPSC 500, work (usually during the summer) for this employer under the guidance of a mentor, write a report on their experiences, and share the insights gained from the internship with the Department in a public presentation. Students mentor future interns as part of the second internship seminar, CMPSC 501. May be repeated for credit.

    Prerequisite: CMPSC 500 and permission of instructor. Corequisite: CMPSC 501.

    Distribution Requirements: none

  • CMPSC 529 Internship: Computer Science

    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.

Other Courses

  • CMPSC 580 Junior Seminar

    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 112 and at least one of the core courses.

    Distribution Requirements: none.

  • CMPSC 590 Independent Study

    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.

  • CMPSC 600 Senior Thesis I

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

    Prerequisite: CMPSC 580.

    Distribution Requirements: none.

  • CMPSC 610 Senior Thesis II

    Continuation of independent research in computer science. Must be taken on the letter-grade basis.

    Prerequisite: CMPSC 600.

    Distribution Requirements: none.