# The Best (arguably!) Introductory Algorithms and Data Structure Course

The title suspiciously sounds like an advertisement or paid promotion, doesn’t it? I know it does, but still, believe me or not, it’s not. I just completed the introductory algorithms and data structures course Algorithms Part 1, and I can say confidently that it is one of the—if not the best—course of its kind available out there on the interwebs. This course is offered by *Princeton University* on *Coursera*, taught by Robert Sedgewick.

I won’t make this a lengthy post, I just want to point out some specialties of this course that made me love it. FYI, I just did a course on algorithms and data structures in my uni too, that too with the exact same syllabus. But I liked this Coursera one over that, mainly because of the assignments, as I go on length bitching about it below.

## Assignments

I would recommend someone to do this course just for the assignments. They are fun, introduces a new algorithm to you and requires you to implement it using the data–structures taught. They don’t tell you to simply implement the data–structures, which gets very boring pretty soon. That was the problem with the course at my uni too, one of the assignments of that was just implementing B–Tree. I’m not saying that was a bad decision made by the professor— Prof. Mausam—but it sure made the assignment a boring and tedious exercise. Anyway, stopping bitching about my college and going back to the point, Algorithms Part 1 is really fun when you do the assignments. I used to eagerly finish all the lectures as quickly as possible so that I can start working on the next assignment, that’s how fun the assignments are.

A tip about the assignment, you can resubmit those as many times as possible, so you can keep improving and perfecting them until you get a perfect score, only if you want, of course, the passing mark is 80%. This brings me to another point, the *auto–grader*. For someone who didn’t get the term, auto–grader is the grader software which grades the assignments, as you guessed, automatically. The auto–grader of this course is so rigorous and perfectly worked upon, that it makes achieving a perfect score in the assignments feel like a great accomplishment. It checks the code for correctness, speed, memory usage, checking these rigorously for every single function you wrote, individually. This is the first time I’ve seen such a rigorous auto–grader, it makes the assignment 10 times fun.

## Course Content

The course content is really well thought-out and planned too. The lecture is concise, and if you watched it like I did, in 1.25x speed, it will be even more concise! (Sorry for the attempted joke.) The lecturer Robert Sedgewick is an extremely renowned computer scientist, author of several books and he discovered the data structure *Red-black Tree*! If you don’t know, it’s one of the most used data–structure, the default implementation of Tree in Java, C++ and Linux kernel!

Something I liked about the course very much is how Prof. Sedgewick shows pieces of code as he explains the data structures. Although it’s not required, I’d suggest that you implement the data–structures he’s teaching parallelly as you’re going through the course, like pausing the video once–a–while and then coding the algo to that part. This makes going through the course a bit slower, but it’s worth it. That way the concepts along with their implementation will be engraved in your mind. Even if you don’t do that, the assignments by themselves would give enough chance to exercise those fingers of yours. To be honest, I didn’t implement all the data–structures in the later part of the course myself, I only did the assignments. Also, you don’t need to take notes while you’re going through the course, as there are lecture slides available.

Another thing worth mentioning, if you’re looking for lots of time–complexity analysis and another theoretical concepts, you won’t find that here. Prof. Sedgewick only covers the basics of the theoretical concepts of Computer Science, and for a more mathematical and rigorous introduction to Computer Science, you should consider some other courses. This course is mainly intended for beginners in Computer Science, covering mostly practical aspects of it. The next part of this course, Algorithms Part 2, delves deeper into more complex data structures and related algorithms, such as graph and string manipulation.

## Reputation

It is arguably the best MOOC algorithms and data–structure course out there, and if you look around the interwebs (or maybe ask around) a bit, most of the netizens will agree. That’s why the course gets a lot of registrations, and the discussion forum of the course is quite active as a result. That may turn out to be helpful to you, if you’re the type. I don’t really take part in such discussions, rather I like to tackle the problem myself. But for me too, it turned out to be helpful once I got badly stuck on an assignment. So that’s a nice thing you can rely upon if it seems too hard for you.

## Pricing and Certification

This course is completely free, so that’s nice. There’s one caveat though, the usual option of paying for the certificate is not there too. So that means, even if you wanted, you can’t get a certificate to show–off. But frankly, MOOC certificates does not hold much value in the real world. I’m planning to post an article on this soon, so stay tuned!

## My code for this course

Here’s the code I wrote while taking the course. It contains the solutions to the assignments too, so I’d suggest you not to check the folder “Assignments” unless you’re done with it.