This is the 1st part of a series of articles about how to use higher order functions to create modular (and hence maintainable) programs. On this article, we explore what separation of concerns is and introduce a case of study where we'll refactor a complex function into a group of smaller ones.