In this course you will learn how to develop 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 (AR), virtual reality (VR) and data visualization techniques.
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.
This exciting and fast-evolving field of computer science has many recent consumer applications (e.g., Microsoft Kinect, Google Translate, IPhone's Siri, digital camera face detection, Netflix recommendations, Google news) and applications within the sciences and medicine (e.g., predicting protein-protein interactions, species modeling, detecting tumors, personalized medicine). Students learn the theoretical foundations and how to apply machine learning to solve new problems.
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.
In this course, students will learn to create applications for Apple’s iOS on both the iPhone and the iPad using Objective-C, Apple's new programming language Swift, and the iOS SDK. Since its introduction, the Apple iOS SDK has proved to be a powerful platform upon which to build sophisticated applications. Without actually having to own an iPhone or an iPad, students will be able to build and test their applications on Apple Macs using the freely available compiler and simulator, XCode. Students will become proficient in the object-oriented language Objective-C, Swift, Apple iOS Frameworks, and the XCode development environment. This is a new, dynamic, constantly-evolving topic, and students will be at the forefront a new technological advancement.
Most of us have learned to program a single microprocessor (single core) using a high-level programming language like C/C++, Java, ... This is called sequential programming. We feel very comfortable with this because we think in a sequential way and give the machine statements to be executed in sequence. However, this has to change. A microprocessor with single core no longer exists in almost all computers we are using today (including your tablets and smart phones). Most of our devices are now multicore processors. A multicore processor contains several cores (called CPUs or cores) on-chip. To make the best use of these multicore chips we need to program them in-parallel. Sequential programming, for all platforms from smartphones to supercomputers, is falling out of fashion and taking back-seat to parallel programming. How to think in parallel? How to write code in parallel to make the best use of the underlying hardware? How is that new hardware different from the traditional one? What will the future be for the software and hardware? This is the topic of this course.
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.
Required recitation for CSCI-UA.480-004. 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.
This course will deepen students' understanding of complex computer systems: how these systems work, how to approach a given system or proposal critically, and how to design and build systems. Topics will include the interface between computer hardware and software, concurrency and parallelism, performance analysis, virtual machines, sandboxing, distributed systems, networking and the Internet, and security. The work will include substantial implementation exercises, critical reading and in-class discussion of research papers, and a final project. Because of the close relationship among critical reading, critical thinking, and clear communication, there may also be exercises to build writing skill.
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.
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.