# Reflection on Data Structures and Algorithms Certificate

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.

## Recommended?

If you are interested in studying algorithms and want practice implementing them, the specialization is a good resource.

## Next steps

I'd like to review a few algorithm topics not covered in the course, such as evolutionary algorithms, and sharpen my mathematical proof skills.