Essential information that every serious programmer needs to know about algorithms and data structures, with emphasis on applications and scientific performance analysis of Java implementations.
I've completed both Part I and Part II. So my review belongs to two of the courses.
I took this course to gain a better understanding of data structures and algorithms and also to learn more about the Java language.
Best way to learn algorithms is through visualization. In this course, Professor Sedgewick slowly but steadily presents each algorithm and data structure with dynamic visualization. The animations really help to clarify exactly how the algorithms process the data and solve a problem.
Another important aspect is that this course discusses the implementation details of the algorithms by using Java programming language. They developed a java library where almost all the algorithms in a traditional algorithm text-book have been implemented. It's really satisfying to read such nice, concise and elegant code.
I started this course with an intermediate level of knowledge on Java. That's why it was pretty easy for me to keep pace with the implementation challenges. However, I learn and apply many java specific technique such as generics, iterator, object equality, immutability, testing etc. in-depth in this course. From my experience, I would recommend, to get the most out of the course, you should have a little bit of programming experience in Java.
In order to pass the course, you have to complete a programming assignment in each week. The assignments are well written, pretty much challenging and fun to solve. You will get the feelings to solve large-scale complex problems. They expect you to spend 3-5 hours for an assignment to pass (80%) each assignment. However, I lost track of how much time I spent to chase the benchmarks for 100% in each assignment. You will definitely have a challenging time to score 100%.
The evaluation system of the assignment is very sensitive. You have to maintain a prescribed API, otherwise, your solution will not be accepted. I wonder about their effort, how much time they spend to make such unit testing code. In some cases, I see that they wrote 1200-1500 lines of unit testing code to check our only 200-300 lines of solution, definitely praiseworthy!
Overall, this was a great course and it was a great opportunity for me to take such an enriched algorithm course. I highly recommend it to every serious programmer who wants to learn more about data structures, algorithms, and the Java language.
