Programming and the feedback loop

In a previous post I spoke about the importance of feedback loops in creative processes, including programming. Here’s a talk and an essay where Bret Victor explores this issue in more depth.

Victor not only identifies the importance of the feedback loop in determining search speed and enabling discovery, but also notes that the intelligibility of the trial-result relationship is as critical. Understanding the trial-result relationship allows the creator to focus on the productive areas of the search space, ignoring bad solutions and thus avoiding unnecessary trials. This aspect, the learnability of the trial-result relationship in programming, is the focus of his essay Learnable Programming.

Visualizing a Scala Functor

I was reading about functors in scala and decided to draw a picture of an example functor

The outermost rectangles are categories, with the inner rectangles represent objects, in this example Scala types. The inner arrows are morphisms between objects, while the outer arrows represent the functors themselves, with List as the type constructor. Functors map categories, made up of objects and morphisms, so here we have

  • The object Int is mapped to the object List[Int]
  • The morphism Int.toString() is mapped to the morphism List[Int].map(Int.toString())

Note that morphisms map objects in the sense of their constituents, whereas functors map the objects themselves (as they are one of the constituents of the category).