- Teacher: Terry Olkin

## Site news

Skip available courses

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

- Teacher: Trevor Dimartino
- Teacher: Richard Parker
- Teacher: Matthew Whitlock

- Teacher: Joseph Azofeifa
- Teacher: Ranganathan Chidambaranathan
- Teacher: Alexander Curtiss
- Teacher: Vipra Gupta
- Teacher: Rhonda Hoenigman
- Teacher: Michael Iuzzolino
- Teacher: David Knox
- Teacher: Varsha Koushik
- Teacher: Brooke Robinson
- Teacher: Richard Tillquist
- Teacher: Amber Womack

- Teacher: Ioana Fleming
- Teacher: Rhonda Hoenigman
- Teacher: David Knox
- Teacher: Camilla Lambrocco
- Teacher: Brennan Mcconnell
- Teacher: Shirly Montero

- Teacher: Ioana Fleming
- Course Assistant: Kristen Egan
- Course Assistant: Rebekah Haysley
- Course Assistant: Joshuah Jacobson
- Course Assistant: Benjamin Shoeman
- Teaching Assistant: Apoorva Bapat
- Teaching Assistant: Keyu Chen
- Teaching Assistant: Soumyatha Gavvala
- Teaching Assistant: Vipra Gupta
- Teaching Assistant: Deepak Kyasaralli Thimmappa
- Teaching Assistant: Julian Lambert
- Teaching Assistant: Cecilia Mauceri
- Teaching Assistant: David Molitor
- Teaching Assistant: Sachin Muralidhara
- Teaching Assistant: Kelsey Pool
- Teaching Assistant: Branden Romero
- Teaching Assistant: Rashmi Shetty
- Teaching Assistant: Ankita Singh

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.

- Teacher: Elizabethsugar Boese
- Teacher: Guohui Ding
- Teacher: Aayush Grover
- Teacher: Yang Li
- Teacher: Frank Miller
- Teacher: Shirly Montero
- Teacher: Radhen Patel
- Course Assistant: Kyle Helmick
- Course Assistant: Hussain Quadri
- Course Assistant: Dylan Schneider
- Course Assistant: Mckenzie Weller

- Teacher: Praveen Devaraj
- Teacher: Seyed Mohammad Hashemi-doulabi
- Teacher: Zhiyuan Liu
- Teacher: Frank Miller
- Teacher: Pratima Sherkane
- Teacher: Ishita Srivastava
- Teacher: Yogesh Virkar
- Peer Learning Assistant: Parker Illig
- Peer Learning Assistant: Joseph Pucciarelli
- Peer Learning Assistant: Ziyi Wang

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.

- Teacher: Jacqueline Cameron
- Teacher: Pei Hsiu Yeh
- Teaching Assistant: Khalid Alharbi
- Teaching Assistant: Peizhe Cao

- Teacher: Jordan Ying
- Teaching Assistant: Pedro Rodriguez
- Teaching Assistant: Aditya Thyagarajan

### CSCI 3104: Analysis of Algorithms

## Course Objectives

The key course objectives are as follows:

**Learn**a set of ''standard'' or canonical algorithms for*abstract problem solving*. Learning involvesUnderstand proofs of correctness and other properties of these algorithms.

Time and space complexity analysis.

Understand the relative merits or demerits in practice.

**Apply**: Adapt and combine algorithms creatively to solve problems that may arise in practice.Learn key tricks (motifs) underlying 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.

Hash functions.

Dynamic Programming.

Greedy Algorithms.

Graph Algorithms: Search, Minimum Spanning Trees, Shortest Paths, Network Flows.

Introduction to Linear and Integer Programming.

Some basic geometric algorithms.

Basics of Computational Complexity: P, NP, reductions and open problems.

- Teacher: Sriram Sankaranarayanan
- Course Assistant: Mitchell Block
- Course Assistant: Michael Condon
- Course Assistant: Derek Gorthy
- Teaching Assistant: Ning Gao
- Teaching Assistant: Sebastian Laudenschlager
- Teaching Assistant: Wanshan Yang

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.

- Teacher: BOR-YUH Chang
- Teacher: Austin Holler
- Teacher: Athithyaa Panchapakesan Rajeswari
- Course Assistant: Shane Sarnac
- Course Assistant: Spencer Wilson

