This coming from the &quot;you don&#x27;t really understand a topic until you learn its maths&quot; school. I don&#x27;t mind that position as there&#x27;s some truth to it, up until they commit the mistake to consider metaphors harmful and an obstacle.<p>I greatly benefited from the &quot;conveyor belt&quot; metaphor for learning monads; it made me grasp instantly something that I would have never understood from a pure theoretical explanation - namely <i>why</i> they are so useful and widespread in functional programming, as a building tool to distribute logic among several composable functions over a data type.  Sentences like &quot;We start with one thing and use its value to compute a new thing&quot; and &quot;Monads are an abstract, mathematical label affixed to a pattern found in almost all code&quot; will never convey information about how it&#x27;s intended to be used in the same vivid way as the metaphor.<p>I know for true that the pure mathematical approach leaves me hanging. I learned linear algebra in the theorem-proof style, and as of today I still don&#x27;t know when it&#x27;s an adequate technique to use. I can&#x27;t tell what matrix ranks, kernels or tensors are good for even though I can calculate their values very precisely.