In this survey, we review practical algorithms for graph-theoretic problems that are expressible in monadic second-order logic. Monadic second-order (MSO) logic allows quantifications over unary relations (sets) and can be used to express a host of useful graph properties such as connectivity, c-colorability (for a fixed c), Hamiltonicity and minor inclusion. A celebrated theorem in this area by Courcelle states that any graph problem expressible in MSO can be solved in linear time on graphs that admit a tree-decomposition of constant width. Courcelle's Theorem has been used thus far as a theoretic tool to establish that linear-time algorithms exist for graph problems by demonstrating that the problem in question is expressible by an MSO formula. A straightforward implementation of the algorithm in the proof of Courcelle's Theorem is useless as it runs into space-explosion problems even for small values of treewidth. Of late, there have been several attempts to circumvent these problems and we review some of these in this survey. This survey also introduces the reader to the notions of tree-decompositions and the basics of monadic second order logic.