Design of Computer Programs

Provided by:
9/10 stars
based on  21 reviews
Provided by:
Cost FREE
Start Date On demand

Key Concepts

lightbulb
We've created a summary of key topics covered in this course to help you decide if it's the right one for you. Click individual badges to see more courses on the same topic.

Course Details

Cost

FREE

Upcoming Schedule

  • On demand

Course Provider

Udacity online courses
Udacity gives students the opportunity to create hands-on projects that can be put into their portfolios and used to demonstrate their skills to future employers. You'll have a personal coach who helps provide feedback on your assignments and projects to assist you in reaching your goals and staying on track in your online classes. Throughout your education experience, you'll be able to track your development, complete in-class projects, have access to interactive exercises and videos and ...
Udacity gives students the opportunity to create hands-on projects that can be put into their portfolios and used to demonstrate their skills to future employers. You'll have a personal coach who helps provide feedback on your assignments and projects to assist you in reaching your goals and staying on track in your online classes. Throughout your education experience, you'll be able to track your development, complete in-class projects, have access to interactive exercises and videos and earn a verified certificate at the end of the course as proof of all that you've learned. You'll be learning from knowledgeable professors across various schools and parts of the globe. Learn about computer science from Dave Evans, an instructor at the University of Virginia, or delve into app development with Samantha Ready, a Developer Evangelist at Salesforce.com.

Provider Subject Specialization
Sciences & Technology
98 reviews

Course Description

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.
Design of Computer Programs course image
Reviews 9/10 stars
21 Reviews for Design of Computer Programs

Ratings details

  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars
  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars
  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars

Rankings are based on a provider's overall CourseTalk score, which takes into account both average rating and number of ratings. Stars round to the nearest half.

Sort By
Herman Sheremetyev profile image
Herman Sheremetyev profile image
10/10 starsCompleted
  • 1 review
  • 1 completed
