His Category Theory for Programmers book is an excellent introduction to the CT world if you come from a Computer Science background (well ... duh it says it right there in the title) and know very little math.
Highly recommended to give it a try, even if the topic doesn't seem to fit you. This is one of those books that will make you a better programmer regardless of what you do.
The best part? It takes a ridiculously small amount of code to do all that, maybe around a hundred or less. Languages without ADTs and higher-order functions bend over backwards to recover them[0] via design patterns.
[0] http://www.cs.ox.ac.uk/jeremy.gibbons/publications/hodgp.pdf
I agree with the comment though. I learned Haskell and how to write an interpreter at the same time by working through the book Crafting Interpreters. It was a great match.
So the choice would be Lisp, Prolog, Caml Light, or the recently released Objective Caml.
The year before I took compilers design project, the TA responsible for it used to disallow them from the implementation language option list, as it would make the assignment too easy.
https://www.blurb.com/b/9621951-category-theory-for-programm...
The only introductory treatment of Category Theory for non-specialists that I’ve encountered that even competes with it is Spivak’s “Category Theory for the Sciences.” For the curious, Eugenia Cheng’s books for lay audiences are excellent for getting a feel of the power and value of the Category Theoretical approach.
Category Theory is somewhat unique in being a recently developed area of advanced maths that is nevertheless approachable with only modest formal training. Because it maps so well to much of the theory and practice of functional programming, most programmers with even a little interest and familiarity with that will be able to engage with the fundamentals, and Milewski does a masterful job of introducing it to that audience.
Thanks for your contributions, Bartosz!
I doubt I would've taken as well to Lisp if it was my first course, versus used in a couple graduate courses.
Followed by abstract logic, Prolog, Caml Light and Smalltalk on the 3rd.
By the 4 year, you would have used Prolog in a couple of parallel assignments that also required it, Lisp via ELisp, as Emacs was the "IDE" for the Prolog and Caml Light assignments and some TAs liked to spend an hour introduction to not using Emacs like Notepad.
UNIX systems programming, distributed computing, data structures and algorithms would make use of C, that by virtue of having already learned C++, no teacher would spend a second with an introduction to C lectures.
Those of us that took language design and compilers, would still delve into proper Lisp, Cobol, Fortran, Algol, Oberon, and a couple of others even less known. The teacher driving this lectures would switch back to Caml Light for several exercises.
Since I ended up graduating as Java came into the scene, the very last year I ended up doing several projects in Java as well, while taking place in the national championship of logic programming.
If anything what frustrated me was coming into the market place and having to deal with C, while having been exposed how much better the things could be. Thankfully using it alongside Tcl made it not so bad, given Tcl's lispy background.
The problem is not the intro courses, the problem are the teachers and the material been given to the students. It isn't a big deal if there aren't many books available, when there are teaching notes (of book like quality) given by the responsible professor, which one can question at any time unlike most book authors.
For me what made the difference weren't the books, rather the teachers I had the luck to meet during my university travel.
I re-did the interpreter from that class in C++ and it made insanely more sense to me than the scheme version. I could see where scheme was going and why it was a good fit but just hated it.
That same professor taught our C++ class (while learning it, they had someone quit) the next semester and they had to actually do a do-over he was so bad at C++. To his credit he knew as much half way through the semester (he had students getting ahead of him). He basically nop'd out of C++ like I did out of Scheme. It just didn't fit his brain.
There are just way more courses/universities that teach or taught Java/Python.
Businesses settle on the lowest common denominator it seems.
Imperativ / OOP => Java
Functional => Haskell
Logic => Prolgo
This is just my heuristic but Haskell has just 25 keywords. For comparison: C 32, Java 53, C++ 83 and C# 102. What makes Haskell confusing are the 115 GHC language extensions. Each is basically a new concept to learn. Every time i join a new and sufficiently large project, I stumble across an extension that I am not familiar with.
https://downloads.haskell.org/~ghc/latest/docs/html/users_gu...
I definitely agree with this review: https://bitemyapp.com/blog/functional-education/
> The material often bores learners and leaves them feeling like they're not "getting" it. This is because they're being "talked at" and demo'd to. They're not engaging with and solving problems.