Computer Science Major Requirements

2024 - 2025 Catalog

We have the following degrees:

Computer Science major leading to BA degree

A major in computer science leading to a Bachelor of Arts degree requires completion of at least 35 credits, including the following:

  1. CSCI 111, 112, 209, 210, 211
  2. MATH 121 or 225
  3. Either CSCI 312 or 313
  4. Two courses chosen from CSCI 315 through CSCI 340
  5. Six additional credits in computer science.

Students expecting to major in computer science should take MATH 121 or 225 by fall of their third year.

  1. Required courses
  2.  

    • CSCI 111 - Introduction to Computer Science
      FDRFM Math and Computer Science Foundation
      Credits4

      This course introduces students to fundamental ideas in computer science while building skills in software development. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. CSCI 111 is appropriate for all students who want to be able to write programs, regardless of the domain.  It is the typical first course for computer science majors and minors.  No previous programming experience required.  Lectures and formal laboratories.


    • CSCI 112 - Data Structures
      FDRSC Science, Math, CS Distribution
      Credits4
      PrerequisiteCSCI 111

      This course continues the introduction to computer science begun in CSCI 111. Emphasis is on the use and implementation of data structures (i.e., how to store information and access it efficiently), introductory algorithm analysis, and object-oriented design and programming with Python. Lectures and formal laboratories.


    • CSCI 209 - Software Development
      Credits3
      PrerequisiteCSCI 112

      An examination of the theories and design techniques used in software development, with an emphasis on making software more maintainable. Hands-on implementation of those techniques. Topics include the software life cycle, design patterns, version control, unit testing, and program documentation.


    • CSCI 210 - Computer Organization
      Credits3
      PrerequisiteCSCI 112

      Multilevel machine organization studied at the levels of digital logic, microprogramming, conventional machine, operating system, and assembly language.


    • CSCI 211 - Algorithm Design and Analysis
      Credits3
      PrerequisiteCSCI 112 and either MATH 121 or MATH 225

      Methods for designing efficient algorithms, including divide-and-conquer, dynamic programming, and greedy algorithms. Analysis of algorithms for correctness and estimating running time and space requirements. Topics include advanced data structures, graph theory, network flow, and computational intractability.


  3. Take one course:
  4.  

    • MATH 121 - Discrete Mathematics I
      FDRFM Math and Computer Science Foundation
      Credits3

      A study of concepts fundamental to the analysis of finite mathematical structures and processes. These include logic and sets, algorithms, induction, the binomial theorem, and combinatorics.


    • or

    • MATH 225 - Bridges to Advanced Math
      FDRSC Science, Math, CS Distribution
      Credits3
      PrerequisiteMath 221 or 222 or instructor consent

      The course explores various important mathematical constructions and ideas, with a particular emphasis on mathematical inquiry and reasoning. Topics include: sets, functions, equivalence relations, modular arithmetic, and basic properties of the integers, real numbers, and complex numbers.


  5. Take one course
  6.  

    • CSCI 312 - Programming Language Design
      Credits3
      PrerequisiteCSCI 209

      Introduction to the theory and design of modern programming languages.  Using the programming language Haskell, students will explore core topics like grammar specification, parsing, data structuring and data typing, modularity, scoping, and expression semantics / evaluation.  The insights and habits gained in this course will enable students to understand common problems they will encounter in everyday programming practice and to sharpen their programming skills for the challenges of real-world applications.


    • or

    • CSCI 313 - Theory of Computation
      Credits3
      PrerequisiteMATH 121 or MATH 225

      A study of the principles of computer science embodied in formal languages, automata, computability, and computational complexity. Topics include context-free grammars, Turing machines, and the halting problem.


  7. Two courses chosen from:
    • CSCI 315 - Artificial Intelligence
      Credits3
      PrerequisiteCSCI 209

      Basic concepts of heuristic search, game playing, natural language processing, and intelligent systems, with a focus on writing programs in these areas. Course combines a discussion of philosophical issues with hands-on problem solving.


    • CSCI 316 - Advanced Topics in Robotics
      Credits3
      PrerequisiteCSCI 209

      A review of advanced topics in robotics, including well-established topics like Bayesian filtering and control theory and current trends like intelligent robots and neuromorphic control. Readings in these areas are reinforced by hands-on projects with robot hardware and simulators. Students present their final projects at the culminating annual Spring Term Festival. Each class meeting includes lecture, discussion, and project work done in teams of one to four students, with weekly quizzes on the readings.


    • CSCI 317 - Database Systems
      Credits3
      PrerequisiteCSCI 209

      This course will provide a theoretical and practical implementation of database systems. Students will learn how databases work, particularly how they store, index, and query data. Broadly, the course will focus on the fundamentals of database design, data models, relational algebra and the description and semantics of query languages including SQL and NoSQL. Advanced topics will include database security, distributed and Internet databases, and large-scale data analysis.


    • CSCI 319 - Video Game Design
      Credits3
      PrerequisiteCSCI 209

      In this course, students learn to design and program video games using Python and the Pygame module. Concepts covered include video game code organization utilizing object-oriented programming, OOP design patterns, 2D animation, artificial intelligence, and responding to user feedback.


    • CSCI 320 - Parallel Computing
      Credits3
      PrerequisiteCSCI 209

      This course introduces the principles of parallel computing. Students will explore the benefits and challenges of developing programs for the multi-core processors found on virtually all modern computers. Students will attain an understanding of the theory of parallel computing and gain hands on experience writing efficient programs in C using parallelization frameworks such as OpenMP. Topics include race conditions, parallel algorithms, dynamic multithreading, and scheduling.


    • CSCI 321 - Computer Networks
      Credits3
      PrerequisiteCSCI 209

      Intended as a first course in communication networks for upper-level students. Covers concepts and protocols underlying modern computer networks. Topics include network architecture and layering, routing and switching, the TCP/IP protocol and network applications. Theory and programming.


    • CSCI 325 - Distributed Systems
      Credits4
      PrerequisiteCSCI 209

      In this course, students learn to design and develop distributed systems, i.e., collections of independent networked computers that function as single coherent systems. The concepts of communication, synchronization, consistency, replication, fault tolerance, and security are covered. In addition, case studies of real-world distributed systems (e.g., the Internet, distributed file systems, grid computing) are analyzed.


    • CSCI 326 - Cloud Computing
      Credits3
      PrerequisiteCSCI 209

      In this course, students are introduced to Cloud Computing. Clouding Computing focuses on implementing programs on distributed computers and delivering them as a service. Students will explore diverse aspects of this broad area, ranging from the design of cloud systems to creating applications on cloud systems. Selected topics include the theory of distributed systems, the benefits and challenges of the cloud, MapReduce and Spark, algorithm design on distributed systems, Amazon Web Services, and data analysis.


    • CSCI 330 - Operating Systems
      Credits3
      PrerequisiteCSCI 209 and CSCI 210

      Procedure initiation, environment construction, reentrancy, kernel functions, resource management, input/output, file structures, security, process control, semaphores and deadlock, and recovery procedures. The laboratory includes the opportunity to examine and modify the internals of an operating system.


    • CSCI 332 - Compiler Construction
      Credits3
      PrerequisiteCSCI 209 and CSCI 210

      Lexical analysis, parsing, context dependence, translation techniques, optimization. Students are expected to produce a compiler for a suitably restricted language.


    • CSCI 335 - Software Engineering through Web Applications
      Credits4
      PrerequisiteCSCI 209

      In this course, students learn to develop high-performance software for Web applications using advanced software engineering techniques. The concepts of client-server computing, theories of usable graphical user interfaces, models for Web-based information retrieval and processing, and iterative development are covered.


    • CSCI 339 - Human-Computer Interaction
      Credits3
      PrerequisiteCSCI 209

      In this course, students learn the basics of Human-Computer Interaction. Students learn to design user studies, conduct user studies ethically, and analyze user feedback with statistics and the programming language R. Concepts covered include analysis of user data, programming in R, user studies, study ethics, UML, user experience design, designing questionnaires, IRB submissions and CITI training, as well as guest lectures in special interest topics.


    • CSCI 340 - Computer Graphics
      Credits3
      PrerequisiteCSCI 209

      In this course we develop several graphical systems via programming. The course covers, among other topics, the application of linear algebra for the creation of graphical images, raytracing, and polygonal graphics. Knowledge is developed about the computer generation of shapes, lighting, textures, material properties, camera parameters, and perspective. The necessary mathematical background is developed during the course.


  8. Six additional credits in computer science.

