CS Undergraduate Course Descriptions

EN 1-ICD Intro to Computational Design

Can we be inspired by caterpillars to design useful robots? Can we use computers to deduce the neuro-mechanical commands that make a caterpillar move forward? What do caterpillars and soft-tissue robots have in common? This class brings such interdisciplinary research experiences to first-year Engineering students through the lens of computational design. We learn in this course about computational modeling, the meaning of computational design and how it can help engineers in making best design decisions. The course will use MATLAB as a computational platform, and cover fundamentals such as a solution space, design decision variables, constraints, optimal points within the space and searching the design space using efficient algorithms, exhaustive enumeration, and approximate algorithms.


EN 1-SR Simple Robotics

Introduction to robot construction, programming, computer vision, event-based programming, artificial intelligence, and elementary controls. Basic principles of robotics for students with minimal or no prior programming/building background. In-class competition-based laboratories and hands-on group projects using the LEGO MINDSTORMS platform.


COMP 05-CMH Computational Methods for the Humanities

Introduction to computational methods as applied to Humanities data. Data preparation, natural language processing, probability and statistics, visualization, machine learning, and prediction. Datasets for demonstrations and projects include texts, geographical, archaeological, and numerical data. Lab session and report each week and requires hands-on computing. The class will focus on Classical studies problems when taught by a Classics faculty member and on other areas of the Humanities when taught by others. Graduate students will demonstrate originality in their research by acquiring and preparing their own data and executing thorough cross-checking and assessment of their results. Graduate students taking the class as part of the MA in Digital Tools for PreModern Studies will need to integrate a language component to their research by operating on Latin, Greek, or other texts in an approved language. Cross-listed as CLS 160


COMP 05-TCS Teaching Computer Science

This course will prepare undergraduates to function effectively and efficiently as undergraduate teaching assistants. Through this course, students will learn pedagogical techniques that match learner needs; discuss ethical and social concerns that UTAs face in the course of a semester; and problem solve together issues that arise as teaching assistants. This course is designed in a learner centered model requiring your active and engaged participation. Through your willingness to share your experiences and expertise and your collaboration with your fellow UTA we will together construct meaningful solutions to difficulty situations. Faculty from Computer Science will participate in some of the sessions as co-facilitators. Students will be expected to complete short readings; keep a reflective blog of your learning as a teacher; give a short final presentation on a topic of interest that you want to explore in more depth to help you in your TA class.


COMP 5-IDH Introduction to Digital Humanities

The Humanities is increasingly making use of computerized methods in gathering and interpreting research data. Simultaneously, the world has seen a dramatic increase in the dissemination of numerical claims-—the products of data science--in forms ranging from infographics in newspapers to interactive visualizations on social media and other web sites. This course covers selected topics in computing approaches for the Humanities. The aim is to equip Humanities students with basic awareness and skills in using digital research methods and applying that knowledge to understanding and interrogating the numerical claims produced by data scientists. Additionally, the course aims to provide experience with a variety of computational tools to approach Humanities research 9 questions, topics, and datasets. All examples and the applications of the computational tools will be drawn from the Humanities. We hope to empower Humanities students to understand and interpret research conducted with computerized methods. After this course, they should be familiar with the steps involved in working with data. They will be prepared to ask questions of numerical claims they encounter in publications and online. Where did the source data come from? How was it processed? Why was it visualized in this way and how might the visualization help or hinder appropriate interpretation? They will also be prepared to engage in research together with data scientists and thus form better teams. Non-Humanities students will be better equipped to engage with Humanists by getting a sense for the needs of the field. They will also gain awareness of the different topics explored in the Humanities (such as language, history, prosopography, geolocalization, etc). Students will develop an interest in these disciplines and add them to a well-rounded curriculum. Further, students will benefit from exposure to and hands on experience with real world applications of data science techniques in the Humanities. The format of the course will be modeled after introductory Computer Science (CS) courses at Tufts. The course is open to all Tufts undergraduates and will be counted as a Humanities credit.


COMP 7 Bioinformatics

A hands-on introductory course in bioinformatics for students with little or no computer science background. Basic programming skills for data manipulation and analysis.Methods and applications of online tools for sequence alignment, molecular phylogeny, gene expression data analysis, and linking molecular variation to disease.

Prerequisite: Biology 41 or BME 62 or equivalent


COMP 10 Simple Robotics

Introduction to robot construction, programming, computer vision, event-based programming, artificial intelligence, and elementary controls. Basic principles of robotics for students with minimal or no prior programming/building background. In-class competition-based laboratories and hands-on group projects using the LEGO MINDSTORMS platform.


COMP 10-CSA Computer Science for All

TBD


COMP 10-ICD Introduction to Computational Design

TBA


COMP 11 Introduction to Computer Science

The study of computer science centers on two complementary aspects of the discipline. First, computer science is fundamentally concerned with the problem-solving methodologies it derives from its foundational fields: the design principles of engineering, mathematical theory, and scientific empirical study. Second, these methodologies are applied in the complex context of a modern day computing system. In this course we will address both of these important aspects. As a means for developing your design skills, we will discuss the fundamental features of a high level, general purpose programming language -- namely C++-- and learn how to use it as a tool for problem solving. We will also consider the performance of solutions, and how to apply both analytical and empirical assessment techniques. Finally, we will explore the Unix operating system as a context for problem solving. (Additional 2 hr weekly lab time scheduled at first class meeting.)

Recommendations: High school algebra. No prior programming experience is necessary.


COMP 15 Data Structures

A second course in computer science. Data structures and algorithms are studied through major programming projects in the C++ programming language. Topics include linked lists, trees, graphs, dynamic storage allocation, and recursion.

Prerequisite: COMP 11 or consent. This course and COMP 50-01 (COMP 50-PSS) may not both be taken for credit.


COMP 20 Web Programming

An introduction to techniques, principles, and practices of writing computer programs for the World Wide Web. Server and browser capabilities and limits. Media types, handlers, and limitations. Web programming languages and techniques. Web security, privacy, and commerce. Lectures augmented with programming projects illustrating concepts and current practice.

Prerequisite: COMP 11; or COMP 10 and consent.


COMP 23 Game Development

Principles, design, and development of games. Game structure, engineering, physics, testing, 2D and 3D rendering, user interfaces, sound, and animation. Security of online games. Applications of Economics, Music, and Psychology in crafting games. Projects include writing game design documents, developing an interactive fiction game, and building a functional game in a team.

Prerequisite: Recommended: Comp 15.


COMP 40 Machine Structure & Assembly-Language Programming

Structure and function of the main components of computer systems: processors, main memory, and disk storage devices. Processor design, including instruction set design and interpretation. Assembly language programming. Implementation issues for high-level languages.

Mandatory lab will be held Fridays: 1:30-2:45 PM or 3-4:15 PM. Sign up during the first week of class.

Prerequisite: COMP 15.


COMP 46 Computer Engineering with Lab

