Computer and Information Technology (CIT)

CIT 5200 Introduction to Robotics

This course introduces the fundamental geometric, kinematic, dynamic, and computational principles underlying modern robotic systems. The main topics of the course include: rotation matrices, homogeneous transformations, manipulator forward and inverse kinematics, mobile robot kinematics, Jacobians, and trajectory planning. The purpose of the course is to provide you with a mathematical, computational and practical foundation for future explorations into the robotics field. Students should have knowledge of simple geometry and trigonometry (triangle inequalities, sine, cosine), previous exposure to linear algebra (matrices and vectors), and previous programming experience. Although MEAM 2110 is often listed as a prerequisite for the on-campus version of this course, it is not strictly required. Previous experience in simple rigid body kinematics will be useful.

Fall or Spring

1 Course Unit

CIT 5820 Blockchains and Cryptography

Blockchains or Distributed Ledger Technology (DLT) provide a novel method for decentralizing databases in the presence of mutually distrustful or malicious agents. The promise of DLTs has attracted billions of dollars in investments, yet the true potential of these systems remains unclear. This course introduces students to the fundamentals of cryptography and distributed systems that underpin modern blockchain platforms -- including collision-resistant hash functions, digital signatures and classical consensus algorithms. From there, we will examine the architecture of modern blockchain platforms, and develop tools to analyze and interact with them in Python. At the end of this course, students should understand the power and limitations of blockchain technology, and be able to develop software that interacts with current blockchain platforms.

Fall or Spring

1 Course Unit

CIT 5900 Programming Languages and Techniques

This course is an introduction to fundamental concepts of programming and computer science for students who have little or no experience in these areas. Includes an introduction to programming using Python, where students are introduced to core programming concepts like data structures, conditionals, loops, variables, and functions. Also provides an introduction to basic data science techniques using Python. The second half of this course is an introduction to object-oriented programming using Java, where students are introduced to polymorphism, inheritance, abstract classes, interfaces, and advanced data structures. Students will also learn how to read and write to files, connect to databases, and use regular expressions to parse text. This course includes substantial programming assignments in both Python and Java, and teaches techniques for test-driven development and debugging code.

Fall or Spring

1 Course Unit

CIT 5910 Introduction to Software Development

Introduction to fundamental concepts of programming and computer science. Principles of modern object-oriented programming languages: abstraction, types, polymorphism, encapsulation, inheritance, and interfaces. This course will also focus on best practices and aspects of software development such as software design, software testing, pair programming, version control, and using IDEs. Substantial programming assignments.

Fall or Spring

1 Course Unit

CIT 5920 Mathematical Foundations of Computer Science

This course introduces you to math concepts that form the backbone of the majority of computer science. Topics covered include sets, functions, permutations and combinations, discrete probability, expectation, mathematical Induction and graph theory. The goal of the course is to ensure that students are comfortable enough with the math required for most of the CIS electives. CIS 5020 and CIT 5960 heavily rely on concepts taught in this course.

Fall or Spring

1 Course Unit

CIT 5930 Introduction to Computer Systems

This course provides an introduction to fundamental concepts of computer systems and computer architecture. You will learn the C programming language and an instruction set (machine language) as a basis for understanding how computers represent data, process information, and execute programs. The course also focuses on the Unix environment and includes a weekly hands-on lab session.

Fall or Spring

1 Course Unit

CIT 5940 Data Structures and Software Design

This course will focus on data structures, software design, and advanced Java. The course starts off with an introduction to data structures and basics of the analysis of algorithms. Important data structures covered will include arrays, lists, stacks, queues, trees, hash maps, and graphs. The course will also focus on software design and advanced Java topics such as software architectures, design patterns, networking, multithreading, and graphics. We will use Java for the entire course.

Fall or Spring

Prerequisite: CIT 5910

1 Course Unit

CIT 5950 Computer Systems Programming

This course builds on your knowledge of C and focuses on systems programming for Linux, specifically the libraries that programmers use for threading and concurrency, synchronization, inter-process communication, and networking. The course also introduces the C++ programming language, and covers important concepts in modern operating systems, including processes, scheduling, caching, and virtual memory. After completing this course, you will have the requisite knowledge and experience for systems-focused CIS graduate-level electives.

Fall or Spring

Prerequisite: CIT 5930

1 Course Unit

CIT 5960 Algorithms and Computation

This course focuses primarily on the design and analysis of algorithms. We will begin with sorting and searching algorithms and then spend most of the course on graph algorithms. In order to study graph algorithms, general algorithm design patterns like dynamic programming and greedy algorithms will be introduced. A section of this course is also devoted to understanding NP-Completeness.

Fall or Spring

Prerequisite: CIT 5920

1 Course Unit