Site news

(No announcements have been posted yet.)

Course categories


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.

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.

Studies data abstractions (e.g., stacks, queues, lists, trees) and their representation techniques (e.g., linking, arrays). Introduces concepts used in algorithm design and analysis including criteria for selecting data structures to fit their applications. Requisites: Requires prerequisite courses of CSCI 1300 or CSCI 1310 or CSCI 1320 or ECEN 1030 or ECEN 1310 and APPM 1345 or APPM 1350 or MATH 1300 or MATH 1310 (all minimum grade C-). These prerequisites are stringently enforced.


Computer Systems Fall 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

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

The overarching learning goal of this class is to create an appreciation for the tight interplay between mechanism, sensor, and control in the design of intelligent systems. This includes (1) formally describing the forward and inverse kinematics of a mechanism, (2) understanding the sources of uncertainty in sensing and actuation as well as to describe them mathematically, (3) how to discretize the robot’s state and reason about it algorithmically, and (4) experiencing 1-3 on a real robotic platform.

After using a variety of platforms, this iteration of the class will use the “Sparki“, a simple differential wheel platform from ArcBotics, allowing students to implement simple odometry, Markov localization and simple planning for object retrieval tasks.


The overarching learning goal of this class is to create an appreciation for the tight interplay between mechanism, sensor, and control in the design of intelligent systems. This includes (1) formally describing the forward and inverse kinematics of a mechanism, (2) understanding the sources of uncertainty in sensing and actuation as well as to describe them mathematically, (3) how to discretize the robot’s state and reason about it algorithmically, and (4) experiencing 1-3 on a real robotic platform.

After using a variety of platforms, this iteration of the class will use the “Sparki“, a simple differential wheel platform from ArcBotics, allowing students to implement simple odometry, Markov localization and simple planning for object retrieval tasks.


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.

Operating systems are an essential part of every computing system and play a major role in determining the performance and usability of the system. This course is an introductory course covering the fundamental concepts in the design, implementation and evaluation of an operating system. While the field of operating systems has been undergoing rapid change, the fundamental concepts remain firmly clear.  This course covers these fundamental concepts comprised of device management, process management, memory management and network management.

This class focuses on design and implementation of network programs and systems. Topics include network protocols, file transfer, client-server computing, remote procedure call, and other contemporary network system design and programming techniques.

Welcome to Entrepreneurial Projects CSCI 4348/5340 Fall 2017!

High-level programming languages like Python make programming a breeze, but how do they work? There's a big gap between Python and machine instructions for modern computers. Learn how to translate Python programs all the way to Intel x86 assembly language.

Most compiler courses teach one phase of the compiler at a time, such as parsing, semantic analysis, and register allocation. The problem with that approach is it is difficult to understand how the whole compiler fits together and why each phase is designed the way it is. Instead, each week we implement a successively larger subset of the Python language. The very first subset is a tiny language of arithmetic statements, and by the time we are done the language includes objects, inheritance, and first-class functions.

The course has two broad topics:

  • Compilation and Language Transformation: How do we manipulate and translate programs? You will gain experience building such programming language tools.
  • Research Applications: You will explore more advanced ideas of your choosing through a final course project.

CSCI 4830-007 / CSCI 7000-007 / ATLS 4519-007 / ATLS 5519-007

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.

This course introduces core concepts in cyber security, including both theoretical foundations and practical applications. Cyber security plays a critical role in a wide variety of systems. The course provides a cyber security foundation that will allow practitioners in other fields apply to understand cyber security trade-offs and will also provide interested students with a basis further study in cyber security. Topics include both current and emerging techniques for ensuring system confidentiality, integrity, availability as well as security policies and procedures, risk management and auditing. These cyber security concepts will be applied to both traditional IT systems and emerging cyber physical systems. At the conclusion of the course students should have a solid foundation in cyber security and hands-on experience in applying the theory to practice.  


Summer course for Discrete structures, teaches math.

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