Site news

(No news has been posted yet)

Available courses

Senior Software Engineering Project is a year long course in which students work in teams on a real-life project from industry, University affiliate, or non-profit organization. Rather than participate as a team member, students with significant full-time work experience as a software developer take the fall portion of the course working as mentors for teams. Students working on interdisciplinary projects in other departments take the fall portion of the course with their project component satisfied in another department.

This course covers techniques for writing computer programs in higher level programming languages (e.g. C++, python) to solve problems of interest in a range of application domains. This class is intended for students with some experience in computing or programming.

Computer Systems Spring 2017

Introduces the practice and research of human-centered computing, including the evolution of human-computer interaction to its forms today and the techniques of user-centered design. The course will survey topics that include social computing; tangible computing; mobility; and more. It will cover computing in society at large with respect to domains such as health, education, assistive technology, emergency response, and environment. Prerequisites: Restricted to students with 27-180 credits (Sophomores, Juniors or Seniors) only.

CSCI 3104: Algorithms

Course Objectives

In this course, students will

  • become familiar with ``standard'' algorithms for abstract problem solving;
  • learn how to mathematically prove properties of algorithms, including their correctness;
  • analyze the time and space complexity of algorithms;
  • understand the relative merits or demerits of different algorithms in practice;
  • adapt and combine algorithms to solve problems that may arise in practice; and,
  • learn common strategies in the design of new algorithms for emerging applications.

Topics Covered

Roughly, we will cover the following topics (some of them may be skipped depending on the time available).

  • Introduction to Algorithms: Complexity analysis
  • Divide and Conquer Algorithms
  • Sorting and Order Statistics
  • Greedy Algorithms
  • Hash functions and Probabilistic Analysis
  • Dynamic Programming
  • Graph Algorithms: Search, Minimum Spanning Trees, Shortest Paths, Network Flows
  • Matching algorithms
  • Basic Computational Complexity: P, NP, reductions and open problems

This course is about principles, concepts, and ideas that underly programming languages. We will dissect programming languages by constructing interpreters. The semester project is to construct an interpreter for JavaScript (incrementally). We will see that interpreters are the basis for realizing computation, and we will study the programming language theory that enable us to reason carefully about a language's design and implementation. Our approach will be gradual in that we will initially consider a small subset of JavaScript and then slowly grow the aspects of the language that we consider.

Surveys data management, including file systems, database management systems design, physical data organizations, data models, query languages, concurrency, and database protection. Requisites: Requires prerequisite course of CSCI 3104 (minimum grade C-).

Covers tools and practices for software development with a strong focus on best practices used in industry and professional development, such as agile methodologies, pair-programming and test-driven design. Students develop web services and applications while learning these methods and tools.

Covers tools and practices for software development with a strong focus on best practices used in industry and professional development, such as agile methodologies, pair-programming and test-driven design. Students develop web services and applications while learning these methods and tools.

This class is the follow-up class to CSCI3302 "Introduction to Robotics." Robots perceive their environment with signal processing and computer vision techniques, reason about them using machine learning, artificial intelligence and discrete algorithms, and execute their actions based on constraints imposed by sensor uncertainty, their mechanism, and their dynamics. "Advanced Robotics" will teach the key concepts used by autonomous mobile platforms and provide hands-on experience with state-of-the-art software and systems.

Lecture materials are supported by exercises around the ``Robot Operating System'' ROS and will lead to the completion of a group project. After the Autonomous Vehicle Competition (AVC) at SparkFun, and the Formula One-Tenth Autonomous Racing Competition at CPS Week in Pittsburgh, this class will focus on robust autonomous driving. Exercises will be conducted in a virtual environment and will later be transferred to a autonomous vehicle platform.

An introduction to problems arising in molecular biology genome analysis and the algorithms used to address those problems. Computational biology involves the development and application of data-analytical and theoretical methods, mathematical modeling, and computational simulation techniques for the study of biological, behavioral, and social systems.

This course focuses on the algorithms used in the analysis of DNA and RNA sequencing data.  It provides a ‘hands on’ experience by evaluating existing software and implementing the fundamental classes of algorithms used in computational biology and bioinformatics.

Entrepreneurial Projects II - Senior Capstone, Spring 2017

This course teaches the security mindset and introduces the principles and practices of computer security as applied to software, host systems, and networks. It covers the foundations of building, using, and managing secure systems. Topics include standard cryptographic functions and protocols, threats and defenses for real-world systems, incident response, and computer forensics.

Schedule and assignments at

Turn in projects here

The objective of this course is provide an introduction to the theory of computation covering the following three branches of theoretical computer science:
  1. Automata Theory
    • Formalization of the notion of problems via formal languages
    • Formalization of the notion of computation using "abstract computing devices" called automata
    • Understanding a hierarchy of classes of problems or formal languages (regular, context-free, context-sensitive, decidable, and undecidable)
    • Understanding a hierarchy of classes of automata (finite automata, pushdown automata, and Turing machines)
    • Understanding applications to pattern matching, parsing, and programming languages
  2. Computability Theory
    • Understanding Church-Turing thesis (Turing machines as a notion of "general-purpose computers")
    • Understanding the concept of reduction , i.e., solving a problem using a solution (abstract device) for a different problem
    • Understanding the concept of undecidability , i.e., when a problem can not be solved using computers
  3. Complexity Theory
    • Complexity classes : how to classify decidable problems based on their time and space requirements
    • Complexity classes P and NP
    • When a problem is called intractable (NP-completeness)
    • Using reductions to prove problems intractable

This course provides an in-depth coverage of the underlying principles and practices involved in the design, implementation and evaluation of a distributed system.

Forums for CSCI faculty

Communication for the curriculum committee

Undergraduate Committee Communication Site