Software! Math! Data! The blog of R. Sean Bowman
The blog of R. Sean Bowman
February 09 2016

I’d like to introduce an algorithm for finding clusters in graphs. This is an important problem in machine learning, in part because so many problems can be phrased as finding “nice” clusters in a given graph, where the meaning of "nice" tends to depend on the particular application. It’s easy to imagine simple applications of a good clustering algorithm, like finding groups of friends in a social network. But things only get more interesting from there.

Read more...


February 09 2016

I have been writing some Javascript lately, mostly in my free time. Don’t ask me how I got started – Javascript is not my favorite language, let’s say, and I don’t do a lot of web stuff these days. But it’s been interesting to check out the landscape. There are more “frameworks” than you can shake a stick at, the language itself is evolving pretty quickly, and there are lots of cool things you can do in the browser that weren’t available even a couple of years ago.

Read more...


February 01 2016

We learned about monoids, we learned the (mathematician’s) definition of a Monad, and now we’re going to take a look at at least one alternative (but equivalent) definition more often used in computer science. This is the Kleisli triple.

Read more...


January 14 2016

In the last post we learned about the bridge pattern and its pedigree from the envelope/letter pattern of Coplien (and probably other sources, I’m just not an expert enough to know about them all!) Now let’s compare it to some other patterns and examine the differences and similarities. It often turns out that the rationale behind implementing some pattern is crucial, even when the different patterns themselves might look substantially the same in code.

Read more...


January 04 2016

We previously looked at a generalization of the familiar algebraic concept of a monoid to a category. We’re now in a position to give the “mathematician’s definition” of a monad. People seem to have different opinions of this definition. I personally think that it’s simple, elegant, and captures the spirit of generality of category theory. I have heard that some people use this definition to belittle or confuse people. Perhaps it’s just that people feel belittled or confused by it. In any case, describing a monad isn’t easy, and we shouldn’t feel bad if we don’t understand it very well at first.

Read more...


December 01 2015

I want to talk about monads. These are fairly obscure mathematical objects that have received quite a bit of attention in the programming community lately. This, I think, is mostly because of their use in Haskell to handle "side effects" and other notions of computation inside the type system. It’s grown from there, however, and now you can find monad tutorials and code using monads in languages from Javascript to C++. Today, I want to talk a little about category theory, the history of monads, and the context in which mathematicians and theoretical computer scientists see them.

Read more...