(Cross-listed w/ EE 126.) Topics covered include computer abstractions, performance measurements, instruction set architectures, designing processor datapath and control, pipelining, memory hierarchy, I/O, multiprocessors. The associated lab consists of designing, implementing, and validating a simplified MIOS processor using VHDL, a hardware description language.

Prerequisite: Recommendations: EE 14


COMP 50-B Fundamentals of Computational Design

With the availability of increased computing power, many engineering disciplines now rely on utilizing computation to explore different design options. This class introduces fundamental concepts in "computationally" designing complex engineering systems. Students will learn computational design principles shared when designing bridges, airplane wings, and robots. The course will use MATLAB as a computational platform, and cover fundamental concepts such as a solution space, design decision variables, constraints, optimal points within the design space and searching the design space using efficient algorithms, exhaustive enumeration, and approximate algorithms.

Prerequisite: Prior programming experience in C, C++, Java, MATLAB, or Python through a formal course at the university or high school level. High School Algebra.


COMP 50-CCS Cyber Security and Cyber Warfare

Interdisciplinary analysis of cybersecurity in the United States and other countries, intended to introduce engineering students to policymaking and intelligence aspects of cybersecurity and liberal arts students to the technical constraints of computer networks and software. Hands-on activities including packet analysis, exploiting a vulnerable system, password cracking, social engineering, reconnaissance, and malware analysis. Examination of state and non-state actors engaged in cyber-espionage, counterintelligence, deterrence, and offensive cyber operations. Guest speakers from private sector, civil liberties groups, and intelligence community.

Prerequisite: PS 61: Introduction to International Relations (for PS and IR majors) or COMP 15: Data Structures (for CS majors in A&S or SOE)


COMP 50-CP Concurrent Programming

When we learn to program, we specify problem solutions as a single sequence of computations in a fixed, determined order. But the world isn’t like that. Deer run into the woods, people talk on their phones, it rains. Nothing forces these things to happen one at a time, in a fixed order. They happen concurrently. We want to write concurrent programs, because we want to model the real world, because our computer systems actually have concurrent activities, and also to improve the performance or usability of our programs. The ubiquity of distributed applications and modern, multicore processors makes concurrent programming an essential skill. This course explores different models of concurrent programming: students will gain competence in conventional shared-memory threads programming, and at least one natively concurrent programming model (actors or CSP). Time permitting, we may look at other models. We’ll look at classic problems (like deadlock) and synchronization mechanisms (semaphores, locks, barriers). Students will complete a substantial team programming project using these tools and techniques, and they will present their work to the class.

Prerequisite: Comp 15


COMP 50-GD Game Design

Game Development provides a rich opportunity to learn about software development methodologies such as managing teamwork, project scope, and user experience. In this course students will learn to develop fun and meaningful interactive experiences using paper and digital prototyping, including the use of programming, art, and audio production software. Comp 15 recommended.

Upon successful completion of this team-based course students will be able to use computer programs and both paper and computer production pipelines to bring a game from design and planning through production to a final playable product.

Prerequisite: COMP 15.


COMP 50-IOT Introduction to the Internet of Things

The pervasive and ubiquitous presence of a variety of smart and connected things or objects – such as microcontrollers, sensors, actuators, mobile phones, etc. – has given rise to the new and complex concept, The Internet of Things (IoT). IoT promises to play a central role in smart cities, health tech, retail, home, supply chain, wearables, transportation and other domains. By 2020, the world will have 50 Billion such connected devices, and IoT is expected to contribute more than $7 trillion to the world economy. Industry leaders are looking for skilled engineers that have the breadth of skills---from embedded programing, computer networking, cloud computing and analytics---to design and implement next generation IoT systems.

Prerequisite: Undergraduates must have taken at least COMP 15 and ES 4 to sign up for the undergraduate version of the course COMP 50 or EE 93. You may register for COMP 150 or EE 193 only if you have graduate standing, or have been accepted into the BS/MS program.


COMP 50-MAD Moblie Application Development

Mobile Application Development will prepare you for a career in mobile programming using Android. You will not only learn Android fundamentals but will also develop skills in: Android User Interface, Activities and Debugging, Intents and Adapters, Databases and many more advanced concepts. You will also explore how to sign and upload your app on Google Play.

Prerequisite: COMP 15 or permission of instructor.


COMP 50-MMD Mobile Medical Devices and Apps

Team-based projects to design, build, and present a working medical device prototype. Devices are constructed using Android, iOS, and Arduino based components, using appropriate software for designated functionality and user-interface requirements. Project specification with imposed requirements and constraints, sensor/data acquisition, software architecture, hardware integration, working prototype demonstration, final presentation, and project report are course assignments.

Prerequisite: ES03, ES04, COMP11, COMP 15, junior or higher standing, and permission of instructor. This is an elective for the ECE and CS programs only.


COMP 50-PSS Problem Solving through Software Design

The course will focus on one idea: a systematic method of problem solving and software development called the design recipe. This method will be supported by a textbook called How to Design Programs and by a programming language called Racket. Both the book and the language were created expressly to support the teaching of this method.

The method of design recipes somewhat resembles high-school algebra applied to programming. No prior experience is required. In fact, students who have prior experience may find the course substantially different from what they are used to.

You will learn time-tested techniques of problem analysis and software design, and you will learn them in an environment that has been created for beginning programmers. This environment has been refined over many years and has earned the reputation of making beginning students extraordinarily productive. By the end of the course you can expect to be able to solve some interesting problems, even if you have no prior programming experience. Problems we are considering include navigating over the Earth's surface, simulating and visualizing how plants grow, building simple animations, simulating 'schooling' and other behavior of crowds, and recognizing content found on the Internet.

In addition to a few larger projects, the course will require frequent small programming assignments. Some of these may be started and finished in a laboratory setting.

The course is intended for students with no prior experience. However, the course is also suitable for students who have completed COMP 11 *without* finishing COMP 15. Students who have completed COMP 15 are not eligible to take this course for credit. The primary benefit of the course is a chance to learn or practice the craft of program design in a setting where you can be very productive, very quickly.

Prerequisite: Students who have completed comp 15 with a grade of C- or better may not take comp 50 for credit.


COMP 50-VLSI Introduction to VLSI CAD Algorithms

Introduction to VLSI CAD Algorithms will be a class to learn the challenges and algorithms of CAD for VLSI – i.e., learn to use algorithms from computer science to automatically create and validate VLSI circuits. We will use techniques such as DFS and BFS search, dynamic programming, and branch & bound to solve problems in VLSI timing, logic/layout synthesis and post-silicon test. Depending on student interest, we may also apply the same algorithms to other fields. This class will not use commercial CAD tools (though we will have guest lectures from people in the local CAD industry). Prerequisites are COMP160, or graduate standing, or consent of the instructor.

Prerequisite: Completion of COMP 160 recommended.


COMP 50-WD Wearable Devices

An introduction to designing and building electronic wearable devices. Students will learn basic electronics, electronic circuit and printed circuit board (PCB) design, through-hole and surface mount soldering, Arduino programming, and wearable package fabrication. The course is project based and students will design and implement a prototype wearable device for presentation, to include a professionally fabricated PCB. The class will be targeted towards students with software-driven backgrounds, and no prior experience with electronics is assumed.

