View undergraduate course grid View graduate course grid
An accelerated introduction to the fundamental concepts of computer science for students who lack a formal background in the field. Topics include algorithm design and program development; data types; control structures; subprograms and parameter passing; recursion; data structures; searching and sorting; dynamic storage allocation and pointers; abstract data types, such as stacks, queues, lists, and tree structures; generic packages; and an introduction to the principles of object-oriented programming. The primary programming language used in the course will be Java. Students should expect an average of 12-16 hours of programming and related course work per week.
An accelerated introduction to the fundamental concepts of computer science for students who lack a formal background in the field. Topics include algorithm design and program development; data types; control structures; subprograms and parameter passing; recursion; data structures; searching and sorting; dynamic storage allocation and pointers; abstract data types, such as stacks, queues, lists, and tree structures; generic packages; and an introduction to the principles of object-oriented programming. The primary programming language used in the course will be Java. Students should expect an average of 12-16 hours of programming and related course work per week.
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.
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.
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.
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.
This course briefly introduces basic statistical and mathematical methods needed in the practices of data science. It covers basic methods in probability, statistics, linear algebra, and optimization.
Cross-listing for DS-GA 1002.
This course briefly introduces basic statistical and mathematical methods needed in the practices of data science. It covers basic methods in probability, statistics, linear algebra, and optimization.
Cross-listing for DS-GA 1002.
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.
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.
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.
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.
Basic techniques of computer vision and image processing. General algorithms for image understanding problems. Study of binary image processing, edge detection, feature extraction, motion estimation, color processing, stereo vision, and elementary object recognition. Mathematical, signal processing, and image processing tools. Relation of computer vision algorithms to the human visual system.
This course introduces the fundamental concepts and methods of machine learning, including the description and analysis of several modern algorithms, their theoretical basis, and the illustration of their applications. Many of the algorithms described have been successfully used in text and speech processing, bioinformatics, and other areas in real-world products and services. The main topics covered are probability and general bounds; PAC model; VC dimension; perceptron, Winnow; support vector machines (SVMs); kernel methods; decision trees; boosting; regression problems and algorithms; ranking problems and algorithms; halving algorithm, weighted majority algorithm, mistake bounds; learning automata, Angluin-type algorithms; and reinforcement learning, Markov decision processes (MDPs).
This course covers graphical models, causal inference, and advanced topics in statistical machine learning.
This course covers graphical models, causal inference, and advanced topics in statistical machine learning.
Discusses the design of general and specialized Web search engines and the extraction of information from the results of Web search engines. Topics include Web crawlers, database design, query language, relevance ranking, document similarity and clustering, the “invisible” Web, specialized search engines, evaluation, natural language processing, data mining applied to the Web, and multimedia retrieval.
In this course, students learn to develop production quality software. Lectures present real-world development practices that maximize software correctness and minimize development time. A special emphasis is placed on increasing proficiency in a particular programming language by doing weekly development projects and participating in code reviews.
Assignments become more sophisticated as the semester progresses, eventually incorporating unit tests, build scripts, design patterns, and other techniques. The course culminates with an assignment that requires students to contribute to an open-source project of their choice.
Distributed systems help programmers aggregate the resource of many networked computers to construct highly available and scalable services. This class teaches the abstraction, design and implementation techniques that allow one to build fast, scalable, fault-tolerant distributed systems. Topics include multithreading, network programming, consistency, naming, fault tolerance, security and several case studies of distributed systems.
Did you ever wonder why there are 12 notes in the western music scale? Or how the intervals between notes came to be? When were the first musical scales developed or "discovered" and how (and why) have they been modified since? Who were the key innovators of western music theory over the last few centuries?
It is not uncommon for software developers to have an affinity for music. After all, the creation of both software and music is part art and part science. Further, music and computing are built upon fundamental mathematical principles. While it is not required to understand music theory to be a good player, understanding why we are constrained to a certain set of notes is an enlightening topic - for musicians and non-musicians alike.
This course is for students interested in how both music and software are constructed. Student teams will build software in phases which will demonstrate the underlying rules in modern western music theory. The beauty of software is that it can be applied in just about any domain.
Music students are encouraged to apply even though this course is primarily a software development class. The interdisciplinary product development teams will be composed of at least one engineer and one subject domain expert who will work together on the assignments. The software the teams build will be used to demonstrate how music theory developed as well as give students an intuitive grasp of some fascinating underlying universal truths.
In this course, we will cover architectural aspects and capabilities of modern GPUs (graphics processing unit) and will learn how to program GPUs to solve different type of problems. Many computations can be performed much faster on the GPU than on a traditional processor. This is why GPUs are present now in almost all computers; and the majority of Top 500 supercomputers in the world are built around GPUs. GPUs are no longer restricted to graphics applications but are now used for a diverse set of applications and domains. This introduces the concept of general-purpose GPUs or GPGPUs, which is the main subject of this course.
Traditionally, computer security is enforced by the operating system, which uses special hardware support to ensure security properties at application boundaries. However, the proliferation of successful attacks, such as viruses, worms, SQL injection, and cross-site scripting, shows that traditional approaches to security are insufficient. Adversaries exploit weaknesses both in the operating system itself, bypassing any protection mechanisms, and more and more frequently at the application level, where the operating system provides very limited guarantees. In this class we consider how programming language techniques can be used to fill the security gap by defending against application-level attacks.
This course introduces the architectures and technologies at the foundation of the Big Data movement. These technologies have facilitated scalable management and processing of vast quantities of data collected through realtime and near realtime sensing. We explore tools enabling the acquisition of data in the social domain and the fusion of those data when in flight and at rest.
The material covered in this course aligns with the prevailing state of the art in Big Data technologies, which continues to be a rapidly evolving landscape as new technologies emerge and existing ones evolve and mature.
Students are required to complete weekly reading and/or programming assignments and demonstrate mastery of course topics by designing, developing, and demonstrating an analytics project of their choosing. Class time will be set aside for project proposal and final demo.
The course will teach how to develop online casual multiplayer games using open technologies such as GWT, Closure, AppEngine, DHTML, JSON, AJAX, long-polling, HTML5, XMPP, OAuth2, PhoneGap, etc. The course has two big projects: An individual project where you develop a turn-based multiplayer game (with mobile and desktop graphics, artificial-intelligence, save and load, etc.), and a small group project. The course will also teach about ranking systems, artificial intelligence for games, real-time and turn-based games. The course will not concern with 3D graphics.
The Extreme Design class is an intensive project-oriented class that is specifically designed for students interested in translating cool computing centric ideas to functional end-to-end computer system prototypes (hardware or software) with the goal of encouraging students to pursue bold startup-like ideas. This class is open for students at all levels (PhD, MS and undergraduate) and in specific cases to students in other disciplines (who already have a cool project idea). Right from the beginning, students in the class will form small teams where each team will work on a single project idea that solves an important research or societal problem. Each team is expected to design and implement an end-to-end system prototype that will be showcased at the end of the semester. Specific project ideas will be provided by the instructor and student teams are open to pitch their own ideas. The expected workload per student can be 15-20 hrs a week and teams are expected to constantly interact with other teams to discuss and exchange ideas.
The broad theme for this semester's Extreme Design class is: "Sensing, Crowdsourcing and Data". The class will cover several real-world application problems and scenarios (health, energy, education, medicine) which can be addressed based on the theme of gathering and analyzing data from the physical environment using smart sensing platforms and crowdsourcing systems. With the growing popularity of Internet of Things, there has been a dramatic growth in the number of unique devices, platforms and programming environments with a broad array of capabilities that were not open earlier for prototyping and development. Students will be provided exposure to several tools and platforms that can be leveraged by individual teams in their project design and implementation. Specific topics covered include: basics of programming embedded systems, sensing and actuation platforms, data analytics tools, crowdsourcing systems and relevant material for individual project ideas.
The class is open to students across disciplines, but is best suited for students who have a strong background in programming and are passionate towards pursuing startup-like ideas. Since this is an intensive class, class enrollment is limited and interested students should first obtain the permission of the instructor to register. Please send your CV to the instructor and schedule a time to meet with the instructor.
The tremendous advances in process technology have created a revolution both in hardware and in software. On the hardware side, we moved from single core processors to multicore/manycore processors. Multicore chips are now everywhere. You can find them in smartphones, playstations, notebooks, all the way up to supercomputers. To benefit from these chips, software must be parallelized, which starts another revolution in software.
The purpose of this course is to introduce you to both the hardware advances and parallel programming techniques targeting multicore and many core processors. You will learn how to make the best use of the underlying hardware to build applications that are faster, more power-efficient, and more reliable.
The course will cover the basics of virtual machine technology and its use in PCs, cloud servers, and mobile phones. Students will learn binary translation, page table manipulation, and other low level machine manipulation. Some knowledge of operating systems and computer architecture is assumed, as well as programming. There will be a mid-term exam as well as a final project.
This is a capstone course that connects students directly with real-world information technology problems. The goal of this course is to teach the skills needed for success in real-world information technology via a combination of classroom lectures and practical experience with large projects that have been specified by local “clients.” The typical clients are primarily companies, but can also be government agencies or nonprofit organizations. Each project lasts for the entire semester and is designed to involve the full software project life cycle. Examples of such projects are development of software to solve a business problem, including specifying requirements, writing and testing prototype code, and writing a final report; and evaluation of commercial software to be purchased to address a business problem, including gathering requirements, designing an architecture to connect the new software with existing systems, and assessing the suitability of available software products.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
Large-scale programming project or research in cooperation with a faculty member.
This course teaches key mathematical concepts using the new Python programming language. The first part of the course teaches students how to use the basic features of Python: operations with numbers and strings, variables, Boolean logic, control structures, loops and functions. The second part of the course focuses on the phenomena of growth and decay: geometric progressions, compound interest, exponentials and logarithms. The third part of the course introduces three key mathematical concepts: trigonometry, counting problems and probability. Students use Python to explore the mathematical concepts in labs and homework assignments. No prior knowledge of programming is required.
This course teaches key mathematical concepts using the new Python programming language. The first part of the course teaches students how to use the basic features of Python: operations with numbers and strings, variables, Boolean logic, control structures, loops and functions. The second part of the course focuses on the phenomena of growth and decay: geometric progressions, compound interest, exponentials and logarithms. The third part of the course introduces three key mathematical concepts: trigonometry, counting problems and probability. Students use Python to explore the mathematical concepts in labs and homework assignments. No prior knowledge of programming is required.