Computer Science Major Requirements

2022 - 2023 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 201
  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 201 in their first or second year.

  1. Required courses
  2.  

    • CSCI 111 - Fundamentals of Programming I
      FDRFM Math and Computer Science Foundation
      Credits4

      A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories.


    • CSCI 112 - Fundamentals of Programming II
      FDRSC Science, Math, CS Distribution
      Credits4
      PrerequisiteCSCI 111

      A continuation of CSCI 111. Emphasis is on the use and implementation of data structures, introductory algorithm analysis, and object-oriented design and programming with Python.


    • CSCI 209 - Software Development
      Credits3
      PrerequisiteCSCI 112

      An examination of the theories and design techniques used in software development. Topics include the software life cycle, design patterns, the Unified Modeling Language, unit testing, refactoring, rapid prototyping, 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, MATH 201, 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

  5. Take one course
  6.  

    • CSCI 312 - Programming Language Design
      Credits3
      PrerequisiteCSCI 209

      Formal language description tools, semantic concepts and syntactic constructs appropriate to diverse applications. Comparison of several high-level languages, such as Haskell, Erlang, Java, and PROLOG, and the implementations of these syntactic and semantic elements. Students also learn several programming paradigms, such as the function-oriented, object-oriented, and logic-oriented.


    • or

    • CSCI 313 - Theory of Computation
      Credits3
      PrerequisiteMATH 121 or MATH 201 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 and CSCI 210

      A survey of parallel computing including hardware, parallel algorithms, and parallel programming. The programming projects emphasize the message-passing paradigm.


    • 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 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 201
  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 201 in their first or second year.

  1. Required courses
  2.  

    • CSCI 111 - Fundamentals of Programming I
      FDRFM Math and Computer Science Foundation
      Credits4

      A disciplined approach to programming with Python. Emphasis is on problem-solving methods, algorithm development, and object-oriented concepts. Lectures and formal laboratories.


    • CSCI 112 - Fundamentals of Programming II
      FDRSC Science, Math, CS Distribution
      Credits4
      PrerequisiteCSCI 111

      A continuation of CSCI 111. Emphasis is on the use and implementation of data structures, introductory algorithm analysis, and object-oriented design and programming with Python.


    • CSCI 209 - Software Development
      Credits3
      PrerequisiteCSCI 112

      An examination of the theories and design techniques used in software development. Topics include the software life cycle, design patterns, the Unified Modeling Language, unit testing, refactoring, rapid prototyping, 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, MATH 201, 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

      Formal language description tools, semantic concepts and syntactic constructs appropriate to diverse applications. Comparison of several high-level languages, such as Haskell, Erlang, Java, and PROLOG, and the implementations of these syntactic and semantic elements. Students also learn several programming paradigms, such as the function-oriented, object-oriented, and logic-oriented.


    • CSCI 313 - Theory of Computation
      Credits3
      PrerequisiteMATH 121 or MATH 201 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

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


  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 and CSCI 210

      A survey of parallel computing including hardware, parallel algorithms, and parallel programming. The programming projects emphasize the message-passing paradigm.


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