Academic Bulletin

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 111 Introduction to Computer Science I

    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. One laboratory per week. Prerequisite: Knowledge of elementary algebra. Distribution Requirements: ME, SP.

  • CMPSC 112 Introduction to Computer Science II

    A continuation of Computer Science 111 with an emphasis on data structures, data abstraction, algorithm design, the analytical and experimental evaluation of algorithm performance, and object-oriented design and implementation techniques. Topics include stacks, queues, deques, lists, strings, trees and graphs, dictionaries, recursion, searching and sorting algorithms, and an introduction to program verification. One laboratory per week. Prerequisite: CMPSC 111 or permission of the instructor. Distribution Requirements: QR, SP.

Core Courses

  • CMPSC 210 Principles of Computer Organization

    An introduction to the basic organization and operation of computers including logical structure, hardware components, machine and assembly language, and computer system performance. Topics include internal representation of information, instruction set architecture, instruction types and addressing techniques, computer arithmetic, memory systems, design and operation of the control unit, input/output devices and interfaces, assembly language and translation techniques, and modern architectural enhancements such as pipelining and multiprocessors. Special emphasis is on systems programming and assignments in a particular assembly language. One laboratory per week. Prerequisite: CMPSC 112 Distribution Requirements: QR, SP.

  • CMPSC 220 Programming Language Concepts

    A study of the important concepts in the design of programming languages, with emphasis on data types, scoping, binding times, control structures, facilities for abstraction, parallel constructs, and storage allocation. Language constructs are evaluated both for their usefulness in supporting the software development process and the overhead incurred in implementing and using them. Both procedural and non-procedural languages are studied, and students acquire enough literacy in a few of these languages to write moderately sophisticated programs. One laboratory per week. Prerequisite: CMPSC 210 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. Prerequisites: MATH 205 with a grade of C or better and CMPSC 112, or permission of instructor. Offered in alternate years. Distribution Requirements: QR, SP.

  • CMPSC 250 Analysis of Algorithms

    A treatment of selected topics from the analysis of algorithms including models of computation, design of efficient algorithms, computational complexity, and NP-completeness. Students develop expertise in mathematical analysis and algorithmic programming methodology. One laboratory per week. Prerequisites: CMPSC 112 and Math 205 Distribution Requirements: QR, SP.

  • CMPSC 280 Principles of Software Development

    A human-centric study of the principles and concepts used in the team-based specification, design, implementation, testing, and maintenance of large software systems. Topics include requirements elicitation and analysis, formal specification, software architecture and design, software measurement, software testing and analysis, and program evolution. In addition to examining the human behaviors and social process undergirding software development methodologies, students participate in teams tasked with creating a significant software application for a customer. One laboratory per week. Prerequisites: CMPSC 210 and CMPSC 220, or permission of the instructor. Offered in alternate years. Distribution Requirements: SB, SP.

