Learn How to Program, Using the Python Language: 3-Week Winter School for Duke Students

Python Practical Programming Winter School (P3-WS)
December 1–18, 2020

The Duke Center for Computational Thinking is pleased to announce a 3-week winter school for Duke students to learn how to program, using the Python language. Learners will engage with the content in a virtual format, primarily in asynchronous modules paired with real-time office hours. This course takes a practical approach in using expert tools with a focus on programming fundamentals.

Enroll now at duke.is/K3SR8V



In the digital age, it isn’t just software developers who need to be programmers. Professionals in many other domains need computational skills to accomplish their work. This winter school is designed to train learners to think computationally, devise an algorithm, and then translate that algorithm to code in the Python language. Learners will apply the Seven Steps to solve programming problems in a structured way. The Seven Steps is a structured approach introduced in the textbook All of Programming, co-authored by one of the P3-WS instructors (Professor Hilton). This approach has been the foundation of several graduate programming courses at Duke and two MOOCs in Coursera.

We start from the beginning: devising an algorithm. Many courses advocate this step, but this one breaks it down into a process anyone with sufficient domain knowledge about their problem can do.

Next is translating the natural language algorithm to code. Learners will become familiar with how to read code before they write it, and do draw a careful picture of how each line of code changes the state of a program. Each new programming construct is related to the algorithmic idea it enables the programmer to implement.

In addition to understanding of the semantics of Python code, learners will use expert tools like Linux, Emacs, and Git. They will also learn skills for extensive testing and debugging.

Learning to program with Python is valuable because learners are quickly able to start solving computational problems. Python is a popular choice for programming, both within software engineering and in other disciplines, and it provides a useful introduction to many key programming concepts with its clean syntax, data structures, and object oriented framework.

Professors Andrew “Drew” Hilton and Genevieve Lipp will co-lead the P3-WS. They have extensive experience teaching programming in the Duke Electrical and Computer Engineering (ECE) department, as well as online through their Coursera specialization, Introduction to Programming in C, (also instructed by Anne Bracy).

Students who successfully complete the P3-WS can choose to have it added to their transcript.

Who Should Attend

This learning experience is aimed at Duke students who want to learn programming fundamentals in a condensed schedule. This “bootcamp” format is especially accessible to programming novices. However, there is also much to learn for anyone who is new to Python or anyone who wants to learn this unique approach and gain new skills.

Duke students at any level of education are welcome, including undergraduates, graduate students, professional students, and clinical trainees. Duke students graduating in December 2020 are also eligible to attend.

Program Format

The course is a three-week long, virtual, primarily asynchronous learning experience. Learners will interact with the content in a variety of modalities. They will read, watch videos, and answer conceptual questions on a private instance of a Coursera course. Programming assignments will be released and auto-graded on a custom mastery learning platform, hosted on a Duke virtual machine.

When students need help, they will attend virtual office hours with the instructors and teaching assistants, who will help them think through problems and write, understand, and debug code by drawing lots of pictures. While it would be theoretically possible to complete the work without ever attending office hours, students will be able to learn deeper and faster with synchronous support and help from instructors, and it will allow them to also engage with other students in the P3-WS.

This format is based on the successful program created by these instructors for the Duke Master’s of Interdisciplinary Data Science (MIDS) programming bootcamp. The P3-WS will use a robust, well-established virtual environment and structure for learners.


The course content will be organized into logical units of approximately one week, but each learner will have the ability to complete the curriculum at their own pace.

Virtual office hours will be held as live interactive sessions Tuesday through Friday of each week, generally between 10:00–11:00 AM and 1:00–3:00 PM Eastern (New York) time. Although optional, learners are highly encouraged to attend.

The first week (December 1–4) focuses on introducing computational thinking and foundational
Python topics.

  • Devising an algorithm
  • Expert tools
  • Python: variables, expressions, functions, conditionals, loops, tuples

The second week (December 8–11) focuses on data structures in Python, testing, and debugging.

  • Testing
  • Debugging
  • Python: object orientation, lists, sets, dictionaries, exceptions, file I/O

The third week (December 15–18) ties the content in the first two weeks together with a project. Piece by piece, learners will write a Monte Carlo simulation of a poker game outcome, given a description of the cards already dealt. This involves writing classes (for a Card, a Deck, and a data structure to hold future cards that will be dealt), reading and parsing input from a file, doing the evaluation to rank a poker hand, putting these aspects together, and writing comprehensive test cases.

Program Details: Registration and Cost

The P3-WS registration is open to Duke students, including undergraduates, graduate students, professional students, and clinical trainees. Registration will close on Wednesday, November 25.

Duke students (with a valid student ID) will pay a course fee of $100, payable through the registration site. All fees are non-refundable.

A limited number of scholarships are available. We especially encourage individuals to apply who might have hardship or would find it difficult to budget the course fee. Applications for scholarships will also close on Wednesday, November 25.

Update as of October 20, 2020: Due to the strong response, we have filled all available scholarships and will need to close the application process early.

The cost of this program is supported thanks to sponsorship from the Duke Center for Computational Thinking (CCT).


Professor Drew Hilton, PhD

Andrew “Drew” Hilton, PhD

Andrew Hilton is an Associate Professor of the Practice in the Department of Electrical and Computer Engineering in the Pratt School of Engineering at Duke University. He has taught at Duke since 2012, and prior to that he was an advisory engineer at IBM. Among the courses Professor Hilton teaches at Duke is ECE 551, an intensive introduction to programming course that successfully prepares graduate students with no programming experience to learn programming and go on to complete more advanced programming courses. In recognition for excellence in teaching in the Pratt School of Engineering at Duke, Professor Hilton received the Klein Family Distinguished Teaching Award in 2015. Professor Hilton holds a PhD in Computer Science from the University of Pennsylvania.

Professor Genevieve Lipp, PhD

Genevieve Lipp, PhD

Genevieve Lipp is an Assistant Professor of the Practice in the Electrical and Computer Engineering and Mechanical Engineering and Materials Science departments at Duke University. She teaches courses including programming in C++, dynamics, and control systems. Professor Lipp worked previously in the Center for Instructional Technology at Duke and is passionate about using technology to promote learning. She has a Ph.D. in mechanical engineering in the field of nonlinear dynamics, and she earned a B.S.E. in mechanical engineering and a B.A. in German as an undergraduate at Duke University.