Design of Computer Programs (Udacity)

Offered by Udacity,
Design of Computer Programs (Udacity)

Programming Principles. Understanding how to approach programming problems and devise a solution is an essential skill for any Python developer. In this course, you’ll learn new concepts, patterns, and methods that will expand your coding abilities from programming expert, Peter Norvig.

Class Deals by MOOC List - Click here and see Udacity's Active Discounts, Deals, and Promo Codes.

Move along the path towards becoming an expert programmer! In this class you will practice going from a problem description to a solution, using a series of assignments. During office hours segments, Peter will also share his own personal tips and tricks for approaching programming problems - and his techniques may surprise you!

What You Will Learn

Lesson 1
Winning Poker Hands

  • Steps of the design process and developing for clarity and generality.
  • Arguments for program correctness and experimentation and simulation.
  • Design tradeoffs; Simplicity and Clarity. Decomposition and composability.

Lesson 2
Back of the Envelope

  • Back of envelope calculations: When to use brute force and when to be clever.
  • The Zebra puzzle: Generator expressions
  • Permutations and combinations.
  • Cryptarithmetic; Recursive and wishful thinking; Longest palindrome substring algorithm.

Lesson 3
Regular Expressions, other languages and interpreters

  • Defining the language of regular expressions and Interpreting the language.
  • Defining the set of strings matched by a regular expression
  • Other languages.

Lesson 4
Dealing with complexity through search

  • Search: finding your way with a flashlight or boat.
  • Analyzing the efficiency of an algorithm.
  • Recurrence relations and Matching data types with algorithms.

Lesson 5
Dealing with uncertainty through probability

  • Probability: the game of Pig.
  • Maximizing expected utility to optimize strategy.

Lesson 6
Word Games

  • Managing complexity.
  • Large sets of words.
  • Appropriate data structures.

Lesson 7
Conclusion

  • Interviews and practice exam.

Prerequisites and Requirements
This course is intended for experienced Python programmers; students should be familiar with the Python syntax, as well as familiar with the following programming concepts: data structures, basic algorithms, and lambda functions.This course is intended to challenge you. Be ready to struggle (and learn)!

Go to Class
MOOC List is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

Related Courses

Website Performance Optimization (Udacity) Udacity
Udacity,Google

Website Performance Optimization (Udacity)

The Critical Rendering Path. You will learn how to optimize any website for speed by diving into the details of how mobile and desktop browsers render pages. In this short course, you’ll learn about the Critical Rendering Path, or the set of steps browsers must take to convert HTML, CSS and JavaScript into living, breathing websites. From there, you’ll start exploring and experimenting with tools to measure performance and simple strategies to deliver the first pixels to the screen as early as possible.

Self Paced
Self-Paced
Authentication & Authorization: OAuth (Udacity) Udacity
Udacity

Authentication & Authorization: OAuth (Udacity)

Implementing Web Security with OAuth 2.0. As a Python programmer, leveraging Flask allows you to quickly and easily build your own web applications. But before you share your apps on the Internet you should protect your users' data, ensuring information stored on your site is safe from unwanted manipulation. You could implement web security and permissions on your own, but relying on trusted providers is a faster, safer, and easier way to allow users to login to your application - without having to create and maintain another account, profile, and password.

Self Paced
Self-Paced
Regression Modeling in Practice (Coursera) Coursera
Wesleyan University

Regression Modeling in Practice (Coursera)

This course focuses on one of the most important tools in your data analysis arsenal: regression analysis. Using either SAS or Python, you will begin with linear regression and then learn how to adapt when two variables do not present a clear linear relationship. You will examine multiple predictors of your outcome and be able to identify confounding variables, which can tell a more compelling story about your results. You will learn the assumptions underlying regression analysis, how to interpret regression coefficients, and how to use regression diagnostic plots and other tools to evaluate the quality of your regression model. Throughout the course, you will share with others the regression models you have developed and the stories they tell you.

Jun 5th 2026
4 Weeks
Algorithms, Part I (Coursera) Coursera
Princeton University

Algorithms, Part I (Coursera)

This course covers the essential information that every serious programmer needs to know about algorithms and data structures, with emphasis on applications and scientific performance analysis of Java implementations. Part I covers elementary data structures, sorting, and searching algorithms. Part II focuses on graph- and string-processing algorithms.

Jun 1st 2026
5-12 Weeks
Objective-C for Swift Developers (Udacity) Udacity
Udacity

Objective-C for Swift Developers (Udacity)

This course is designed to teach students how to understand and identify the differences between the Objective-C and Swift programming languages, and especially, how to rewrite from the former to the latter. Understanding communications between the two languages—called "interoperability"—is becoming more and more important for developers, particularly as we prepare for the arrival of Swift 3.0.

Self Paced
Self-Paced
Learn Swift Programming Syntax (Udacity) Udacity
Udacity

Learn Swift Programming Syntax (Udacity)

From Optionals to Closure Expressions. Swift is a language created by Apple specifically for iOS and OS X development. It’s fast, concise, and comes with tools which make it easier than ever to visualize one's code. This course focuses on the syntax of the Swift programming language. By the end of the course, students should be able to apply Swift essentials to building iOS apps and employ Swift's more unique elements, like optional types and switch statements, with confidence.

Self Paced
Self-Paced
Object Oriented Programming in Java (Udacity) Udacity
Udacity

Object Oriented Programming in Java (Udacity)

Build Interactive Java Programs. This course will introduce you to some of the most powerful programming concepts in Java, including: objects, inheritance and collections. You will learn how to use these object-oriented programming concepts in code examples, discover how these concepts are used in applications that require user input, and understand the benefits of mastering these concepts in Java.

Self Paced
Self-Paced
What is Programming? (Udacity) Udacity
Udacity

What is Programming? (Udacity)

A Coding Dictionary. The world of development can be daunting with all of its lingo and jargon. This course will help demystify the cryptic terms that developers use on a daily basis. You'll learn about how the web functions, what a programmer does each day, why version control is so important, and how communication on the internet happens.

Self Paced
Self-Paced
HTML5 Canvas (Udacity) Udacity
Udacity

HTML5 Canvas (Udacity)

From Pixels to Animation! Canvas is an HTML5 element which gives you drawable surface inside your web pages you can control with JavaScript. Powerful enough to use for compositing images and even creating games. In this course, through several sample projects, you’ll learn how to use the canvas; how to make compositions using shapes, images, and text; how to create effects and filters on images and how to create animations.

Self Paced
Self-Paced