This course is an introduction to fundamental concepts of programming and computer science,
including principles of modern object-oriented programming languages: abstraction, types, polymorphism, encapsulation, inheritance, and interfaces.
This course introduces students 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.
This course provides an introduction to fundamental concepts of computer systems and computer architecture.
Students 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.
This course focuses on data structures, software design, and advanced Java.
It also focuses on software design and advanced Java topics such as software architectures, design patterns, and concurrency.
The course will use the C program language, and will develop your knowledge on C system calls, and libraries for process/thread creation and manipulation, synchronization, and network communication.
This course focuses primarily on the design and analysis of algorithms.
This is an introductory course to computer vision and computational photography.
This course will explore four topics: 1) image feature detection, 2) image morphing, 3) image stitching, and 4) deep learning related to images.
This course provides a rigorous and hands-on introduction to the field of software analysis – a body of powerful techniques and tools for analyzing modern software,
with applications to systematically uncover insidious bugs, prevent security vulnerabilities, automate testing and debugging, and improve our confidence that software will behave as intended.
This course focuses on the fundamentals of scaling computation to handle common data analytics tasks.
You will learn about basic tasks in collecting, wrangling, and structuring data; programming models for performing certain kinds of computation in a scalable way across many compute nodes;
common approaches to converting algorithms to such programming models; standard toolkits for data analysis consisting of a wide variety of primitives; and popular distributed frameworks for analytics tasks such as filtering, graph analysis, clustering, and classification.
This course provides an introduction to fundamental concepts in the design and implementation of networked systems, their protocols, and applications. Topics to be covered include: Internet architecture, network applications, addressing, routing, transport protocols, peer-to-peer networks, software-defined networks, and distributed systems.