View undergraduate course grid View graduate course grid
This course introduces students to the fundamentals of computer programming as students design, write, and debug computer programs using the programming language Python. No knowledge of programming is assumed. Not open to graduate Computer Science, Information Systems, Mathematics or Scientific Computing students.
Students study the principles of relational database design and learn to build, populate, manipulate and query databases using SQL on datasets relevant to their interests. Students will also explore data presentation through data visualization. Not open to Graduate Computer Science, Information Systems, Mathematics or Scientific Computing students.
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.
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.
Problems and objectives of computer graphics. Vector, curve, and character generation. Interactive display devices. Construction of hierarchical image list. Graphic data structures and graphics languages. Hidden-line problems; windowing, shading, and perspective projection. Curved surface generation display.
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 is a capstone course based on computer graphics tools. The course covers a selection of topics that may include computer animation, gaming, geometric modeling, motion capture, computational photography, physically based simulation, scientific visualization, and user interfaces. Not all areas are available every semester; the choice of areas is determined by the instructor. The capstone project involves some or all of the following elements: formation of a small team, project proposal, literature review, interim report, project presentation, and final report.
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.
The design of systems that can learn by reading. Ontology and knowledge base. Principal processing components: text segmentation, lexical analysis, name recognition and classification, parsing and syntactic regularization, word sense disambiguation, predicate-argument analysis, reference resolution, discourse structure. Joint inference methods. Knowledge acquisition strategies.
This is a project-oriented, team-organized course in which students will take responsibility for one or two processing components: selecting methods, making class presentations, creating and maintaining code. A good working knowledge of corpus-trained methods for these components is required (using log-linear or deep models). Implementation will be in Java, so good programming skills in Java are needed, along with a commitment to meeting javadoc documentation standards.
The tentative target is to read articles from Wikipedia.
Gaussian elimination, Random functions and random differential equations, Chebyshev series, Rational functions, Quadrature, and ODEs
This six-week course will be structured in an unusual way. Each of our six meetings will be independent. At each meeting, the first hour will be a lecture aimed at anyone interested in numerical analysis at a high level, organized around a well-known topic and mixing historical perspectives, recent developments, and always some new mathematics. The second hour will be for enrolled students only, a hands-on work session making use of Chebfun.
This course will cover many of the standard PDEs from classical mathematical physics, including the Laplace equation, the Helmholtz equation, Maxwell’s equations, Stokes’ equation, and their alternative integral equation formulation. Numerically solving these associated integral equations requires a special set of tools, in particular, quadrature for singular functions and fast algorithms for the resulting dense matrices. Numerical methods for each of these aspects will be presented (e.g. singular quadrature, fast multipole methods, iterative solvers, and fast direct solvers), and open problems in the field will be discussed.
In this course we study the craft of software engineering. The semester begins with a thorough review of the Java Language and Virtual Machine, emphasizing library components and language features most relevant to most development projects. Later lectures cover more sophisticated features in the language like concurrency and thread-safety, writing tests, properly designing classes and Object-Oriented programs, and design patterns. Certain non-technical topics are critical to successful software development and are reinforced throughout the semester. These include writing readable code, the long-term consequences of bugs, the psychology of human motivation, successfully developing and reinforcing habits, what science knows about human productivity and drive, and how to motivate ourselves and our team. Lessons are reinforced with weekly assignments that are meticulously graded. Some submissions are critiqued, line-by-line, in classroom code reviews. The end of the semester includes a lecture on how to best prepare for interviews and write an effective resume, incorporating techniques from world-class athletes and performers on how to optimally perform under extreme stress.
Large-scale distributed systems are the core software infrastructure underlying cloud computing. These systems consist of tens of thousands of networked computers working together to provide unprecedented performance and fault-tolerance. Examples include distributed databases (e.g. Google's Spanner, Amazon's S3 and Dynamo), distributed computation frameworks (e.g. Hadoop/Spark and TensorFlow) or even decentralized currency system (e.g. BitCoin). This class teaches the abstractions, design and implementation techniques that allow you to understand and build such distributed systems.
Topics include multithreading, network programming, consistency, naming, fault tolerance, and security and several case studies of distributed systems.
This class is a graduate-level course, but undergraduate students are welcome! The course consists of lectures and a series of programming labs.
This class satisfies the Ph.D. breadth requirement in Systems and also serves as a M.S. capstone course.
In this course, we will cover architectural aspects and capabilities of modern GPUs (graphics processing unit) and will learn the architecture and the programming of 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. This course serves as a capstone for the MSCS program.
This course will introduce technologies at the foundation of the Big Data movement that have facilitated scalable management of vast quantities of data collected through realtime and near realtime sensing. We will also explore the tools enabling the acquisition of near realtime data in the social domain, the fusion of those data when in flight and at rest, and their meaningful representation in graphical visualizations. Students are required to complete weekly reading and/or programming assignments and demonstrate mastery of course topics by developing and demonstrating a software 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 HTML5, JavaScript, Typescript, AngularJS, Ionic, Bootstrap, PhoneGap, Grunt, and testing using Karma, Jasmine, Protractor. Students will build several turn based games and submit them to Google play store. There is no final exam, only assignments. The course will also teach about artificial-intelligence for games, ranking systems, physics-based engines, and integrating with social platforms. The course will not concern with 3D graphics.
In this course we will examine some of the core tasks in natural language processing, starting with simple word-based models for text classification and building up to rich, structured models for syntactic parsing and machine translation. In each case we will discuss recent research progress in the area and how to design efficient systems for practical user applications. There will be a focus on corpus-driven methods that make use of supervised and unsupervised machine learning methods and algorithms. We will explore statistical approaches based on graphical models and neural networks. In the course assignments, which will be updated this year to include more neural network modeling, you will construct basic systems and then improve them through a cycle of error analysis and model redesign. This course assumes a good background in basic probability and a strong ability and interest in building real systems.
The course will introduce basic ideas of Multiscale Image Representations (Wavelets - Affine Groups) and Machine Learning (Deep Learning with Variational Auto Encoders, GAN, RNN). Then, the course will be "hands on", with small groups programming/developing projects that integrate the basic ideas above to perform "computer vision tasks" (the evaluation is based on projects). The tasks will be in the topics of Motion, Scene Segmentation, Object Classification, Human Actions.
Topics vary each semester.
This class aims to cover introductory and recent concepts in big data and machine learning systems. The class will focus on a broad spectrum of big data computational problems, algorithms and platforms. The class will be centered around several big data case studies in commercial use to understand big data and machine learning tasks across different domains and provide an in-depth understanding of the problems and algorithms used in each domain. From the computational platform perspective, this class covers popular and widely used commercial platforms including Hadoop and Mapreduce variants, Spark, streaming platforms, Tensorflow, ML platforms (MLBase, MxNet) and GPU platforms. The goal of this class is to educate students about the algorithms and systems techniques used to build scalable big data and ML platforms and how these platforms are used in the real world.
This class covers the following broad topics:
a. Cloud Infrastructure Blocks: AWS, Mapreduce, Hadoop, Yarn
b. Big Data Algorithms: searching and indexing large data sets, implementing standard statistical algorithms, similar items, nearest neighbors, graph mining, network analytics, dimensionality reduction
c. Big Data Computation Platforms: Spark, TensorFlow, MLBase, MLib, MxNet, GPU computing
d. Scalable ML Algorithms: Implementing deep learning algorithms, graph and network analytics, scalable vision algorithms, scalable NLP algorithms
e. Domain Specific Applications and Case Studies: vision analytics engines, NLP analytics engines, search and graph analytics
Through the 1990s, processors got faster and faster, but around the turn of the millennium, CPUs started to reach physical limits. To drive innovation and produce more powerful computers, manufacturers began to pack multiple cores into each processor. However, most software is conceived by the programmer as a linear progression of instructions. Compilers can find some parallelization opportunities, but that’s not enough to take full advantage of multiple cores. Programmers must take much of the responsibility for making their programs exploit multiple cores, and this course discusses many modern techniques:
- Aspects of the architecture of modern machines
- Classic and modern algorithms for coordination and synchronization
- Data structures that exploit and extract performance from multiple cores
- Current and future programming techniques and best practices for multiple cores
- Strategies to debug and benchmark multi-threaded programs
Students will be expected to have experience with a programming-intensive course. Students must have previous experience with C++, but no experience writing multi-threaded C++ programs is necessary. The course will include lectures, homework, cumulative labs, a final project, and a midterm and final exam.
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.
Bitcoin, Ethereum, and other systems using decentralized ledgers (blockchains) have quickly grown to valuations of tens of billions of dollars. Their future potential has captured the imagination of researchers working on applications as diverse as banking and finance, voting, law, corporate governance, gambling and online gaming. This course will cover the technical concepts underlying these systems: append-only ledgers, decentralized consensus, smart contracts and zero-knowledge proof systems. Students will gain working knowledge of both Bitcoin and Ethereum through practical assignments. The course will also survey the wide variety of potential future applications.
This course teaches the security mindset and practical security concepts that are essential for software engineers, software developers, quality assurance testers and IT managers. The course discusses various attack techniques and defenses for real world applications and the security activities in the SDLC. Its main topics include: low-level exploits, web application security, malware, threat modeling, security requirements, secure coding practices, security & penetration testing, human factors and usability, mobile platform security, economics of security and legal and ethical issues. Course project and assignments may require Java, C, and/or scripting languages.
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.
Participation in a programming project or research project conducted outside the university in a governmental, commercial, or academic setting. Open only to graduate students with permission of the Director of Graduate Studies (DGS). Students must submit a brief written description of their work to the DGS before starting the internship and submit a written summary of their work when it is completed. MS students may repeat this course a maximum of two times. PhD students who wish to take this course more than four times need to request a special permission and provide adequate academic justification.
Section 1 is for Master's students. Section 2 is for Ph.D. students.
Participation in a programming project or research project conducted outside the university in a governmental, commercial, or academic setting. Open only to graduate students with permission of the Director of Graduate Studies (DGS). Students must submit a brief written description of their work to the DGS before starting the internship and submit a written summary of their work when it is completed. MS students may repeat this course a maximum of two times. PhD students who wish to take this course more than four times need to request a special permission and provide adequate academic justification.
Section 1 is for Master's students. Section 2 is for Ph.D. students.
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.
This section is a fast paced version of the regular CSO class. Students who are considering research in their senior year or graduate school should take this class.
This course aims to give students an understanding of what's "under the hood" in a modern computer system. Take this class to boost your confidence on a computer and to understand how everything works like never before! We'll cover basic topics including how machines represent and execute programs, how user program interact with the OS, as well as advanced topics including how to write networked and concurrent programs. These topics are supported by a series of challenging lab assignments in C.
In this course students will learn how to develop interactive multimedia applications for both the desktop and the web. The course focuses on general programming techniques with an emphasis on the production of interactive graphical environments. In addition, a number of advanced topics will be covered including image processing, video games, simulations, basic computer vision, augmented reality and creating simple mashups using popular web services such as Flickr and Twitter.
In this course, students will learn to create applications for Apple's iPhone 3G using Objective-C and the iPhone SDK. Since its introduction this past summer, the Apple SDK has been revealed to be a powerful platform upon which to build sophisticated applications for the iPhone. Without actually having to own an iPhone, students will be able to build and test their applications on Intel Apple Macs using the freely available compiler and simulator. In addition to the development tools, students will become proficient in the object-oriented language Objective-C, the Apple iPhone Framework, and the principles of Cocoa development. This is a new, dynamic, constantly-evolving topic, and students will be at the forefront of a new technological advancement.
A practical introduction to creating modern web applications. Covers full stack web development - including topics such as database / data model design, MVC architecture, templating, handling user input, asynchronous processing, and client side interactivity. Students will use current server and client side web frameworks to build dynamic, data-driven sites. Various tools to support development will also be introduced, such as version control and build systems. Basic knowledge of HTML and CSS and familiarity with command line tools are recommended.
Social Networks is a specific example of many forms of networks that have become ubiquitous in our modern society. Their utilities have been enhanced by their ability to generate massive amount of personal data that need to be analyzed and disseminated quickly. The World Wide Web enables information flows among vast number of humans; Facebook, LinkedIn, etc. connect small groups of friends; amazon, eBay, etc. provide opportunities for trading, etc. These networks determine our information, influence our opinions, and shape our political attitudes. They also link us, often through important but weak ties, to other humans. Their origin is biological: going back to quorum-sensing, swarming, flocking, social grooming, gossip, etc. Yet, as we have connected our social networks to traditional human institutions (markets, justice systems, education, etc.) through new technologies, the underlying biology has become obscured, but not dormant. This course will introduce the tools, analytics and algorithms for the study of networks and their data. It will show how certain common principles permeate the functioning of these diverse networks: e.g., issues related to robustness, fragility, and interlinkages etc.
This class will examine the challenges of scaling up a data-centric web application to serve millions of users. Students will learn and apply distributed computing concepts as they convert a simple monolithic web service to a scalable distributed architecture, with an emphasis on back-end components. Students will be introduced to the practice of scaling by distribution, and the exercises will have students apply a combination of popular open source technologies and code newly written by them, as they continue to augment the service. Lectures will cover topics such as Data models (Relational Databases vs No-SQL); Data partitioning; Caching; the RPC abstraction and RESTful APIs; distributed data processing pipelines; logging and monitoring; replication; and managed cloud technologies. We will also review existing popular systems that apply these concepts, as case studies. Topics: distributed computing, distributed storage systems, replication and consistency, Open Source technologies.
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.
A practical introduction to creating modern web applications. Covers full stack web development - including topics such as database / data model design, MVC architecture, templating, handling user input, asynchronous processing, and client side interactivity. Students will use current server and client side web frameworks to build dynamic, data-driven sites. Various tools to support development will also be introduced, such as version control and build systems. Basic knowledge of HTML and CSS and familiarity with command line tools are recommended.
This course provides an introduction to the field of Computer Graphics. The course will cover the basic mathematical concepts, study the interaction of light with geometry, and implement basic rendering algorithms such as ray tracing and rasterization. At the end of the semester, students will have built their own raytracer, and developed a real-time 3D computer graphics system using the OpenGL 4 graphics API.
This course will introduce students to computer networks, using today's Internet as an example. Topics covered include socket programming, routing, forwarding, reliable transmission, congestion control, and medium access control. The course will involve a reasonable amount of programming in Python, and familiarity with programming is expected.
Students majoring in the department are permitted to work on an individual basis under the supervision of a full-time faculty member in the department if they have maintained an overall GPA of 3.0 and a GPA of 3.5 in computer science and have a study proposal that is approved by the director of undergraduate studies. Students are expected to spend about three to six hours a week on their project.
Many problems in science, business, and politics require heuristics—problem-solving techniques that often work well but give imperfect guarantees. This course teaches heuristics as they apply to the design of scientific experiments, the resolution of economic or political negotiations, and the construction of engineering devices in hostile environments. Students will work in small teams that will solve puzzles, conduct experiments, and build strategies for a competitive auction game. Students will use and learn computational tools, such as Python. The intent is to make you better able to face complex problems in any field of study you choose.