I once used two weeks of vacation to learn category theory - that was a really fun and rich time. It really relaxed me, but it also brought me more knowledge than one year of shallowly engaging with the topic.
I've heard many times on HN people bring up category theory and how beneficial it has been to learn it, so I've recently ordered a textbook on it.
Can I ask how has it benefited your thinking?
I'm curious to know not only how it benefits an understanding of software development, programming languages and functional programming, but also has it helped you understand the world at large in new and novel ways?
If category theory is your first exposure to proofs and logic it can benefit you a lot, although number theory might be a more fun and more concrete way to get the same result. If you know a lot about more than one field of math, as a great big generalization over everything category theory can also help.
I should warn you that there is a social bias towards saying that you found a lot of insight in studying something, and a bias against saying that studying it was a waste of time, irrespective of whether or not the thing is actually helpful. Aristotle could stare at a rock and end up with some insight, so anyone who stares at a rock and admits it hasn't helped them has to publicly admit they are not as smart as Aristotle. They say this is how geology got started. ;)
Aristotle might have been able to stare at a rock and say something clever, but most of his ideas about science were wrong, starting from the very definition of science, which he believed should be based on unprovable first principles (like mathematical axioms).
He rejected atomic theory, believed the Earth was the center of the universe and the four fundamental elements were air, fire, water, and earth, and thought heavy objects fell faster and moving objects would tend to come to a stop if nothing interacted with them.
These were observations that Aristotle and his audience accepted as "obvious". It took more careful and patient observers to discern the less obvious truth.
It's an iterative process. Anthro-centricism is powerful in terms of what it makes "obvious". The universe spins about the earth. That atoms are made up of objects. That we are the pinnacle of local evolution. That reality is really real.
It's this vogueish thing among a certain set of programmers to go around saying they learned category theory. I studied category theory as a math graduate student and frankly, if your goal is simply to become a better programmer, there are much more direct and productive ways to achieve that goal.
I can certainly appreciate ways that there are more direct and productive ways to become a better programmer.
My goal is to become a better thinker in general. Specifically with regards to seeing how one type of thing relates to another type of thing.
I'm actually more interested in better understanding and reasoning about the ecology of software development than becoming a better programmer per se but only because on some level I think that's actually necessary in order to achieve the writing of better software.
To put that into English... we don't write software in a vacuum. We write it in a team, in a company, in a world full of other programmers and there is a rich set of relationships among all of those things that is exerting pressure on the final shape the software takes.
Category Theory seems like fun and useful tangent that might help me understand the world better and be mildly useful in an abstract way.
Not qualified to speak on this myself, but I asked a similar question to a friend and he said something like:
Part of good software development is knowing where and when to create abstractions. Category theory has a collection of interesting and very general abstractions - if you can spot these patterns in your software development then they will be good candidates for abstraction/generalisation
> I'm curious to know not only how it benefits an understanding of software development, programming languages and functional programming
It did and does that too (not much, since I am still a learner): It helps me to write APIs that behave well; usually, that means being an API which outward facing parts compose well. (The opposite would be an API where you configure it's internal state until it does what you want - the more complex the API, the harder it gets to mantain the suiting mental model). To be honest, it will help me getting the theoretic motivation behind many FP-concepts like monads, but I am not yet deep enough, I would not say I reaped a practical benefit in my haskell-writing. Reading (and implementing) "Category for programmers", which is a great blog, should take me there tho.
> but also has it helped you understand the world at large in new and novel ways?
On a local scale, it was fascinating to see how you get logic and algebras by putting a little bit of additional order onto some abstract concept. These formal logic rules I leard? Turns out they are not only funny ways to play with symbols, but also funny ways to play with arbitrary finite sets. It was also nice to see how in category theory, you can "fix" nice properties by creating a new structures where these nice properties are objects. It is all pretty handweavy, since I am mostly going by my intuition unless I am pressed to prove something formally. This thread might help you: https://www.reddit.com/r/haskell/comments/16i322/whats_the_i....
Globally, I am a christian, so I see everything and everyone in relation to God anyways. Category Theory might at best helped me to identify God as the intitial and terminal object in the Category `Human` ;)
To give a short answer: I think CT is another tool in the box to gain a more connected view of the world, the main ingredients being age and observation of processes.
I envy those. I pity not having done my undergrad in maths! I have to say tho that we the examples learned in math department category theory are often not that important or interesting to programmers, and the same is true for the abstractions being studied.
I did actually do graduate studies in math. Early on I went to Paris for 2 semesters where I tried to follow a course on category theory, in preparation to algebraic geometry. Even though I did lots of abstract algebra before that, the intensity was too much and I could not keep pace.
Interestingly, the Chinese students in that class did fairly well, even though they could not follow the actual lectures (given in French) and were studying exclusively from the lecture notes (given in English).