Applications

  • CMPSC 300 Introduction to Bioinformatics (also listed as BIO 300)

    An introduction to the development and application of computational approaches to answer biological questions. Students use state-of-the-art bioinformatics software to gain insights into the functionality of the information contained within genomes as well as learn the algorithms behind such applications. Topics include data management, analysis of large-scale biological datasets, genome annotation, and genetics of disease. Unique challenges in the field and the wide range of existing solutions are examined. One laboratory per week. Prerequisites: BIO 221 and FSBIO 201, or CMPSC 111. Distribution Requirements: QR, SP.

  • CMPSC 370 Artificial Intelligence

    A survey of the theory, computational techniques, and applications of artificial intelligence. Topics include agents, knowledge representation, machine learning, general problem solving, natural language processing, neural networks, evolutionary computation, computer vision, robotics, and philosophical questions. One laboratory per week. Prerequisite: CMPSC 112. Offered in alternate years. Distribution Requirements: QR, SP.

  • CMPSC 380 Principles of Database Systems

    A study of the design and implementation issues in database management systems. Topics include data models, logical/physical database design, data access/search techniques, normalization theory, mappings from logical to physical structures, storage, and utilization. Additional topics include database reorganization, migration, database integrity, consistency, privacy and security, distributed database systems, architecture of knowledge-based systems, and intelligent query interfaces. One laboratory per week. Prerequisite: CMPSC 112. Offered in alternate years. Distribution Requirements: QR, SP.

  • CMPSC 381 Data Communications and Networks

    An introduction to the theory and techniques of data communications and network design and analysis. Topics include data communications concepts, layered network architectures, local and wide area networks, protocols, switching, routing, security, and areas of current interest. The protocols of the Internet and the World Wide Web are used throughout to illustrate networking concepts. Students complete a large programming project involving some aspect of networking. One laboratory per week. Prerequisite: CMPSC 112. Offered in alternate years. Distribution Requirements: QR, SP.

  • CMPSC 382 Visual Computing

    An introduction to the fundamentals of computer graphics, visualization, and visual computing. Topics covered include concepts of light, color, two-and three-dimensional representations, data visualization, image processing, image rendering, and animation. These concepts are illustrated using medical imaging, simulation, human vision processing, computer art, and other applications. Laboratory assignments covering each major course topic provide a solid basis for advanced work in computer graphics and visualization. One laboratory per week. Prerequisites: One course in programming and one course in mathematics, or permission of the instructor. Distribution Requirements: ME, QR.

  • CMPSC 383 Multi-Agent and Robotic Systems

    A study of autonomous software agent and robotic systems and the principles, design, and implementation underlying such systems. In addition to analyzing the unique challenges and existing solutions in this field, students examine how the topics studied impact local and global community problems. Students are also required to develop and evaluate several multi-agent or multi-robot systems for solving specific public problems and, furthermore, to reflect on civic issues surrounding the use of these systems. One laboratory per week. Prerequisite: CMPSC 111. Distribution Requirements: CL, QR.

Advanced Courses

  • CMPSC 420 Introduction to Compiler Design

    An introduction to the basic concepts of compiler design and implementation from lexical, syntactic, and semantic analysis to target code generation. Topics are presented from an implementation point of view. The semester project includes construction of a compiler for a small language using lexing and compiler-compiler languages. One laboratory per week. Prerequisite: CMPSC 220, or permission of the instructor. Offered in alternate years. Distribution Requirements: QR, SP.

  • CMPSC 440 Operating Systems

    A study of operating systems and their design and implementation. Topics include the evolution of modern computer operating systems, basic components of an operating system, and hardware issues of importance to operating system design and implementation. Consideration is given to processes and threads, resource (processor, memory, device, and software) management, process and device scheduling, deadlocks, input/output, file systems, and system security. A representative operating system is examined in detail. One laboratory per week. Prerequisite: CMPSC 210. Offered in alternate years. Distribution Requirements: QR, SP.

  • CMPSC 441 Principles of Distributed Systems

    An examination of the principles and paradigms associated with the design, implementation, and analysis of distributed systems. Topics include the characterization of distributed system models, remote communication, distributed scheduling, synchronization and mutual exclusion, naming and time, consistency and replication, and fault tolerance. Selected distributed system development environments are discussed in the context of the above topics. One laboratory per week. Prerequisites: CMPSC 280 or CMPSC 440 or permission of the instructor. 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. Credit: One semester hour for each course. Prerequisites: Completion of at least two core courses.

  • 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. Prerequisite: CMPSC 500. Corequisite: CMPSC 501. Credit: two semester hours.

  • 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. Prerequisite: CMPSC 500. Corequisite: CMPSC 501. Credit: two semester hours.

  • 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. Prerequisite: CMPSC 500. Corequisite: CMPSC 501. Credit: two semester hours.

  • 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. Credit: One to four semester hours. Prerequisite: permission of instructor.

Other Courses

  • CMPSC 580 Junior Seminar: Topics and Research Methods in Computer Science

    An advanced treatment of selected topics from various areas of computer science with an emphasis on appropriate research methods. Practical skills are acquired in technical writing, critical reading, and presentation of technical literature in preparation for the senior project. One laboratory per week. Prerequisite: Completion of the computer science core or permission of the instructor.

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

  • CMPSC 600 Senior Thesis I

    Independent research in computer science. Prerequisite: CMPSC 580. Credit: one semester hour.

  • CMPSC 610 Senior Thesis II

    Continuation of independent research in computer science. Prerequisite: CMPSC 600. Credit: three semester hours.