Prerequisite: Department Consent

To apply for consideration to take this course, please email the instructor.


COMP 61 Discrete Mathematics (formerly Comp 22)

(Cross-listed as Mathematics 61.) Sets, relations and functions, logic and methods of proof, combinatorics, graphs and digraphs.

Prerequisite: Math 11 or 32 or Computer Science 11 or permission of instructor.


COMP 86 Object-Oriented Programming for Graphical User Interfaces (formerly Comp 106)

Object-oriented programming (OOP) and design, using the Java language. General OOP concepts (classes and instances, methods, inheritance) plus specifics of programming in Java, with emphasis on application to graphical user interfaces (GUIs). Design and programming projects using Java and toolkits.

Prerequisite: Comp 15 or permission of the instructor.


COMP 97 Senior Capstone Project I

Requirements analysis and design of a senior capstone project. Requirements analysis and elicitation methods, and prototyping. Design principles and methods, including designing for usability, security, testability, performance, and scaling. Project management and planning, including cost and effort estimation. Writing effective documentation.

Prerequisite: COMP40 and Senior Standing.


COMP 98 Senior Capstone Project II

Implementation and testing of the project designed in COMP97. Implementation tools, strategies, and platforms. Testing and debugging methodologies. Maintenance and release management. Legal, ethical, and social impacts of computing.

Prerequisite: COMP97.


COMP 105 Programming Languages

Principles and application of computer programming languages. Emphasizes ideas and techniques most relevant to practitioners, but includes foundations crucial for intellectual rigor: abstract syntax, lambda calculus, type systems, dynamic semantics. Case studies, reinforced by programming exercises. Grounding sufficient to read professional literature.

Prerequisite: COMP 15 (Data Structures) and one semester of Discrete Mathematics (COMP/MATH 22 or 61).


COMP 111 Operating Systems

(Crosslisted as EE 128). Fundamental issues in operating system design. Concurrent processes: synchronization, sharing, deadlock, scheduling. Relevant hardware properties of uniprocessor and multiprocessor computer systems.

Prerequisite: Recommendations: COMP 15 and either COMP 40 OR EE 14.


COMP 112 Networks & Protocols

Design and implementation of computer communication networks, protocols, and applications, with an emphasis on the Internet protocol suite. Network architectures and programming interfaces. Data link, transport, and routing protocols. Congestion sources and remedies. Addressing and naming in local area and wide area networks. Network security and network management.


COMP 115 Database Systems

Fundamental concepts of database management systems. Topics include: data models (relational, object-oriented, and others); the SQL query language; implementation techniques of database management systems (storage and index structures, concurrency control, recovery, and query processing); management of unstructured and semistructured data; and scientific data collections.

Prerequisite: COMP 15.


COMP 116 Introduction to Computer Security

A systems perspective on host-based and network-based computer security. Current vulnerabilities and measures for protecting hosts and networks. Firewalls and intrusion detection systems. Principles illustrated through hands-on programming projects.

Prerequisite: Comp 40.


COMP 117 Internet-Scale Distributed Systems: Lessons from the World Wide Web

Please note that this course was formerly numbered COMP 150-IDS.

The World Wide Web, one of the most important developments of our time, is a unique and in many ways innovative distributed system. This course will explore the design decisions that enabled the Web's success, and from those will derive important and sometimes surprising principles for the design of other modern distributed systems.

We will introduce and draw comparisons with more traditional distributed system designs, including distributed objects, client/server, pub/sub, reliable queuing, etc. We will also study a few (easily understood) research papers and some of the core specifications of the Web. Specific topics to be covered include: global uniform naming; location-independence; layering and leaky abstractions; end-to-end arguments and decentralized innovation; Metcalfe's law and network effects; extensibility and evolution of distributed systems; declarative vs. procedural languages; Postel's law; caching; and HTML/XML/JSON document-based computing vs. RPC.

The purpose of this course is not to teach Web site development, but rather to explore lessons in system design that can be applied to any complex software system.

More detailed course information can be found at http://www.cs.tufts.edu/comp/150IDS/shouldItakeit

Prerequisite: Comp 40 or permission of the instructor.


COMP 120 Web Engineering

Web applications are complex systems that deliver a plethora of functionality to a large number of users, and also exhibit unique behaviors and demands in terms of performance, scalability, usability, and security. Web engineering is an emerging and multidisciplinary process that is used to create quality web applications. This course will discuss the limits of current web technologies, the similarities and differences between web and software engineering, design, information and service architectures, content management, and testing disciplines. Frameworks such as Rails, Spring, and Symfony will be emphasized and used. Projects will involve search, cloud computing, location-based services, and mobile web development.

Prerequisite: Comp 15 and Comp 20, or Consent of Instructor.


COMP 126 Numerical Analysis

The course will begin with an introduction to Matlab programming, which will be essential throughout. The goal of the course is to learn how to choose numerical algorithms intelligently, and how to analyze them using mathematics and numerical experimentation. Numerical linear algebra will be treated fairly lightly. (For a much more thorough treatment of this topic, take MATH 128 / CS 128 or its 200-level branch.) We will instead spend a substantial amount of time on numerical methods for differential equations. Students enrolled in MATH 250NA will be given more advanced problems, and occasionally additional lectures.

Prerequisite: For MATH 126 / CS 126: MATH 38 or 51 and experience programming in a language such as C, C++, Fortran, Matlab, etc. For MATH 250NA: Instructor's permission.


COMP 128 Numerical Linear Algebra

The two basic computation problems of linear algebra; solution of linear systems and computation of eigenvalues and eigenvectors. (Cross Listed as MATH 128 Numerical Linear Algebra)

Prerequisite: Math 46 and Comp 11.


COMP 131 Artificial Intelligence

History, theory, and computational methods of artificial intelligence. Basic concepts include representation of knowledge and computational methods for reasoning. One or two application areas will be studied, to be selected from expert systems, robotics, computer vision, natural language understanding, and planning.

Prerequisite: Comp 15 and either COMP/MATH 22 or 61 or familiarity with both symbolic logic and basic probability theory.


COMP 135 Introduction to Machine Learning

An overview of methods whereby computers can learn from data or experience and make decisions accordingly. Topics include supervised learning, unsupervised learning, reinforcement learning, and knowledge extraction from large databases with applications to science, engineering, and medicine.

Prerequisite: Comp 15 and COMP/MATH 22 or 61 or consent of instructor. (Comp 160 is highly recommended).


COMP 136 Statistical Pattern Recognition

Statistical foundations and algorithms for machine learning with a focus on Bayesian modeling. Topics include: classification and regression problems, regularization, model selection, kernel methods, support vector machines, Gaussian processes, Graphical models.

Prerequisite: Prerequisites: MATH 13 or 42; MATH 46 or 70; EE 104 or MATH 162; COMP 40 or COMP 105 or a programming course using Matlab. COMP 135, or COMP 131 are recommended but not required. Or permission of instructor.


