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

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
Computing for Data Analysis (edX) EdX
Georgia Institute of Technology,GTx

Computing for Data Analysis (edX)

A hands-on introduction to basic programming principles and practice relevant to modern data analysis, data mining, and machine learning. The modern data analysis pipeline involves collection, preprocessing, storage, analysis, and interactive visualization of data. In the course, you’ll see how computing and mathematics come together.

Aug 24th 2026
13-24 Weeks
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
Kotlin for Android Developers (Udacity) Udacity
Udacity

Kotlin for Android Developers (Udacity)

Convert an Android app from Java to Kotlin. In this course, Aaron Sarazan, Lead Software Engineer at Capital One and a leading advocate for Kotlin, demonstrates how to take a basic Android app in Java and convert it to Kotlin, teaching you key features of the Kotlin programming language along the way. This is an efficient, fast-paced introduction to Kotlin for experienced Java programmers.

Self Paced
Self-Paced
Intro to HTML and CSS (Udacity) Udacity
Udacity

Intro to HTML and CSS (Udacity)

In this course, you'll learn the fundamentals web development, along with best practices and professional problem-solving techniques using Developer Tools. Throughout this course, you'll learn about the underlying structure of the web - HTML. You'll learn how to use this tree-like structure to create websites. You'll also learn how to apply styling to a website through CSS. You'll learn about CSS syntax, selectors, and units. Along the way, you'll also learn about code editors and a browser's Developer Tools.

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