Dartmouth CollegeWebsiteAcademic Catalog
Computer ScienceDepartment Website
Majors
Courses
source 1source 2source 3COSC 1: Introduction to Programming and Computation (1) intro
This course introduces computational concepts fundamental to computer science and useful for various fields. Students will write interactive programs to analyze data, process text, draw graphics, manipulate images, and simulate physical systems. Emphasis on problem decomposition, program efficiency, and good programming style.
COSC 2: Programming for Interactive Audio-Visual Arts (1)
This course focuses on interactive visual art generated on a computer. Students write programs using the Processing language to create interactive visuals and compositions. Topics include color representation, image manipulation, motion, and video. Not open to students who have passed COSC 1 or ENGS 20.
COSC 10: Problem Solving via Object-Oriented Programming (1) intro
This course examines concepts and skills in solving computational problems. Topics include abstraction, modularity, data structures, and algorithms. Laboratory assignments use object-oriented programming techniques.
COSC 16: Introduction to Computational Neuroscience (1) science
This course explores computational neuroscience, focusing on understanding how brains compute thought and reconstructing identified computations. Topics include anatomical circuit design, physiological operating rules, evolutionary derivation, mathematical analyses, and applications from robotics to medicine.
COSC 20: Motion Study: Using Motion Analysis for Science, Art and Medicine (1) humans
This course teaches the foundations of motion capture, recording movement in physical space and transforming it into digital form. Students learn about anatomical principles of motion and how motion capture enhances art and science.
COSC 21: Foundations of Digital Design (1) humans
This projects-based course familiarizes students with digital design fundamentals, including layout, typography, composition, color theory, and process. Students explore design projects and concepts.
COSC 22: 3D Digital Modeling (1) graphics
This lab course teaches principles and practices of 3D modeling. Topics include modeling, shading, textures, lighting, rendering, dynamics, special effects, and animation. No prior experience, coding, or drawing skills needed.
COSC 24: Computer Animation: The State of the Art (1) graphics
This hands-on course focuses on state-of-the-art computer animation techniques. Topics include traditional animation principles applied to 3D computer animation, motion capture, and dynamic simulations.
COSC 27: Projects in Digital Arts (1) graphics
This is the culminating course for the Digital Arts Minor. Students complete projects in digital arts, including: computer animations; games, VR/AR applications, interactive digital installations and media. Students work in small teams to complete work of a high production quality or work that incorporates innovations in technology. Grades are based on aesthetic and technical criteria along with teamwork and adherence to weekly milestones.
COSC 28: Advanced Projects in Digital Arts (1) special
This independent study course is for students who have completed all the courses in the Digital Arts minor and want to continue working on projects in digital arts or for students who want to stretch their skills in a new way. Projects may include computer animations, interactive digital arts, installations, or research projects. Students work alone or in teams. This course may be taken twice.
COSC 30: Discrete Mathematics in Computer Science (1) math
This course develops the mathematical foundations of computer science that are not calculus-based. It covers basic set theory, logic, mathematical proof techniques, and a selection of discrete mathematics topics such as combinatorics (counting), discrete probability, number theory, and graph theory. The mathematics is frequently motivated using computer science applications.
COSC 31: Algorithms (1) algs
A survey of fundamental algorithms and algorithmic techniques, including divide-and-conquer algorithms, dynamic programming, randomized algorithms, greedy algorithms, and graph algorithms. Presentation, implementation and formal analysis, including space/time complexity and proofs of correctness, are all emphasized.
COSC 32: Advanced Algorithms (1) algs
This course follows up on our basic undergraduate-level algorithms course, covering a number of advanced topics and ideas in algorithm design and analysis. You will learn about the use of advanced data structures, amortized analysis, randomization, linear programming, and approximation. The focus will be on methodology and broadly-applicable fundamental principles, rather than specific problem domains.
COSC 34: Randomized Algorithms (1) algs
Randomness is one of the key resources in algorithm design. Many problems have faster algorithms if randomization is allowed, and indeed, for certain problems randomness is essential. The course will introduce the probability basics, the fundamental tools, and provide multiple applications in machine learning, big data, optimization, etc. Not open to students who have received credit for COSC 49.10.
COSC 35: Data Stream Algorithms (1) algs
This course studies algorithms that process massive amounts of data; so massive that they will not fit in a computer’s storage. The course will cover a wide variety of techniques for summarizing such large amounts of data into succinct “sketches” that nevertheless retain important and useful information. The course starts from the basics, assuming only a basic knowledge of algorithms, and builds up to advanced techniques from recent research.
COSC 36: Approximation Algorithms (1) algs
Many problems arising in computer science are NP-hard and therefore we do not expect efficient algorithms for solving them exactly. This has led to the study of approximation algorithms where algorithms are supposed to run fast but can return approximate solutions. This course provides a broad overview of the main techniques involved in designing and analyzing such algorithms. It also explores connections between algorithms and mathematical fields such as algebra, geometry, and probability.
COSC 39: Theory of Computation (1) theory
This course serves as an introduction to formal models of languages and computation. Topics covered include finite automata, regular languages, context-free languages, pushdown automata, Turing machines, computability, and NP-completeness.
COSC 40: Computational Complexity (1) theory
This course covers the basics of computational complexity, whose broad goal is to classify computational problems into classes based on their inherent resource requirements. Five key computational resources are studied: time, space, nondeterminism, randomness, and interaction. Key concepts studied include reductions, the polynomial hierarchy, Boolean circuits, pseudorandomness and one-way functions, probabilistic proof systems, and hardness of approximation.
COSC 49: Topics in Algorithms and Complexity (1) special
This course studies an advanced topic in algorithms and complexity that is not covered in the regular curriculum. Students may take courses under this rubric multiple times, subject to the restriction that the topics are distinct. The subject material under this rubric differs from course to course depending on the instructor. Please refer to individual courses for detailed instruction.
COSC 50: Software Design and Implementation (1) softeng
Techniques for building large, reliable, maintainable, and understandable software systems. Topics include UNIX tools and filters, programming in C, software testing, debugging, and teamwork in software development. Concepts are reinforced through a small number of medium-scale programs and one team programming project.
COSC 51: Computer Architecture (1) sys
The architecture and organization of a simple computer system is studied. Topics covered include how information is represented in memory, machine-language instructions and how they can be implemented at the digital logic level and microcode level, assembly language programming, and input/output operations. Speedup techniques, such as pipelining and caching, are also covered.
COSC 52: Full-Stack Web Development (1) sys
The Web is a powerful delivery tool for complex real-time applications. This is an introduction to full stack Web application development — the approach of integrating numerous techniques and technologies to build modern Web applications. Topics include: static pages, Internet protocols, layout, markup, event-driven asynchronous programming, deployment, security, scalability, and user experience. Projects include building real-time Web applications with front-end UIs and server-side APIs.
COSC 55: Security and Privacy (1) sys
The migration of important social processes to distributed, electronic systems raises critical security and privacy issues. Precisely defining security and privacy is difficult; designing and deploying systems that provide these properties is even harder. This course examines what security and privacy mean in these settings, the techniques that might help, and how to use these techniques effectively. Our intention is to equip computer professionals with the breadth of knowledge necessary to navigate this emerging area.
COSC 56: Digital Electronics (1) sys
This course teaches classical switching theory including Boolean algebra, logic minimization, algorithmic state machine abstractions, and synchronous system design. This theory is then applied to digital electronic design. Techniques of logic implementation, from Small Scale Integration (SSI) through Application-Specific Integrated Circuits (ASICs), are encountered. There are weekly laboratory exercises for the first part of the course followed by a digital design project in which the student designs and builds a large system of his or her choice. In the process, Computer-Aided Design (CAD) and construction techniques for digital systems are learned.
COSC 57: Compilers (1) pls
Techniques for automatic translation of programming languages are discussed. The course includes a brief survey of various techniques and formalisms that can be used for describing the syntax and semantics of programming languages, for describing abstract and concrete machine architectures, and for describing program translation and transformation. This course includes a project to construct a compiler that will translate a program written in a high-level language into machine code for a conventional-architecture machine.
COSC 58: Operating Systems (1) sys
This course studies how computer operating systems allocate resources and create virtual machines for the execution of user jobs. Topics covered include storage management, scheduling, concurrent processing, shared access to files, synchronization, and data protection. Both abstract models and actual examples of operating systems will be studied.
COSC 59: Principles of Programming Languages (1) pls
This course provides a study of the principles of programming languages. The course will focus on the similarities and differences among imperative, functional, logical, and object-oriented programming languages. Topics include formal definitions of languages and tools for automatic program translation, control structures, parameter passing, scoping, types, and functions as first-class objects. For each language category, implementation issues will be discussed, and program development strategies illustrated through programming exercises.
COSC 60: Computer Networks (1) sys
This course focuses on the communications protocols used in computer networks: their functionality, specification, verification, implementation, and performance; and how protocols work together to provide more complex services. Aspects of network architectures are also considered. Laboratory projects are an integral part of the course in which networking concepts are explored in depth.
COSC 61: Database Systems (1) sys
This course studies the management of large bodies of data or information. This includes schemes for the representation, manipulation, and storage of complex information structures as well as algorithms for processing these structures efficiently and for retrieving the information they contain. This course will teach the student techniques for storage allocation and deallocation, retrieval (query formulation), and manipulation of large amounts of heterogeneous data.
COSC 62: Applied Cryptography (1) sys
Cryptography is the fundamental building block for establishing and maintaining trustworthy connections and communications in the Internet; it's the first line of defense for keeping adversaries from spying on credit card numbers being sent to Amazon or on whistleblower reports sent to journalists. This course will examine what's in this toolkit: symmetric ciphers, public-key cryptography, hash functions, pseudorandomness.
COSC 63: Programming Parallel Systems (1) sys
Multi-core processors are now ubiquitous in most personal computers. These are the fundamental computer-engineering building blocks for high-performance servers, blade farms, and cloud computing. In order to utilize these devices in large systems they must be interconnected through networking and collectively programmed. This hands-on system-engineering course offers students the opportunity to explore problem-solving techniques on a high-performance multi-computer containing quad-core processors.
COSC 65: Smartphone Programming (1) sys
This course teaches students how to design, implement, test, debug and publish smartphone applications. Topics include development environment, phone emulator, key programming paradigms, UI design including views and activities, data persistence, messaging and networking, embedded sensors, location based services (e.g., Google Maps), cloud programming, and publishing applications. Concepts are reinforced through a set of weekly programming assignments and group projects.
COSC 66: Game Development Principles Applied In Educational/Serious Games (1) graphics
Digital games are a growing platform for education, entertainment, and visualization with a myriad of technological and theoretical challenges. This course explores the concepts and techniques involved in developing real-time 2D and 3D games, as well as the opportunities and constraints when applied to the field of serious games in areas such as education, healthcare, scientific visualization, emergency planning and response, government, and engineering. Topics include: 2d and 3d game engines, game ai, procedural generation, real-time rendering pipelines, game physics, shaders, game programming patterns, networked games, state synchronization, and game mechanics. Projects include building games from scratch such as an online multiplayer game with a server-side component.
COSC 67: Introduction to Human-Computer Interaction (1) humans
This course provides the fundamentals of human-computer interaction, including human factors, usability, user-centered design, prototyping, and usability evaluation. Students will learn the skills and knowledge to identify users’ needs and limitations through observations and interviews. They will experience rapid prototyping and will learn common HCI evaluation techniques, such as qualitative and quantitative methods, to evaluate their designs and implementations. Additionally, students will be exposed to the state-of-the-art research within HCI.
COSC 68: Advanced Operating Systems (1) sys
This course covers advanced topics in operating systems, including issues such as thehardware/software interface, operating-system structure, CPU scheduling, concurrency, virtual memory, interprocess communication, file systems, protection, security, fault tolerance, and transaction processing. The course also considers many of these topics in the context of distributed systems.
COSC 70: Foundations of Applied Computer Science (1) math
This course introduces core computational and mathematical techniques for data analysis and physical modeling, foundational to applications including computational biology, computer vision, graphics, machine learning, and robotics. The approaches covered include modeling and optimizing both linear and nonlinear systems, representing and computing with uncertainty, analyzing multi-dimensional data, and sampling from complex domains. The techniques are both grounded in mathematical principles and practically applied to problems from a broad range of areas.
COSC 71: Numerical Methods in Computation (1) math
A study and analysis of important numerical and computational methods for solving engineering and scientific problems. The course will include methods for solving linear and nonlinear equations, doing polynomial interpolation, evaluating integrals, solving ordinary differential equations, and determining eigenvalues and eigenvectors of matrices. The student will be required to write and run computer programs.
COSC 72: Accelerated Computational Linguistics (1) ai
The study of human language from a computational perspective. This accelerated course has programming background equivalent to that provided by COSC 1 as a prerequisite. This course will survey formal models for representing linguistic objects, and statistical approaches to learning from natural language data. We will pay attention to the use of computational techniques to understand the structure of language, as well as practical engineering applications like speech recognition and machine translation. Students will implement simple algorithms for several key tasks in language processing and learning.
COSC 73: Computational Aspects of Digital Photography (1) ai
Computational photography lies at the intersection of photography, computer vision, image processing, and computer graphics. At it’s essence, it is about leveraging the power of digital computation to overcome limitations of traditional photography. The course will cover the optics of cameras and sensors, how cameras form images, and how we can represent them digitally on a computer. We will focus on software techniques like image processing algorithms for photography, high-dynamic-range photography and tone mapping, and the math and algorithms behind popular image manipulation tools like Photoshop. Coursework will include taking some photos and implementing several algorithms to manipulate those photos in weekly programming assignments (in C ). We will also read, present and discuss recent research papers in the field. By the end of the term, students should have an understanding of the capabilities and limitations of photography today, and have sufficient background to implement new solutions to photography challenges.
COSC 74: Machine Learning and Statistical Data Analysis (1) ai
This course provides an introduction to statistical modeling and machine learning. Topics include learning theory, supervised and unsupervised machine learning, statistical inference and prediction, and data mining. Applications of these techniques to a wide variety of data sets will be described.
COSC 75: Introduction to Bioinformatics (1) science
Bioinformatics is broadly defined as the study of molecular biological information, and this course introduces computational techniques for the analysis of biomolecular sequence, structure, and function. While the course is application-driven, it focuses on the underlying algorithms and information processing techniques, employing approaches from search, optimization, pattern recognition, and so forth. The course is hands-on: programming lab assignments provide the opportunity to implement and study key algorithms.
COSC 76: Artificial Intelligence (1) ai
An introduction to the field of Artificial Intelligence. Topics include games, robotics, motion planning, knowledge representation, logic and theorem proving, probabilistic reasoning over time, understanding of natural languages, and discussions of human intelligence.
COSC 77: Computer Graphics (1) graphics
This course provides a broad introduction to the mathematical and programmatic foundations of computer graphics, including modeling, rendering (drawing), and animating three-dimensional scenes. Topics include digital image representation, two- and three-dimensional shape representations (e.g. parametric curves and surfaces, meshes, subdivision surfaces), geometrical transformations (e.g. rotations, scales, translations, and perspective projection), rigging and skinning, the rasterization pipeline, ray tracing, illumination and shading models, texturing, and light & visual perception. Coursework typically includes a mix of programming assignments, quizzes/hand-written work, assigned readings, and a final project. Knowledge of basic linear algebra and programming skills are assumed.
COSC 78: Deep Learning (1) ai
This course provides an introduction to deep learning, a methodology to train hierarchical machine learning models using large collections of examples. Deep learning is a special form of machine learning where rich data representations are simultaneously learned with the model, thus eliminating the need to engineer features by hand.The course begins with a comprehensive study of feedforward neural networks, which are the model of choice for most hierarchical representation learning algorithms. Other models covered in this course include convolutional neural networks, restricted Boltzmann machines, autoencoders, sparse codes. Several lectures are devoted to discuss strategies to improve the bias-variance tradeoff, such as regularization, data augmentation, pre-training, dropout, and multi-task learning. The course also studies modern applications of deep learning, such as image categorization, speech recognition, and natural language processing.
COSC 81: Principles of Robot Design and Programming (1) ai
This course is a hands-on introduction to robotics. Students will build robots, program robots, and learn to mathematically model and analyze manipulation and locomotion tasks. Topics include kinematics and dynamics of rigid-body motion, motion planning, control, mechanics of friction and contact, grasping, sensing, uncertainty in robotics, and applications of robots.
COSC 83: Computer Vision (1) ai
This course provides an introduction to computer vision, the art of teaching computers to see. Topics include image formation, feature detection, segmentation, 3D reconstruction from multiple views, motion estimation, and object recognition.
COSC 84: Mathematical Optimization and Modeling (1) math
Planning, scheduling, and design problems in large organizations, economic or engineering systems can often be modeled mathematically using variables satisfying linear equations and inequalities. This course explores these models: the types of problems that can be handled, their formulation, solution, and interpretation. It introduces the theory underlying linear programming, a natural extension of linear algebra that captures these types of models, and also studies the process of modeling concrete problems, the algorithms to solve these models, and the solution and analysis of these problems using a modeling language. It also discusses the relation of linear programming to the more complex frameworks of nonlinear programming and integer programming. These paradigms broaden linear programming to respectively allow for nonlinear equations and inequalities, or for variables to be constrained to be integers.
COSC 86: Computational Structural Biology (1) science
Computational methods are helping provide an understanding of how the molecules of life function through their atomic-level structures, and how those structures and functions can be applied and controlled. This course will introduce the wide range of complex and fascinating challenges and approaches in computational structural biology, and will give hands-on experience applying and implementing some important methods.
COSC 87: Rendering Algorithms (1) graphics
This class is intended for students interested in obtaining a deep technical understanding of the physically based rendering techniques used to produce photorealistic images in animated films, visual effects, or architectural and product visualizations. Students will learn how light behaves and interacts with objects in the real world and how to translate the underlying math and physics into practical algorithms for creating photorealistic images. The course will provide a detailed treatment of the industry-standard Monte Carlo methods for light transport simulation, such as path tracing, bidirectional path tracing, and photon mapping. Each major topic will also be accompanied by a programming assignment where students implement these algorithms within their own software framework to obtain practical experience. Additional coursework includes quizzes/handwritten exercises and assigned readings. At the end of the term, each student will work on a self-directed final project that extends their rendering software with additional features of their own choosing with the goal of creating a photorealistic image.
COSC 89: Topics in Applied Computer Science (1) special
This course studies an advanced topic in applied Computer Science that is not covered in the regular curriculum. Students may take courses under this rubric multiple times, subject to the restriction that the topics are distinct. The subject material under this rubric differs from course to course depending on the instructor. Please refer to individual courses for detailed instruction.
COSC 91: Writing, Presenting, and Evaluating Technical Papers in Computer Science (1) communication
Students will learn how to write technical papers in computer science, how to present technical papers in a conference-talk setting, and how program committees and journal editors evaluate technical papers. Writing topics include the proper use of technical typesetting software, organization of technical papers, and English usage. Students will write technical papers, produce official course notes, and give oral presentations. Enrollment limited.
COSC 94: Reading Course (1) special
Advanced undergraduates occasionally arrange with a faculty member a reading course in a subject not occurring in regular courses.
COSC 19.01: Writing about Technology (1) communication
This course introduces theory and practice of writing effectively about technology. Designed for students with a technical background, it includes readings, discussions, and writing assignments to improve students' craft.
COSC 19.02: Security Engineering (1) sys
This course covers cybersecurity systems engineering principles of design. Topics include cybersecurity risk assessment, intrusion detection design, cybersecurity situational understanding, and more. Students learn to think like cyberattackers and design effective cybersecurity systems.
COSC 23.01: Augmented and Virtual Reality Design (1) graphics
This hands-on course exposes students to the aesthetic, technical, and societal issues of augmented and virtual reality design. Students learn interactive development for VR/AR and work on teams to create assets and design UI/UX.
COSC 25.01: Intro to UI/UX Design I (1) humans
COSC 25.01 is a hands-on projects-based course that teaches the concepts, principles, and practice of User Interface (UI) and User Experience (UX) Design. It is designed for students with an interest in any form of design, although we focus on the UI/UX of digital tools (e.g. mobile, web, tablets). No previous experience or coding skills needed. Grading is based on weekly assignments, reflections, readings, and in-class exercises that build on each other and are intended to teach the foundational skills and thinking of UI/UX design. This team-based course requires a significant amount of time outside class. Students are encouraged (but not required) to take ENGS 12 prior to taking this course.
COSC 25.02: Intro to UI/UX Design II (1) humans
This Independent Study course offers students who have taken COSC 25.01 a chance to put what they learned in the classroom into practice. Students might work as a designer in the DALI Lab or on another project. In addition to completing a project as a designer, students design and build an online portfolio.
COSC 29.04: Impact Design (1) impact
This innovative, team-based, project course is about impact--what it is, how you experience it, how you create it, how you measure it. We focus on designing products and experiences for community partners as part of the Social Impact Practicum program. Rather than looking at how we can solve a problem, we look at how we can create delight for users. Students will learn how to combine core principles from human psychology with the tools of design to create products and user experiences that promote engagement, adoption, and learning. Past community partners have included the Hartford Autism Regional Program (HARP) and the Aging Resource Center.
COSC 29.05: Digital Fabrication & Rapid Prototyping (1) humans
Artists, designers, creators, and makers increasingly use digital fabrication methods in both two and three dimensions as a means of designing, rapid prototyping and manufacturing. This class uses digital fabrication tools in a studio setting. Students learn digital fabrication through a series of 2D and 3D design projects and through critical discussions of the aesthetic, sociological and practical implications of integrating digital tools and materiality into the design and build process.
COSC 29.06: Digital Tangible User Interfaces (1) humans
As computation becomes ubiquitous, we find interactive digital devices scattered around our homes, as integral parts of our living environments, including smart appliances, interactive architectural elements, toys, and interactive artworks. Digital Tangible User Interfaces (TUIs) are an approach to Human-Computer Interaction (HCI) where computation is embedded into objects we can interact with. One challenge of the TUIs is how to create a seamless interface between users and digital information so that the user can naturally interact with the daily product and their living environment. This course will focus on the theory, process, and practice of building intelligent objects and spaces. Students will be required to design and implement tangible user interface projects by using physical computing tools (Arduino) and computer languages such as Processing.
COSC 49.04: Concurrent Algorithms (1) algs
We consider problems where multiple processes have to coordinate their activities to accomplish a task. For an example, suppose that there are many sensing agents on an aircraft and each agent, based on its reading of the environment, has a recommendation on whether the aircraft should keep straight, turn left, or turn right. Since different agents can have different recommendations, we would want a protocol by which they can arrive at an 'agreement' on whether the plane should go left, right, or straight. How hard is it to design such a protocol? It turns out that if you want the protocol to be fault-tolerant, i.e., the protocol works correctly even if one of the agents stops communicating, it is impossible to design a correct protocol (under certain reasonable assumptions about the system). In the course, we will look at several fascinating coordination problems and solve them for several models of distributed computing: shared-memory versus message passing, synchronous versus asynchronous, fault-free versus fault-tolerant. We design algorithms, and prove lower bounds or even impossibility results. There will be weekly homework and a final exam.
COSC 49.06: Approximation Algorithms (1) algs
Many problems arising in computer science are NP-hard and therefore we do not expect polynomial time algorithms solving them exactly. This has led to the study of approximation algorithms where one relaxes the goal to return approximate solutions. Over the past three decades, a beautiful theory of approximation algorithms has emerged. This course will provide a broad overview of the main techniques and will often deep dive into the state-of-the-art.
COSC 49.07: 21st Century Algorithms (1) algs
The new century has brought us a new class of computational problems and paradigms, and to tackle them a suite of new algorithmic ideas have emerged. In this course, we will look at a collection of such ideas which are fundamental and yet not covered in a first course in undergraduate algorithms. (For instance, in fact, almost all algorithms covered in CS 31 are from last century). A rough set of problems and ideas are: random sampling algorithms, sketching algorithms, streaming algorithms, clustering algorithms, learning algorithms, etc, etc.
COSC 49.08: Information Theory in Computer Science (1) math
This course introduces students to information theory, a mathematical formalism for quantifying and reasoning about communication. While traditionally a part of electrical engineering, it has found several powerful applications in the theory of algorithms and complexity and adjacent fields such as combinatorics and game theory. The first third of the course will teach students the basics of information theory (Shannon entropy, mutual information, Kullback-Liebler divergence). The rest of the course will sample topics from error correcting codes, communication complexity, data structures, and optimization, in each case highlighting applications of information theory.
COSC 49.09: Introduction to Computational Topology (1) algs
Topology is the art of studying shapes without precise measurements. It is not surprising then that topology has found many applications in computer science, both in theoretical and applied research including algorithms and complexity theory, data analysis, robotics, computer graphics, etc., where often the input data is geometrically constrained, or noisy due to measurement errors. The course serves as an introduction to the rapidly growing area(s) of computational topology.
COSC 49.10: Randomized Algorithms (1) algs
Randomness is one of the key resources in algorithm design. Many problems have faster algorithms if randomization is allowed, and indeed, for certain problems randomness is essential. The course will introduce the probability basics, the fundamental tools, and provide multiple applications in machine learning, big data, optimization, etc.
COSC 49.11: Metric Embedding and Sketching (1) algs
In data analysis we can often assume the input is drawn from a metric space associated with some well-behaved distance function. In such scenario one can hope to find an alternative representation — an embedding — of the input data without sacrificing the distance information too much. To our surprise, not only this is possible, but often times one can also perform a sketching to reduce the size and amount of the data required. This seminar-style course is aimed to introduce the various ways to encode metric spaces in a succinct fashion with minimal distortion, suitable for their algorithmic purposes. Naturally, due to the vast amount of work and literature in the area, the topics covered in this class will be biased towards the interest and expertise of the instructor.
COSC 63.01: Augmented and Virtual Reality Development (1) graphics
This hands-on projects-based course is for developers who have completed COSC 10. It covers the technical, aesthetic, and societal issues surrounding the emerging frontiers of digitally mediated realities. Students learn the fundamentals of augmented and virtual reality development, while working in small interdisciplinary teams with digital arts students who are concurrently enrolled in COSC 23.01. COSC 63.01 and COSC 23.01 have class together and work together on teams. Developers in this course build interactive digital tools, games, and visualizations, while designers create assets and the interface. This course will also address the sociological implications of the technology. This course is not open to students who have received credit for COSC 29.22 or COSC 89.22.
COSC 69.08: All Things Wireless (1) sys
This is a topics course about use and development of wireless devices.
COSC 69.11: Mobile X (1) sys
Mobile X is an upper-level course on mobile computing and ubiquitous systems, covering a broad range of advanced and interdisciplinary topics in mobile systems, networking, and applications. All these topics focus on tackling unique challenges faced on bringing computation, networking, and applications to the mobile computing platform -- a platform that is constrained in form factor, energy, and computation power. Example topics include mobile communication and networking, mobile human-to-computer interaction (HCI), mobile learning/AI, mobile health, and mobile security.
COSC 69.13: Multirobot Systems (1) ai
Multirobot Systems is a seminar-course that will explore why multirobot systems are important, the extra challenges that need to be addressed, and the current state of the art in deploying multiple robots. Students will learn the computational aspects of multiagent and multirobot systems, including sensing, coordination, and communication, and will have the opportunity to develop and evaluate a behavior on a real multirobot system.
COSC 69.14: Functional Programming in Haskell (1) pls
This course teaches a different approach to programming. In functional programming, we treat programs like values. The type of that value tells you what the program might do and restricts the possible buggy programs that don’t do what you want them to do. In Haskell, you direct the type system to help improve your productivity, and your code’s maintainability, by ensuring that certain bugs yield uncompilable code. Haskell programming is a recommended skill, regardless of whether you have a direct need for it. Programming in Haskell is not difficult, but has a steep learning curve when attempting to learn it on your own. Hence this course won’t be easy, but it will help you through the difficult part. We use the latest GHC compiler, which is the most commonly used Haskell compiler in industry.
COSC 69.15: Robotics Perception Systems (1) ai
This seminar course focuses on the issues and approaches to process and fuse data from robotics perception systems to enable robot autonomy, e.g., self-driving cars. The course will be very hands-on: some preliminary assignments will immerse you in the robotics world and how to process the sensor data for situational awareness. Through selected papers taken from the literature, students will learn different aspects of robotics perception systems, including computer vision, simultaneous localization and mapping, and machine learning. In addition, students will learn how to critically analyze a paper and how to effectively communicate a research work, by writing a summary on each paper, and presenting and discussing papers in class. Towards the end, students will work in a team on a final project that involves the use of a mobile robot with an RGBD camera and LIDAR.
COSC 69.16: Basics of Reverse Engineering (1) sys
Frequently, the source code for an important operating system component, malware, or piece of commercial software is not available. This course explores the art and science of reverse engineering such systems to discover how they work, how they connect to other systems, and how they may be controlled. In this course, you will develop an understanding of how systems and development tool chains are built 'under the hood'. You will learn to read compiled binaries without available source code, to recover program logic, and to modify (de)compiled binaries. We will seek to understand the challenges of reverse engineering larger programs, and of automating reverse engineering.
COSC 89.11: Cognitive Computing with Watson (1) ai
Building a computer program capable of answering questions with human-level competence has been one of the grand challenges of Artificial Intelligence. IBM’s Watson system has achieved remarkable results. This class will explore the AI methods used in Watson. Topics include: natural language processing, knowledge representation, automated reasoning, machine learning, and information retrieval. Students will work in teams to develop applications that use Watson as a Cloud Service in some novel way. This class will be one of few in the world to use Watson, helping to shape the future of “Cognitive Computing.” The class will focus on projects and group work that culminates in building a novel application for question answering. Student teams will benefit from drawing on experience from various other classes, including data mining, information retrieval, natural-language processing, mobile computing and entrepreneurship. Understanding the strengths and limitations of current question-answering technology will be key to a successful application. We will read and discuss research publications on various aspects of the technology, primarily focused on the Watson system.
COSC 89.13: Robot Motion Planning (1) ai
This is a small advanced seminar course in robotic motion planning. Topics to be covered include configuration space, forwards and inverse kinematics, differential kinematics, representations for motion planning, and classical planning algorithms including cell-decomposition and probabilistic methods.
COSC 89.14: Research Topics in Human-Computer Interaction (1) humans
This is a topics course in Human-computer Interaction. The course is designed to introduce students to advanced HCI research methods and techniques, including observation, design, implementation, and evaluation. It will also expose students to state-of-the-art research topics in HCI, including interaction techniques, actuated interfaces, ubiquitous computing, context-aware computing, tangible interfaces, mobile interfaces, and wearable interfaces. This course involves a mix of lectures given by professor and students with a major focus on the discussion of selected papers from ACM SIGCHI or ACM UIST Conference Proceedings.
COSC 89.17: Health Informatics (1) ai
Our health is everywhere. It is affected by how, where, and who we live, work & play with (i.e. biological, behavioral, social, and environmental factors). The explosion of data digitization captured both outside 'in the wild' and within the healthcare delivery system, allows us to understand and address the many factors affecting the complexity of our health. Today, health & healthcare data is continuously being generated by healthcare delivery systems, organizations, or users and can be accessed through devices, databases, or the web (e.g., APIs). Deriving information and knowledge to improve and support health requires health informatics. Data science plays an active role as a profession and within its research efforts in informing and developing all aspects of health informatics: data capture, data storage, and data analytics.
COSC 89.18: Computational Methods for Physical Systems (1) ai
The Physical Computing course introduces students to mathematical concepts and algorithmic techniques for developing computational approaches to simulate, optimize, design, and control various physical systems. Course topics cover fundamental numerical approaches for modeling and simulating rigid body, soft body, and cloth, as well as design and optimization algorithms for drones and soft robots. The materials will be illustrated using examples and applications from physics-based animation, robot design, fashion design, and 3D printing.
COSC 89.19: Machine Learning for Robotics (1) ai
Machine Learning for Robotics is a course mixed with lectures, students’ presentations, and assignments that explore machine learning techniques for robotics applications. After a review of some supervised and unsupervised machine learning techniques, we will focus on some specific ones, currently popular in robotics, including reinforcement and deep learning. Students will have the opportunity to use machine learning frameworks for some robotics problems.
COSC 89.20: Data Science for Health (1) ai
Data science is being employed across diverse fields to improve human sensing and health. However, there are still many untapped opportunities. This course will cover state-of-the-art methods for data acquisition and analysis, with an emphasis on interpretation of behavioral and physiological data. Students will develop their skills by reading, presenting, and critiquing seminal research papers in the health space. The course will also include assignments and a group project to reinforce concepts and methods widely used in data science.
COSC 89.21: Data Mining and Knowledge Discovery (1) ai
This course introduces the basic concepts, principles, methods, implementation techniques, and applications of data mining. The course covers all the steps required to turn raw data into meaningful insights, including: obtaining and cleaning data, pattern discovery, and data visualisation. Throughout the course, students will work on data mining projects using real-world data to gather hands-on experience. The course will be taught in Python.
COSC 89.23: Network Science and Complex Systems (1) ai
Many of the systems that surround us are complex. These systems span almost every scientific field of inquiry, from biological to social, and computational sciences. To understand the behavior of complex systems, we must study not only the parts but the emergent behavior that arises from such systems when the parts act together. Complex systems are by definitions highly interconnected, therefore, at the core of studying complex systems is understanding networks. This seminar is an introduction to the main concepts of networks and complex systems, and their applications. The topics covered in this course will include: network topologies, network dynamics, motifs, dynamic systems, attractors, and chaos. The seminar mainly involves reading and discussing seminal, and ongoing, works in this field, but we will also be doing hands-on modeling and studying toy and real networks using Python.
COSC 89.24: Logic and Artificial Intelligence (1) ai
The goal of this topics course is to study the foundations of different types of logic used commonly in artificial intelligence. Logic forms the basis for many types of reasoning used by humans – researchers in AI have extended classical logic over the years to numerous more “exotic” logics. This course will cover the foundations of a host of classical and non-classical logics, a number of interesting logics developed by by AI researchers for common-sense reasoning, and applications of those logics.
COSC 89.25: GPU Programming and High Performance Computing (1) sys
The GPU Computing course introduces students to the basic programming and algorithmic techniques for developing the modern parallel computer code for high-performance computing applications. Course topics will cover the fundamentals for GPU (CUDA) and CPU (multi-threading) parallel programming, parallel computer architecture, parallel data structures, parallelizable linear algebra, conjugate gradient and multigrid solvers, particle systems and N-body problems, and vectorization. The materials will be illustrated using large-scale computing examples and applications from computer graphics, computational physics, and machine learning.
COSC 89.26: Security and Privacy in the Lifecycle of IoT for Consumer Environments (1) sys
We are entering an era of Smart Things, in which everyday objects become imbued with computational capabilities and the ability to communicate with each other and with services across the Internet. Indeed, the Internet of Things now involves the deployment of Smart Things in everyday residential environments – houses, apartments, hotels, senior-living facilities – resulting in Smart Homes. Although Smart Things offer many potential benefits, they can also create unsafe conditions and increase risk of harm to persons and property. This course explores the key security and privacy challenges required for the vision of Smart Homes to be safely realized, with an explicit focus on consumer-facing “things” where end-user privacy and usability are essential. It will take a holistic approach to the entire lifecycle of security, privacy, and usability challenges from the perspective of the everyday consumer who interacts with Smart Things (intentionally or unintentionally) in a residential setting. Students will read, present, and discuss papers from the research literature; write a survey paper about a subset of the research literature; and conduct a security analysis of a current commercial “smart thing”. Guest lecturers will join the class, weekly, to share expertise from both industry and research.
COSC 89.27: Security and Privacy of Machine Learning (1) ai
Today we see applications of machine learning almost everywhere we look – in the domains of autonomous driving, medical diagnosis, fraud detection, etc. While the use of machine learning is increasing in our day-to-day lives, these techniques also pose significant threats to security and data privacy. This course will explore recent academic research at the intersection of machine learning, security, and data privacy that demonstrates the risks adversaries pose to machine learning systems. The research papers explored in this course would cover attacks on machine learning systems as well as defense techniques to mitigate such attacks. Students will read, analyze, and discuss research papers, write summaries, take notes, and undertake a term-long research project.
COSC 89.28: Transforming Healthcare through Machine Learning: Challenges and Opportunities (1) ai
Machine Learning (ML) lies at the core of a wide range of healthcare applications spanning from diagnosis to delivery of care. This course gives an overview of challenges and opportunities for ML in the era of digital health. We will explore advanced ML methods for healthcare and medicine through research papers. Specifically, we will cover recent successes of natural language processing, time-series analysis, and transfer learning to advance healthcare research. Students will choose and complete a course project, write a project report, and make project presentations at the end of the course. The course also requires the students to analyze, present, and discuss research papers. The course is open to graduate and ambitious undergraduate students who are interested to gain hands-on experience in applied ML research. The course is designed to enable students to improve their technical communication and review skills and explore new research directions. It is important to note that this course will be conducted like a seminar (i.e. there are no formal lectures). We assume students are willing and able to learn some necessary background materials on their own. There will be office hours outside of scheduled class lectures.
COSC 89.29: Music and Artificial Intelligence (1) ai
This course explores artificial intelligence (AI) for creating and consuming music. Through weekly readings and exercises, students will create music and art with AI-based systems and develop the critical skills to evaluate the outputs of creative AI. Starting with the history of algorithmic art and music, students will explore issues of digital music representation, generative music, computational creativity, and AI-based music production. The goal is to generate original works using algorithms, such as neural networks.
COSC 89.30: Topics in Video Understanding (1) ai
Video understanding is an area of research that helps machines understand video content by recognizing and localizing different actions or events appearing in a video. Videos have multiple sensory information, including visual, acoustic, and meta information. This class is designed to help students better understand recent trends in video understanding. In particular, we will explore the state of the arts in deep learning for video understanding, especially with multimodality. Students will learn by reading, presenting, and discussing recently published papers. Students will also propose and complete a term project to solve a video understanding problem.
COSC 89.31: Deep Learning Generalization and Robustness (1) ai
This course will be an extended version of COSC 78/278 Deep Learning. It is mostly project-based, and it aims to bridge the gap between machine learning course materials and recent developments in machine learning research. The course begins by covering the basics of model training and inference. From there, the course proceeds to discuss various concepts of generalization, different types of robustness issues associated with generalization (e.g., adversarial robustness, out-of-distribution robustness, model poisoning, etc.), and the connections between (robust) generalization to the design of multiple regularization and normalization strategies.
COSC 98.01: Senior Design and Implementation Project I (1) capstone
Participation in a software engineering group project to meet a real-world need. Group members are responsible for all aspects of a software system, including iterative requirements analysis, design, implementation, and testing. The course also stresses customer interactions, documentation, process, and teamwork. The result is a software product of significant scope and significant benefit to a user base. Open only to students pursuing a major in Computer Science or a modified major with Computer Science as the primary part. 98.01 and 98.02 constitute a two course sequence, and they must be taken in consecutive terms, either fall/winter or winter/spring, normally in the senior year.
COSC 98.02: Senior Design and Implementation Project II (1) capstone
Participation in a software engineering group project to meet a real-world need. Group members are responsible for all aspects of a software system, including iterative requirements analysis, design, implementation, and testing. The course also stresses customer interactions, documentation, process, and teamwork. The result is a software product of significant scope and significant benefit to a user base. Open only to students pursuing a major in Computer Science or a modified major with Computer Science as the primary part. 98.01 and 98.02 constitute a two course sequence, and they must be taken in consecutive terms, either fall/winter or winter/spring, normally in the senior year.
COSC 99.01: Thesis Research I (1) capstone
Individual research on a topic along with a thesis advisor. Permission of the Undergraduate Program Director and thesis advisor required. Open only to students pursuing a major in Computer Science or a modified major with Computer Science as the primary part. COSC 99.01 and 99.02 constitute a two-course sequence and must be taken in two consecutive terms, either fall/winter or winter/spring, normally in the senior year. In order to receive credit for COSC 99.01 and 99.02, a written thesis must be approved by the thesis advisor.
COSC 99.02: Thesis Research II (1) capstone
Individual research on a topic along with a thesis advisor. Permission of the Undergraduate Program Director and thesis advisor required. Open only to students pursuing a major in Computer Science or a modified major with Computer Science as the primary part. COSC 99.01 and 99.02 constitute a two-course sequence and must be taken in two consecutive terms, either fall/winter or winter/spring, normally in the senior year. In order to receive credit for COSC 99.01 and 99.02, a written thesis must be approved by the thesis advisor.
ENGS 20: Introduction to Scientific Computing (1)
This course introduces concepts and techniques for creating computational solutions to problems in engineering and science. The essentials of computer programming are developed using the C and Matlab languages, with the goal of enabling the student to use the computer effectively in subsequent courses. Programming topics include problem decomposition, control structures, recursion, arrays and other data structures, file I/O, graphics, and code libraries. Applications will be drawn from numerical solution of ordinary differential equations, root finding, matrix operations, searching and sorting, simulation, and data analysis. Good programming style and computational efficiency are emphasized. Although no previous programming experience is assumed, a significant time commitment is required. Students planning to pursue the engineering sciences major are advised to take ENGS 20. Students considering the computer science major or majors modified with computer science should take COSC 1 and COSC 10. Enrollment is limited to 50 students.