As my career progresses, I appreciate more the importance of fundamentals. For that reason, I wanted to revisit and learn more advanced algorithms material. So, I took the Data Structures and Algorithms specialization on Coursera.
The sequence of courses covers many algorithms: DFS, BFS, Ford-Fulkerson, Knuth-Morris-Pratt, Simplex, as well as data structures like Graphs, Trees, Min-Heaps, Tries, Suffix Arrays, Hash Tables, and others.
A happy side-effect of implementing so many algorithms: my Python skills improved immensely. I learned how to use pytest, standard library data structures, and new syntax.
Things I Learned
Exposure to patterns of problems and their effecient solutions was my biggest takeaway. I may never write certain algorithms again, but I learned the language to describe the problems and solutions. This should help identify these problems and research well-implemented packages to achieve the same outcome.
Use stress-testing to uncover bugs. Regarding the previous point, writing code to generate test cases and applying that code to your solution is an indespensable step to root out bugs.
Remember to refactor the implementation once it works. I tended to write messy code when solving an algorithm problem. Not worrying too much about elagance gave mental space to learn the problem, the solution, and uncover key principles. I write this point as a reminder, though, to my future self: once solved, simplify.
My mathematical proof skills are rusty. Proofs are not something I use often, but this course reinforced why they are useful when considering the correctness of a program.
If you are interested in studying algorithms and want practice implementing them, the specialization is a good resource.
I’d like to review a few algorithm topics not covered in the course, such as evolutionary algorithms, and sharpen my mathematical proof skills.