Computer Science major leading to BS degree

A major in computer science leading to a Bachelor of Science degree requires completion of at least 50 credits, including the following:

  1. CSCI 111, 112, 209, 210, 211, 312, 313; MATH 102, 222
  2. MATH 121 or 225
  3. Two courses chosen from CSCI 315 through CSCI 341
  4. Six additional credits in computer science
  5. Six additional credits in mathematics at the 200 level or above.


An additional course required as a prerequisite for completion of the above is MATH 101.

Students expecting to major in computer science should take MATH 121 or 225 by fall of their third year.

  1. Required courses
  2.  

    • CSCI 111 - Introduction to Computer Science
      FDRFM Math and Computer Science Foundation
      Credits4

      This course introduces students to fundamental ideas in computer science while building skills in software development. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. CSCI 111 is appropriate for all students who want to be able to write programs, regardless of the domain.  It is the typical first course for computer science majors and minors.  No previous programming experience required.  Lectures and formal laboratories.


    • CSCI 112 - Data Structures
      FDRSC Science, Math, CS Distribution
      Credits4
      PrerequisiteCSCI 111

      This course continues the introduction to computer science begun in CSCI 111. Emphasis is on the use and implementation of data structures (i.e., how to store information and access it efficiently), introductory algorithm analysis, and object-oriented design and programming with Python. Lectures and formal laboratories.


    • CSCI 209 - Software Development
      Credits3
      PrerequisiteCSCI 112

      An examination of the theories and design techniques used in software development, with an emphasis on making software more maintainable. Hands-on implementation of those techniques. Topics include the software life cycle, design patterns, version control, unit testing, and program documentation.


    • CSCI 210 - Computer Organization
      Credits3
      PrerequisiteCSCI 112

      Multilevel machine organization studied at the levels of digital logic, microprogramming, conventional machine, operating system, and assembly language.


    • CSCI 211 - Algorithm Design and Analysis
      Credits3
      PrerequisiteCSCI 112 and either MATH 121 or MATH 225

      Methods for designing efficient algorithms, including divide-and-conquer, dynamic programming, and greedy algorithms. Analysis of algorithms for correctness and estimating running time and space requirements. Topics include advanced data structures, graph theory, network flow, and computational intractability.


    • CSCI 312 - Programming Language Design
      Credits3
      PrerequisiteCSCI 209

      Introduction to the theory and design of modern programming languages.  Using the programming language Haskell, students will explore core topics like grammar specification, parsing, data structuring and data typing, modularity, scoping, and expression semantics / evaluation.  The insights and habits gained in this course will enable students to understand common problems they will encounter in everyday programming practice and to sharpen their programming skills for the challenges of real-world applications.


    • CSCI 313 - Theory of Computation
      Credits3
      PrerequisiteMATH 121 or MATH 225

      A study of the principles of computer science embodied in formal languages, automata, computability, and computational complexity. Topics include context-free grammars, Turing machines, and the halting problem.


    • MATH 102 - Calculus II
      FDRFM Math and Computer Science Foundation
      Credits3
      PrerequisiteMATH 101 with a grade of C or greater or MATH 102 placement

      A continuation of MATH 101, including techniques and applications of integration, transcendental functions, and infinite series.


    • MATH 222 - Linear Algebra
      FDRSC Science, Math, CS Distribution
      Credits3
      PrerequisiteMATH 102 with a grade of C or greater, MATH 201, MATH 221, or MATH 221

      Linear algebra is the backbone of much of mathematics. Students in this course learn to identify and explain the basic principles, terminology, and theories used in linear algebra, and apply quantitative and/or qualitative reasoning skills to solve problems posed in linear algebra, primarily through applications of to both mathematics and the sciences, and also by writing proofs In mathematics.


  3. Take one course:
  4.  

    • MATH 121 - Discrete Mathematics I
      FDRFM Math and Computer Science Foundation
      Credits3

      A study of concepts fundamental to the analysis of finite mathematical structures and processes. These include logic and sets, algorithms, induction, the binomial theorem, and combinatorics.


    • MATH 225 - Bridges to Advanced Math
      FDRSC Science, Math, CS Distribution
      Credits3
      PrerequisiteMath 221 or 222 or instructor consent

      The course explores various important mathematical constructions and ideas, with a particular emphasis on mathematical inquiry and reasoning. Topics include: sets, functions, equivalence relations, modular arithmetic, and basic properties of the integers, real numbers, and complex numbers.


  5. Two courses chosen from:
  6.  

    • CSCI 315 - Artificial Intelligence
      Credits3
      PrerequisiteCSCI 209

      Basic concepts of heuristic search, game playing, natural language processing, and intelligent systems, with a focus on writing programs in these areas. Course combines a discussion of philosophical issues with hands-on problem solving.


    • CSCI 316 - Advanced Topics in Robotics
      Credits3
      PrerequisiteCSCI 209

      A review of advanced topics in robotics, including well-established topics like Bayesian filtering and control theory and current trends like intelligent robots and neuromorphic control. Readings in these areas are reinforced by hands-on projects with robot hardware and simulators. Students present their final projects at the culminating annual Spring Term Festival. Each class meeting includes lecture, discussion, and project work done in teams of one to four students, with weekly quizzes on the readings.


    • CSCI 317 - Database Systems
      Credits3
      PrerequisiteCSCI 209

      This course will provide a theoretical and practical implementation of database systems. Students will learn how databases work, particularly how they store, index, and query data. Broadly, the course will focus on the fundamentals of database design, data models, relational algebra and the description and semantics of query languages including SQL and NoSQL. Advanced topics will include database security, distributed and Internet databases, and large-scale data analysis.


    • CSCI 319 - Video Game Design
      Credits3
      PrerequisiteCSCI 209

      In this course, students learn to design and program video games using Python and the Pygame module. Concepts covered include video game code organization utilizing object-oriented programming, OOP design patterns, 2D animation, artificial intelligence, and responding to user feedback.


    • CSCI 320 - Parallel Computing
      Credits3
      PrerequisiteCSCI 209

      This course introduces the principles of parallel computing. Students will explore the benefits and challenges of developing programs for the multi-core processors found on virtually all modern computers. Students will attain an understanding of the theory of parallel computing and gain hands on experience writing efficient programs in C using parallelization frameworks such as OpenMP. Topics include race conditions, parallel algorithms, dynamic multithreading, and scheduling.


    • CSCI 321 - Computer Networks
      Credits3
      PrerequisiteCSCI 209

      Intended as a first course in communication networks for upper-level students. Covers concepts and protocols underlying modern computer networks. Topics include network architecture and layering, routing and switching, the TCP/IP protocol and network applications. Theory and programming.


    • CSCI 325 - Distributed Systems
      Credits4
      PrerequisiteCSCI 209

      In this course, students learn to design and develop distributed systems, i.e., collections of independent networked computers that function as single coherent systems. The concepts of communication, synchronization, consistency, replication, fault tolerance, and security are covered. In addition, case studies of real-world distributed systems (e.g., the Internet, distributed file systems, grid computing) are analyzed.


    • CSCI 326 - Cloud Computing
      Credits3
      PrerequisiteCSCI 209

      In this course, students are introduced to Cloud Computing. Clouding Computing focuses on implementing programs on distributed computers and delivering them as a service. Students will explore diverse aspects of this broad area, ranging from the design of cloud systems to creating applications on cloud systems. Selected topics include the theory of distributed systems, the benefits and challenges of the cloud, MapReduce and Spark, algorithm design on distributed systems, Amazon Web Services, and data analysis.


    • CSCI 330 - Operating Systems
      Credits3
      PrerequisiteCSCI 209 and CSCI 210

      Procedure initiation, environment construction, reentrancy, kernel functions, resource management, input/output, file structures, security, process control, semaphores and deadlock, and recovery procedures. The laboratory includes the opportunity to examine and modify the internals of an operating system.


    • CSCI 332 - Compiler Construction
      Credits3
      PrerequisiteCSCI 209 and CSCI 210

      Lexical analysis, parsing, context dependence, translation techniques, optimization. Students are expected to produce a compiler for a suitably restricted language.


    • CSCI 335 - Software Engineering through Web Applications
      Credits4
      PrerequisiteCSCI 209

      In this course, students learn to develop high-performance software for Web applications using advanced software engineering techniques. The concepts of client-server computing, theories of usable graphical user interfaces, models for Web-based information retrieval and processing, and iterative development are covered.


    • CSCI 339 - Human-Computer Interaction
      Credits3
      PrerequisiteCSCI 209

      In this course, students learn the basics of Human-Computer Interaction. Students learn to design user studies, conduct user studies ethically, and analyze user feedback with statistics and the programming language R. Concepts covered include analysis of user data, programming in R, user studies, study ethics, UML, user experience design, designing questionnaires, IRB submissions and CITI training, as well as guest lectures in special interest topics.


    • CSCI 340 - Computer Graphics
      Credits3
      PrerequisiteCSCI 209

      In this course we develop several graphical systems via programming. The course covers, among other topics, the application of linear algebra for the creation of graphical images, raytracing, and polygonal graphics. Knowledge is developed about the computer generation of shapes, lighting, textures, material properties, camera parameters, and perspective. The necessary mathematical background is developed during the course.


  7. Six additional credits in computer science.
  8.  

  9. Six additional credits in mathematics at the 200 level or above.
  10.