4 years, 11 months ago
Not to take anything away from many of the quality courses available, but CS212 is probably the single best course on Udacity, Coursera and EdX combined (I've probably gone through about 20 courses on all these platforms so far). Watching Peter Norvig's solutions is a mind-expanding experience and I learned a ton from watching this course, several times over, and working through the problems. The videos are well paced, with lots of quizes in between, and always include the all-important solutions. Comparing my solutions to Peter Norvig's has been.. illuminating. The assignments are tough but fair, and solvable based on things you learned in the preceding lessons. I've been writing Python for years, both professionally and for side-projects, and I loved the style of the code shown in this class. Many educational resources drive you toward the typical over-engineered object oriented approach. While this class shows you beautifully func... Not to take anything away from many of the quality courses available, but CS212 is probably the single best course on Udacity, Coursera and EdX combined (I've probably gone through about 20 courses on all these platforms so far). Watching Peter Norvig's solutions is a mind-expanding experience and I learned a ton from watching this course, several times over, and working through the problems. The videos are well paced, with lots of quizes in between, and always include the all-important solutions. Comparing my solutions to Peter Norvig's has been.. illuminating. The assignments are tough but fair, and solvable based on things you learned in the preceding lessons. I've been writing Python for years, both professionally and for side-projects, and I loved the style of the code shown in this class. Many educational resources drive you toward the typical over-engineered object oriented approach. While this class shows you beautifully functional Python that you probably didn't even know existed, peeling away all the silly layers of abstraction and getting down to the heart of each problem in a clear and direct manner, building up amazingly clean, testable and flexible solutions. If your first thought when you face a programming problem is to start writing a class then you'll probably be in for a shock. Otherwise I think you should be in for a real treat, as you get to watch a true master show you how to write great code. Big thank you to Peter Norvig for putting it together and I really hope he decides to offer another class soon. In the meantime I'll keep re-watching the videos from this class and finding new nuggets of awesomeness that are so plentiful within.
Was this review helpful? Yes11
 Flag
Barry Becker profile image
Barry Becker profile image
10/10 starsCompleted
  • 1 review
  • 1 completed
1 year, 1 month ago
This is the best CS course I have ever taken. I am a professional software developer, but had no python experience when I first took this course a few years ago. I loved Professor Norvig's informal approach and speaking style. The problems really made you think, but were reasonable given explanations and prior exercises. I enjoyed the course so much, I am now taking it again along with my son and other students that I invited to join for the experience.
Was this review helpful? Yes0
 Flag
Student profile image
Student profile image

Student

10/10 starsCompleted
1 year, 2 months ago
Design of Computer Programs was an amazing experience and is a must-have. Mr Norvig shares in-depth knowledge about software design which will teach something even to the most experienced developers.
Was this review helpful? Yes0
 Flag
Student profile image
Student profile image

Student

10/10 starsCompleted
2 years, 5 months ago
This course is now self-paced and described as 'advanced'; I took it as a paced follow-up to CS101. Unlike the person who gave it 1 star above, I managed to complete it, without prior coding experience. I do have a maths background. I found it interesting, engaging and well-taught. I also found it very, very, very hard, and I put a great deal of time into it. But I'm doing other coding classes now and I keep finding that the things I learnt in CS212 are applicable to a whole range of problems.
Was this review helpful? Yes0
 Flag
brian c profile image
brian c profile image
10/10 starsCompleted
  • 3 reviews
  • 3 completed
2 years, 9 months ago
This is hands down the best MOOC I've taken. Norvig walks you through a variety of complex problems that challenge even an advanced programmers taste. It helps you write good, efficient, code using some of Python's advanced features. I would not recommend this to someone who just took an Intro to CS course. Take this course after you have some solid programming experience (3-4 classes in)
Was this review helpful? Yes0
 Flag
Ah Choo profile image
Ah Choo profile image
10/10 starsCompleted
  • 1 review
  • 1 completed
2 years, 11 months ago
# This course is a master class. def doCourse(you_like, you_are): if you_like == 'like programming' : do_it = True if you_like == 'lazy' : do_it = False if you_are >= good : Peter_Norvig[0] += ' will test you!' if you_are >= dumb : Peter_Norvig[0] += ' will teach you ;)' return do_it Peter_Norvig = ['Peter Norvig'] (good, dumb) = [1,0] you_like = 'like programming' #add value you_are = dumb #add value print Peter_Norvig if doCourse(you_like, you_are) else None
Was this review helpful? Yes0
 Flag
Enrico Bacis profile image
Enrico Bacis profile image
10/10 starsCompleted
  • 3 reviews
  • 3 completed
3 years, 5 months ago
Peter Norvig is one of the best instructors around and the course is exceptional. You'll learn difficult software concepts with ease.
Was this review helpful? Yes0
 Flag
Alison Scott profile image
Alison Scott profile image
8/10 starsCompleted
  • 5 reviews
  • 5 completed
3 years, 7 months ago
This course is now self-paced and described as 'advanced'; I took it as a paced follow-up to CS101. Unlike the person who gave it 1 star above, I managed to complete it, without prior coding experience. I do have a maths background. I found it interesting, engaging and well-taught. I also found it very, very, very hard, and I put a great deal of time into it. But I'm doing other coding classes now and I keep finding that the things I learnt in CS212 are applicable to a whole range of problems. Is it the best course to take immediately after CS101? No, probably not. Is it worth doing at some point? Definitely.
Was this review helpful? Yes5
 Flag
mike profile image
mike profile image
10/10 starsCompleted
  • 1 review
  • 1 completed
3 years, 10 months ago
This reminds me of Structure and Interpretation of Computer Programs. You need to have strong logic / math background otherwise you'll get lost easily. But all the programs are fun and challenging. And the best part is when you have your program submitted successfully and then you compare yours with Dr Norvig's and half the time get blown away by how succinct his programs are. I've been using python on and off and I thought I know how to use it properly. But this course has make me a much better python user. This course is definitely quite advanced if you just finished the basic intro to computer science using python class it would be not easy. However if you have hands on experience with programming (especially functional programming) this will be a very fun ride. For other people you'll have to work hard, re-watch the videos until you get it and follow along to build the programs from the ground up. Also download the free version o... This reminds me of Structure and Interpretation of Computer Programs. You need to have strong logic / math background otherwise you'll get lost easily. But all the programs are fun and challenging. And the best part is when you have your program submitted successfully and then you compare yours with Dr Norvig's and half the time get blown away by how succinct his programs are. I've been using python on and off and I thought I know how to use it properly. But this course has make me a much better python user. This course is definitely quite advanced if you just finished the basic intro to computer science using python class it would be not easy. However if you have hands on experience with programming (especially functional programming) this will be a very fun ride. For other people you'll have to work hard, re-watch the videos until you get it and follow along to build the programs from the ground up. Also download the free version of pycharm and use git to version control your program so you don't have to worry about losing your intermediate changes http://www.jetbrains.com/pycharm/download/ I give this course 9/10
Was this review helpful? Yes1
 Flag
Xiang Ji profile image
Xiang Ji profile image
9/10 starsTaking Now
  • 10 reviews
  • 5 completed
3 years, 9 months ago
I quite wish coursetalk would enable a "comment" function so people would be able to discuss others' reviews. I'm not sure if Gerard O'Neill was trolling or not when he posted his one-star review. After reading through his original post on Tumblr I decided that he was in a large part just trying to get some attention(subconsciously or not) with an article filled with childish wordings (like "a slap in the face" and "firing" etc.) and incompetent reasonings(He is only 21 according to his personal information, after all). The only caveat: If you're a beginner then don't complain if you find the course too hard, just like don't complain if SICP is too hard to follow. Otherwise this is definitely a generally rewarding class.
Was this review helpful? Yes0
 Flag
No one of consequence profile image
No one of consequence profile image
8/10 starsCompleted
  • 30 reviews
  • 18 completed
3 years, 11 months ago
I enjoyed the course, but I had mixed feelings about the level of instruction. The class can't seem to decide if it's for people with 7 weeks of programming experience or 7 years of programming experience. There are great nuggets of information throughout, but the instructor will often blow right by some pretty tricky stuff as though it's trivial to us. I also found some annoying bugs in the auto-grader and some unnecessary confusion in a few of the questions. Udacity does need a class on the Design of Computer Programs, but this really isn't it. I think this material would work better as a course in advanced techniques in Python. Lose some of the simpler stuff and spend more time explaining those techniques we're unlikely to have seen before. As it is, I had to pause the videos where the solution was shown because I often couldn't figure it all out by the time he moved on. Still, I did learn a number of new things, and I appreciate ... I enjoyed the course, but I had mixed feelings about the level of instruction. The class can't seem to decide if it's for people with 7 weeks of programming experience or 7 years of programming experience. There are great nuggets of information throughout, but the instructor will often blow right by some pretty tricky stuff as though it's trivial to us. I also found some annoying bugs in the auto-grader and some unnecessary confusion in a few of the questions. Udacity does need a class on the Design of Computer Programs, but this really isn't it. I think this material would work better as a course in advanced techniques in Python. Lose some of the simpler stuff and spend more time explaining those techniques we're unlikely to have seen before. As it is, I had to pause the videos where the solution was shown because I often couldn't figure it all out by the time he moved on. Still, I did learn a number of new things, and I appreciate the exposure to entirely new approaches.
Was this review helpful? Yes3
 Flag
Greg Hamel profile image
Greg Hamel profile image
9/10 starsCompleted
  • 116 reviews
  • 107 completed
4 years ago
Design of computer programs is an awesome class for a novice to intermediate python programmer to learn some new tools and techniques. The biggest problem with this course is that Udacity originally promoted it as being the next step after CS 101. As a result, the initial offering of the class had a ton of newbies who quickly got lost in the new topics that Prof Norvig introduces in relatively rapid succession. Udacity has since recategorized the class as “advanced.” I’m not sure I’d necessarily call it advanced, but you should probably have more than just an intro course under your belt before attempting it unless are willing to work hard and slowly. You will do a lot of programming in this course, mostly in the context of creating and solving games like scrabble, boggle and poker. Topics and techniques covered include Python list comprehensions, generators, decorators, tuple unpacking, lambda expressions, regular expressions, testi... Design of computer programs is an awesome class for a novice to intermediate python programmer to learn some new tools and techniques. The biggest problem with this course is that Udacity originally promoted it as being the next step after CS 101. As a result, the initial offering of the class had a ton of newbies who quickly got lost in the new topics that Prof Norvig introduces in relatively rapid succession. Udacity has since recategorized the class as “advanced.” I’m not sure I’d necessarily call it advanced, but you should probably have more than just an intro course under your belt before attempting it unless are willing to work hard and slowly. You will do a lot of programming in this course, mostly in the context of creating and solving games like scrabble, boggle and poker. Topics and techniques covered include Python list comprehensions, generators, decorators, tuple unpacking, lambda expressions, regular expressions, testing, profiling and optimization. If that sounds like a lot to cover in a 7 week course, you’re right. This course is a lot of work and covers a lot of ground, but it will also teach you a lot.
Was this review helpful? Yes1
 Flag
Jesse Spaulding profile image
Jesse Spaulding profile image
10/10 starsCompleted
  • 4 reviews
  • 4 completed
4 years, 4 months ago
The course is structured such that you're given a coding challenge and after you attempt a solution Peter will give you his solution. While your code may work invariable Peter's solution is far more elegant and succinct. This is the best way to learn: try something yourself and only after you've struggled with it do you get alternative (and usually) better solutions. This is pure beautiful coding. You're building for simplicity and ease of understanding. Nothing overly complicated. If you like militantly following rules and being told exactly what to do this course is not for you. If you're willing to explore on your own and learn from a master coder it is.
Was this review helpful? Yes1
 Flag
Dan profile image
Dan profile image
7/10 starsCompleted
  • 6 reviews
  • 6 completed
4 years, 5 months ago
After completing Udacity's CS101 with the first cohort more than a year ago, I rode my brimming wave of enthusiasm into Peter Norvig's Design of Computer Programs. The difficulty level increased dramatically by the third unit, and I didn't have long or frequent enough blocks of time to dedicate to this course. As the difficulty of material increased, the amount of time I needed to grasp new concepts increased, and I quickly lost momentum by the fourth unit. This course is definitely not for beginners. Peter has a natural teaching style, but his delivery was at times simply well above my understanding. I also think the video editing is in some cases to blame, where too much 'dead air' is removed, making the rate of information delivery unnaturally high. Thinking objectively about the course setup, I gave it a 3.5 rating because it didn't properly describe the difficulty or required knowledge in the description, because of the abrupt i... After completing Udacity's CS101 with the first cohort more than a year ago, I rode my brimming wave of enthusiasm into Peter Norvig's Design of Computer Programs. The difficulty level increased dramatically by the third unit, and I didn't have long or frequent enough blocks of time to dedicate to this course. As the difficulty of material increased, the amount of time I needed to grasp new concepts increased, and I quickly lost momentum by the fourth unit. This course is definitely not for beginners. Peter has a natural teaching style, but his delivery was at times simply well above my understanding. I also think the video editing is in some cases to blame, where too much 'dead air' is removed, making the rate of information delivery unnaturally high. Thinking objectively about the course setup, I gave it a 3.5 rating because it didn't properly describe the difficulty or required knowledge in the description, because of the abrupt increase in complexity in the third unit (a smoother trajectory would have done less damage to my morale), and because of the video editing mentioned above. That said, the setup of the course was as good as any other in terms of the short modules, frequent quizzes and interactivity, and Dr. Norvig's pleasant style of speaking that is easy to listen to. Now that I have completed a few more courses, and after reading some of the very positive reviews of this course, I've regained some inspiration to go back and try completing the remainder of this course.
Was this review helpful? Yes0
 Flag
abelard profile image
abelard profile image
10/10 starsCompleted
  • 3 reviews
  • 3 completed
4 years, 6 months ago
This is the course that got me excited about learning programming. The course does not discuss theory at all but it will expose you to some advanced programming ideas like parsing and reflection, backtracking and search, logic programming, data interchange using JSON, and testing and profiling. This course is for people learning programming who are ready to leave the beginner's category. You don't need to know a lot of programming before taking this course, but be prepared to spend a significant amount of time on the assignments. The course is very accessible but very challenging. One of my favorite courses ever. Highly recommended.
Was this review helpful? Yes6
 Flag
Brock Sides profile image
Brock Sides profile image
10/10 starsCompleted
  • 10 reviews
  • 8 completed
4 years, 6 months ago
This is my favorite class I've taken so far at Udacity, and in terms of quality it's up there with Martin Odersky's Scala class at Coursera, though it is more difficult. The problem sets are very challenging. This is not a class for programming novices, though you don't need to be a Python expert. I just picked up the language as I went along. This class will stretch your mind, and make you a better programmer, no matter what language you program in.
Was this review helpful? Yes5
 Flag
Afref Fetter profile image
Afref Fetter profile image
10/10 starsCompleted
  • 12 reviews
  • 12 completed
4 years, 9 months ago
Prior experience in the field: Programming in Python for 3 years, Udacity courses CS 101 & CS 373. Like: Learned some amazing techniques (search techniques). Learned about the power of Python and its various libraries (collections, defaultdict, etc.) Being able to "generalize" a search algorithm to solve mundane puzzles and impressive sliding car ones (Unblock me, if you've heard of the android app) was amazing. Understood generators and for expressions in Python, thanks to some great explanations (not to mention wrappers). I feel these are very difficult to "get" by yourself. Peter Norvig is an excellent teacher who was very involved in the forums as well. Kudos to him! Dislike: Was not sure I really learned how to "design computer programs". But, now (6 months later) I'm thinking I have gained a better understanding of how it may have helped. Overall: An excellent course, but may not be for beginners. If you think you know enough t... Prior experience in the field: Programming in Python for 3 years, Udacity courses CS 101 & CS 373. Like: Learned some amazing techniques (search techniques). Learned about the power of Python and its various libraries (collections, defaultdict, etc.) Being able to "generalize" a search algorithm to solve mundane puzzles and impressive sliding car ones (Unblock me, if you've heard of the android app) was amazing. Understood generators and for expressions in Python, thanks to some great explanations (not to mention wrappers). I feel these are very difficult to "get" by yourself. Peter Norvig is an excellent teacher who was very involved in the forums as well. Kudos to him! Dislike: Was not sure I really learned how to "design computer programs". But, now (6 months later) I'm thinking I have gained a better understanding of how it may have helped. Overall: An excellent course, but may not be for beginners. If you think you know enough to handle it (a solid knowledge of Python's various data structures should be a good start), then you MUST take this course.
Was this review helpful? Yes2
 Flag
Sai profile image
Sai profile image
10/10 starsCompleted
  • 13 reviews
  • 13 completed
4 years, 10 months ago
I have been using Python for 5 years at work and in my personal projects but this course was truly an eye-opener: there are tons of ways that I was unaware of to use this powerful programming language to attack problems. It was a very pleasant experience to watch how elegantly Dr. Norvig uses Python to solve games and other computer science problems. I am sure that even more seasoned Python programmers than I would share this feeling with me after taking this course. If you are interested, you can watch Dr. Norvig's thoughts on MOOC in his TED talk at http://www.ted.com/talks/peter_norvig_the_100_000_student_classroom.html.
Was this review helpful? Yes2
 Flag
Ben Haley profile image
Ben Haley profile image
10/10 starsCompleted
  • 5 reviews
  • 4 completed
4 years, 11 months ago
Peter taught me a new way to think about programming. His code is the most elegant I have ever read. Look at his 20 line implementation of a spelling corrector to get an idea of what real programming elegance can be. http://norvig.com/spell-correct.html Also the way that Peter broke down problems into relevant data structures and functions was simply beautiful. This class affects the way I code everyday.
Was this review helpful? Yes1
 Flag
Asif profile image
Asif profile image
8/10 starsCompleted
  • 1 review
  • 1 completed
4 years, 11 months ago
Even though I have been developing for a while (though not in Python), I felt I learnt a few new things in the course. I would say this is an intermediate level course, definitely not for new developers. The main takeaway from this course is how he breaks down problems into smaller pieces so that they become easier to solve and think about. Unlike the other commenter, I actually felt the Peter Norvig was quite a good teacher.
Was this review helpful? Yes0
 Flag
Gerard O'Neill profile image
Gerard O'Neill profile image
2/10 starsCompleted
  • 3 reviews
  • 3 completed
5 years ago
My full review is a bit too long for this website, but here's a synopsis of my thoughts: I was not impressed with this course at all. The professor obviously does not program any software that is maintained by other developers, because the quality of code that I saw in this course was absurd. The course was originally meant to be taken by students who had just completed Udacity's CS101, but it ended up being labeled as an "advanced" course because of all the complaints in the forums from students who weren't learning. Here is a concise list of things that I believe went wrong with this course: 1) Peter Norvig has a hard time teaching beginners 2) He is a researcher, not a developer 3) He is a researcher, not a teacher 4) He simply cannot write code that everyone can understand easily I wouldn't really recommend that anybody take this course, even if you program professionally. The amount of effort put into trying to understand Norvig... My full review is a bit too long for this website, but here's a synopsis of my thoughts: I was not impressed with this course at all. The professor obviously does not program any software that is maintained by other developers, because the quality of code that I saw in this course was absurd. The course was originally meant to be taken by students who had just completed Udacity's CS101, but it ended up being labeled as an "advanced" course because of all the complaints in the forums from students who weren't learning. Here is a concise list of things that I believe went wrong with this course: 1) Peter Norvig has a hard time teaching beginners 2) He is a researcher, not a developer 3) He is a researcher, not a teacher 4) He simply cannot write code that everyone can understand easily I wouldn't really recommend that anybody take this course, even if you program professionally. The amount of effort put into trying to understand Norvig is not really worth it. For my full review, feel free to check out my blog post on this course: http://grardb.tumblr.com/post/24312405759/review-udacity-cs212
Was this review helpful? Yes2
 Flag

Rating Details


  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars
  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars
  • 5 stars
  • 4 stars
  • 3 stars
  • 2 stars
  • 1 stars

Rankings are based on a provider's overall CourseTalk score, which takes into account both average rating and number of ratings. Stars round to the nearest half.