COMP 140 Advanced Computer Architecture

This course teaches advanced concepts of modern computer architecture, starting from the basic 5-stage pipelines and progressing to out-of-order superscalar processors, multicore processors, and power-aware computing. This course introduces the techniques used to maximize single-thread performance within the constraints of memory technology, power consumption, and the inherent instruction-level parallelism of applications. In addition, this course describes the current challenges faced by computer architects. These challenges include: power consumption, transistor variability, parallelism, and processor heterogeneity.

Prerequisite: EE 126 or COMP 40


COMP 150 Special Topics

Content and prerequisites to be announced. Over the past three years, special topics courses have been offered in parallel computing, graph drawing, computational geometry, multimedia data compression, cryptography and security, digital network communication, spoken language systems, system and network administration, and machine learning. Please contact the department for detailed information.


COMP 150-ADS Algorithms and Data Structures

This course offers an opportunity to expand your knowledge on various topics involving algorithms, data structures and graphs. Often these topics are intertwined; e.g., to create efficient algorithms, it may be useful to design data structures or use existing ones. We will cover a range of topics, such as network and path approximation, all-pairs shortest paths, near-planarity, string matching, linear programming, Fibonacci heaps, balanced trees (Splay, WAVL, Suffix), skip lists, fractional cascading, high-dimensional range counting, etc. These are topics that are useful to know, as one prepares for advanced interviews and/or further graduate work. As an elective, this course will aim to let each student focus more on topics that they are interested in. Evaluation will be primarily based on participation and a project.

Prerequisite: Completion of COMP 160, or permission of instructor.


COMP 150-AML Advanced Topics in Machine Learning

In this semester the course will focus on agents that learn, plan and act in non-deterministic and complex environments. We will first cover the main relevant results and approaches from Markov Decision Processes and Reinforcement Learning (RL) and then turn to recent research papers. Advanced topics include: combining planning and learning, factored representations, relational RL, hierarchical RL, partial programming, predictive state representations, approximation methods, convergence guarantees.

Prerequisite: Math 22, Comp 15, Comp 160 or consent of instructor. Some exposure to probability theory is necessary. Previous courses in machine learning or artificial intelligence are helpful but not required.


COMP 150-BCB Current Challenges in Computational Biology: Data, Methods and Validation

The 21st century has seen an unprecedented new collection of all sorts of genomic data from entire human genome sequences, to genomes of other organisms (including yeast, plants, and mice), to sequences of different cancer tumor cells. We can combine that data with data from other high-throughput biological experiments, to tell us, for example, which proteins interact in a cell. How do we translate these mountains of data into actionable insight into health and disease that might impact best practices in treatment? In this course we will talk about:

DATA
What kinds of data have been generated, and what is available in public databases?
METHODS
What sorts of analyses are done on these data, and what sort of questions are we trying to answer?
VALIDATION
How do we construct analyses in which we can have firm statistical confidence in our conclusions?
The work for this course will consist of readings, problem sets and a substantial final project.

Prerequisite: Comp40 or Comp160 or graduate standing. No prior biology background is required. Limited to 20; high demand; sign up in the department.


COMP 150-BD Big Data

What is big data? Is it a problem or an opportunity? If it's an opportunity, how can we take advantage of it? We will look at the phenomenon of big data from multiple perspectives: historical, theoretical, statistical, philosophical, ontological, ethical, etc. Possible solutions to the problem of big data involve compression, mining, database design, visualization, interface design, security, etc. Students whose research creates or uses big data will be encouraged to do projects and/or give presentations.

Prerequisite: Comp 160 or instructor permission.


COMP 150-CA Cloud Applications

Cloud computing powers the Internet presence and applications of established and younger companies such as BMW, GE, Netflix, and Spotify. Shouldn't you add cloud computing to your development toolbox? In this course, you will learn how to leverage cloud computing for the development of applications by writing and running code on cloud providers. An application, for the purpose of this course, can be a web application, the backend of a smartphone or desktop application, or a big data analysis.

We will start with an overview of cloud computing fundamentals and infrastructure (e.g. VM/container, storage, network, and datacenter), then move on to the architecture of a typical cloud application, the essential data stores (i.e. relational, key-value, and object stores), MapReduce, and how to meet production demands such as elasticity, fault-tolerance, and operational cost. Your semester-long project may also explore cloud services such as CDN, third-party RESTful APIs, and machine learning. At the end this Fall, you will be able to choose the cloud platform that best meets the demands of your applications, to balance the trade-offs between competing, non-equivalent cloud services such as relational databases and key-value stores, and to implement applications employing a number of cloud services.


COMP 150-CC Cloud Computing

This course will cover some hot topics within the area of cloud computing. We will learn about the cloud infrastructure (e.g.,data center network) that "powers" cloud computing, the programming model and abstractions (e.g., MapReduce) that enable programmers to leverage the benefits of cloud computing, and cloud systems in the “wild” (e.g., Microsoft's Azure, Amazon's Dynamo, etc) that showcase how practical, Internet-scale cloud systems are built and used in practice. We will also cover the necessary fundamentals that are required to understand this material. This course should be useful for students who plan to undertake research in this area while also benefiting those students who plan to go to industry and work on cloud computing systems. The course will have a semester long research project.

Specific topics include: Cloud computing fundamentals; Cloud infrastructure, including data center architectures and cloud middleboxes; Data center transport protocols; Software defined networking inside data centers; Cross data center replication and consistency; Cloud programming models and abstractions (e.g., MapReduce, Key-Value Stores, etc); Internet scale cloud systems (e.g., Microsoft's Azure, Amazon's Dynamo, etc).

Prerequisite: Prerequisite:COMP 15; COMP 111/112(preferred)


COMP 150-CDR Computing for Developing Regions

The course will cover a series of case studies on the use of computing to solve important problems in the developing regions, such as healthcare, education, and governance. The course will involve a semester long hands-on project which will focus on one of the above challenges.

Prerequisite: Completion of COMP 15 or graduate standing


COMP 150-CMCS Computational Models in Cognitive Science

This course will provide an overview of different computational models and modeling techniques in cognitive science. Students will work with different kinds of computer simulation to develop models and study their properties. A term project will require students to develop and implement their own model for a task of their choice.

Prerequisite: COMP15, COMP/MATH 22 or 61


COMP 150-CVI Computer Vision

This course is an introduction to low and intermediate level Computer Vision. We will learn how to design algorithms that process visual scenes to automatically extract information. The course will cover fundamental principles and important applications of computer vision, including image formation, processing, detection and matching features, image segmentation, and multiple views.


COMP 150-DCLE Design of Collaborative Learning Experiences

Students in this course will work in teams to learn and apply user-centered design processes in order to create collaborative technologies for learning. Teams will ethnographically observe and interview participants in settings like classrooms, after-school programs, maker spaces, massively multi-player video games, or hospitals, and analyze those data to understand what makes working and learning in those contexts difficult. They will then design and prototype new technologies and processes to assist, and then evaluate those technologies in context.

