- 6 reviews
- 6 completed
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.
Another superstar instructor from Udacity, Prof. Littman designed a challenging, interesting course. He has a natural teaching style, and chose excellent example problems to keep me engaged. Having completed several other courses through Udacity definitely served me well in this course, there is far more required knowledge of Python and programming than other introductory courses offered by Udacity. Through taking this course, I came to realize I needed to develop better notation habits in my code, and better systems of code-verification, because as input data becomes very large, the process becomes more abstract, and it gets harder to keep track of what you're trying to do compared to what you're actually doing. The final units were quite challenging as they required mastery of earlier material and knowledge transfer. The emphasis on computational efficiency was much appreciated, the material did an excellent job of illustrating the limits of 'brute-force' computation and just how much better certain algorithms can be. For some problems, the error messages produced by the grader did not convey useful information -- a source of frustration at times that led me to seek forum hints more often than I would have liked. In almost all cases my errors were subtle, and it would have done wonders for my momentum and overall confidence in my grasping of the material. At the beginning of the course I think it would be useful to have a short video explaining expectations along with suggestions or demonstrations of good coding and testing habits.
Jorn Loviscach and his teaching assistants produced an excellent course in applied differential equations. Of the five courses I have completed through Udacity, the problem sets in this course were the most enjoyable to complete. Coming from an engineering background, I have previous exposure to the math theory, as well as engineering specific theory, although few courses required applied programming. Since graduation six years ago, I have rarely applied it with programming. The course served as an excellent refresher on developing numerical models and the frequent code-based quizzes helped improve my fluency in writing Python code. The topics presented covered an interesting range of disciplines, but didn't cover nearly the scope of a university-level introductory differential equations course. That said, I came out of this course much better equipped to apply numerical computation in practice which may be more significant and may indicate a better understanding of fundamentals. Simply put, the course requires students to spend time applying a few basic computational algorithms in a diverse array of disciplines to encourage knowledge transfer. This is the type of learning that eludes many students in the university system. I would have liked more emphasis on analysis of the complexity of problems such that students develop a more adaptable problem-solving 'toolbox' or intuitive sense of what algorithm to use with what resolution (time-step, grid size). This topic was covered in the course at various points, but not to the degree I hoped it would.
Where instructor Steve Huffman lacked in teaching experience, he made up for in enthusiasm, a natural and articulate delivery, and a frame of reference closer to beginners (temporally speaking) compared to potentially out-of-touch older professionals or tenured professors. Like any new instructor, you quickly adapt to his style of communication. The TAs in this course were extremely helpful, as were the forums. Prior to this course, I took CS101 with Udacity. I also had some programming background from engineering school more than six years ago. The 'story line' progression of the course associated with the development of an actual web application worked well to maintain momentum, and Steve's well-timed anecdotes on his personal trials and errors with Reddit and Hipmunk helped me bridge the conceptual gap of how what I was learning (and building) fits with the best and biggest new applications being developed today. Following the course, I applied my new back-end / database skills and created a simple photo album application for a personal website, complete with administration login and content editing forms. (postnostills.appspot.com). Also, I tended to get stuck on very basic aspects of running programs that are really only learned by trial and error. For example, things like command-line syntax to roll back an application took me hours to figure out -- simply missing quotation marks or incorrect ordering of commands. These beginner errors are the type of momentum killers that experienced users simply don't remember making. The one criticism I have was how quickly the material in the later units was covered. The beauty of the MOOC format is there aren't the same time-restrictions as in other institutions (save those of the instructors taking sabbaticals to contribute to this world-changing education movement) so go ahead and keep adding material.
Sebastian Thrun is an excellent instructor and his well-designed course included fun, diverse, and engaging example problems to apply Python to statistical analysis. Having used statistical analysis for work for the last five years (although not applied with code), having taken CS101 and Web App. development (both through Udacity), and coming from an engineering background, I didn't learn new concepts, but it was a good refresher for basics and an excellent way to improve code-writing fluency -- important in the working world where efficiency trumps technology in many situations. I had hoped the course would delve into some more advanced topics in data analysis, but in hindsight it is probably best left quite basic for the greater audience of beginner programmers with little or no background in statistics. The course is definitely worth taking to learn or refresh basics concurrent with applying it effectively in code. At a bare minimum, it will improve the critical thought process for the type of information we are exposed to each day by the spectrum of media. I would also recommend it for professionals not coming from a math background who want to develop practical skills for many types of consulting. IMO most work out there isn't about the ability to apply cutting-edge theory, but instead is about mastering the application of fundamentals and the ability to quickly perform 'back-of-envelope' estimates as 'reality checks'.
Dave Evans is an exceptional instructor. His teaching style and course design are well-suited to the MOOC. I took the course with the first cohort more than a year ago and have been inspired to continue to learn different applications of Python programming since. The course gave me a solid background to pursue other courses with Udacity (I've just completed my 5th) and is probably the best course I've taken. The modular design helps maintain momentum and the mini-quizzes posed throughout the modules using the in-browser Python interpreter were diverse enough to be not boring and repetitive, but repetitive and frequent enough to quickly bring my coding to fluency for the topics covered. Perhaps my favourite aspect of this course and all Udacity courses has to do with the lecture/assignment/exam structure. Compared to my university experience, I gained a lot more from spending the equivalent of an entire week completing a Udacity final exam, rather than cramming for a few days to spend three hours solving (or failing to) four or five problems in a typical engineering final exam.