The online course “Advanced Data Structures in Java” at Coursera finished last week and I felt that after these cool five weeks it was worth it to recap and summarize my impressions.
Image source: http://lin-ear-th-inking.blogspot.com
At the start, do not be misled by the course name. It is not about all advanced data structures, which would be a very broad topic, but about graphs, search algorithms, and path calculations.
During the first week we learned about data structures that can be used to represent graphs – Adjacency Matrix and AdjacencyList – and what are the best use cases to choose each of them. Next we had to create a class hierarchy for a map search engine to be used as a framework during the rest of our assignments. Assignments from this week also required us to implement Breadth-first Search (BFS) algorithm. DFS was also covered but we have not coded it in our assignments as it can not be used to find the shortest paths.
The third week was about implementing Dijkstra and A-Star algorithms and how they can be created using BFS as a base. Using BFS as a starting point helped me to understand these algorithms much faster. The fourth week was theoretical one, and the only one without an assignment. So there was no coding, but there were lectures about the Travelling Salesman Problem, NP Complete, NP Hard problems, and different types of graphs (Eulerian, Hamiltonian).
Final week was the most creative one as we were asked to implement an extension to any of algorithms we have learnt about. We could extend A*or Dijkstra to use not only distance but also road type or speed limits to find the fastest route or we could try to improve speed of any of these algorithms or… or we could create a completely original extension. I have chosen to implement something I called “Route Calculation Cache”, quote from my submission:
My extension remembers calculated routes and when another user wants to find similar route, extension will retrieve
this stored route instead of starting duplicated and extensive calculation. This will decrease execution time
and user will see routes in a shorter time.
After that course ended after five weeks with graphs.
- Sophisticated algorithms are not the thing we use frequently at work, so it was very funny to relearn stuff that I was forced to memorize several years ago at university. Obviously now I was more motivated, so learning was a more enjoyable process than when I was a young student.
- Test datasets can be obtained for any area using the provided application, so everyone was able to test A* or Dijkstrausing streets from their neighbourhood. You could check if your route to work is optimal or not. ;) Below is a fragment of my home city with a calculated example route:
- Peer reviews. Our solutions for Week 3 and part of Week 5 were reviewed by other developers attending this course. At first I was not convinced that it would bring any value to my learning process, but comparing how people from different countries and with different backgrounds designed class hierarchies to solve the same problem was an interesting experience. I saw approaches similar to mine, but also completely different ones that were still valid. Another topic is a different approach to documenting code: some developers shared my view and used comments only where it was really, really necessary and tried to write self-explanatory code. But in some people’s solutions I saw as many lines of documentation as lines of code. :)
- Good peer pressure. Because I have advertised this course in the JVM Bloggers newsletter I was motivated to graduate. :) The more people I knew who tweeted that they were joining, the more motivated I was to complete assignments week by week. Discussing the course with developers from my company helped a lot too. Generally this is one of the finest features of online courses: motivating others and getting motivated. :)
I am happy that I enrolled in “Advanced Data Structures in Java”. I have refreshed some long forgotten knowledge about graph structures, and learned a lot of new things too, so it was definitely time well spent. Also, the satisfaction after successfully finishing a five-week long course is a nice feeling.
And what about you? What are you thoughts about this course or online courses in general?