We encourage students with a range of different backgrounds, from CS to human factors engineering, and from to sociology to visual arts to take this course.

Prerequisite: CS/Engineering students: Experience programming web, desktop, or mobile applications. Feel free to contact instructor with questions.

Education/Other students: You are very much welcome in this course. Please contact instructor!


COMP 150-DIS The Discrepancy Method

The Discrepancy Method is one of the most exciting and beautiful recent developments in mathematics and theoretical computer science. Closely related to the probabilistic method and derandomization, it touches areas as diverse as machine learning, number theory, computational geometry, circuit complexity, and linear programming. The probabilistic method was developed by Paul Erdos to demonstrate the existence of certain objects by showing that they have a positive probability of existence, and derandomization attempts to make this practical by converting the probability calculation into a construction algorithm.

We will be using Bernard Chazelle's "The Discrepancy Method", available at his web site at Princeton. We hope to bring together computer science and mathematics students through readings, discussions, and student papers or presentations.

Prerequisite: The ideal participant should have done well in COMP 160 or be a mathematics senior or graduate student.


COMP 150-DL Deep Learning for Computer Vision

This course investigates current research topics in data-driven object detection, scene recognition, and image-based graphics. We will examine large-scale datasets, convolutional neural networks, and several algorithms useful for understanding and manipulating visual data. These topics will be pursued through independent reading, discussions, student presentations, and projects involving current research problems. Students will train deep networks from scratch and fine-tune popular pre-trained networks. Students will gain experience with commonly used deep learning packages and learn practical techniques for network training. In the final project, students will implement and test their own improvements to state of the art networks.

Prerequisite: At least one of COMP 135 or COMP 136 or COMP 150-NLP.


COMP 150-DR Developmental Robotics

This class serves as an introduction to the interdisciplinary field of Developmental Robotics, which crosses the boundaries between robotics, artificial intelligence, and developmental psychology. The goal of the field is to create autonomous robots that are intelligent and adaptable in the real world rather than in very limited domains, situations and environments. The class will focus on representations and algorithms that enable a robot to continuously learn about its physical or social environment through its own interaction with it. Topics include overview of robotics; robotics cognitive architectures; deep learning for visual and non-visual sensory data; unsupervised, self-supervised, and reinforcement learning in robotics; learning object affordances; and, theories of cognitive development and their applications to robotics. There will be several small homework assignments and one large class project, with the goal of producing work worthy of publication. You will use physics-based robot simulators as well as real robots as part of the final project. By the end of this class you will have an understanding of the current state of the art of the field and will be able to conduct original research within it.


COMP 150-ECP The Evolution of Cognitive Processes

This course will take an interdisciplinary look at the ideas put forth in Eric Baum's book "What is Thought?" Baum argues that the structure and nature of thought, meaning, sensation, and consciousness have evolved naturally as a result of constraints on the brain's processing power, and that this is the key to understanding how the brain is different from present-day digital computers. Students will be expected to have a computer science background at the level of at least COMP 14 or 15. Computer science concepts beyond this level will be taught. No programming will be required, though students with programming skills may wish to do programming as part of a project. Others will be expected to contribute to discussions of the philosophical, linguistic, evolutionary, and neurological concepts involved.


COMP 150-ECS Entrepreneurship for Computer Scientists

(Cross listed with ELS 194-02) 150 ECS is an introductory entrepreneurship course for Computer Science students. The course provides an overview of entrepreneurship, develops an entrepreneurial perspective, and provides a framework for learning the fundamentals of the essential elements of entrepreneurial ventures, specifically directed toward software-related industries and products. Students learn how to develop their technical ideas into potential business opportunities, and to explore their likelihood of becoming viable businesses. They learn how to do market research, to develop go-to-market strategies, value propositions and to differentiate their products or services from actual or potential competitors. The course consists of a balance of lectures, projects, case studies and interaction with entrepreneurs and computer scientists who participate in entrepreneurial organizations.


COMP 150-EXM Experimental Methods for Computer Scientists

Many computer scientists will at some time in their career have to perform experiments, e.g. for usability testing or evaluating human-machine interaction. Although the principles behind it are simple, experimentation is a skill that needs to be learned. This course introduces the basic background knowledge and skills for conducting a proper experiment. It will address the philosophical background, design, planning, execution, statistical analysis, and reporting of experiments involving noisy data sources like humans. Towards the end of the course, the students will perform a small experiment themselves.


COMP 150-FDS Fundamentals of Database Systems

The objective of this course is to introduce the fundamental concepts of database systems and give students a solid database background. Topics include data modeling, database design, data definition and indexing techniques, query processing and optimization. This course also covers relational databases, XML data, SQL language and Web search.


COMP 150-FP Advanced Functional Programming

Functional programming is a body of language elements and programming techniques that: promote construction of safe, reusable abstractions, provide unusually powerful, expressive means of composing existing abstractions to make new abstractions, and help flush out many trivial bugs without getting in the programmer's way. Functional programming is also the wellspring of new ideas which eventually find their way into other languages. COMP 150FP is called Advanced Functional Programming because: It will take you to the frontier of research and help you identify the interesting ideas and the important problems which will influence the languages of the future and it will also give you a chance to practice the best techniques used by functional programmers, so you can use them in your work. This class will focus on Haskell, which encompasses most of the interesting ideas of the field. These ideas range from the first stirrings articulated by John Backus in his 1997 Turing Award Lecture to the latest developments in type systems and type functions. COMP 150FP will be run as a seminar; participants will meet twice weekly for intensive discussion. To allow time for introduction, discussion, and post-discussion analysis, each meeting will last two hours. A typical discussion will focus on one or two papers.

Prerequisite: COMP 105 or a comparable survey course briefly covering functional programming, or graduate standing, or permission of the instructor.


COMP 150-GD Game Design

The process of making games is a rich opportunity to learn about managing teamwork, project scope, and user experience. In this course students will learn to develop fun and meaningful interactive experiences through paper and digital prototyping, including the use of art, programming, and audio production software. Comp 15 Recommended.


COMP 150-GMT Game Theory

Game theory is a field of applied mathematics that describes and analyzes interactive decision-making when two or more parties are involved. It has been applied to many fields, including economics, political science, foreign policy, and engineering. This course will serve both as an introduction to as well as a survey of applications of game theory. We will first give a somewhat historical introduction to game theory and will start with basic 2-person zero sum games, adding an increasing amount of complexity and discussing some well-known examples. After covering the mathematical foundational work, we will examine various real-world situations. Further attention will be given to the meaning and the computation complexity of finding of Nash equilibrium.

Prerequisite: Restricted to CS Major and (junior or senior) standing or Post-Bac in CS or graduate student in CS. Math 41 required.


COMP 150-HPC High Performance Computing

