View undergraduate course grid View graduate course grid
This course builds directly on the foundation developed in PAC I, covering the essentials of computer organization through the study of assembly language programming and C, as well as introducing the students to the analysis of algorithms. Topics include: (1) Assembly language programming for the Intel chip family, emphasizing computer organization, the Intel x86 instruction set, the logic of machine addressing, registers and the system stack. (2) Programming in the C language, a general-purpose programming language which also has low-level features for systems programming. (3) An introduction to algorithms, including searching, sorting, graph algorithms and asymptotic complexity. Examples and assignments reinforce and refine those first seen in PAC I and often connect directly to topics in the core computer science graduate courses, such as Programming Languages, Fundamental Algorithms, and Operating Systems
Reviews a number of important algorithms, with emphasis on correctness and efficiency. The topics covered include solution of recurrence equations, sorting algorithms, selection, binary search trees and balanced-tree strategies, tree traversal, partitioning, graphs, spanning trees, shortest paths, connectivity, depth-first and breadth-first search, dynamic programming, and divide-and-conquer techniques.
Discusses the design, use, and implementation of imperative, object-oriented, and functional programming languages. The topics covered include scoping, type systems, control structures, functions, modules, object orientation, exception handling, and concurrency. A variety of languages are studied, including C++, Java, Ada, Lisp, and ML, and concepts are reinforced by programming exercises.
This course teaches the design and implementation techniques essential for engineering robust networks. Topics include networking principles, Transmission Control Protocol/Internet Protocol, naming and addressing (Domain Name System), data encoding/decoding techniques, link layer protocols, routing protocols, transport layer services, congestion control, quality of service, network services, programmable routers and overlay networks.
This is a capstone course. A course in computer networks and large-scale distributed systems. Teaches the design and implementation techniques essential for engineering both robust networks and Internet-scale distributed systems. The goal is to guide students so they can initiate and critique research ideas in networks and distributed systems and implement and evaluate a working system that can handle a real-world workload. Topics include routing protocols, network congestion control, wireless networking, peer-to-peer systems, overlay networks and applications, distributed storage systems, and network security.
This is part of a two course series on Mathematics of Data Science. Each part can be taken independently, and they can be taken in any order. This part focus on algorithms on graphs and networks while the other in high dimensional data. This is a mostly self-contained research-oriented and fast-paced course designed for graduate students with an interest in doing research in theoretical aspects of algorithms that aim to extract information from data. These often lie in overlaps of (Applied) Mathematics with: Computer Science, Electrical Engineering, Statistics, Operations Research and/or Statistical Physics. Each lecture will feature a couple of Mathematical Open Problem(s) with relevance in Data Science. The main mathematical tools used will be Probability and Linear Algebra, and a working knowledge of these subjects is required. There will also be some (although knowledge of these tools is not assumed) Graph Theory, Representation Theory, Applied Harmonic Analysis, among others. The topics treated will include Random Matrices, Approximation Algorithms, Convex Relaxations, Community detection in graphs, and several others.
This course covers Scala, Spark programming, Spark architecture, Spark Streaming, and integration of Spark with the Hadoop ecosystem for developing Big Data applications. In addition, it covers the technologies that integrate well with Spark in the creation of Big Data applications. Students are required to complete weekly reading and/or programming assignments and demonstrate mastery of course topics by developing a final project using Scala, Spark, and complementary Hadoop tools.
This is a capstone course.
This course provides a hands-on comprehensive study of Cloud concepts and capabilities across the various Cloud service models including Infrastructure as a Service (IaaS), Platform as a Service (PaaS), Software as a Service (SaaS), and Business Process as a Service (BPaaS).
The IaaS topics start with a detailed study of the evolution of infrastructure migration approaches from VMWare/Xen/KVM virtualization, to adaptive virtualization, and Cloud Computing / on-demand resources provisioning. Mainstream Cloud infrastructure services and related vendor solutions are also covered in detail.
The PaaS topics cover a broad range of Cloud vendor platforms including AWS, Red Hat's OpenShift, Cloud Foundry, Apache Stratos, Microsoft Azure, Eucalyptus, OpenStack and others as well as a detailed study of related platform services such as storage capabilities that leverage Google Storage, Amazon S3, Amazon Dynamo, or other facilities meant to provide Cloud resources management and monitoring capabilities.
The course will focus in particular on mainstream Application Platform as a Service (aPaaS), which is a PaaS offering that leverages container services (e.g., Docker) and microservices architectures aimed at facilitating application development, deployment and execution in the cloud. In addition to encapsulating infrastructure resources, aPaaSs include services such as those for data management (including NoSQL and in-memory data services), BPM and decision-engine services, API Management for hybrid integration, and user interfaces. As an example, Cloud foundation offerings provided on top of modern aPaaS such as IBM's Bluemix Liberty for Java include a collection of Watson analytics, big data, mobile, security, IoT, integration, DevOps, Blockchain, as well as other functionality. Additional aPaaS platforms of interest include Google App Engine, Microsoft Azure App Service, Oracle aPaaS, Red Hat OpenShift, Salesforce App Cloud, and SAP Hana Cloud Platform (HCP).
The SaaS and aPaaS/PaaS topics covered in the course will familiarize students with the use of vendor-maintained applications and processes available on the Cloud on a metered on-demand basis in multi-tenant environments.
Through hands-on assignments and projects, students will learn how to configure and program IaaS services. They will also learn how to develop Cloud-based software applications on top of various Cloud platforms, how to integrate application-level services built on heterogeneous Cloud platforms, and how to leverage SaaS, aPaaS, and BPaaS solutions to build comprehensive end-to-end business solutions on the Cloud.
Data Science for Health
This is a graduate level class on how data science can impact important health challenges facing society today. This is a project-oriented class that aims to cover how big data, machine learning algorithms, statistical analytics techniques and mobile applications have had a direct impact on different important facets of health. The classes will be centered around case studies around specific health topics and the influence of data science on each topic. The tentative sets of topics that will be covered in this course include: randomized control trials and measuring health outcomes, personalized health inference and monitoring, behavioral health, mobile health applications, wearable sensors and health monitoring, gene sequence analytics and health traits, hi-throughput sequence analytics, disease markers and progression analysis, disease surveillance systems, testing efficacy of drugs, precision medicine, data science for health information management systems and data science use-cases in medical imaging.
Recent advances in 3D digital geometry processing have created a plenitude of novel concepts for the mathematical representation and interactive manipulation of geometric models. This course covers some of the latest developments in geometric modeling and digital geometry processing. Topics include surface modeling based on polygonal meshes, surface reconstruction, mesh improvement, mesh parametrization, discrete differential geometry, interactive shape editing, skinning animation, architectural and structure-aware geometric modeling, shape modeling with an eye on 3D printing. The students will learn how to design, program and analyze algorithms and systems for interactive 3D shape modeling and digital geometry processing.
Generative models define procedures that produce samples of data. They can be used to learn representations, to handle exploration/exploitation tradeoffs, and to make use of the large amounts of unlabeled data available. Deep generative models use ideas from deep learning to build generative models and algorithms for learning them. This course will focus on some of the recent advances in deep generative models including deep latent variable models, variational autoencoders, autoregressive models, and generative adversarial networks. Students will gain experience in working with these methods and understanding the tradeoffs between them.
The Web is an intrinsically visual medium whose graphical capabilities are diverse and evolving. With the development of HTML5 and CSS3, there are now multiple ways to code images and animation natively in the browser. This course will provide a survey of current drawing techniques. We will create a series of Web-based projects that involve raster graphics, vector graphics, and interactivity using HTML, CSS, SVG, and JavaScript. Drawing on the Web builds upon foundations in Web design and computer programming with a focus on the range of graphics that can be coded into Web pages.
The need for floating-point arithmetic, the IEEE floating-point standard, and the importance of numerical computing in a wide variety of scientific applications. Fundamental types of numerical algorithms: direct methods (e.g., for systems of linear equations), iterative methods (e.g., for a nonlinear equation), and discretization methods (e.g., for a differential equation). Numerical errors: can you trust your answers? Uses graphics and software packages such as Matlab. Programming assignments.
An intense hands-on study of practical techniques and methods of software engineering. Topics include advanced object-oriented design, design patterns, refactoring, code optimization, universal modeling language, threading, user interface design, enterprise application development, and development tools. All topics are integrated and applied during the semester long group project. The aim of the project is to prepare students for dynamics in a real workplace. Members of the group meet on a regular basis to discuss the project and to assign individual tasks. Students are judged primarily on the final project presentations.
An introduction to the field of computer vision. Basic concepts will be covered such as edge detection, stereo vision, motion, color, texture and recognition.
Many of the top firms in the technological and financial sectors are using algorithmic problems as interview questions for assessing candidate skill. In this course we take this idea one step further and use algorithmic problem solving as way to hone programming skills. Students will use the material covered in the data structures and algorithms courses and learn new algorithmic techniques to solve challenging problems quickly. Each week will be devoted to a particular type of algorithm. Weekly problem sets will reinforce the lecture, and require students to implement their solutions in Java or C++. Students completing this course will be well prepared to participate in programming competitions such as the ACM Inter-Collegiate Programming Contest, TopCoder, and Google's Code Jam.
There are many courses that can teach you how to use commercial computer graphics packages and APIs. This course, in contrast, will teach you how to build 3D computer graphics from the ground up. This will include 3D modeling, animation, and rendering. At the end of the semester you will have built your own complete working real-time 3D computer graphics systems that run in web browsers.
Natural Language Processing (aka Computational Linguistics) is an inter-disciplinary field applying methodology of computer science and linguistics to the processing of natural languages (English, Chinese, Spanish, Japanese, etc.). Typical applications include: information extraction (automatically finding information from text); information retrieval (web searches and other applications involving the automatic selection of "relevant" documents); sentiment analysis (automatic extraction of opinions about a set of issues); and machine translation (automatically translating one natural language to another). Much of the best work in the field combines two methodologies: (1) automatically acquiring statistical information from one set of "training" documents to use as the basis for probabilistically predicting the distribution of similar information in new documents; and (2) using manually encoded linguistic knowledge. For example, many supervised methods of machine learning require: a corpus of text with manually encoded linguistic knowledge, a set of procedures for acquiring statistical patterns from this data and a transducer for predicting these same distinctions in new text. This class will cover linguistic, statistical and computational aspects of this exciting field.
This course prepares students to become active participants in open source projects. It begins with an overview of the philosophy and brief history of open source development, followed by an in-depth look at different types of open source projects and the study of various tools involved in open source development. In particular, it covers the collaborative nature of open source projects, community structure, version control systems, licensing, intellectual property, types of contributions (programming and non-programming) and the tool-chains that enable such contributions. The students are expected to contribute to existing open source projects.
This course will cover basic principles of computer security and security engineering. To facilitate understanding, this course will consider security both from an attacker's perspective (threat modeling) and the defender's perspective (building and deploying secure systems). Specific topics will include operating system security, network security, web security, and mobile device security. Course projects will focus both on writing secure code and exploiting insecure code.