Programming is a very peculiar activity that uses abstract techniques in an attempt to add concrete value to the world.
To help themselves deal with complexity, programmers have a long tradition of using metaphors that map the abstract concepts they wield onto concrete object and activities of the everyday life.
Some of these metaphors are so powerful that they gave birth to entire programming cultures — like Object Oriented Programming — or programming techniques — like the Actor Model.
However, an overused metaphor can end up hiding the reality it was supposed to help grasp in the first place ; it becomes an illusion.
In this talk, I try to describe how the construction-related metaphors — the “carpenter’s mindset” — can mislead us into believing that programming is a creative activity, and why this can lead to unwanted effects. In contrast, I’ll introduce the “cartographer's mindset”, the idea that programming is first and foremost a matter of discovering abstractions, and show how we can make both the carpenter and the cartographer to work together and produce better software.