This course will present the fundamentals of scientific computation using multi-core, multi-processor, and GPU computing architectures. We will look at some fundamental algorithms in numerical linear algebra and iterative methods and present the necessary steps to implement and run these algorithms on high performance shared and distributed memory systems, both from the ground up and using existing software libraries. The course will give the attendee the experience of prototyping, developing, and deploying efficient code for scientific applications on high performance computing platforms and research clusters.

Prerequisite: A course in linear algebra (preferably Math 70 or the equivalent) and programming experience with Matlab. However, some experience with C/C++ or a similar compiled language is preferred.


COMP 150-HRI Human-Robot Interaction

This course will provide an overview of the up and coming field of human-robot interaction (HRI) which is located squarely in the intersection of psychology, human factors engineering, computer science, and robotics. HRI has become a major research focus recently with the NSF's National Robotics Initiative and the push countries around the globe to develop robots for various societal tasks, from new flexible and adaptive robots for industrial manufacturing, to socially assistive robots for eldercare. In this course, we will examine this field from an interdisciplinary perspective, reading key papers in HRI that intersect computer science, robotics, cognitive and social psychology (since there is no suitable textbook yet, all reading materials will be made available). Students will give short presentations on HRI studies and designs and work in interdisciplinary groups on a term project which will require them to design and conduct an HRI study.


COMP 150-HTN Hot Topics in Networking

This course will cover some hot topics in networking, including software-defined networking, network function virtualization, scheduling and resource management for cloud systems, and network support for Internet of Things (IoT). Course will involve reading and presenting research papers, and a semester long research project.

Prerequisite: Completion of COMP 112.


COMP 150-IDS Internet-Scale Distributed Systems: Lessons from the World Wide Web

The World Wide Web, one of the most important developments of our time, is a unique and in many ways innovative distributed system. This course will explore the design decisions that enabled the Web's success, and from those will derive important and sometimes surprising principles for the design of other modern distributed systems.

We will introduce and draw comparisons with more traditional distributed system designs, including distributed objects, client/server, pub/sub, reliable queuing, etc. We will also study a few (easily understood) research papers and some of the core specifications of the Web. Specific topics to be covered include: global uniform naming; location-independence; layering and leaky abstractions; end-to-end arguments and decentralized innovation; Metcalfe's law and network effects; extensibility and evolution of distributed systems; declarative vs. procedural languages; Postel's law; caching; and HTML/XML/JSON document-based computing vs. RPC.

The purpose of this course is not to teach Web site development, but rather to explore lessons in system design that can be applied to any complex software system.

More detailed course information can be found at http://www.cs.tufts.edu/comp/150IDS/shouldItakeit

Prerequisite: Comp 40 or permission of the instructor.


COMP 150-IOT The Internet of Things

The pervasive and ubiquitous presence of a variety of smart and connected things or objects – such as microcontrollers, sensors, actuators, mobile phones, etc. – has given rise to the new and complex concept, The Internet of Things (IoT). IoT promises to play a central role in smart cities, health tech, retail, home, supply chain, wearables, transportation and other domains. By 2020, the world will have 50 Billion such connected devices, and IoT is expected to contribute more than $7 trillion to the world economy. Industry leaders are looking for skilled engineers that have the breadth of skills---from embedded programing, computer networking,cloud computing and analytics---to design and implement next generation IoT systems.

Prerequisite: Undergraduates must have taken at least COMP 15 and ES 4 to sign up for the undergraduate version of the course COMP 50 or EE 93. You may register for COMP 150 or EE 193 only if you have graduate standing, or have been accepted into the BS/MS program.


COMP 150-ISW Music Apps on the iPad

This course emphasizes developing applications (apps) for musicians on the iPad. The course will culminate in a final project where students would demonstrate their abilities through developing a number of prototype apps. The class will start with the Objective-C programming language and the iOS SDK. Music theory, music synthesis, music notation, and MIDI will also be emphasized early in the course. Students will learn how to access microphone data and low-level audio features, how to write directly to the display (for real-time rendering of the musical notes), utilize the APIs for storage, WebKit, geolocation, push button notifications, networking, data management, and multitouch.

Prerequisite: COMP 40, Musical literacy, Music 10, 11, 64, or permission


COMP 150-IT Information Theory

Information theory as a systematic framework to address fundamental laws and limits of data compression and digital communication. Source coding/data compression; information measures on discrete memory-less sources; practical schemes and algorithms for lossless data compression such as Huffman coding, arithmetic coding, Lempel-Ziv Coding; channel coding for reliable communication and rate distortion for lossy source compression. Advanced topics such as information theoretic cryptography.

Prerequisite: Recommendations: Undergraduate Probability OR EE 104 OR Permission of instructor.


COMP 150-LTD Learning Technology Design

Students in this course will work in teams to learn and apply user-centered design processes in order to create collaborative technologies for learning. Teams will ethnographically observe and interview participants in settings like classrooms, after-school programs, maker spaces, massively multi-player video games, or hospitals, and analyze those data to understand what makes working and learning in those contexts difficult. They will then design and prototype new technologies and processes to assist, and then evaluate those technologies in context. 

We encourage students with a range of different backgrounds, from CS to human factors engineering, and from to sociology to visual arts to take this course. 

Prerequisite: CS/Engineering: Experience programming web, desktop, or mobile applications. Feel free to contact instructor with questions.


COMP 150-MDC Multimedia Data Compression

Data compression plays a much larger part in your life than you probably realize. Every time you view a GIF image you are running an LZW algorithm, while viewing JPEGs requires Discrete Cosine Transforms and Huffman coding. Few people realize that MP3 stands for MPEG-2 Audio Layer III; even fewer are aware that it is based on sub band coding with adaptive quantization. This course will start with the basics of information theory and lossless compression, building up to an appreciation of the components of modern video standards such as MPEG-4. Proficiency in C or C++ (including shift and logical operations) is assumed, along with a willingness to learn the techniques from linear algebra and probability that will be introduced in this course.

Prerequisite: Proficiency in C or C++.


COMP 150-MLE Machine Learning for Ecology and Sustainability

This course will focus on machine learning methods for ecological and environmental study. We will cover three topics: data collection with learning system, data modeling in ecosystem, and policy making for sustainability. Data collection needs machine learning in tasks like noise reduction, sensor data processing, and effort allocation. Data modeling builds statistical/ML models to answer our ecological questions about the ecosystem. Policy making aims to optimize a policy of management through mathematical optimization with uncertainty. In this course, we will mainly read papers from related fields after a short tutorial of machine learning at the beginning. Basic statistics is necessary.

Prerequisite: Previous courses in machine learning or artificial intelligence are helpful but not required.


COMP 150-MMD Mobile Medical Devices and Apps

Team-based projects to design, build, and present a working medical device prototype. Devices are constructed using Android, iOS, and Arduino based components, using appropriate software for designated functionality and user-interface requirements. Project specification with imposed requirements and constraints, sensor/data acquisition, software architecture, hardware integration, working prototype demonstration, final presentation, and project report are course assignments.

Prerequisite: ES03, ES04, COMP11, COMP 15, junior or higher standing, and permission of instructor. This is an elective for the ECE and CS programs only.

