- Teacher: Rhonda Hoenigman

## Site news

Skip available courses

## Available courses

- Teacher: Rhonda Hoenigman
- Teacher: David Knox
- Teaching Assistant: Joseph Azofeifa
- Teaching Assistant: Ranganathan Chidambaranathan
- Teaching Assistant: Michael Iuzzolino
- Teaching Assistant: Varsha Koushik
- Teaching Assistant: Arash Mehraban
- Teaching Assistant: Richard Tillquist
- Teaching Assistant: Amber Womack

- Teacher: Sushma Colanukudhuru
- Teacher: Rhonda Hoenigman
- Teacher: Camilla Lambrocco
- Teacher: Brennan Mcconnell

- Teacher: Ioana Fleming
- Course Assistant: Kristen Egan
- Course Assistant: Rebekah Haysley
- Course Assistant: Josh Jacobson
- Course Assistant: Benjamin Shoeman
- 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: 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: 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: Mohammad Hashemi
- Teacher: Zhiyuan Liu
- Teacher: Frank Miller
- Teacher: Ishita Srivastava
- Teacher: Yogesh Virkar

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: Pei Hsiu Yeh
- Teaching Assistant: Khalid Alharbi

### 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
- 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: Spencer Wilson

- Teacher: Sushma Colanukudhuru
- Teacher: Rhonda Hoenigman

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: Frank Miller

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: Ashutosh Trivedi
- Teaching Assistant: Krithika Balan

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: Shivakant Mishra

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: Richardyehwhei Han
- Teacher: Zachary Nies

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: Michael Oberg
- Teacher: Henry Tufo

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

- Teacher: Daniel Szafir

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

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

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

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: Ioana Fleming
- Teacher: Dirk Grunwald
- Teacher: Frank Miller
- Teacher: Richard Parker
- Teacher: Carrie Sadler

Undergraduate Committee Communication Site

- Teacher: Dirk Grunwald
- Teacher: Rhonda Hoenigman
- Teacher: Eva Lacy
- Teacher: Shivakant Mishra
- Teacher: Carrie Sadler
- Teacher: Daniel Szafir