Course Schedule
COURSE SCHEDULE: summer 2018
COMP 11-B
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.

Laney Strange
MW 4:30-8:00p
Halligan Hall 111B
COMP 15-C
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.
Partha Biswas
W 6:00p-9:30p
Halligan Hall 111A
COMP 20-A
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.
Ming Chow
MTWRF 12:00a-12:00a
Online
COMP 61-A
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.
Srdjan Divac
MTR 1:00-3:30
Anderson Hall 208
COMP 116-B
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.
Ming Chow
MTWRF 12:00a-12:00a
Online
COMP 131-A
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.
Fabrizio Santini
TR 6:00p-8:30p
Halligan Hall 108
COMP 150-B
Algorithms and Data Structures 2

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.
Greg Aloupis
MTWRF 12:00a-12:00a
Online
COMP 150-BB
Exploration of Computer Science Ethics

In 1976, MIT computer science professor Joseph Weizenbaum published Computer Power and Human Reason, in which he raised a fundamental and practical philosophical question for computer scientists: How to distinguish between what we could do and what we should do? Even then, the growing power and impact of computing was making this an increasingly relevant question for computing professionals. Today, that power and that impact is of a degree and kind that was almost unimaginable 42 years ago and, as a result, the question is even more profound now than it was then.

Computing is now far more pervasive and embedded than when Weizenbaum wrote. It permeates our lives and environment. Cars are now computing platforms on wheels, with all the safety, security, and privacy issues that fact brings with it. Inscrutable algorithms make crucial decisions about people with and without human participation, generating concerns about transparency and fairness. Pocket computers (aka smartphones), particularly in combination with social media, are being viewed as potential threats to mental health. Machine learning and other advances threaten to automate away many jobs. And on it goes.

These kinds of issues do not lend themselves to easy answers. This course will not, nor does it aim to, provide students with The Answer to any of them. Rather, it aims to equip practitioners with contextual knowledge (including some relevant history) and conceptual tools (including ethical frameworks) for thinking constructively—both as computing professionals and as members of society—about challenging ethical and policy issues in which information technology plays a key role. As part of this process, we will apply this thinking to a number of relevant historical and contemporary case studies. Upon completing this course, students will be in an improved position to consider and act upon the difference between could and should in this time of extraordinary technological change.

Prerequisite: This course assumes a basic knowledge of computer science, software engineering, and/or information systems, such as one might obtain from an introductory or survey course or from practical experience.
Stuart Shapiro
COMP 160-A
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.
Greg Aloupis
MTWRF 12:00a-12:00a
Online
COMP 170-A
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.
Harry Mairson
MW 6:00p-9:30p
Halligan Hall 111B