To apply for consideration to take this course, please put your information on the sign-up sheet in the CS front office.


COMP 150-MOB Mobile Development

Mobile has an enormous impact on our lives and it is linking virtually the entire human population. Students will work in pairs to design, implement, test, publish, and support mobile applications including web-based APIs. The Android mobile platform will be predominately used. Topics include constraints in mobile development, app lifecycle, permissions model, widgets, layouts, event handling, 2D graphics, networking, geolocation, threat landscape. There will also be an exercise to reverse engineer mobile apps. Lower-level topics including the Android kernel and the radio layer will also be discussed.

Note: Maximum enrollment of 50.

COMP 150-NLP Natural Language Processing

Introduction to natural language processing, the field of computer science that is concerned with the interactions between computers and human languages. We will develop a toolbox of building-block models, algorithms and data structures for the syntactic and semantic processing of natural language data, which will then allow the development of applications such as summarization, question-answering and translation. Hands-on experience via problem sets and final project using the Natural Language Toolkit (NLTK) platform for development in Python.

Prerequisite: Comp 40 required and ES56 or Math 161 recommended.


COMP 150-PLD Programming Language Design

Creating a new programming language requires designers to draw on a wide range of skills: theory to ensure their creation has a well-defined semantics, engineering to ensure they produce an efficient implementation, and aesthetics to ensure the whole is coherent and pleasing to programmers. In this class, we will study the principles and tools that underlie programming language design. We will consider both general-purpose languages, which are languages intended for almost any programming task, and domain-specific languages, which are languages focused on specific tasks. The class will be a combination of lectures and seminar-style discussions about selected academic papers. Students will use the knowledge they acquire to design and implement their own domain-specific programming language.

Prerequisite: Comp 40 and Comp 105.


COMP 150-PR Probabilistic Robotics

This course is a continuation of COMP 131 (Artificial Intelligence) with an emphasis on probabilistic methods that can be applied to robotics. The first part of the course will introduce the Kalman filter and related Bayesian filters for state estimation. These techniques will then be applied to topics such as localization, mapping, planning, and control.

Prerequisite: Comp 131 or permission of instructor. Some knowledge of linear algebra will be helpful.


COMP 150-PRP Probabilistic Programming Languages

In the real world, events are uncertain. To reason about uncertain events, we compute with probability and statistics. For example, if we observe a set of sonar echoes, we can estimate the location of a robot. Making this kind of inference available to a wide audience is the goal of probabilistic programming languages.

Probabilistic programming requires a new kind of language design. It looks like the computation is proceeding forward, from causes to effects, only with the addition of probabilistic choice. But the real computation proceeds backward, from effects to (probable) causes. This class will explore, at a relatively slow pace, the design, semantics, and use of these languages.

Class will meet twice a week and will proceed in these phases:

  1. Review relevant material from COMP 105 (Programming Languages) and from probability

  2. Based on seminal ideas from the professional literature, design and implement a tiny probabilistic language that an solve simple inference problems

  3. Focusing on the interests of the participants, read, analyze, and discuss a few papers from the literature,

  4. Propose, plan, and carry out a half-term project on probabilistic programming

Language design, implementation, and projects may all be undertaken alone or in teams of any size.

Prerequisite:

Prerequisite: COMP 105 (Programming Languages) or graduate standing or instructor’s permission.


COMP 150-RIA Rethinking the Internet Architecture

Today's Internet was designed several decades ago when the usage model was very different than what we find today. This course will revisit the design of the Internet, so it can better address today's challenges and exploit new available opportunities. Specific topics that will be covered include: supporting information centric applications (e.g., Facebook, YouTube, etc), mobility, security, and the emergence of the cloud and Internet of Things (IoT). These topics will be covered through reading and discussing recent research papers. The course will involve a semester long research project.

Prerequisite: COMP 112 or instructor permission


COMP 150-TCS Theory of Compressive Sensing and Its Applications

Sparsity has become a very important concept in recent years in applied mathematics, especially in mathematical signal and image processing, as in inverse problems. The key idea is that many classes of natural signals can be described by only a small number of significant degrees of freedom. This course offers complete coverage of the recently emerged field of compressed sensing, which asserts that, if the true signal is sparse to begin with, accurate, robust, and even perfect signal recovery can be achieved from just a few randomized measurements. The focus is on describing the novel ideas that have emerged in sparse recovery with emphasis on theoretical foundations, practical numerical algorithms, image recognitions, and various related signal processing applications. Students from diverse backgrounds (math, CS, ECE, BME, ME, Medical School, etc.) who are either interested in the subject or want to apply this new theory in their research are encouraged to attend.


COMP 150-TTK Theory & Technologies for K12 Computer Science

Computer Science (CS) is increasingly recognized as a topic worthy of study by all students, not only because of its powerful role in shaping technologies that are central to contemporary society, but also because it offers new possibilities for creative self-expression. However, very few youth currently learn about CS, and CS learners are overwhelmingly white and Asian males. Thus, the central goals of many researchers in CS education at the K-12 levels are to understand how students can learn to think computationally, including how to design new tools and curricula that enable this thinking; and to understand how to create CS learning environments that broaden participation by women and other under-represented groups.

Students in this course will learn about what Computational Thinking (CT) is, how CT relates to CS, current inequities in CS, tools and approaches for enabling CS learning, and specific theories and approaches to making CS accessible to all learners. To do so, students will read papers and books describing theories of what computational thinking is and how it can benefit learners, empirical work describing what the current state of CS education is (including how inequities are manifested in it), as well as theoretical and design studies of how learning environments can be created to broaden participation. Students will do projects using a variety of programmable tools for learning, including tools that are intended to teach about specific scientific ideas through computation and tools that have been purposely constructed to broaden participation in computing through culturally-relevant pedagogies.


COMP 150-TW The Engineering Method of Technical Writing

This course is for graduate and undergraduate students who want to improve their technical writing or who want to learn to write more easily. The course is a full-year, half-credit course, which means that it meets only once per week, and over the course of the year you will earn one full credit.

Participants will read, analyze, and revise their own work, each others' work, and published papers in computer science. The workload is expected to start at 4 to 5 hours per week; as your skills improve, the workload should decline steadily. Grades will be based on in-class exercises and on a portfolio of work done outside of class.

