We have just begun to cover the bare essentials of each of the languages/libraries considered. Hopefully it has been just enough to get a feel for why they exist and are interesting. But there is a lot more to know about all of this stuff. To start with I recommend picking just one of the languages considered here and spending some time diving a little deeper into the language and library ecosystem associated with it. Suggested further information is detailed below. Don't be in too much of a rush to understand everything. Learning (functional) programming is a life-long journey.
Below are some links for further information about the languages and libraries briefly introduced in this course. See my logreg repo for more example (MCMC) code using these languages and libraries.
- Scala programming language - main web site
- Learning resources
- Scastie - try Scala in the browser
- Scala exercises - learn Scala in the browswer
- Coursier - Scala tool and artifact manager
- scala-cli - Scala command-line tool
- sbt - the Scala build tool
- An introduction to sbt - a nice, recent tutorial
- Scala examples - some Scala 3 examples I've written, with a STEM focus
- Functional Programming in Scala, second edition - unfortunately this book is not free, but remains one of the best introductions to functional programming (in any language)
- The Science of Functional Programming - huge, free book, covering functional programming and its relationship to category theory, using Scala 2 to illustrate the ideas
- Typelevel - libraries for functional programming in Scala
- Spire - numerics library
- Cats - category theory abstractions for pure functional programming
- Cats effect - functional parallel and concurrent effects system
- Monocle - lens/optics library
- FS2 - pure functional streaming data library
- Breeze - numerical linear algebra and scientific computing (like numpy/scipy for Scala)
- Smile - Statistical machine learning library (like scikit-learn for Scala)
- Apache Spark - library for parallel and distributed big data processing
- Bindings for (python) ML libraries:
- lamp - Scala tensor library built on Torch
- storch - Scala 3 bindings for Torch
- scala_torch - Microsoft's Torch bindings
- tensorflow_scala - TensorFlow bindings for Scala (possibly abandoned?)
- GeoTrellis - Geographic data processing library for Scala
- Scala for statistical computing and data science - materials for my short course (not yet updated for Scala 3)
- scala-glm - my library for regression modelling
- scala-smfsb - my library for simulation and inference for stochastic biochemical network models
- Haskell - main web site
- Cabal - a build tool
- Hackage - a package repository
- Stack - a newer build tool
- lyahfgg - good introductory book
- Haskell wiki
- dataHaskell - a project for data science with Haskell
- Deep Learning From The First Principles - series of blog posts on neural networks with Haskell
- backprop - backprop/autodiff library
- hmatrix-backprop - autodiff with linear algebra
- massiv - (parallel) multi-dimensional arrays
- Hasktorch - Torch bindings for Haskell
- Python - JAX is embedded in Python
- JAX
- Flax - neural networks with JAX
- BlackJAX - MCMC sampling with JAX
- Deepmind JAX ecosystem
These resources are of generic interest for any serious functional programmer. Haskell is often used to illustrate the ideas.
- Category theory for programmers, by Bartosz Milewski
- Blog post series
- Book - the blog posts were turned into a book
- Scala edition - a Scala edition of the book was produced
- YouTube - Video lectures accompany the blog posts (and book)
- The Dao of FP - Bartosz decided to write a proper book - this is a more comprehensive introduction to category theory in the context of functional programming
- Category theory for ML papers - includes a section on AD
- You only linearize once - the functional AD approach used by JAX and Dex
- Purely functional data structures - book on immutable data structures, with examples in SML (and Haskell) (PDF)