I still don't know how category theory will help me as a programmer.
I understand, and agree, that small functions, composed, are easier to understand and maintain, easier to port and easier to build upon than large monolithic functions.
But, aside from that, I'm not sure of the tangible day-to-day benefits of reciting parts of category theory.
I admit I don’t know category theory in much detail but I just can’t see the tangible benefit. Any hints would be appreciated.
I studied category theory for a while, and frankly it plays zero role in my day-to-day programming. It would maybe be a different story if I were writing libraries in Haskell or something, but as it is, it’s really not that relevant to me.
Programmers use monads all the time without knowing it, but there is little need to understand the deep math-y concepts or proofs that underlie them.
I worry this is often the case. I like the idea of learning maths for maths sake. And I would love the time to do that.
But knowing I have a limited amount of time, I often suspect a lot of people extolling the benefits of understanding the mathematical underpinning of concepts are more showing off and in love with their own understanding than offering real benefits to programmers.
Before I learned programming, I thought it had a lot to do with mathematics. I mean both look pretty formal. I was surprised to learn that mathematics played hardly a role in ordinary software development. If you happen to write a physics simulation, sure, you need math, but that is because of physics, not because of programming being inherently mathematical.
When I later learned more mathematics, I was also surprised to learn how informal everything is programming: Mathematicians use fancy symbols, but also ambiguous, idiosyncratic or inconsistent notation, and they always write proofs where a lot is left unspecified because the intermediate steps are assumed to be obvious. In software development it's the opposite, the compiler has to understand everything.
Its useful when you have uber structured data. Think when programming a programming language for example, the input is extremely structured but you need to handle so many things in so many structured ways.
for wishy washy data like you have in almost every other case it isn't useful, unless you want to solve those problems by making a programming language. But in most cases you already have languages there, like SQL for relational data etc, so you don't have to solve those problems.
It won’t really help you in day to day programming. Studying it for that reason will yield disappointment.
I see three reasons to learn it if you are a programmer:
1. You find it fun and interesting
2. You work in a language such as Haskell or Purescript that uses many aspects of category theory in its library, or Scala which has CT inspired third party libraries, or languages in general that have monads, functors explicitly mentioned. Languages that implement these concepts but don’t name them also count here. Understanding that all these things are based on quite easy to understand CT concepts helps to unify them all and make their purpose more clear. But you can also just look at the type signatures!
3. A bit more tenuous but I believe studying CT helps train your brain to be more mindful of structure and especially composition of structure.
I think three would be the main reason for me. Although I'm not sure if I even deal with that much data which would benefit from that kind of insight. But who knows.
I think Category Theory is useful in a way that it brings abstractions for many areas of mathematics that used to be considered unrelated to each other or quite distant. It studies interactions between entities, rather than the details about entities themselves.
I think it's quite useful in functional programming languages and gives a lot of insight on how to organise things that in the beginning seem totally unrelated.
Haskell uses some concepts from category theory, but even there (as people pointed out in a Haskell thread a while ago) it is not actually necessary to understand the category theory behind them. E.g. to be able to use monads. If category theory isn't even helpful for Haskell programming, we can be pretty sure that it doesn't help at all with more common languages.
It won’t. I have studied it enough to realise that it doesn’t give me anything new. I have learned a lot more studying (Martin Loff) Type theory. Which is also a solid foundation of math by the way.
I understand, and agree, that small functions, composed, are easier to understand and maintain, easier to port and easier to build upon than large monolithic functions.
But, aside from that, I'm not sure of the tangible day-to-day benefits of reciting parts of category theory.
I admit I don’t know category theory in much detail but I just can’t see the tangible benefit. Any hints would be appreciated.