The syllabus and methods for the course are explained at length in my short monograph Learning Technical Writing Using the Engineering Method (http://www.cs.tufts.edu/~nr/pubs/learn.pdf). The books by Williams and Boice will be required.

Prerequisite: This course involves small-group instruction and enrollment is limited; to take the course you must have the consent of the instructor. To obtain the instructor's consent, please send the following information:

  • A short statement of why you are interested in the course and what you hope to get out of it

  • A one-page sample of something you have written on a technical topic

  • Evidence that you can read technical papers in computer science, such as successful completion of at least two of the four courses 40, 105, 160, and 170


COMP 150-UIM User Interfaces for Mobile Platforms

UI programming and design for mobile platforms, studying and mastering the interaction models and programming environments for mobile platforms (iOS, Android, Windows Mobile, Firefox OS among others). This is a hands-on design and development class using mobile devices and emulators, and students will develop their own mobile applications using mobile development toolkits. Topics such as mobile product design, development methods and testing (including usability testing) for developing commercial products will also be covered.

Prerequisite: Comp 40 required and Comp 86 requested, or permission of instructor.


COMP 150-VLSI Introduction to VLSI CAD Algorithms

Introduction to VLSI CAD Algorithms will be a class to learn the challenges and algorithms of CAD for VLSI – i.e., learn to use algorithms from computer science to automatically create and validate VLSI circuits. We will use techniques such as DFS and BFS search, dynamic programming, and branch & bound to solve problems in VLSI timing, logic/layout synthesis and post-silicon test. Depending on student interest, we may also apply the same algorithms to other fields. This class will not use commercial CAD tools (though we will have guest lectures from people in the local CAD industry). Prerequisites are COMP160, or graduate standing, or consent of the instructor.

Prerequisite: Completion of COMP 160 or graduate standing.


COMP 150-12 Topics in Visual Analytics

Visual analytics is the science of combining interactive visual interfaces and information visualization techniques with automatic algorithms to support analytical reasoning through human-computer interaction. People use visual analytics tools and techniques to synthesize information and derive insight from massive, dynamic, ambiguous, and often conflicting data, and to communicate their findings effectively for decision-making. This course will serve as an introduction to the science and technology of visual analytics and will include lectures on both theoretical foundations and application methodologies. The goals of this course are for students to (1) develop a comprehensive understanding of this emerging, multidisciplinary field, and (2) apply that understanding toward a focused research problem in a real-world application or a domain of personal interest.

Prerequisite: Prerequisite: COMP 15; Some experience with user interface development would also be helpful but not required (e.g., COMP 106, COMP 175, COMP 150-VIS)


COMP 160 Algorithms

Introduction to the study of algorithms. Strategies such as divide-and-conquer, greedy methods, and dynamic programming. Graph algorithms, sorting, searching, integer arithmetic, hashing, and NP-complete problems.

Prerequisite: COMP 15 and COMP/MATH 22 or 61.


COMP 163 Computational Geometry

(Cross-listed as MATH 163.)Design and analysis of algorithms for geometric problems. Topics include proof of lower bounds, convex hulls, searching and point location, plane sweep and arrangements of lines, Voronoi diagrams, intersection problems, decomposition and partitioning, farthest-pairs and closest-pairs, rectilinear computational geometry.

Prerequisite: COMP 160 or permission of the instructor


COMP 165-01 Cryptography

Introduction to private and public-key cryptography as well as pseudo-randomness. Topics include: cryptographic protocols using block ciphers. Methods for key exchange, message authentication, and digital signatures. Modern cryptographic problems regarding secure voting, secret sharing, and digital cash.

Prerequisite: COMP 15 and COMP/MATH 22 or 61


COMP 167 Computational Biology

Computational challenges in molecular biology, including sequence alignment and comparison, genomic annotation, micro array data analysis, and proteomics. Underlying computational techniques such as dynamic programming, hidden Markov models, statistical analyses, and search and optimization procedures. Prerequisites: Comp15 and at least one CS course numbered 100 or higher.

Prerequisite: Comp15 and at least one CS course numbered 100 or higher.


COMP 170 Computation Theory

Models of computation: Turing machines, pushdown automata, and finite automata. Grammars and formal languages including context-free languages and regular sets. Important problems including the halting problem and language equivalence theorems.

Prerequisite: COMP 15 and COMP/MATH 22 or 61.


COMP 171 Human-Computer Interaction

Introduction to human-computer interaction, or how computers communicate with people. Methodology for designing and testing user interfaces, interaction styles (command line, menus, graphical user interfaces, virtual reality), interaction techniques (including use of voice, gesture, eye movement), design guidelines, and user interface management software system. Students will design a small user interface, program a prototype, and test the result for usability.

Prerequisite: COMP 15


COMP 175 Computer Graphics

This course explores the fundamentals of computer graphics, including representing digital images, 2D rasterization and anti-aliasing, 3D rendering via ray casting, ray tracing and radiosity, viewing transformations, 3D shape representation, and an introduction to modeling and computer animation. Assignments and projects require a good working knowledge of the C programming language.


COMP 177 Visualization

Visualization as a tool for data analysis, recall, inference, and decision-making. Tools for visual description and presentation. Principles of effective visualization, including data-visual mapping, interaction techniques, color theory, cognitive and perceptual psychology, and human factors of visual depictions of data.

Prerequisite: Comp15 and Comp61, or permission of instructor.


COMP 181 Compilers

Translation and implementation of programming languages. Parsing, code generation, and optimization. Compiler design projects for simple block-structured programming languages are used to illustrate the concepts and methods.

Prerequisite: COMP 40, COMP 105, and COMP 170.


COMP 193 Directed Study

Guided study of an approved topic. Credit as arranged.

Prerequisite: Consent.


COMP 193-ALB Algorithmic Lower Bounds: Fun with Hardness Proofs

This class takes a practical approach to proving problems can't be solved efficiently (in polynomial time and assuming standard complexity-theoretic assumptions like P != NP). We focus on reductions and techniques for proving problems are computationally hard for a variety of complexity classes. Along the way, we'll create many interesting gadgets, learn many hardness proof styles, explore the connection between games and computation, survey several important problems and complexity classes, and crush hopes and dreams (for fast optimal solutions).

Topics include NP-completeness (3SAT and all its variations, 3-partition, Hamiltonicity, 2D/3D geometric problems); PSPACE, EXPTIME, EXPSPACE; Games, Puzzles, and Computation (Tetris, Nintendo games: Super Mario Bros., The Legend of Zelda, Metroid, Pok?mon, ..., sliding blocks and Rush Hour, Constraint Logic, Sudoku and other Nikoli pencil-and-paper games, Chess, Go, Othello, and other board games); Inapproximability (PCP theorem and OPT-preserving reductions, APX-hardness e.g. Vertex Cover, set-cover hardness, group Steiner tree, k-dense subgraph, label cover and Unique Games Conjecture, Independent set); fixed-parameter intractability (parameter-preserving reductions, W hierarchy, clique-hardness); 3SUM-hardness (n^2 and the Exponential Time Hypothesis); counting problems (#P); solution uniqueness (ASP); game theory (PPAD); existential theory of the reals; undecidability.

Prerequisite: Consent of instructor.


COMP 197 Honors Thesis

To be announced.

Prerequisite: To be announced.


COMP 199 Internship Computer Science

Prerequisite: Consent.


CSS 93 Bioinformatics Inquiry through Sequencing


ES 93 Simple Robotics

Introduction to robot construction, programming, computer vision, event-based programming, artificial intelligence, and elementary controls. Basic principles of robotics for students with minimal or no prior programming/building background. In-class competition-based laboratories and hands-on group projects using the LEGO MINDSTORMS platform.


Back to Main Courses Page