If you are coming from imperative land (more specifically C++) then nothing beats articles and videos by Dr. Bartosz Milewski: [link] ▶ this video [link] [link]
in “Ask HN: How to be fluent in functional language speak?” · View on HN
Category Theory 1.1: Motivation and Philosophy on HackerTube: recommended by 11 Hacker News commenters across 9 separate months, 2016–2026.
lecture · intro · evergreen
The first lecture in Bartosz Milewski's category theory series for programmers. It covers the motivation and philosophy behind category theory and why composition matters for handling complexity.
HN commenters repeatedly name it as the friendliest entry point to category theory for working programmers.
“I think they are a very nice place to start learning these things.”
19 Hacker News comments link this video. Each one links back to its thread.
If you are coming from imperative land (more specifically C++) then nothing beats articles and videos by Dr. Bartosz Milewski: [link] ▶ this video [link] [link]
in “Ask HN: How to be fluent in functional language speak?” · View on HN
This reminds me of a great talk by Bartosz Milewski [1] about the motivation and philosophy behind category theory. He makes the observation that our "monkey brains" are not good at dealing with complexity at all and we only really have one good strategy for dealing with it, that being to chop up complex problems into smaller, simpler problems which we can solve in isolation and then combine the results back together to approximate a solution to the larger problem. His point is that we do this everywhere and therefore it's no wonder that category theory is able to describe so many disparate areas of mathematics - because it's really describing just this mechanism, not some deep truth about the universe itself. Like - what if we as humans are so "register bound" that we can't solve any problems which can't be chopped up and put back together like this - such as those in the social sciences. His presentation style is wonderful - i recommend the whole talk but this part starts at 37:20. [1]: ▶ this video
in “On the Weaknesses of the Mathematical Mind” · View on HN
Eugenia Cheng has some interesting and accessible videos, e.g.: [link] and in a similar vein I am enjoying her book: "How to Bake Pi". Getting more into the technical side of things, Bartosz Milewski has good lessons in this playlist: ▶ this video
in “How to learn hard things in tech” · View on HN
I suggest a combination of theory (videos/books/papers) and practice. For practice; I highly recommend learning Haskell. If you are new to functional programming then learning Haskell is challenging and frustrating but as with any new topic the key is to not give up but keep probing. A good recent development is lot of mainstream languages are beginning to include functional paradigms such as lambda, closures etc., For example Java introduced lambda expressions, Javascript has had them for a while now. But from a first-principles stand point Haskell is as good as it gets so please do learn and code in Haskell if not at work then at least side projects. For theory I've found following material super useful. 0. This[0] is an incredibly awesome lecture where Phil Wadler takes us on a whirlwind tour of computer science. He talks us through different foundational structures on which almost everything (hardware and software) about computer science is built. I watch this lecture once every few months :-). It helps you build up context and ground various topics. 1. The one and only SICP. Book[1] and lectures[2]. 2. Automata theory[3]. This isn't an easy course but gets to the heart of the matter i.e., the meaning of "function" and what how can it be mechanically "computed". 3. Category Theory is where lot of active research is happening in CS theory. This is a very good lecture series[4]. The pace may seem a bit meandering but don't be put off. Bartosz is a gifted teacher and works i
in ““Computer science is not about computers”” · View on HN
There's a lecture series he did if anyone's interested: ▶ this video I must say that there is a slight Tommy Wiseau energy about the guy, but that's no bad thing :-)
in “Category Theory for Programmers (2014) [pdf]” · View on HN
John Baez (physicist / category theorist / smort dude) has a list of books to learn math and physics. Is an interesting source to crib from. [link] Gerhard t'Hooft has a page on how to become of a good physicist. [link] Not math though. I'm not necessarily suggesting that a mountain of books is the best way to go about it. I think I respond best to video lectures. I'm not sure where you're starting from or how applied/pure you want. Here's a quick mind dump some of my favorites and some that I haven't watched. Roughly in order of how much I liked them. Gilbert Strang's Computational Methods for engineers was life changing for me. It is a two part MIT opencourse. [link] A Stanford course on the Fourier transform [link] Bartosz Milewski's Category theory for programmer's ▶ this video Stephen Boyd's courses are online. [link] Linear Systems, convex optimization. Useful stuff. Francis Su's Real Analysis is very good [link] Indian universities have an astounding collection of videos [link] I have a tough time with the accents, which is a bummer. UCCS MathOnline has quite a haul [link] I've been enjoying this Visual Group Theory course lately [link] Math Doctor Bob [link] Wildberger has some interesting takes on elementary and non elementary topics [link] [link] Perimeter scholars lectures. Physics not math. Good stuff. Federico Ardila has a number of combinatorics courses. [link] Nonlinear algebra course [link] Also of course there is Coursera and edX stuff. Godspeed.
in “Ask HN: How to self-study mathematics from the undergrad through graduate level?” · View on HN
This is a fun read (fair warning: you should have some understanding of monoids and monads before reading) and further validates my hypothesis that understanding category theory would make me a more effective engineer. If you've had the joy of constructing useful shell pipelines, and part of it is in the ease of knowing how it will behave. this is a nice formal statement that the underlying reasons WHY it just “feels right” are because of category theory--which means if I can just learn category theory, I’ll have a new tool for approaching and factoring problems that will be, technically speaking, hella useful. I suppose I should start (re)working my way through ▶ this video
in “Monadic I/O and Unix shell programming (2001)” · View on HN
I recently started going through Bartoz Milewski's Category Theory lectures [1]. I think they are a very nice place to start learning these things. [1] ▶ this video
in “A monoid is a category, a category is a monad, a monad is a monoid” · View on HN
Those articles (and the videos ▶ this video ) are great but one doesn't need to learn category theory to understand monads in Haskell. The Haskell Wikibook is an underrated resource: [link]
in “From Monads to Machine Code” · View on HN
I can recomend the video series of Bartosz Milewski ( ▶ this video ) I'm at the 4th video and it's the first time that i start to become an understanding of the howl thing. But expect it to take some time. (10 Videos, most are around 1h, i needed to pause several times and think or try something out)
in “Category Theory, Syntactically (2016)” · View on HN
That just means you are missing some foundation. If you are interested in understanding the theory I really recommend this: ▶ this video [link]
in “Why hasn't Haskell taken over the world? And the curious case of Go” · View on HN
He has also done a youtube series on category theory for programmers [1]. I have personally been using a book recommended by someone here called "Conceptual Mathematics"[2] and have been finding it great so far in the sense that it only relies on high-school level maths concepts while introducing the categorical concepts in contexts where you can see the value of the approach [3]. It is really an interesting set of ideas and as soon as you start using it, some things start to change in how you approach problems. Just today in fact I was working on something and thought to myself "I need the opposite of a forgetful functor - I wonder what that is?" (turns out it's the "free group functor"). But because I knew about the existence of the concept it helped turn what would otherwise have been a maths problem that I would have really struggled with into something that was conceptually easy for me to deal with. I essentially could use the category theory to turn a problem that was hard to think about into something easy to think about (and also to show that this was valid) and then I could solve the problem in a conventional way. [1] ▶ this video [2] [link] [3] As opposed to say Emily Riehl's "Category Theory in Context" [link] where the maths required to even get started with the examples in the intro is graduate level. To get a sense, this is literally the first sentence of the first chapter: "A group extension of an abelian group H by an abelian group G consists of a group E together
in “Profunctor Equipment in Haskell” · View on HN
It is hard to answer because of exactly what ndriscoll said[0] > It's like trying to argue about the distinction between U(1), the complex numbers with magnitude 1, and the unit circle, and getting upset when the mathematicians say "those are 3 names for the same thing". Or saying that writing C is programming but writing in a functional language like Scala or Haskell (or Lean) is not. As ndriscoll suggests, it is tautological. I mean look at what I said. I really need you to hear it. I said that coding is math. So what I hear is "How programming languages helps with programming languages?" Why are you expecting me to hear anything different? > What math says about zero based indexes? Start at 0? Start at 1? Who cares, it is the same thing. The natural numbers, non-negative integers, integers, even integers, who cares? They're the same thing. And who cares about indexing at 0 or 1 in programming? That's always been a silly argument that's inconsequential. > How do you prevent off by one errors? By not being off by one? What's the question? Like being confused about if you start at 0 or start at 1 and how to get the right bound? It is a shift from one to the other, but they are isomorphic. We can perfectly map. But I really don't get the question. You can formalize these relationships with equations you know. I know it isn't "cool" but you can grab a pen and paper (or a whiteboard) and write down your program structure if you are often falling for these mistakes. This seems mo
in “The language brain matters more for programming than the math brain? (2020)” · View on HN
I recently started watching this lecture series on Category Theory by Bartosz Milewski and he delves into some mind-boggling existential questions in the first video. To paraphrase, mathematicians believe that they are in "a field of discovery" with the implication of "discovery" being that mathematicians are discovering something that already exists. He gives an example of how mathematicians believe that lambda calculus and other systems like set theory and graph theory are actually all the same thing as category theory. In a metaphoric way we have discovered the abstraction (category theory) and recognize that lambda calculus "implements the trait/interface" The dilemma is: did we truly invent a theory of a pre-existing phenomenon? Or do we somehow map physics of the universe to a what a brain is capable of parsing? ▶ this video
in “Using obscure graph theory to solve programming languages problems” · View on HN
HOW DO COMMITTEES INVENT? By MELVIN E. CONWAY Walkthrough [link] Paper [link] Bartosz Milewski's take on the topic of decomposing complexity Category Theory 1.1: Motivation and Philosophy ▶ this video
in “It's not microservice or monolith; it's cognitive load” · View on HN
> none of it matters if you hope more people use and understand functional programming On a personal level, I couldn't care less tbh. If people want to learn it, that's great, if not that's also fine. There's plenty of room for procedural, OOP, and FP to exist side-by-side. If one domain feels complex to you, don't do it (or put extra effort into learning it), but I'd argue that OOP is much more complicated - it's just that most devs tend to grow up with OOP and so the context switch to FP is more difficult. > you overestimate how much people actually understand oop vs just winging it, in particular, inheritance and polymorphism Forget 'polymorphism' for a second and think about 'object'. An object in the real world doesn't have behaviours attached to it. An object in the real world doesn't mutate, in-place, in a discreet portion of time. Objects in the real world have a immutable past, a present state, and multiple possible futures based on interactions with external events . Those interactions is literally how we define time. OOP (as it's commonly practiced) does away with time and has myriad complexities because of it. The trivial OOP explanation "an object is like a thing in the real world. A rabbit is an object, a triangle is an object, etc." combined with the unbelievable complexity artefacts (in place mutation, hidden state, attached behaviours, etc.) - is much, much worse than the upfront cost of learning about: pure functions, monadic composition, etc. (IMHO of cours
in “Railway Oriented Programming” · View on HN
Thank you for your comment. This inspired me to try to take another stab at studying category theory. I'll start with this lecture: ▶ this video Are there any good books you can recommend on the subject?
in “Emily Riehl is rewriting the foundations of higher category theory” · View on HN
>How do people that don't have PhDs bridge the gap in their knowledge from what's commonly taught/used (OOP and it's design patterns) to thinking in terms of monads/monoids/functors/etc. ? I can just speak for myself. Started programming via vocational training (apprenticeship for the title 'computer science expert' in germany) about 4 years ago. Learned programming with python, which I loved for the productivity it gave me, the whole superpower yadiya. Was assigned some webrelated tasks, so I got in touch with javascript. My style in these languages was actually 'functional' without me knowing about functional programming - but only to some extent. Mutability, nonstatic typing etc. So, wanting to become a better programmer, I googled things like "advanced python", which yielded things like decorators, generators and metaclasses. In some video about map, filter and reduce something in me clicked - I didn't want to hide attributes and state in classes and objects anymore. It's not modular, it's not atomic, it's not beautiful. I came across Rich Hickeys talks [1] and immediately saw that I'm ... home . The paradigms just click with me, I can't imagine falling back to impurity and oop (unless it can't be avoided for whatever reasons). (I still don't write clojure though, for now I'm still enjoying playing around in python and haskell where I can (you may substitute python with js)) And, honestly - if you have the curiosity to learn Haskell, do you really need a phd? I've taught
in “Haskell GHC 9.0.1-alpha” · View on HN
I've literally just started doing this, starting with category theory. Here's what I've been watching: - ▶ this video - [link] I'm very, very, very open to suggestions... especially if they're presented from the ground up, and in lots of detail. I'm also quite open to material that can be read rather than watched.
in “Ask HN: What do you want to learn in 2017?” · View on HN