Guide for First Year Students

We offer four courses in 2016-2017 that can be a student's first course in computer science: Compsci 92, 101, 89s, and 201. Compsci 101 and 201 are offered in both the fall and the spring. Compsci 89s is a seminar for first-semester freshmen only and it is only offered in the fall. Compsci 92 is only offered in the spring.

Students interested in a background in Computer Science, exploring the possibility of a major, minor, or simply wanting to understand the field typically choose Compsci 101 as the first course. No previous programming experience or understanding of computer science is required.

Compsci 101

We currently use the programming language Python in this course. There is a required 75 minute lab associated with Compsci 101.

Course Description:

Introduction to the practices and principles of computer science and programming and their impact on and potential to change the world. Algorithmic, problem-solving, and programming techniques in domains such as art, data visualization, mathematics, natural and social sciences. Programming using high-level languages and design techniques emphasizing abstraction, encapsulation, and problem decomposition. Design, implementation, testing, and analysis of algorithms and programs. No previous programming experience required

Students with credit via the AP exam can get credit for Compsci 101 and take Compsci 201. Students without AP credit, but with experience in programming and Computer Science, can talk to the Director of Undergraduate studies (dus at cs.duke.edu) about whether taking Compsci 201 as the first course is appropriate. Students with a full course of programming in high school, regardless of whether the course is an AP course, succeed and thrive in Compsci 201 -- it's often a better course than 101 for those with programming experience. It's possible for students with programming experience to take Compsci 201 without getting credit for Compsci 101.

Compsci 201

We currently use the programming language Java in this course. There is a required 75 minute lab associated with Compsci 201.

Course Description:

Analysis, use, and design of data structures and algorithms using an bject-oriented language like Java to solve computational problems. Emphasis on abstraction including interfaces and abstract data types for lists, trees, sets, tables/maps, and graphs. Implementation and evaluation of programming techniques including recursion. Intuitive and rigorous analysis of algorithms.

Occasionally students with deep and extraordinary experience can place out of Compsci 201. This requires a conversation with the Director of Undergraduate Studies, completion of a large programming project in Java, and demonstration of understanding aspects of algorithm analysis that typically are beyond what students cover in most high school courses.

Compsci 89s

A Gentle Introduction to Creating Mobile Apps is based on the Android platform and utilizes MIT's App Inventor 2 visual programming language. There are hands-on app labs included in most class sessions.

Course Description:

This course explores the creation of apps for mobile devices. Students will learn how to access the world of mobile services and applications as creators, not just consumers. They will learn to create entertaining and socially useful apps that can be shared with friends and family. In addition to learning to program and how to become better problem solvers, students will also explore the exciting big ideas of computer science from the perspective of mobile computing and its increasingly important effect on society.

Compsci 92

Compsci 92 is designed for those who want to understand how computer science and programming influence and affect business, legal, policy, and social aspects of our world. This is not a course about programming, but students do learn rudimentary programming as part of the course. There is a required two hour lab associated with Compsci 92.

Course Description:

Study of standards, software, policy, and the impact of computing and the Internet on science and society. Analysis and creation of software and other computational and digital artifacts to solve problems in many domains using different approaches, including data mining, web-based communication, algorithmic and data-driven approaches, crowd-sourcing. Use of real-world problems in understanding evolving international standards. Analysis of tradeoffs in ethical, economic, and technical areas.