- Teacher: Rhonda Hoenigman
- Teacher: Mridula Natrajan
- Teacher: Avinash Ratnavel

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

- Teacher: Praveen Devaraj
- Teacher: Chirag Kamat
- Teacher: Frank Miller
- Teacher: Pratima Sherkane
- Teacher: Monika Tak

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.

- Teacher: Nicolaus Correll

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.

- Teacher: David Knox
- Teaching Assistant: Hooman Hedayati
- Teaching Assistant: Yogitha Renu Mahadasu
- Teaching Assistant: Saish Redkar

**theory of computation**covering the following three branches of theoretical computer science:

- 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

- Formalization of the notion of problems via
- 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

- 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

- Teacher: Krithika Balan
- Teacher: Ashutosh Trivedi

- Teacher: Jed Brown
- Course Assistant: Jingwei Li

Operating systems are an essential part of every computing system. They play a major role in determining the performance and usability of a computing 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.

- Teacher: Max Hollingsworth
- Teacher: Yu-ju Lee
- Teacher: Shivakant Mishra

- Teacher: Yan Li
- Teacher: Willem Schreuder

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.

- Teacher: Sangtae Ha
- Teaching Assistant: Sumeet Khule
- Teaching Assistant: Zhang Liu
- Teaching Assistant: Shyam Sundar Ramamoorthy

- Teacher: Richard Han
- Teacher: Richardyehwhei Han
- Teacher: Zachary Nies

- Teacher: Michael Oberg
- Teacher: Henry Tufo

- Teacher: Akash Devgun
- Teacher: Alvin Grissom

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

- Teacher: Daniel Szafir
- Teaching Assistant: Christopher Hitte
- Teaching Assistant: Jordan Peters

- Teacher: Rafael Frongillo
- Teacher: Shreya Joshi
- Teacher: Nehal Kamat

- Teacher: Matthew Hammer
- Teaching Assistant: Vaishnavi Viswanathan

- Teacher: Christian Ketelsen
- Teaching Assistant: Karthik Kannan

- Teacher: Sriram Sankaranarayanan
- Teaching Assistant: Amirhossein Kashipazha

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

- Teacher: Shivakant Mishra

- Teacher: Ioana Fleming
- Teacher: Mahesh Ravindranathan
- Teacher: Akshay Singh

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.

- Teacher: Shaun Kane

- Teacher: Sriram Sankaranarayanan

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 https://ericw.us/trow/ecen5032/

Turn in projects here

- Teacher: Eric Wustrow

- Teacher: Sriram Sankaranarayanan
- Teacher: Rajshree Shrestha
- Teacher: Pei Hsiu Yeh

Hangout

- Teacher: Nicolaus Correll
- Teacher: Dirk Grunwald

Graduate Recruiting

Graduate Committee

- Teacher: Nicolaus Correll
- Teacher: Sriram Sankaranarayanan

Forums for CSCI faculty

- Teacher: BOR-YUH Chang
- Teacher: Ioana Fleming
- Teacher: Dirk Grunwald
- Teacher: Rhonda Hoenigman
- Teacher: Sriram Sankaranarayanan

Communication for the curriculum committee

- Teacher: Martin Black
- Teacher: Elizabethsugar Boese
- Teacher: Ioana Fleming
- Teacher: Dirk Grunwald
- Teacher: Rhonda Hoenigman
- Teacher: Christian Ketelsen
- Teacher: David Knox
- Teacher: Eva Lacy
- Teacher: Lesley Mc Dowell
- Teacher: Frank Miller
- Teacher: Shivakant Mishra
- Teacher: Richard Parker
- Teacher: Carrie Sadler
- Teacher: Elizabeth Webb

Undergraduate Committee Communication Site

- Teacher: Martin Black
- Teacher: Dirk Grunwald
- Teacher: Rhonda Hoenigman
- Teacher: Eva Lacy
- Teacher: Lesley Mc Dowell
- Teacher: Shivakant Mishra
- Teacher: Carrie Sadler
- Teacher: Daniel Szafir
- Teacher: Elizabeth Webb