  Quantum technologies have the potential to solve certain computationally hard
problems with polynomial or super-polynomial speedups when compared to
classical methods. Unfortunately, the unstable nature of quantum information
makes it prone to errors. For this reason, quantum error correction is an
invaluable tool to make quantum information reliable and enable the ultimate
goal of fault-tolerant quantum computing. Surface codes currently stand as the
most promising candidates to build near term error corrected qubits given their
two-dimensional architecture, the requirement of only local operations, and
high tolerance to quantum noise. Decoding algorithms are an integral component
of any error correction scheme, as they are tasked with producing accurate
estimates of the errors that affect quantum information, so that they can
subsequently be corrected. A critical aspect of decoding algorithms is their
speed, since the quantum state will suffer additional errors with the passage
of time. This poses a connundrum, where decoding performance is improved at the
expense of complexity and viceversa. In this review, a thorough discussion of
state-of-the-art decoding algorithms for surface codes is provided. The target
audience of this work are both readers with an introductory understanding of
the field as well as those seeking to further their knowledge of the decoding
paradigm of surface codes. We describe the core principles of these decoding
methods as well as existing variants that show promise for improved results. In
addition, both the decoding performance, in terms of error correction
capability, and decoding complexity, are compared. A review of the existing
software tools regarding surface codes decoding is also provided
