“In mathematics and computer science, an algorithm is a finite sequence of well-defined, computer-implementable instructions, typically to solve a class of problems or to perform a computation.” (Wikipedia)

Algorithms are the core of the Computer Science curriculum, taught over several undergraduate and graduate courses.

Algorithms are also at the heart of computational thinking, which I believe is as important as knowing how to write code, and should be taught in tandem. Computational thinking is useful for many areas of life, and not just for working with computers.

You can find out about algorithms from reading or courses, but you have to actually implement them in order to learn.

The current standard text on algorithms is Robert Sedgewick’s Algorithms. Sedgewick’s Coursera course cycle Algorithms, Part 1 and Algorithms, Part 2 follow the textbook.

I review Sedgewick’s course every few years to refresh knowledge I don’t use day-to-day. Like most software engineers, I rely on high-quality implementations of fundamental algorithms and data structures existing in whatever programming environment I’m working in. Those implementations are far better than what I could devise on my own.

Occasionally I have to develop bespoke algorithms for a problem I’m working on, but my algorithms are usually variations of ones that already exist and can be adapted. That’s the nature of working in a mature field.

The best time to learn about algorithms is just before you need to apply them. You can’t understand an algorithm completely until you’ve implemented it.