Introduction

Hi! It’s great that you found my blog. With this short review, I want to help you decide if the Data Structures and Algorithms Nanodegree is right for you. For a start, I’ll give some context about me before giving you my points on the good, the bad and the ugly things on my experience with the course. My primary motivation was to refresh and deepen my knowledge of data structures and algorithms. On the other hand, I wanted to have a challenge for myself because I’m good at starting things but bad at finishing them. My background is a Bachelors Degree in Management of Information Systems, which is half of the economic studies, and the other half is computer science. Professionally I have two years of experience as a programmer on backend and frontend technologies (Typescript, React, Python, Java).

Structure of the program

Part One: Introduction

  • A refresher on python (loops etc.)
  • How to Solve Problems (This was great)
  • Efficiency (Computational Complexity and Big O Notation)

Project 1

  • A Project where you need to apply the above. This was rather easy. The challenge was in specifying the computational complexity of each solution.

Part Two: Data Structures

  • Arrays and Linked Lists
  • Stacks and Queues
  • Recursion (This was the most difficult part for me and contained the most exercises of all lessons)
  • Trees
  • Maps and Hashing

Project 2

  1. Implement a Least Recently Used Cache
  2. Write code to find all files under a directory recursively (including all directories beneath it)
  3. Huffman Coding
  4. Active Directory
  5. Blockchain (This sound more promising than it was)
  6. Find the union and intersection of two linked lists

Part Three:

  • Basic Algorithms (Binary Search, Tries, Heaps)
  • Sorting Algorithms (Bubble Sort, Merge Sort, Quicksort, Heapsort
  • Introduction to the concept of divide & conquer

Project 3

  1. Square Root of an Integer
  2. Search in Rotated Sorted Array
  3. Rearrange Array Digits
  4. Dutch National Flag Problem
  5. Autocomplete with Tries
  6. Unsorted Integer Array
  7. Implement a Router

Part Four: Advanced Algorithms

  • Greedy Algorithms
  • Graph Algorithms
  • Dynamic Programming
  • A* Algorithm (Peter Norvig is the instructor of this section)

Project 4

  • Implement the A* algorithm to find a route through a network of intersections

What I learned

How to solve problems

  • This was a great section where Instructor Dave Evans lays out a systematic approach to solving hard problems in computer programming.

Computational Complexity

  • For every exercise and project, you are tasked with grading the worst-case runtime and space complexity. You do this for all projects you have to submit. At some point, you’ll have done it enough times to spot the common patterns. I even was able to apply this kind of thinking professionally.

Recursion

  • The most difficult section, in my opinion, at times, tough exercises. After having done enough of the exercises, I think I got the hang of it.

The good

  • The structure of the course is excellent and practical.
  • Lots of exercises.
  • The projects were the most exciting and fun.
  • Very practical with hints towards what you should know for a technical interview.
  • The course enabled me to apply some parts I learned through the course at work.
  • Lessons/Exercises are explained and implemented in Jupyter Notebook. Some of the notebooks are very well explained.
  • Suggested deadlines: Finishing earlier is rewarded by saving future tuition (if finished before next payment due date).
  • Code reviews (projects are reviewed within 24 hours after submitting). Code reviews are one of the unique things Udacity has to offer; sadly, the deviation in quality is significant, which brings us to the bad in the next section.

The bad

  • Code Review quality, they just follow their checkpoints. There is no further guidance and no straight forward way of challenging a review. The review process is the point were most value could be gained in my opinion.
  • Exercises and notebooks differ in quality a lot. Some are awesome, on average there are just a few introductory sentences and a few test cases.
  • No text, you must watch short videos, which usually don’t go very deep. There are also no hints where and how to go deeper or links to interesting talks, articles or books.
  • The course doesn’t convey passion for the subject which is essential because passion/fascination can be contagious
  • One of the critical advantages that Udacity, as a company has, is, in my opinion, its location in California where I guess they are well connected to key figures in the industry. It would be awesome if most of the courses would feature them as instructors. Or how about interviews with them on the subjects that are taught?

The ugly

  • Technical Issues are common, at one point the website wasn’t available, sometimes the notebook wouldn’t load, or other content like solutions behind a button wouldn’t appear
  • Mentors differ in quality a lot and sometimes give unsatisfying answers or straight up post a solution, which removes the sense of accomplishment.
  • No sense of community: Lots of people complaining in the chat.

Summary

Would recommend only if:

  • You prefer short videos over a textbook.
  • You need deadlines.
  • The fact that you pay for the course monthly would motivate you to finish in time or earlier.