Biology often uses hierarchical self-assembly to produce complex functional structures from smaller components. At each level of this stepwise process, non-covalent interactions bring together the subunits of a lower level of complexity, using the information encoded in their structures. Applying this approach to synthetic systems represents a formidable challenge, because it requires a high degree of command of non-covalent interactions. In this tutorial review, recent developments in the hierarchical self-assembly of discrete columnar aggregates are discussed.