Spring 2020 Course Bulletin

New! COMPSCI 102 Interdisciplinary Computing

COMPSCI 102 is a version of COMPSCI 101 that explores the concepts from 101 in the context of natural science, social science, engineering and the humanities. There is a required lab associated with COMPSCI 102.

Course Description:
Introduction to the practices and principles of computer science and programming and their impact on and potential to change the world motivated by problems drawn from natural science, social science, engineering, and humanities. Programming using Python, appropriate libraries, and APIs to process, analyze and visualize data. Design, implementation, and analysis emphasizing abstraction, encapsulation, and problem decomposition.

Not open to students who have taken COMPSCI 101. No previous programming experience required.

New! COMPSCI 290.02 Introduction to Mobile Programming

Prerequisite: CompSci 201 and CompSci 250. The course is Mon/Wed at 4:40pm.

Explores the world of mobile devices & mobile application development. Based on Apple’s development platform Xcode and the target environment being iOS devices – iPhones/ iPads. Real world context focused on the common programming patterns and frameworks in use in the mobile industry today. Creation of standalone apps, apps connected to other systems, apps connected to the cloud. Covers fundamentals essential to understanding all aspects of app development. Taught in a team environment. Students required to present their project proposals and deliver an app as a final project.

This course is different than CompSci 307/308. After taking this course you can still take CompSci 307 or 308. You can also take this course if you have already taken CompSci 307 or 308.

If you have questions about the course, you can contact the instructor hugh.thomas@duke.edu

COMPSCI 310 Introduction to Operating Systems is not offered in Spring 2020.

Please recall that as of Fall 2019, we have a more flexible “Systems” requirement in our BS and BA requirements. Instead of the requirement to take COMPSCI 310 (Introduction to Operating Systems), you may choose one from a list of designated systems courses (including COMPSCI 310 itself). Check the updated BS / BA requirements for details.

In Spring 2020, CS316, CS350, and CS356 will fulfill the Systems requirement.

CompSci IDMs and Concentrations

In Fall 2019, we added new IDM’s, and Concentrations. We have updated the wording for concentrations since then. You can see the new pages for

Renumbering CompSci 223 (old) → CompSci 323 (current)

Computational Microeconomics

In recent years, there has been a surge of interaction between computer scientists and economists. This interaction is driven both by necessity and opportunity. On the one hand, as computer systems become more interconnected, multiple parties must interact in the same environment and compete for scarce resources, which necessarily introduces economic phenomena. On the other hand, in the past, economic mechanisms (such as auctions and exchanges) have been designed to require very limited computing and communication resources, as they would otherwise be impractical. These days, computation and communication pose much less of a constraint, which presents an opportunity to create highly efficient, computationally intensive mechanisms. 

In the first part of the course, we will study the design of expressive marketplaces. In such marketplaces, participant can express nontrivial valuations over outcomes: for example, a participant may express that a complete travel package to Las Vegas including a flight, hotel reservation, and entertainment is worth $700 to her, but any incomplete package is worth $0. This can greatly increase market efficiency, but clearing the market (deciding on the final outcome) becomes computationally hard. We will cover techniques for solving these problems.

In the second part of the course, we will study game theory. Game theory studies how to act optimally in strategic settings where each party's utility (happiness) depends on the actions of other parties. We will cover such definitions of optimality as well as techniques for computing optimal actions. We will study applications including bidding in auctions, building computer poker players, and security. 

In the third part of the course, we will draw on the first two parts and study how to design market mechanisms that are optimal when we take into account that agents will behave strategically (game-theoretically). Again, we will cover techniques for computing the optimal mechanisms.


Required: 100-level Statistics AND 100-level Mathematics AND at least one of the following: Compsci 230; 200-level Mathematics; 200-level Statistics. (It is recommended to have all of these, or equivalent.)

Renumbering CompSci 270 (old) → CompSci 370 (current)

Intro to Artificial Intelligence

Course Description pending.

Upper-level Electives offered for Spring 2020:

  • 216 Everything Data (Fain)
  • 290.01 Data Science Competition (Rudin)
  • 290.02 Introduction to Mobile Programming (Thomas)
  • 307 Software Design and Implementation (Duvall)
  • 308 Advanced Software Design and Implementation (Duvall)
  • 316 Intro to Database Systems (Roy)
  • 323 Computational Microeconomics (Conitzer)
  • 342 Information and the Internet (Astrachan)
  • 350 Digital Systems (Board)
  • 356 Computer Network Architecture (X. Yang)
  • 370 Intro to AI (Parr)
  • 512 Distributed Systems (Chase)
  • 520 Numerical Analysis (Sun)
  • 527 Computer Vision (Tomasi)
  • 553 Compiler Construction (Hilton)
  • 561 Computational Sequence Biology (Gordan)
  • 571 Probabilistic Machine Learning (Mukherjee)
  • 590.1 Topics: Seminar in Computational Biology (Donald)
  • 590.2 Topics: Molecular Assembly and Comp. (Reif)
  • 590.4 Topics: Edge Computing (Gorlatova)
  • 590.5 Topics: Statistical Methods Experimental Design (Cummings)

Previous course bulletins: